ファイルの mmap()-ped ユーザー空間スワップ

ファイルの mmap()-ped ユーザー空間スワップ

非常に小さなメモリ(ほぼ内蔵)を備えたシステムを想像してください。これは、1つの例外を除いて、ほぼすべての操作に十分です。大量のRAMを必要とするタスクXがありますが、これはシステムにはありません。

スワッピングも不可能だと想像してみてください(メモリ不足のVMであり、ホスティングプロバイダがスワッピングを禁止する)。

私の考えでは、私たちができると思います。

  • 大容量ファイルの作成
  • mmap()-ing
  • malloc()この-ed領域は、mmap()物理RAMの代わりに使用するためにglibcで「要求」(再構成)されます。

私たちが実際に持っているのは、単一プロセスに対してのみユーザースペースレベルのスワップ機能です。

私が知る限り、glibcのmalloc()実装は設定可能な実装ではありませんが、

  • malloc()他の実装があります
  • glibc mallocもゴミではありませんが、ディーププレイが一般的ではないという点だけが異なります。

可能ですか?どのようなまたは同様の解決策がありますか?

ベストアンサー1

このようなことをすることは絶対に可能です。これを簡単に達成するには、プロセスごとに1つのファイルが必要です。明らかに、仮想マシンのディスク容量によって制限されます。カーネルが定期的にメモリをディスクにフラッシュするので、パフォーマンスも良くありません。これは、いくつかのsysctlチューナブルを使用して軽減することができます(Linuxで定期的な書き込み保存を取得する)。

mallocその後、別のデバイスに接続する必要があります。 glibcには、代わりに使用できる__morecore()フック(glibcを参照)があります。malloc.hsbrk()みんなglibcの割り当て 。場合によっては、glibcがmmap()代わりに直接呼び出すので、__morecore()これは 。mallopt()LD_PRELOADライブラリを使用してmmap()呼び出しをキャプチャすることもできます。しかし、それは完全に些細なことではありません。

おすすめ記事