Gopal V created HADOOP-8926: ------------------------------- Summary: hadoop.util.PureJavaCrc32 cache hit-ratio is low for static data Key: HADOOP-8926 URL: https://issues.apache.org/jira/browse/HADOOP-8926 Project: Hadoop Common Issue Type: Improvement Components: util Affects Versions: 2.0.3-alpha Environment: Ubuntu 10.10 i386 Reporter: Gopal V Priority: Trivial
While running microbenchmarks for HDFS write codepath, a significant part of the CPU fraction was consumed by the DataChecksum.update(). The attached patch converts the static arrays in CRC32 into a single linear array for a performance boost in the inner loop. milli-seconds for 1Gig (16400 loop over a 64kb chunk) || platform || original || cache-aware || improvement || | x86 | 3894 | 2304 | 40.83 | | x86_64 | 2131 | 1826 | 14 | The performance improvement on x86 is rather larger than the 64bit case, due to the extra register/stack pressure caused by the static arrays. A closer analysis of the PureJavaCrc32 JIT code shows the following assembly fragment {code} 0x40f1e345: mov $0x184,%ecx 0x40f1e34a: mov 0x4415b560(%ecx),%ecx ;*getstatic T8_5 ; - PureJavaCrc32::update@95 (line 61) ; {oop('PureJavaCrc32')} 0x40f1e350: mov %ecx,0x2c(%esp) {code} Basically, the static variables T8_0 through to T8_7 are being spilled to the stack because of register pressure. The x86_64 case has a lower likelihood of such pessimistic JIT code due to the increased number of registers. -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators For more information on JIRA, see: http://www.atlassian.com/software/jira