私たちは、約3世代の共有ライブラリから構成され、多くの異なるフロントエンドが共有ライブラリのさまざまな部分をロードするLinuxアプリケーションスイートを持っています。私たちは24G搭載のマシンで動作し、その3Gの大部分を頻繁にロードします。我々はすべての3Gが常にRAMに常駐するように強制しようと考えているので、すべてのアプリはできるだけ早く開始されます。Linuxライブラリを強制的に物理RAMに常駐させますか?
これはできますか?私たちの最初の考えは、バイナリを/ dev/shmのようなラムディスクに入れていたのですが、カーネルは内容を自由に交換することができます。 swappinessパラメータを0に減らすこともできますが、ファイルキャッシュはメモリを有効に使用しているので、どちらも必要とは思わないと思います。私たちは、この特定のチャンクがいつも熱く保たれるように指示したいだけです。
mlockシステムコールがありますが、私たちが望むものとまったく同じように聞こえますが、これをRAMディスクとどのように統合するかはわかりません。
私たちはRAMディスクを必要としないかもしれませんが、MAP_SHARED、MAP_LOCKED、およびMAP_POPULATEを渡して、すべてのバイナリの全範囲を単純にmmapするデーモンプロセスですか?これは、他のプロセスによる将来の負荷が即座に同じ物理メモリにアクセスする原因になりますか? ldがMAP_SHAREDでmmapを使って共有ライブラリをロードするのは正しいですか?
なぜこれが良いかどうかについての観察もあります。
は、なぜあなたは「RAMディスクで[MLOCK]統合」するのでしょうか?どうすれば 'mlock()'を使って問題を解決できないでしょうか?私が知る限り、あなたが望むものを可能な限りシンプルな方法で正確に実行します。 – mkj