[
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)