<!-- 
RSS generated by JIRA (9.4.14#940014-sha1:734e6822bbf0d45eff9af51f82432957f73aa32c) at Sat Feb 10 01:14:28 UTC 2024

It is possible to restrict the fields that are returned in this document by specifying the 'field' parameter in your request.
For example, to request only the issue key and summary append 'field=key&field=summary' to the URL of your request.
-->
<rss version="0.92" >
<channel>
    <title>Whamcloud Community JIRA</title>
    <link>https://jira.whamcloud.com</link>
    <description>This file is an XML representation of an issue</description>
    <language>en-us</language>    <build-info>
        <version>9.4.14</version>
        <build-number>940014</build-number>
        <build-date>05-12-2023</build-date>
    </build-info>


<item>
            <title>[LU-1201] Lustre crypto hash cleanup</title>
                <link>https://jira.whamcloud.com/browse/LU-1201</link>
                <project id="10000" key="LU">Lustre</project>
                    <description>&lt;p&gt;Lustre use crypto hashes algo in two ways: PTLRPC (ptlrpc/sec_bulk.c), OST(ost/ost_handler.c)/OSC (osc/osc_request.c). &lt;br/&gt;
OST,OSC use crc32, crc32c, adler for checksumming (compute_checksum() function) &lt;br/&gt;
PTLRPC uses crc32, adler, md5, sha1-512 ( kernel crypto api for all, excluding crc32 adler) &lt;br/&gt;
All subsystems go through bulk pages and update checksum. &lt;br/&gt;
To resolve conflicts with different implementation of checksumming, a new crypto hash interface is needed at libcfs. It should use kernel crypto api for hash calculation for kernel modules, and lustre implementation for user mode. Previus checksum calculation should be changed to the new libcfs crypto hash api. And adding new hash algo would be a simple task.&lt;/p&gt;</description>
                <environment></environment>
        <key id="13507">LU-1201</key>
            <summary>Lustre crypto hash cleanup</summary>
                <type id="4" iconUrl="https://jira.whamcloud.com/secure/viewavatar?size=xsmall&amp;avatarId=11310&amp;avatarType=issuetype">Improvement</type>
                                            <priority id="4" iconUrl="https://jira.whamcloud.com/images/icons/priorities/minor.svg">Minor</priority>
                        <status id="5" iconUrl="https://jira.whamcloud.com/images/icons/statuses/resolved.png" description="A resolution has been taken, and it is awaiting verification by reporter. From here issues are either reopened, or are closed.">Resolved</status>
                    <statusCategory id="3" key="done" colorName="success"/>
                                    <resolution id="1">Fixed</resolution>
                                        <assignee username="wc-triage">WC Triage</assignee>
                                    <reporter username="aboyko">Alexander Boyko</reporter>
                        <labels>
                    </labels>
                <created>Fri, 9 Mar 2012 10:48:19 +0000</created>
                <updated>Wed, 21 Nov 2012 19:30:00 +0000</updated>
                            <resolved>Sun, 1 Jul 2012 03:00:53 +0000</resolved>
                                                    <fixVersion>Lustre 2.3.0</fixVersion>
                                        <due></due>
                            <votes>0</votes>
                                    <watches>6</watches>
                                                                            <comments>
                            <comment id="30763" author="aboyko" created="Fri, 9 Mar 2012 10:54:43 +0000"  >&lt;p&gt;&lt;a href=&quot;http://review.whamcloud.com/2276&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;http://review.whamcloud.com/2276&lt;/a&gt;&lt;/p&gt;</comment>
                            <comment id="30780" author="adilger" created="Fri, 9 Mar 2012 19:33:02 +0000"  >&lt;p&gt;In addition to the questions in the patch, I was wondering why all of the different hash functions were being added?  &lt;/p&gt;

&lt;p&gt;I don&apos;t quite understand how &quot;ptlrpc&quot; hash functions differ from &quot;ost&quot; hash functions?  Are you referring to sptlrpc (ie Kerberos)?  To confirm, is there a protocol change associated with this patch or not?&lt;/p&gt;


&lt;p&gt;If there isn&apos;t a good reason to add a hash function, I don&apos;t necessarily want to just add them because we can.  One reason against this is because there are only a limited number of hash functions we can use in the protocol, and also because I&apos;d like to move to &quot;piece-wise&quot; hashes that could be computed on the page and then aggregated in the RPC without having to recompute the checksum again. &lt;/p&gt;</comment>
                            <comment id="30785" author="ihara" created="Fri, 9 Mar 2012 23:13:54 +0000"  >&lt;p&gt;I&apos;m really want to see the performance numbers by this changes. (any improvements with kernel crypto APIs, instead of current crc32c codes?) The reason of what I made a patch crc32c/w h/w accelerator checksum patch a couple years ago was that for single client&apos;s performance improvements. (there was only single thread ptlrpc, checksum on the client was calculated on that thread without in parallel. So, needed off-load checksum calculation)&lt;br/&gt;
The server side was not much performance difference regardless the checksum=on (alder or crc32c) or checksum=off. Because, the servers can calculate the checksum in parallel.&lt;/p&gt;

&lt;p&gt;That&apos;s true that single client&apos;s performance was improved by 40-50% (900MB/sec -&amp;gt; 1.5GB/sec) in 1.8.x code with crc32c patch, but still hitting 1.5GB/s performance limitation due to single threaded ptlrpc. The recent 2.2 branch supports multiple ptlrpc, and it&apos;s breaking 1.6GB/s limitation right now and really higher than previous 1.8&apos;s numbers. &lt;/p&gt;

&lt;p&gt;the single client performance on 2.2 branch, crc32c algorithm still is faster than alder, but crc32c, adler and no checksum&apos;s performance number are getting close on 2.2 now..&lt;/p&gt;</comment>
                            <comment id="30804" author="aboyko" created="Mon, 12 Mar 2012 02:30:50 +0000"  >&lt;p&gt;This is logs from libcfs cfs_crypto_test_hashes()&lt;br/&gt;
Crypto hash algorithm null speed = -1 MB/s &lt;br/&gt;
Crypto hash algorithm adler32 speed = 2241 MB/s &lt;br/&gt;
Crypto hash algorithm crc32 speed = 360 MB/s &lt;br/&gt;
Crypto hash algorithm md5 speed = 428 MB/s &lt;br/&gt;
Crypto hash algorithm sha1 speed = 178 MB/s &lt;br/&gt;
Crypto hash algorithm sha256 speed = 117 MB/s &lt;br/&gt;
Crypto hash algorithm sha384 speed = 174 MB/s &lt;br/&gt;
Crypto hash algorithm sha512 speed = 175 MB/s &lt;br/&gt;
Crypto hash algorithm crc32c speed = 2602 MB/s (for sw table ~330 MB/s)&lt;/p&gt;

&lt;p&gt;VMware, cpu i5-2415M, for crc32c used crc32c_intel module  &lt;br/&gt;
Libcfs use 1MB buffer for testing, and calculate hash during 1sec with the same buffer.&lt;/p&gt;

&lt;p&gt;This patch provide libcfs interface for crypto hashes.&lt;br/&gt;
&amp;gt;&amp;gt;In addition to the questions in the patch, I was wondering why all of the different hash functions were being added?&lt;br/&gt;
because SPTLRPC compute hash for this num of algo. No protocol changes, hash calculation only.&lt;/p&gt;

&lt;p&gt;This patch drop lustre crc32c implementation because linux kernel crypto have two implementation of crc32c 1) table sw 2) hw (crc32c_intel same code like lustre have). One more - supporting of crc32 instruction should be detected at run time, not in compile (lustre #ifdef X86_FEATURE_XMM4_2).&lt;br/&gt;
&lt;a href=&quot;https://jira.whamcloud.com/browse/LU-241&quot; title=&quot;support crc32c with hardware accelerated instruction as one of lustre checksums&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-241&quot;&gt;&lt;del&gt;LU-241&lt;/del&gt;&lt;/a&gt; add crc32c algo for lustre osc/ost only, no sptlrpc.&lt;br/&gt;
Now(this patch), all crypto hashes algorithms are at one place, same interface, and all parts of lustre can use it.   &lt;/p&gt;</comment>
                            <comment id="30805" author="ihara" created="Mon, 12 Mar 2012 05:12:00 +0000"  >&lt;p&gt;In the the current implementation, crc32c (and fastest algorithm) should be detected automatically at the run time. I&apos;ve tested same rpm packages on the clients with both of Nehalem based CPU and more old CPU(Core2 Duo) which doesn&apos;t have sse4_2 feature.&lt;br/&gt;
e.g) mounted a lustre filesystem from both clients. Here is the deafult checksum_type after just mounted.&lt;/p&gt;

