cache aware patch
ほぼ最終型のパッチがhttp://marc.theaimsgroup.com/?l=linux-kernel&m=112556596103063&w=2にある。
まづ、性能データはというと、クロック数は下記のとおり、約10数パーセント削減されている。
Total of GLOBAL_POWER_EVENTS (CPU cycle samples) 2.6.12.4.orig 1921587 2.6.12.4.nt 1599424 1599424/1921587=83.23% (16.77% reduction)
キャッシュミスは6割から7割削減できていて、(57427から20858へ)
BSQ_CACHE_REFERENCE (L3 cache miss) 2.6.12.4.orig 57427 2.6.12.4.nt 20858 20858/57427=36.32% (63.7% reduction)
__copy_from_user_ll()にいたっては、キャッシュミスがほとんど0(37408回のキャッシュミスから23回)になっている。
L3 cache miss reduction of __copy_from_user_ll samples % 37408 65.1412 vmlinux __copy_from_user_ll 23 0.1103 vmlinux __copy_user_zeroing_intel_nocache 23/37408=0.061% (99.94% reduction)
パッチのキモの部分は
+ "2: movl 0(%4), %%eax\n" + "21: movl 4(%4), %%edx\n" + " movnti %%eax, 0(%3)\n" + " movnti %%edx, 4(%3)\n"
のMOVNTI命令である。これがキャッシュを利用しないMOVE命令である。キャッシュを利用しないので時間的局所性のあるデータがキャッシュから追い出されることを防ぐ。まあ言ってみればそれだけの話である。