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

Reply via email to