&lt;ul class=&quot;alternate&quot; type=&quot;square&quot;&gt;
	&lt;li&gt;Nehalem based CPU&apos;s client&lt;br/&gt;
&amp;#35; cat /proc/fs/lustre/osc/*/checksum_type&lt;br/&gt;
crc32 adler &lt;span class=&quot;error&quot;&gt;&amp;#91;crc32c&amp;#93;&lt;/span&gt;&lt;br/&gt;
crc32 adler &lt;span class=&quot;error&quot;&gt;&amp;#91;crc32c&amp;#93;&lt;/span&gt; &lt;/li&gt;
&lt;/ul&gt;


&lt;ul class=&quot;alternate&quot; type=&quot;square&quot;&gt;
	&lt;li&gt;Core2 Due CPU&apos;s client&lt;br/&gt;
&amp;#35; cat /proc/fs/lustre/osc/*/checksum_type&lt;br/&gt;
crc32 &lt;span class=&quot;error&quot;&gt;&amp;#91;adler&amp;#93;&lt;/span&gt; &lt;br/&gt;
crc32 &lt;span class=&quot;error&quot;&gt;&amp;#91;adler&amp;#93;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
</comment>
                            <comment id="30806" author="aboyko" created="Mon, 12 Mar 2012 06:23:31 +0000"  >&lt;p&gt;yes you are right&lt;br/&gt;
