[ 
https://issues.apache.org/jira/browse/HADOOP-8926?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13478329#comment-13478329
 ] 

Tsz Wo (Nicholas), SZE commented on HADOOP-8926:
------------------------------------------------

Gopal, Amazing works!  There are 10% or more performance improvement from your 
patch.

java.version = 1.6.0_35
java.runtime.name = Java(TM) SE Runtime Environment
java.runtime.version = 1.6.0_35-b10-428-11M3811
java.vm.version = 20.10-b01-428
java.vm.vendor = Apple Inc.
java.vm.name = Java HotSpot(TM) 64-Bit Server VM
java.vm.specification.version = 1.0
java.specification.version = 1.6
os.arch = x86_64
os.name = Mac OS X
os.version = 10.7.4

Performance Table (The unit is MB/sec)
|| Num Bytes ||    CRC32 || PureJavaCrc32_8926 || PureJavaCrc32 ||
|          1 |    11.896 |             129.832 |        164.845 |
|          2 |    24.097 |             192.742 |        210.266 |
|          4 |    46.274 |             222.059 |        233.902 |
|          8 |    82.332 |             488.716 |        438.514 |
|         16 |   131.682 |             587.312 |        602.784 |
|         32 |   187.265 |             796.510 |        760.628 |
|         64 |   237.088 |             938.650 |        891.017 |
|        128 |   264.795 |            1049.774 |        913.666 |
|        256 |   291.785 |            1095.084 |        987.380 |
|        512 |   298.590 |            1126.067 |       1002.899 |
|       1024 |   305.349 |            1152.375 |       1040.211 |
|       2048 |   309.342 |            1119.713 |       1033.258 |
|       4096 |   309.162 |            1170.767 |       1047.746 |
|       8192 |   321.775 |            1189.724 |       1053.065 |
|      16384 |   320.457 |            1181.128 |       1060.138 |
|      32768 |   324.524 |            1169.965 |       1050.610 |
|      65536 |   322.380 |            1160.471 |       1053.854 |
|     131072 |   315.983 |            1138.223 |       1009.193 |
|     262144 |   324.293 |            1190.476 |       1020.782 |
|     524288 |   316.003 |            1136.979 |       1015.389 |
|    1048576 |   321.715 |            1081.465 |       1033.750 |
|    2097152 |   318.330 |            1189.680 |       1072.054 |
|    4194304 |   316.710 |            1138.496 |       1024.352 |
|    8388608 |   315.701 |            1124.909 |       1030.505 |
|   16777216 |   325.575 |            1154.724 |       1031.285 |

                
> 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
>            Priority: Trivial
>              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

Reply via email to