LinuxでRAMディスクを作成する

LinuxでRAMディスクを作成する

RAMが62GBのコンピュータがあり、トランクは7GBに過ぎないので、RAMディスクを作成してそこでコンパイルする必要があると思いました。私はLinuxの専門家ではありません。オンラインでRAMディスクを作成する方法についての指示が見つかりました。

mkfs -q /dev/ram1 8192

ところで、8192を16777216に変更して16GBのRAMディスクを割り当てようとしました。

次のエラーが発生します。

mkfs.ext2: Filesystem larger than apparent device size.
Proceed anyway? (y,n) 

それから私は怖がって宝石を出しました。

sudo dmidecode --type 17 | grep Size

プログラム

8x8192MB + 2048MB = 67584 MB

しかしduそれは/dev与えられる804K

これは問題ですか?このサイズを超えることができますか/dev

答え1

LinuxでRAMディスクを作成する最良の方法はtmpfsです。 RAMに位置するファイルシステムなので、ext2は不要です。次のコマンドを使用して、16 GBのサイズのtmpfsを生成できます。

mount -o size=16G -t tmpfs none /mnt/tmpfs

答え2

Linuxは非常に効率的なRAMの使用。当然加速度をほとんど感じることはできませんtmpfs。メモリに読み込まれる(したがってプロセスを遅くすることができる)最大の部分はツール(コンパイラ、アセンブラ、リンカ)です。つまり、make起動時にメモリにロードされ、決して離れません。残りはソースコードを読むだけです(メモリが厳しく制限されない限り、結果を書いても速度が遅くなりません)。同様に、共通ヘッダーファイルは保存され、ユーザーのソースコードのみを読み取ることができます。これは数メガバイトを超えないでしょう。大きなRAMdiskを作成したり、使いすぎると、tmpfs作業速度が大幅に遅くなる可能性があります(ビルドメモリ、RAMdisk、またはそのファイルを制限することによって)。tmpfs できないそこから直接使用できます)。

答え3

tmpfsその他のramfsオプションは/dev/ram0ブロックデバイスです。最新のUbuntuバージョンでは、このデバイスはデフォルトでは存在しませんがmodprobe brd

この方法は、実際のファイルシステムを作成し、ext4ユーザーが指定した制限を絶対に超えないため、予測可能性が高くなります。しかし、より多くのセットアップステップが必要であり、RAMを効率よく使用しません。

brd カーネルモジュール (/dev/ram0) の使用

4GBのRAMディスクを作成して初期化します。

mkdir /ramdisk

modprobe brd rd_nr=1 rd_size=$((4 * 1048576))
mkfs.ext4 /dev/ram0
mount /dev/ram0 /ramdisk

