Linuxユーザ空間プログラムが所有するメモリページに対してcache write combiningを有効/無効にする合理的な方法はありますか?Linuxユーザー空間アプリで書き込み結合を有効にしますか?
重要な2つのターゲットシステム:3.0カーネルのインテルHaswellプロセッサー、4.8カーネルのIntel Skylakeプロセッサー。
大きなバッファを使用してプロデューサとコンシューマ間でデータを転送する、成熟したマルチスレッドアプリケーションを調整しています。プロファイリングに基づいて、ライトバックキャッシングではなく、書き込み結合キャッシングを使用してアプリケーションがバッファのページから恩恵を受けると信じる理由があります。
代わりに非一時的な書き込みを使用してバッファにデータを格納すると考えましたが、現在の努力よりも大きなコードリファクタリングが必要になります。
,this questionおよびthis LWN articleは、問題を議論するが、デバイスドライバの観点から論じている。私の場合、私は非rootとして実行しているuserspaceコードで作業しています。
This 2008 paperは、ページのキャッシュモードを制御するためのさまざまなAPIについて説明しています。ユーザー空間アプリケーションがmmap
(5.3節、5.4節、5.6節参照)を使用してページへの書き込み結合アクセスを取得できることを示しているようですが、その仕組みを正確にどのように使用するかについてのドキュメントは明確ではありません。
https://www.kernel.org/doc/ols/2008/ols2008v2-pages-135-144.pdfのセクション5.3 5.4は、PCIリソースへの '/ proc' /'/sys' fs経由のアクセス用です。 5.5と5.6は '/ dev/mem'で全てのコンピュータメモリにアクセスするためのものです。どちらもルートアクセスが必要で、 '/ dev/mem'への直接アクセスは安全ではありません。 'non-temporal writes'を使うようにしてください。少なくとも、コードの書き込みモードを変更することは何の利点もあります。インテルは、メモリ充填のハードウェア検出器を備えており、組み合わせモードを変更する可能性があります。http://www.intel.com/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-optimization-manual .pdf 3.6.10 7.4.1 – osgx