#ifdef X86_FEATURE_XMM4_2&lt;br/&gt;
        if (cpu_has_xmm4_2)&lt;br/&gt;
                ret |= OBD_CKSUM_CRC32C;&lt;br/&gt;
#endif&lt;/p&gt;

&lt;p&gt;This patch don`t improve any checksum calculation. It present libcfs crypto hash interface for checksum calculation and fix all lustre checksums to it. Base on kernel crypto api we got crc32c sw implementation, so clients wich don`t support sse_4.2 can use crc32c.&lt;/p&gt;
</comment>
                            <comment id="30809" author="ihara" created="Mon, 12 Mar 2012 10:37:11 +0000"  >&lt;p&gt;OK, but, why we need to use crc32c sw implementation, instead of adler when if the client doesn&apos;t have Nehalem processor? (btw, Nehalem processor was released out 3 years ago...) Your numbers showed us adler (2241 MB/s) is faster than crc32 sw table (~330 MB/s). Also, my recent checksum performance testing on 2.2 branch, with adler, crc32c&apos;s and no-checksum&apos;s performance are very similar on the single client.&lt;/p&gt;</comment>
                            <comment id="30811" author="ihara" created="Mon, 12 Mar 2012 10:49:07 +0000"  >&lt;p&gt;Here is qucik performance results on between single OSS and single client over the QDR Infiniband. I tested this on ramdisk (created 8 x OST on ramdisk) instead of general storage to show real checkum performance. Tested server are 2 x HP DL360 (2.93GHz x 12 CPU cores, 48GB memory) &lt;/p&gt;
&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;WRITE(2.1.1)
#proc	nochksum crc32	adler	crc32c
1	 759 	  289 	 550 	
2	1367 	  567 	1063 	
4	2663 	 1146 	2023 	
8	3084 	 2183 	1309 	

WRITE(2.2 branch)				
1	 748 	  747 	 748 	 749 
2	1427 	 1401 	1378 	1387 
4	2669 	 2465 	2594 	2621 
8	3152 	 2470 	3073 	3148 
					
READ(2.1.1)
	nochksum crc32	adler	crc32c
1	1031 	  323 	 829 	
2	1785 	  360 	 921 	
4	2456 	  373 	 963 	
8	2145 	  376 	 954 	

READ(2.2 branch)				
1	 998 	  925 	 954 	 938 
2	1826 	 1703 	1716 	1691 
4	2986 	 2653 	2850 	2836 
8	2875 	 2724 	2659 	2855

&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</comment>
                            <comment id="30903" author="adilger" created="Mon, 12 Mar 2012 17:34:49 +0000"  >&lt;p&gt;Alexander, thank you for the checksum performance results.  Based on these numbers, the adler32 algorithm should be used for nodes that do not have hardware crc32c support, but h/w crc32c is slightly faster so it should be preferred if available.  Does this match your test results?  What is the output of &quot;lctl get_param osc.*.checksum_type&quot; (as Ihara showed in his recent comment)?&lt;/p&gt;

&lt;p&gt;Is the printing of &quot;Crypto hash algorithm null speed = -1 MB/s&quot; a defect?&lt;/p&gt;

&lt;p&gt;Ihara, thank you also for the benchmark results.  What test is being run?  Is it a single-threaded or multi-threaded load?  The multi-threaded ptlrpcd change, along with moving the bulk RPC checksums to be in ptlrpcd context is what improved this performance.&lt;/p&gt;</comment>
                            <comment id="30904" author="adilger" created="Mon, 12 Mar 2012 17:41:53 +0000"  >&lt;p&gt;Alexander, also note that if the OST does not support crc32c in hardware, then it should not reply to the client that crc32c is supported.  It is much more efficient for the OSS in this case to use adler32, since it uses much less CPU, and the speed on the client is approximately the same.  It is more important that the server CPU usage is as efficient as possible.&lt;/p&gt;</comment>
                            <comment id="30955" author="ihara" created="Mon, 12 Mar 2012 20:26:28 +0000"  >&lt;p&gt;Andreas, the numbers were tested on IOR with multiple processes &lt;/p&gt;
{1,2,4 and 8}
&lt;p&gt; on the single client.&lt;br/&gt;
IOR -a POSIX -k -t 1m -b 1g -F -w -o /mnt/lustre/file&lt;br/&gt;
sync; echo 1 &amp;gt; /proc/sys/vm/drop_caches&lt;br/&gt;
IOR -a POSIX -t 1m -b 1g -F -r -o /mnt/lustre/file&lt;/p&gt;