このrd_nrパラメータは、作成するRAMディスクの数を指定します(デフォルトでは16個が作成され転送されます/dev/ram0/dev/ram15。パラメータrd_sizeサイズはキロバイト。この$(( ... ))構文を使用すると、シェルで算術演算を実行できます。

RAMディスクを空にするには、マウント解除してbrdカーネルモジュールを取り外します。

umount /ramdisk
modprobe -r brd

内部にブロックデバイスを作成ramfs

または、次の場所でブロックデバイスを作成できますramfs

mkdir /ramdisk-storage /ramdisk
mount -t ramfs ramfs /ramdisk-storage

truncate -s 4G /ramdisk-storage/ramdisk.img
mkfs.ext4 /ramdisk-storage/ramdisk.img
mount /ramdisk-storage/ramdisk.img /ramdisk

このtruncateコマンドは、要求に応じて初期化(メモリー消費など)するために、指定されたサイズの空のファイルを作成します。

RAMディスクの割り当てを解除するには、マウント解除してディスクイメージを削除してください。

umount /ramdisk
rm /ramdisk-storage/ramdisk.img

tmpfsと比較ramfs

tmpfsブロックデバイスを使用するよりも効率的ですが、いくつramfsかの欠点があります。

tmpfsディスクに交換できます。これはより効率的ですが、時にはRAM専用ディスクが必要になることがあります。

  • 作業中のファイルは重要です(暗号化されたパーティション内のファイルなど)。
  • パフォーマンステストを実行しており、ディスクI / Oが要因になることを望まない(SSD書き込み時間は大きく異なる可能性があります)。
  • 大容量ファイルを解凍し、SSDが磨耗したくありません。

ramfs設定が簡単で、ファイルが削除されるとスペースを取り戻し、RAMをより効率的に使用します(システムはファイルがRAMにあることを知っているため、ファイルをバッファリングしません)。しかし、ここには欠点と驚きもあります。

  • ユーティリティdfはスペース使用量を報告しません。

    root@cello-linux:~# df -h /ramdisk
    Filesystem      Size  Used Avail Use% Mounted on
    ramfs              0     0     0    - /ramdisk
    
  • サイズ制限パラメータはありません。 RAMディスクにコンテンツが多すぎると、システムがクラッシュします。

  • まれなファイルは、少なくとも予想されるとあまり稀になる可能性があります。今朝、VMイメージ(150G、ディスクでは49Gを使用)をramfs(128G RAM付き)にコピーしました。動作します。しかし、コピーするとき~からramfs目的地に到着した後、システムが応答しなくなりました。このcpユーティリティは明らかに穴を埋めます。読むが、文章を書くときはそうではありません。

tmpfsramfs実際のファイルシステムとは異なる動作をすることもできますext4。 RAMにブロックデバイスを作成して初期化すると、ext4このような状況を回避できます。

より深い比較:https://www.kernel.org/doc/Documentation/filesystems/ramfs-rootfs-initramfs.txt

答え4

ramfsファイルシステムをマウントしてプロジェクトをここにコピーしたら、そこから作業を開始できます。これにより、入力ファイルがRAMにロードされ、はるかに遅いディスクドライブから読み取られなくなります。しかし、すでに知っているように、これは一般的に有用な戦略ではありません。あなたはすでに同じ恩恵を受けています。

Ramfsはエクスポートを実行する非常にシンプルなファイルシステムです。Linuxディスクキャッシュメカニズム(ページキャッシュとディレクトリキャッシュ)を動的にサイズ変更可能なRAMベースのファイルシステムとして使用します。

-https://github.com/torvalds/linux/blob/v4.18/Documentation/filesystems/ramfs-rootfs-initramfs.txt

入力ファイルを最初に読み込むときにRAMにキャッシュされていることはすでに信頼できます。出力ファイルもキャッシュされるため、そのファイルがディスクに書き込まれるのを待つ必要はありません。

キャッシュできる量、キャッシュできる期間などに人為的な制限はありません。メモリがいっぱいになった後にのみキャッシュが削除され始めます。どのキャッシュを最初に削除するかは、非常に複雑なアルゴリズムによって選択されます。最初の近似として「最も最近使用された」と説明します。バラよりオペレーティングシステムのファイルキャッシュにLinuxカーネルでどのページ置換アルゴリズムが使用されていますか?

テキストエディタはfsync()ファイルをディスクに明示的に保存します。

プログラムに関連するテストを実行している場合は、fsync()ファイルシステムでそのテストを実行するとramfs作業が速くなる可能性があります。もう1つの戦略はを有効fsync()/eatmydata無効にすることですnosync.so

他のオペレーティングシステムには、RAMディスクを使用してバイパスできる特定の制限がある場合があります。一方では不足している部分もありますどのファイルキャッシュはRAMディスクが人気の理由ですオペレーティングシステム

一時ファイルシステム

tmpfsramfs可能であれば、スワップスペースが利用可能であることを除いて、同じ動作をします。つまり、他の目的でRAMが必要な場合は、最も最近使用されたアルゴリズムがtmpfsからデータブロックを選択してディスクに交換できます。

tmpfsほとんどの人は全体のサイズを制限し、コマンドで使用されている正しいスペースを表示できるため、これに固執しますdf。なぜこのような違いが存在するのか分かりません。サイズ制限は、tmpfs誤ってRAM全体を満たし、デフォルトでシステムをシャットダウンするのを防ぎます。デフォルトはハーフRAMです。

書き込みが遅い他の理由

上記は、お客様の状況に応じて簡略化されています。あなたの場合、ファイルへの書き込みにディスクを待つ必要はありません。しかし、これはいくつかの書き込み状況では本当です。素晴らしいブログ投稿を見るバッファリングされた書き込みが時々停止するのはなぜですか?。最も驚くべき事例は、Stable Page WritingというLinuxの最近の変更です。

関連情報