友達オペレーティングシステムによるキャッシュ汚染がアプリケーションのパフォーマンスに与える影響を調べたいと思います。
このために、私は小さなカスタムベンチマークプログラムを作成しました。
1. malloc an array of size = l1 data cache-size
2. repeat ... sweep this array from start to end (hit-rate = 1.0)
3. *** perform a system call that thrashes l1 data cache ***
4. sweep the array once again (expected hit-rate = ~0.7 ---> 1.0)
アルゴリズムのステップ2は、配列全体を繰り返し読み取ります。うまくいけば、配列はキャッシュに残り、ヒット率は1になります。
システムコールを実行した後、もう一度キャッシュを読み取ろうとします。しかし、OSがユーザーに属するいくつかのキャッシュラインを削除したと思います。
ご覧のとおり、プログラムはシステムコールに依存して、l1データキャッシュから多くのユーザーデータラインを削除します。どうすればこれを達成できますか?
システムコールはファイル関連またはストリーム関連のいずれかである必要があると思います。