間接的にトリガーされるカーネルオブジェクトに制限を設けてタスクを実行したいと思います。これは、アプリケーションで使用されるメモリやスレッドなどではなく、カーネルで使用されるメモリに関するものであることに注意してください。具体的には、タスクが使用できるinodeキャッシュの量を制限したいと思います。
私のやる気を起こさせる例はupdatedb
です。後でほとんど必要とされないもののために、かなりの量のiノードキャッシュを使用できます。具体的には、ext4_inode_cache
の/proc/slabinfo
行で示される値を制限したいと思います。 (これは、free
で示される「バッファ」または「キャッシュ」行には含まれないことに注意してください。これはファイルコンテンツキャッシュのみであり、スラブコンテンツはカーネルメモリであり、「使用済み」列に記録されます。)
echo 2 >/proc/sys/vm/drop_caches
は後でキャッシュを解放しますが、それは私には何の役にも立ちません。役に立たないものが、実行中のアプリケーションやその頻繁に使用されるファイルなど、メモリに保持したいものを置き換えました。
システムは、最近の(3.8以上の)カーネルを備えたLinuxです。ルートアクセスを使用して設定できます。
制限された環境(コンテナ)でコマンドを実行して、その環境の(ext4)iノードキャッシュへの寄与を設定した値に制限するにはどうすればよいですか?
カーネルのiノードソースコード を見ると、ihash_entriesがカーネルレベルでのみ設定されていることがわかります。
ユーザーまたはプロセスレベルの考慮事項はまったくありません。これらを追加すると、パフォーマンスが大幅に低下する可能性があり、逆効果になります。
また、キャッシュされたエントリを使用したすべてのプロセスを追跡することを意味するため、より多くのメモリを使用して追跡します。
肝心なのは、現在のカーネルでは不可能であり、実装するのも良い考えではないということです。