&lt;p&gt;The numbers were on 2.1.1 is pretty same as what we saw 1.8.x. And, yes, the checksum with any algorithms are improved on 2.2.&lt;/p&gt;</comment>
                            <comment id="31011" author="aboyko" created="Tue, 13 Mar 2012 02:54:40 +0000"  >&lt;p&gt;&amp;gt;&amp;gt;Does this match your test results? What is the output of &quot;lctl get_param osc.*.checksum_type&quot; (as Ihara showed in his recent comment)?&lt;br/&gt;
Yes, the fastest algo would be used by default, if server support it.&lt;br/&gt;
&amp;gt;&amp;gt;Is the printing of &quot;Crypto hash algorithm null speed = -1 MB/s&quot; a defect?&lt;br/&gt;
No, upper layer disable checksumming for ost/osc. -1 means no algo, or unsupported.&lt;/p&gt;

&lt;p&gt;&amp;gt;&amp;gt;Alexander, also note that if the OST does not support crc32c in hardware, then it should not reply to the client that crc32c is supported. It is much more efficient for the OSS in this case to use adler32, since it uses much less CPU, and the speed on the client is approximately the same. It is more important that the server CPU usage is as efficient as possible.&lt;/p&gt;

&lt;p&gt;In this point of view the server should not reply to the client that crc32 is supported too. Because adler based on simple add instruction and all hardware support it. One reason to support crc32 is very old client. With this patch the code always support crc32c, may be this should be changed for sw implementation in the server reply.&lt;/p&gt;

&lt;p&gt;I think, that not only speed performance is the main parameter for algo, need to look at cpu load on real hardware.&lt;/p&gt;</comment>
                            <comment id="31015" author="aboyko" created="Tue, 13 Mar 2012 03:19:57 +0000"  >&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;WRITE(2.1.1)
#proc	nochksum crc32	adler	crc32c
1	 759 	  289 	 550 	
2	1367 	  567 	1063 	
4	2663 	 1146 	2023 	
8	3084 	 2183 	1309
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Why adler for 8 clients is slower than the crc32 ?&lt;/p&gt;</comment>
                            <comment id="31016" author="aboyko" created="Tue, 13 Mar 2012 03:25:46 +0000"  >&lt;p&gt;The same question for read&lt;/p&gt;
&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;READ(2.2 branch)				
1	 998 	  925 	 954 	 938 
2	1826 	 1703 	1716 	1691 
4	2986 	 2653 	2850 	2836 
8	2875 	 2724 	2659 	2855
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Base on checksum performance adler32 is 6-7 times faster than crc32 table implementation. But raw IOR lustre result show different value.&lt;/p&gt;</comment>
                            <comment id="31046" author="ihara" created="Tue, 13 Mar 2012 10:56:40 +0000"  >&lt;p&gt;&amp;gt; Why adler for 8 clients is slower than the crc32 ?&lt;br/&gt;
don&apos;t know why, still, but it was same results on 2 x OSS, 8 x OST(4 OSTs per OSS) configuration, instead of 1 x OSS, 8 OSTs.&lt;/p&gt;

&lt;p&gt;This was tested on ramdisk /dev/ram, it should be also tested with real disks, instead of ram disk.&lt;/p&gt;</comment>
                            <comment id="31251" author="adilger" created="Wed, 14 Mar 2012 19:48:31 +0000"  >&lt;blockquote&gt;
&lt;p&gt;In this point of view the server should not reply to the client that crc32 is supported too. Because adler based on simple add instruction and all hardware support it. One reason to support crc32 is very old client. With this patch the code always support crc32c, may be this should be changed for sw implementation in the server reply.&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;The need to support old crc32-only clients has passed.  According to &lt;a href=&quot;https://bugzilla.lustre.org/show_bug.cgi?id=13805&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://bugzilla.lustre.org/show_bug.cgi?id=13805&lt;/a&gt;, the adler32 support was landed in Lustre 1.6.5, and while 1.8 clients and servers need to maintain interoperability with 1.6 clients and servers (these apparently still exist in the world), the 2.3 servers where this patch will land only need interoperability with 1.8 clients.&lt;/p&gt;

&lt;p&gt;I would suggest that the OST use the cfs_crypto_test_hashes() results, and eliminate any results which are slower than, say, 1/2 of the adler32 value.  It would be worthwhile to include a comment referencing b=13805 that added adler32 in 1.6.5 to make it clear that all 1.8.x clients will be able to support this.&lt;/p&gt;</comment>
                            <comment id="33378" author="nrutman" created="Tue, 3 Apr 2012 15:02:22 +0000"  >&lt;p&gt;Andreas - you marked the patch &quot;I would prefer that you didn&apos;t submit this&quot; &amp;#8211; is this only because of the default algorithm selection issue? Would it make more sense here to send an explicit OSS preference back to the clients instead of &quot;faking&quot; the connect flags?  &lt;br/&gt;
