[ https://issues.apache.org/jira/browse/HADOOP-8926?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13478692#comment-13478692 ]
Gopal V commented on HADOOP-8926: --------------------------------- Thanks Nicholas, this probably has future for improvement if we had ByteBuffers (direct) instead of byte[] arrays. I'm tracing the code-path from the network I/O to see if a nio fix can possibly get me bytebuffers direct. Meanwhile, If this is significant enough for a back-port, I can open a new ticket & port this patch to branch-1.1 (or is branch-1 the "live" one?). > 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 > Assignee: Gopal V > Labels: optimization > Fix For: 3.0.0, 2.0.3-alpha > > Attachments: crc32-faster+readable.patch, crc32-faster+test.patch, > pure-crc32-cache-hit.patch > > > 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