外付けハードドライブに保存されている大量のデータを処理するコードがあります。ディスクには約6.5GiBのデータがありますが、内容全体ではない一部のファイルのみが処理されます。
必要な処理時間を短縮するために、ディスクの内容のコピーをメモリに保存するためにtmpfsファイルシステムを使用してRAMディスクを作成しました。システムを再起動するたびに、ディスクの内容をこのRAMディスクにコピーする必要があります。
すべてが私が持っている利用可能なメモリ量に合うことができるので、これはうまくいきます。
ただし、後で他の大きなデータセットに変更すると、動作しなくなる可能性があります。
実際に読み取っているデータの量は1GB程度にすぎないため、これはかなり非効率的です。 (10%少し超えると思います。)
外部ディスクから読み取ったデータをキャッシュするためにメモリにRAMディスクを作成する方法はありますか?
私はこのようなことがLinuxで可能であると確信しています。しかし、何を探すべきかわかりません。 Ramdisksはすでにかなりのニッチなテーマです。
しかし、私はこの記事を書いている時点でDebian 10以前のテストブランチであるDebian Testを使用しています。
編集:違いがある場合は、そのディスクに書き換えないでください。
答え1
使用を検討することもできます。ファイルシステムの上書き。オーバーレイファイルシステムを使用すると、ディスクマウントポイントとラムディスクマウントポイントをスタックファイルシステム(オーバーレイファイルシステム)に結合できます。
OverlayFSは書き込み時にコピー方式で動作するため、オーバーレイが空のRAMディスクで始まる場合、書き込み権限でファイルを開く場合にのみデータがRAMディスクに書き込まれます。理論的には、touch
必要なファイルをRAMに事前にコピーできます。
しかし、Linuxはすでに強力なディスクキャッシュ。ここでホイールを再発明しないことを確認したいかもしれません。
答え2
これはあなたの質問に対する答えではありませんが、説明されている問題を解決するのに役立ちます。欲しい
必要な処理時間を短縮するには、ディスクの内容のコピーをメモリに保存してください。
何もする必要はありません。これはデフォルトで発生します。
自分で試してみてください。
dd if=/dev/urandom bs=1M count=1M of=test.bin # create a file of 10 GB random data
echo 3 | sudo tee /proc/sys/vm/drop_caches # drop caches
dd if=test.bin bs=1G count=1 of=/dev/null # read 1 GB of data
dd if=test.bin bs=1G count=1 of=/dev/null # read again
初めて読むのに時間がかかります。
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 10,43 s, 103 MB/s
初めて読み込んだ後も、データはメモリに残ります。後続の読書ははるかに高速です。
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 0.320478 s, 3.4 GB/s
利用可能なメモリが十分であれば、Linuxは最近読んだファイルの内容をメモリに保持し、ユーザーの努力を喜んでサポートします。