The broader cleanup and unification of the sptlrpc and bulk checksum is acceptable to you?&lt;/p&gt;

&lt;p&gt;Shuichi - your reported 2.2 numbers are using this patch?&lt;/p&gt;</comment>
                            <comment id="33382" author="adilger" created="Tue, 3 Apr 2012 16:08:20 +0000"  >&lt;p&gt;Nathan, it is only because of the default algorithm selection.  The rest of the patch is generally OK I think.  My only remaining &lt;/p&gt;

&lt;p&gt;As for sending the OSS preference back - that would be better, but more complex.  It would need a speed/ratio to be sent back for each checksum so that the client could pick the best combination of local and remote checksums.  However, I tend to think that this decision is better for the server to make based on the algorithms that the client understands, and the speed of the algorithms that the server supports.&lt;/p&gt;

&lt;p&gt;It would also be possible for the client to bias the checksum selection by excluding algorithms like software CRC32/CRC32c if they are extremely slow and then letting the OST chose from the remainder based on performance.  In essence, this is what is done in the existing code in a much less flexible manner - the client excludes CRC32c if it is not implemented in hardware, as does the OST, and the remaining choices are sent back to the client (ADLER normally, and CRC32 as a fallback for 1.6 clients).  Having actual performance metrics could makes this selection less &quot;binary&quot;, which will become increasingly important as new algorithms are added.&lt;/p&gt;

&lt;p&gt;Essentially, what I&apos;m proposing is an improvement of the existing selection semantics that take both client and server performance into account, rather than ignoring the server performance entirely as the proposed patch does.  It could be implemented in two ways, and I think my original proposal of having the client chose the fastest algorithm is not as good as having the server do it.  New proposal below:&lt;/p&gt;

&lt;ul class=&quot;alternate&quot; type=&quot;square&quot;&gt;
	&lt;li&gt;client computes checksum speeds&lt;/li&gt;
	&lt;li&gt;client discards algorithms below some performance threshold
	&lt;ul class=&quot;alternate&quot; type=&quot;square&quot;&gt;
		&lt;li&gt;e.g. 3/4 of (geometric mean, average, fastest), ...&lt;/li&gt;
		&lt;li&gt;this will keep all algorithms if they are reasonably close in performance, otherwise using just the mean/median would always exclude &lt;em&gt;some&lt;/em&gt; algorithm(s) needlessly&lt;/li&gt;
		&lt;li&gt;and always includes ADLER for interoperability&lt;/li&gt;
	&lt;/ul&gt;
	&lt;/li&gt;
	&lt;li&gt;we do not need to include CRC32
	&lt;ul class=&quot;alternate&quot; type=&quot;square&quot;&gt;
		&lt;li&gt;this can be very slow for the client, even if it is fast on the server&lt;/li&gt;
		&lt;li&gt;ADLER is faster in software and is universally supported&lt;/li&gt;
		&lt;li&gt;CEC32 may be included if it is fast (e.g. implemented in hardware)&lt;/li&gt;
	&lt;/ul&gt;
	&lt;/li&gt;
	&lt;li&gt;client sends (possibly reduced) list of acceptable checksums (bits) to server in connect&lt;/li&gt;
	&lt;li&gt;server discards client algorithms it doesn&apos;t understand, and those below the performance threshold calculated based on remaining algorithms&lt;/li&gt;
	&lt;li&gt;the presence of ADLER would ensure that there is always &lt;em&gt;some&lt;/em&gt; algorithm which is common to both the client and server&lt;/li&gt;
	&lt;li&gt;only the fastest server algorithm(s) will be returned to the client, if there is a big difference&lt;/li&gt;
	&lt;li&gt;client can make a final choice if there is one&lt;/li&gt;
&lt;/ul&gt;
</comment>
                            <comment id="33397" author="nrutman" created="Tue, 3 Apr 2012 20:00:32 +0000"  >&lt;p&gt;My only concern is that this removes the ability of the users/admin to make the decision.  The other approach would be to just negotiate raw capabilities, always default to adler, and let the admin make the final selection with lctl conf_param.&lt;/p&gt;
</comment>
                            <comment id="33400" author="adilger" created="Tue, 3 Apr 2012 21:14:13 +0000"  >&lt;p&gt;Nathan, note that this is only describing the behaviour of selecting the default checksum algorithm.  This isn&apos;t really any different than what is done today, with the exception that instead of using the actual checksum performance the old code used hard-coded defaults based on the order that the checksums were listed in obd_cksum_pack() (or similar, can&apos;t check right now).&lt;/p&gt;

&lt;p&gt;If there is a checksum algorithm listed via conf_param it would override the one chosen by default. I guess the caveat is that if the algorithm is excluded because it is much slower than the others, then it may not be available for selection.  That is true of the code today also - if crc32c is not in hardware on either the client or server, then it is excluded and couldn&apos;t be selected by the administrator either.&lt;/p&gt;
</comment>
                            <comment id="33458" author="ihara" created="Wed, 4 Apr 2012 11:36:07 +0000"  >&lt;p&gt;I&apos;ve never tested this patches on 2.2. All results were on vanilla-2.2 branch.&lt;br/&gt;
