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

Tsz Wo Nicholas Sze commented on HADOOP-10674:
----------------------------------------------

- For Java 7, the new code is also better than the existing code but 
java.util.zip.CRC32 remains the best.

$JAVA7_HOME/bin/java -cp target/classes/:target/test-classes/ 
'org.apache.hadoop.util.TestPureJavaCrc32$PerformanceTest'
java.version = 1.7.0_60
java.runtime.name = Java(TM) SE Runtime Environment
java.runtime.version = 1.7.0_60-b19
java.vm.version = 24.60-b09
java.vm.vendor = Oracle Corporation
java.vm.name = Java HotSpot(TM) 64-Bit Server VM
java.vm.specification.version = 1.7
java.specification.version = 1.7
os.arch = x86_64
os.name = Mac OS X
os.version = 10.9.3

Performance Table (The unit is MB/sec; #T = #Theads)
|  #Bytes  | #T ||    CRC32 || PureJavaCrc32 | % diff || PureJavaCrc32new | % 
diff | % diff |
|       32 |  1 |     289.5 |         1224.5 | 323.0% |            1183.9 | 
309.0% |  -3.3% |
|       32 |  2 |     288.3 |         1224.2 | 324.6% |            1195.1 | 
314.5% |  -2.4% |
|       32 |  4 |     239.4 |          990.1 | 313.6% |             977.2 | 
308.2% |  -1.3% |
|       32 |  8 |     189.5 |          648.7 | 242.3% |             644.8 | 
240.2% |  -0.6% |
|       32 | 16 |      98.0 |          375.2 | 282.9% |             376.2 | 
283.9% |   0.3% |
|  #Bytes  | #T ||    CRC32 || PureJavaCrc32 | % diff || PureJavaCrc32new | % 
diff | % diff |
|       64 |  1 |     515.6 |         1433.6 | 178.0% |            1497.1 | 
190.4% |   4.4% |
|       64 |  2 |     517.2 |         1401.3 | 170.9% |            1471.5 | 
184.5% |   5.0% |
|       64 |  4 |     404.3 |         1155.3 | 185.7% |            1209.6 | 
199.2% |   4.7% |
|       64 |  8 |     343.2 |          756.6 | 120.4% |             767.7 | 
123.7% |   1.5% |
|       64 | 16 |     185.3 |          444.7 | 140.0% |             468.6 | 
153.0% |   5.4% |
|  #Bytes  | #T ||    CRC32 || PureJavaCrc32 | % diff || PureJavaCrc32new | % 
diff | % diff |
|      128 |  1 |     918.8 |         1539.7 |  67.6% |            1644.3 |  
79.0% |   6.8% |
|      128 |  2 |     859.7 |         1503.8 |  74.9% |            1626.6 |  
89.2% |   8.2% |
|      128 |  4 |     763.6 |         1339.2 |  75.4% |            1328.5 |  
74.0% |  -0.8% |
|      128 |  8 |     586.7 |          791.8 |  34.9% |             863.0 |  
47.1% |   9.0% |
|      128 | 16 |     331.2 |          486.5 |  46.9% |             516.5 |  
56.0% |   6.2% |
|  #Bytes  | #T ||    CRC32 || PureJavaCrc32 | % diff || PureJavaCrc32new | % 
diff | % diff |
|      256 |  1 |    1410.1 |         1396.4 |  -1.0% |            1678.4 |  
19.0% |  20.2% |
|      256 |  2 |    1290.1 |         1492.0 |  15.7% |            1643.5 |  
27.4% |  10.2% |
|      256 |  4 |    1174.9 |         1259.8 |   7.2% |            1383.5 |  
17.8% |   9.8% |
|      256 |  8 |     859.2 |          846.0 |  -1.5% |             905.2 |   
5.4% |   7.0% |
|      256 | 16 |     512.1 |          508.4 |  -0.7% |             551.5 |   
7.7% |   8.5% |
|  #Bytes  | #T ||    CRC32 || PureJavaCrc32 | % diff || PureJavaCrc32new | % 
diff | % diff |
|      512 |  1 |    1921.1 |         1585.7 | -17.5% |            1767.7 |  
-8.0% |  11.5% |
|      512 |  2 |    1906.7 |         1565.0 | -17.9% |            1740.8 |  
-8.7% |  11.2% |
|      512 |  4 |    1537.8 |         1461.9 |  -4.9% |            1510.8 |  
-1.8% |   3.3% |
|      512 |  8 |    1170.8 |          844.7 | -27.8% |             890.5 | 
-23.9% |   5.4% |
|      512 | 16 |     738.1 |          522.5 | -29.2% |             576.7 | 
-21.9% |  10.4% |
|  #Bytes  | #T ||    CRC32 || PureJavaCrc32 | % diff || PureJavaCrc32new | % 
diff | % diff |
|     1024 |  1 |    2354.0 |         1584.7 | -32.7% |            1798.5 | 
-23.6% |  13.5% |
|     1024 |  2 |    2245.7 |         1586.6 | -29.3% |            1780.7 | 
-20.7% |  12.2% |
|     1024 |  4 |    2002.8 |         1322.5 | -34.0% |            1362.8 | 
-32.0% |   3.0% |
|     1024 |  8 |    1423.3 |          890.6 | -37.4% |             956.3 | 
-32.8% |   7.4% |
|     1024 | 16 |     997.4 |          530.4 | -46.8% |             673.9 | 
-32.4% |  27.1% |
|  #Bytes  | #T ||    CRC32 || PureJavaCrc32 | % diff || PureJavaCrc32new | % 
diff | % diff |
|     2048 |  1 |    2631.5 |         1577.7 | -40.0% |            1821.2 | 
-30.8% |  15.4% |
|     2048 |  2 |    2577.6 |         1614.9 | -37.3% |            1802.7 | 
-30.1% |  11.6% |
|     2048 |  4 |    2212.4 |         1375.5 | -37.8% |            1468.3 | 
-33.6% |   6.7% |
|     2048 |  8 |    1581.4 |          892.1 | -43.6% |             964.9 | 
-39.0% |   8.2% |
|     2048 | 16 |    1288.3 |          538.6 | -58.2% |             578.2 | 
-55.1% |   7.4% |
|  #Bytes  | #T ||    CRC32 || PureJavaCrc32 | % diff || PureJavaCrc32new | % 
diff | % diff |
|     4096 |  1 |    2754.0 |         1635.7 | -40.6% |            1844.2 | 
-33.0% |  12.7% |
|     4096 |  2 |    2731.3 |         1617.1 | -40.8% |            1815.6 | 
-33.5% |  12.3% |
|     4096 |  4 |    2339.7 |         1362.2 | -41.8% |            1615.8 | 
-30.9% |  18.6% |
|     4096 |  8 |    1687.1 |          897.6 | -46.8% |             811.2 | 
-51.9% |  -9.6% |
|     4096 | 16 |    1265.4 |          535.4 | -57.7% |             588.2 | 
-53.5% |   9.9% |
|  #Bytes  | #T ||    CRC32 || PureJavaCrc32 | % diff || PureJavaCrc32new | % 
diff | % diff |
|     8192 |  1 |    2826.2 |         1631.7 | -42.3% |            1756.1 | 
-37.9% |   7.6% |
|     8192 |  2 |    2815.2 |         1593.6 | -43.4% |            1714.9 | 
-39.1% |   7.6% |
|     8192 |  4 |    2413.9 |         1365.2 | -43.4% |            1493.6 | 
-38.1% |   9.4% |
|     8192 |  8 |    1727.5 |          898.4 | -48.0% |             975.6 | 
-43.5% |   8.6% |
|     8192 | 16 |    1335.2 |          461.9 | -65.4% |             596.3 | 
-55.3% |  29.1% |
|  #Bytes  | #T ||    CRC32 || PureJavaCrc32 | % diff || PureJavaCrc32new | % 
diff | % diff |
|    16384 |  1 |    2900.8 |         1656.0 | -42.9% |            1846.9 | 
-36.3% |  11.5% |
|    16384 |  2 |    2881.9 |         1627.8 | -43.5% |            1829.6 | 
-36.5% |  12.4% |
|    16384 |  4 |    2438.8 |         1352.4 | -44.5% |            1650.8 | 
-32.3% |  22.1% |
|    16384 |  8 |    1762.1 |          904.9 | -48.6% |             973.3 | 
-44.8% |   7.6% |
|    16384 | 16 |    1375.1 |          539.2 | -60.8% |             605.3 | 
-56.0% |  12.3% |
|  #Bytes  | #T ||    CRC32 || PureJavaCrc32 | % diff || PureJavaCrc32new | % 
diff | % diff |
|    32768 |  1 |    2919.8 |         1651.9 | -43.4% |            1838.9 | 
-37.0% |  11.3% |
|    32768 |  2 |    2888.1 |         1622.1 | -43.8% |            1804.3 | 
-37.5% |  11.2% |
|    32768 |  4 |    2403.6 |         1364.2 | -43.2% |            1498.8 | 
-37.6% |   9.9% |
|    32768 |  8 |    1772.0 |          904.5 | -49.0% |             978.4 | 
-44.8% |   8.2% |
|    32768 | 16 |    1397.8 |          544.4 | -61.1% |             593.1 | 
-57.6% |   8.9% |
|  #Bytes  | #T ||    CRC32 || PureJavaCrc32 | % diff || PureJavaCrc32new | % 
diff | % diff |
|    65536 |  1 |    2940.1 |         1641.9 | -44.2% |            1854.6 | 
-36.9% |  13.0% |
|    65536 |  2 |    2896.4 |         1621.5 | -44.0% |            1710.8 | 
-40.9% |   5.5% |
|    65536 |  4 |    2523.5 |         1342.2 | -46.8% |            1493.8 | 
-40.8% |  11.3% |
|    65536 |  8 |    1788.8 |          898.0 | -49.8% |             976.5 | 
-45.4% |   8.7% |
|    65536 | 16 |    1353.8 |          618.7 | -54.3% |             598.6 | 
-55.8% |  -3.3% |
|  #Bytes  | #T ||    CRC32 || PureJavaCrc32 | % diff || PureJavaCrc32new | % 
diff | % diff |
|   131072 |  1 |    2966.6 |         1652.9 | -44.3% |            1856.8 | 
-37.4% |  12.3% |
|   131072 |  2 |    2757.2 |         1631.7 | -40.8% |            1742.8 | 
-36.8% |   6.8% |
|   131072 |  4 |    2489.1 |         1359.9 | -45.4% |            1502.5 | 
-39.6% |  10.5% |
|   131072 |  8 |    1715.8 |          879.6 | -48.7% |             977.0 | 
-43.1% |  11.1% |
|   131072 | 16 |    1446.4 |          590.7 | -59.2% |             602.5 | 
-58.3% |   2.0% |
|  #Bytes  | #T ||    CRC32 || PureJavaCrc32 | % diff || PureJavaCrc32new | % 
diff | % diff |
|   262144 |  1 |    2662.5 |         1643.4 | -38.3% |            1846.7 | 
-30.6% |  12.4% |
|   262144 |  2 |    2918.2 |         1625.7 | -44.3% |            1818.0 | 
-37.7% |  11.8% |
|   262144 |  4 |    2449.4 |         1367.4 | -44.2% |            1497.1 | 
-38.9% |   9.5% |
|   262144 |  8 |    1771.2 |          902.7 | -49.0% |             973.9 | 
-45.0% |   7.9% |
|   262144 | 16 |    1402.8 |          551.6 | -60.7% |             600.3 | 
-57.2% |   8.8% |
|  #Bytes  | #T ||    CRC32 || PureJavaCrc32 | % diff || PureJavaCrc32new | % 
diff | % diff |
|   524288 |  1 |    2915.3 |         1638.8 | -43.8% |            1846.2 | 
-36.7% |  12.7% |
|   524288 |  2 |    2930.4 |         1621.9 | -44.7% |            1753.5 | 
-40.2% |   8.1% |
|   524288 |  4 |    2438.1 |         1332.8 | -45.3% |            1644.7 | 
-32.5% |  23.4% |
|   524288 |  8 |    1779.5 |          900.9 | -49.4% |             975.2 | 
-45.2% |   8.2% |
|   524288 | 16 |    1350.5 |          546.3 | -59.5% |             606.0 | 
-55.1% |  10.9% |
|  #Bytes  | #T ||    CRC32 || PureJavaCrc32 | % diff || PureJavaCrc32new | % 
diff | % diff |
|  1048576 |  1 |    2956.9 |         1654.9 | -44.0% |            1858.7 | 
-37.1% |  12.3% |
|  1048576 |  2 |    2914.6 |         1631.0 | -44.0% |            1830.1 | 
-37.2% |  12.2% |
|  1048576 |  4 |    2626.5 |         1366.1 | -48.0% |            1491.5 | 
-43.2% |   9.2% |
|  1048576 |  8 |    1788.6 |          899.6 | -49.7% |             975.0 | 
-45.5% |   8.4% |
|  1048576 | 16 |    1411.0 |          560.2 | -60.3% |             598.2 | 
-57.6% |   6.8% |
|  #Bytes  | #T ||    CRC32 || PureJavaCrc32 | % diff || PureJavaCrc32new | % 
diff | % diff |
|  2097152 |  1 |    2939.2 |         1637.0 | -44.3% |            1731.5 | 
-41.1% |   5.8% |
|  2097152 |  2 |    2935.1 |         1620.7 | -44.8% |            1809.5 | 
-38.4% |  11.7% |
|  2097152 |  4 |    2814.6 |         1362.0 | -51.6% |            1546.0 | 
-45.1% |  13.5% |
|  2097152 |  8 |    1758.8 |          895.7 | -49.1% |             970.5 | 
-44.8% |   8.4% |
|  2097152 | 16 |    1415.4 |          541.5 | -61.7% |             598.0 | 
-57.7% |  10.4% |
|  #Bytes  | #T ||    CRC32 || PureJavaCrc32 | % diff || PureJavaCrc32new | % 
diff | % diff |
|  4194304 |  1 |    2926.1 |         1643.8 | -43.8% |            1841.4 | 
-37.1% |  12.0% |
|  4194304 |  2 |    2923.8 |         1618.1 | -44.7% |            1811.9 | 
-38.0% |  12.0% |
|  4194304 |  4 |    2603.4 |         1289.1 | -50.5% |            1550.2 | 
-40.5% |  20.2% |
|  4194304 |  8 |    1780.0 |          881.3 | -50.5% |             951.2 | 
-46.6% |   7.9% |
|  4194304 | 16 |    1470.4 |          535.2 | -63.6% |             599.1 | 
-59.3% |  11.9% |
|  #Bytes  | #T ||    CRC32 || PureJavaCrc32 | % diff || PureJavaCrc32new | % 
diff | % diff |
|  8388608 |  1 |    2958.0 |         1608.5 | -45.6% |            1846.3 | 
-37.6% |  14.8% |
|  8388608 |  2 |    2906.1 |         1614.5 | -44.4% |            1808.3 | 
-37.8% |  12.0% |
|  8388608 |  4 |    2461.7 |         1316.5 | -46.5% |            1510.9 | 
-38.6% |  14.8% |
|  8388608 |  8 |    1769.9 |          896.5 | -49.3% |             954.1 | 
-46.1% |   6.4% |
|  8388608 | 16 |    1430.4 |          560.3 | -60.8% |             584.8 | 
-59.1% |   4.4% |
|  #Bytes  | #T ||    CRC32 || PureJavaCrc32 | % diff || PureJavaCrc32new | % 
diff | % diff |
| 16777216 |  1 |    2960.9 |         1631.9 | -44.9% |            1842.4 | 
-37.8% |  12.9% |
| 16777216 |  2 |    2903.7 |         1622.5 | -44.1% |            1795.5 | 
-38.2% |  10.7% |
| 16777216 |  4 |    2349.7 |         1329.6 | -43.4% |            1492.2 | 
-36.5% |  12.2% |
| 16777216 |  8 |    1715.8 |          898.4 | -47.6% |             966.8 | 
-43.7% |   7.6% |
| 16777216 | 16 |    1385.0 |          539.0 | -61.1% |             587.5 | 
-57.6% |   9.0% |
|  #Bytes  | #T ||    CRC32 || PureJavaCrc32 | % diff || PureJavaCrc32new | % 
diff | % diff |
| 33554432 |  1 |    2974.9 |         1600.0 | -46.2% |            1833.1 | 
-38.4% |  14.6% |
| 33554432 |  2 |    2906.4 |         1609.7 | -44.6% |            1802.0 | 
-38.0% |  11.9% |
| 33554432 |  4 |    2574.8 |         1359.3 | -47.2% |            1489.7 | 
-42.1% |   9.6% |
| 33554432 |  8 |    1763.1 |          807.6 | -54.2% |             968.0 | 
-45.1% |  19.9% |
| 33554432 | 16 |    1460.5 |          547.4 | -62.5% |             598.5 | 
-59.0% |   9.3% |


> Rewrite the PureJavaCrc32 loop for performance improvement
> ----------------------------------------------------------
>
>                 Key: HADOOP-10674
>                 URL: https://issues.apache.org/jira/browse/HADOOP-10674
>             Project: Hadoop Common
>          Issue Type: Improvement
>          Components: performance, util
>            Reporter: Tsz Wo Nicholas Sze
>            Assignee: Tsz Wo Nicholas Sze
>         Attachments: c10674_20140609.patch, c10674_20140609b.patch, 
> c10674_20140610.patch
>
>
> Below are some performance improvement opportunities performance improvement 
> in PureJavaCrc32.
> - eliminate "off += 8; len -= 8;"
> - replace T8_x_start with hard coded constants
> - eliminate c0 - c7 local variables
> In my machine, there are 30% to 50% improvement for most of the cases.



--
This message was sent by Atlassian JIRA
(v6.2#6252)

Reply via email to