未来のいつか/hyoshiokの日記

hyoshiokの日々思うことをあれやこれや

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命令である。キャッシュを利用しないので時間的局所性のあるデータがキャッシュから追い出されることを防ぐ。まあ言ってみればそれだけの話である。