Here is single client&apos;s performance ratio(tested with 12 IOzone threads). This is tested on real disks, instead of ramdisk. The results overall, it seems to be reasonable.&lt;/p&gt;

&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;Performance ratio(Write)
            v2.2
nochecksum  1.00
adler       0.88
crc32       0.68
crc32c      0.93

Performance ratio(Read)
            v2.2
nochecksum  1.00
adler       0.88
crc32       0.71
crc32c      0.91
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</comment>
                            <comment id="33468" author="nrutman" created="Wed, 4 Apr 2012 14:00:27 +0000"  >&lt;blockquote&gt;&lt;p&gt;I guess the caveat is that if the algorithm is excluded because it is much slower than the others, then it may not be available for selection. That is true of the code today also - if crc32c is not in hardware on either the client or server, then it is excluded and couldn&apos;t be selected by the administrator either.&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;Exactly my concern.  If there are tons of clients and few servers, it may make sense to use the fastest server algorithm regardless of the client algo speed to optimize the overall system rate.  That&apos;s the reason we wanted to be able to use the SW crc-32c algo (on the clients) in the first place.&lt;/p&gt;</comment>
                            <comment id="33474" author="adilger" created="Wed, 4 Apr 2012 14:38:01 +0000"  >&lt;p&gt;If the concern is the client eliminating the checksum algorithm choices prematurely, then the client could send all of the known algorithms to the OST.  Only the OST would drop the algorithms that are totally underperforming (e.g. crc32 or crc32c in s/w).  The final performance/config selection would be in the hands of the client/administrator.  That would ensure that the client doesn&apos;t pick a locally fast algorithm (e.g. crc32c h/w) that would significantly impact the OST CPU usage (e.g. crc32c s/w), without reducing the (sensible) choices available to the user.&lt;/p&gt;</comment>
                            <comment id="33496" author="nrutman" created="Wed, 4 Apr 2012 19:27:19 +0000"  >&lt;p&gt;That sounds like a good solution:&lt;br/&gt;
1. Client sends all available local algos&lt;br/&gt;
2. server drops non-client-supported from list, then replies with remaining algos that perform at 50% or better of the fastest algo remaining on server&lt;br/&gt;
3. client chooses locally fastest of what&apos;s left as the default.&lt;/p&gt;</comment>
                            <comment id="35317" author="ihara" created="Fri, 20 Apr 2012 22:28:58 +0000"  >&lt;p&gt;A quick question.&lt;br/&gt;
Do we keep RHE5 patchless client on lustre-2.3?&lt;br/&gt;
If so, RHEL5&apos;s client may see some performance drops on 2.3 from 2.2 if they upgrade.&lt;br/&gt;
Because, crc32c is implemented in the lustre itself and crc32c-intel is not available on that kernel, so alder will be selected on 2.3.&lt;/p&gt;</comment>
                            <comment id="35329" author="adilger" created="Fri, 20 Apr 2012 23:11:07 +0000"  >&lt;p&gt;Ihara, while it is true that there may be some minor degradation in the case of RHEL 5 clients, based on the test results you posted this performance loss will be minor (or still an improvement over earlier versions of Lustre) due to the multi-threaded ptlrpcd speedups. &lt;/p&gt;

&lt;p&gt;Also, the chance of users wanting to stick with RHEL5 for stanility, but moving to a new development version of Lustre is not very likely. &lt;/p&gt;</comment>
                            <comment id="35340" author="aboyko" created="Sun, 22 Apr 2012 05:40:20 +0000"  >&lt;p&gt;I do test on RH5 with kernel version 2.6.18-238.19.1, it support crc32c hw (kernel compile), and have better crc32c performance than 2.6.32-... kernels.&lt;/p&gt;</comment>
                            <comment id="35901" author="adilger" created="Mon, 30 Apr 2012 16:34:11 +0000"  >&lt;p&gt;Alexander, Ihara,&lt;br/&gt;
have you done any performance comparison with checksums enabled on 1.8 for comparison?&lt;/p&gt;</comment>
                            <comment id="35907" author="ihara" created="Tue, 1 May 2012 04:39:16 +0000"  >&lt;p&gt;I had couple of benchmarks on 1.8 and 2.2 for comparison, but not yet with this patches. I&apos;m thinking to do same benchmarking on 1.8 and 2.2 with this patches in a couple of days.&lt;br/&gt;
