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
ユーティリティは明らかに穴を埋めます。読むが、文章を書くときはそうではありません。
tmpfs
ramfs
実際のファイルシステムとは異なる動作をすることもできます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ディスクが人気の理由ですオペレーティングシステム。
一時ファイルシステム
tmpfs
ramfs
可能であれば、スワップスペースが利用可能であることを除いて、同じ動作をします。つまり、他の目的でRAMが必要な場合は、最も最近使用されたアルゴリズムがtmpfsからデータブロックを選択してディスクに交換できます。
tmpfs
ほとんどの人は全体のサイズを制限し、コマンドで使用されている正しいスペースを表示できるため、これに固執しますdf
。なぜこのような違いが存在するのか分かりません。サイズ制限は、tmpfs
誤ってRAM全体を満たし、デフォルトでシステムをシャットダウンするのを防ぎます。デフォルトはハーフRAMです。
書き込みが遅い他の理由
上記は、お客様の状況に応じて簡略化されています。あなたの場合、ファイルへの書き込みにディスクを待つ必要はありません。しかし、これはいくつかの書き込み状況では本当です。素晴らしいブログ投稿を見るバッファリングされた書き込みが時々停止するのはなぜですか?。最も驚くべき事例は、Stable Page WritingというLinuxの最近の変更です。