btw, we are seeing single client&apos;s performance regressions on 2.x due to &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-744&quot; title=&quot;Single client&amp;#39;s performance degradation on 2.1&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-744&quot;&gt;&lt;del&gt;LU-744&lt;/del&gt;&lt;/a&gt;. So, at this moment, we might need to run with file size &amp;lt; client&apos;s memory size for more fair comparison.. However, In the case of file size &amp;gt; client&apos;s memory size, we still see less client&apos;s performance regardless checksum=on/off.&lt;/p&gt;</comment>
                            <comment id="38195" author="ihara" created="Sat, 5 May 2012 11:12:48 +0000"  >&lt;p&gt;Hit kernel panic with this patches on Sandybridge server. I just filed on &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-1379&quot; title=&quot;kernel BUG at crypto/api.c:336!&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-1379&quot;&gt;&lt;del&gt;LU-1379&lt;/del&gt;&lt;/a&gt;.&lt;/p&gt;</comment>
                            <comment id="38200" author="aboyko" created="Sat, 5 May 2012 17:19:29 +0000"  >&lt;p&gt;Can you attach your config.h? Looks like invalid configure, I can`t reproduce issue on the same kernel.&lt;/p&gt;</comment>
                            <comment id="38201" author="ihara" created="Sat, 5 May 2012 21:26:28 +0000"  >&lt;p&gt;ok, the problem is fixed with correct config.h.&lt;/p&gt;</comment>
                            <comment id="38206" author="ihara" created="Mon, 7 May 2012 01:39:32 +0000"  >&lt;p&gt;Andreas, &lt;br/&gt;
attached is an checksum comparison on various lustre version. most of 2.2 numbers (weather checksum is enabled or not) were lower than 2.1 and 1.8 except read performance. we might be having some regressions on 2.2 client. need to open new ticket of this?&lt;/p&gt;</comment>
                            <comment id="38209" author="adilger" created="Mon, 7 May 2012 02:29:08 +0000"  >&lt;p&gt;Ihara, yes this spreadsheet should be attached to a new bug, along with details of the test being run.  Are these results from testing with 24x ramdisk OSTs, as before?  Jinshan is looking at this problem, please assign it to him.&lt;/p&gt;

&lt;p&gt;The new results are contrary to the previous test results in this bug, which showed 2.2 being faster than 2.1 for 8x OSTs.&lt;/p&gt;</comment>
                            <comment id="38566" author="adilger" created="Thu, 10 May 2012 16:48:02 +0000"  >&lt;p&gt;It looks like there is already a bug &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-744&quot; title=&quot;Single client&amp;#39;s performance degradation on 2.1&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-744&quot;&gt;&lt;del&gt;LU-744&lt;/del&gt;&lt;/a&gt; for tracking the 2.x performance degradation.&lt;/p&gt;</comment>
                            <comment id="38605" author="aboyko" created="Fri, 11 May 2012 00:56:14 +0000"  >&lt;p&gt;Ihara, have you checksumming benchmark results without this patch(for the same hw and configuration)?&lt;/p&gt;</comment>
                            <comment id="38701" author="ihara" created="Sun, 13 May 2012 00:13:10 +0000"  >&lt;p&gt;No big performance differences between 2.2 and 2.2/w this patches, but still lower than 2.1.2.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://jira.whamcloud.com/browse/LU-744&quot; title=&quot;Single client&amp;#39;s performance degradation on 2.1&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-744&quot;&gt;&lt;del&gt;LU-744&lt;/del&gt;&lt;/a&gt;, I&apos;ve filed before, but I think this is another regression compared to what we saw here.&lt;br/&gt;
As far as I tested on 2.2, the performance goes down when write/read size exceed client&apos;s memory size. This is &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-744&quot; title=&quot;Single client&amp;#39;s performance degradation on 2.1&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-744&quot;&gt;&lt;del&gt;LU-744&lt;/del&gt;&lt;/a&gt; and same problem happens on 2.1.x.&lt;/p&gt;

&lt;p&gt;In order to avoid this regression for this checksum comparison among on 1.8.7, 2.1.2 and 2.2, I used file size &amp;lt; client&apos;s memory size. &lt;/p&gt;

&lt;p&gt;Anyway, I don&apos;t think this regression is related to &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-1201&quot; title=&quot;Lustre crypto hash cleanup&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-1201&quot;&gt;&lt;del&gt;LU-1201&lt;/del&gt;&lt;/a&gt;, I will open the new ticket.&lt;/p&gt;</comment>
                            <comment id="38761" author="jay" created="Mon, 14 May 2012 16:00:02 +0000"  >&lt;p&gt;Hi Ihara, in &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-744&quot; title=&quot;Single client&amp;#39;s performance degradation on 2.1&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-744&quot;&gt;&lt;del&gt;LU-744&lt;/del&gt;&lt;/a&gt; you saw 2.2 clients performed better than 2.1, however, here you have seen the opposite. Is this only because the file size is less than memory size?&lt;/p&gt;</comment>
                            <comment id="38904" author="ihara" created="Wed, 16 May 2012 09:23:44 +0000"  >&lt;p&gt;Hi Jay, &lt;/p&gt;

&lt;p&gt;Yes, I didn&apos;t write/read the larger file size than client&apos;s memory size to avoid &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-744&quot; title=&quot;Single client&amp;#39;s performance degradation on 2.1&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-744&quot;&gt;&lt;del&gt;LU-744&lt;/del&gt;&lt;/a&gt; issue.&lt;/p&gt;

&lt;p&gt;I opened new ticket on &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-1408&quot; title=&quot;single client&amp;#39;s performance regression test&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-1408&quot;&gt;&lt;del&gt;LU-1408&lt;/del&gt;&lt;/a&gt; for single client&apos;s performance regression on 2.2. Also, during my testing for &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-1408&quot; title=&quot;single client&amp;#39;s performance regression test&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-1408&quot;&gt;&lt;del&gt;LU-1408&lt;/del&gt;&lt;/a&gt;, I saw another big performance difference between the latest b2_1 branch and 2.1.2RC0 tag. This is filed on &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-1413&quot; title=&quot;difference of single client&amp;#39;s performance between b2_1 and 2.1.2RC0&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-1413&quot;&gt;&lt;del&gt;LU-1413&lt;/del&gt;&lt;/a&gt; as another regression. &lt;/p&gt;

&lt;p&gt;So, please move foward to on &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-744&quot; title=&quot;Single client&amp;#39;s performance degradation on 2.1&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-744&quot;&gt;&lt;del&gt;LU-744&lt;/del&gt;&lt;/a&gt;, &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-1408&quot; title=&quot;single client&amp;#39;s performance regression test&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-1408&quot;&gt;&lt;del&gt;LU-1408&lt;/del&gt;&lt;/a&gt; and &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-1413&quot; title=&quot;difference of single client&amp;#39;s performance between b2_1 and 2.1.2RC0&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-1413&quot;&gt;&lt;del&gt;LU-1413&lt;/del&gt;&lt;/a&gt; for single client performance regression and different behaviors on various lustre version.&lt;/p&gt;</comment>
                            <comment id="40337" author="pjones" created="Mon, 11 Jun 2012 08:34:11 +0000"  >&lt;p&gt;Landed for 2.3&lt;/p&gt;</comment>
                            <comment id="40391" author="pjones" created="Mon, 11 Jun 2012 19:26:22 +0000"  >&lt;p&gt;patch reverted as breaks build for external OFED&lt;/p&gt;</comment>
                            <comment id="40638" author="aboyko" created="Fri, 15 Jun 2012 06:05:56 +0000"  >&lt;p&gt;new review req at &lt;a href=&quot;http://review.whamcloud.com/#change,3098&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;http://review.whamcloud.com/#change,3098&lt;/a&gt;&lt;br/&gt;
two lines code was changed. Build succcessful.&lt;/p&gt;</comment>
                            <comment id="41348" author="pjones" created="Sun, 1 Jul 2012 03:00:53 +0000"  >&lt;p&gt;Landed for 2.3&lt;/p&gt;</comment>
                            <comment id="48254" author="nrutman" created="Wed, 21 Nov 2012 19:30:00 +0000"  >&lt;p&gt;Xyratex-bug-id: &lt;a href=&quot;http://jira-nss.xy01.xyratex.com:8080/browse/MRP-337&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;MRP-337&lt;/a&gt;&lt;br/&gt;
Xyratex-bug-id: &lt;a href=&quot;http://jira-nss.xy01.xyratex.com:8080/browse/MRP-471&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;MRP-471&lt;/a&gt;&lt;/p&gt;</comment>
                    </comments>
                <issuelinks>
                            <issuelinktype id="10011">
                    <name>Related</name>
                                            <outwardlinks description="is related to ">
                                        <issuelink>
            <issuekey id="12054">LU-744</issuekey>
        </issuelink>
                            </outwardlinks>
                                                        </issuelinktype>
                    </issuelinks>
                <attachments>
                            <attachment id="11346" name="lustre-LU1201.xlsx" size="49056" author="ihara" created="Sun, 13 May 2012 00:13:10 +0000"/>
                            <attachment id="11303" name="lustre-singleclient-comparison.xlsx" size="56115" author="ihara" created="Mon, 7 May 2012 01:39:32 +0000"/>
                    </attachments>
                <subtasks>
                    </subtasks>
                <customfields>
                                                                                                                                                                                            <customfield id="customfield_10890" key="com.atlassian.jira.plugins.jira-development-integration-plugin:devsummary">
                        <customfieldname>Development</customfieldname>
                        <customfieldvalues>
                            
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                        <customfield id="customfield_10390" key="com.pyxis.greenhopper.jira:gh-lexo-rank">
                        <customfieldname>Rank</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>1|hzv6en:</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_10090" key="com.pyxis.greenhopper.jira:gh-global-rank">
                        <customfieldname>Rank (Obsolete)</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>4572</customfieldvalue>
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                </customfields>
    </item>
</channel>
</rss>