カーネルコンパイル時間

カーネルコンパイル時間

Linux を使用すると、起動時に自動的に 16 個の 16MB RAM ディスクが作成されますが、ソフトウェアをテストするために非常に大きな RAM ディスクを 1 つ作成したいと考えています。

カーネル ブート パラメータを使用して、システム上にすでに存在する RAM ディスクのサイズを調整できることが分かりましたramdisk_size。ただし、これにより、16 個の RAM ディスク (/dev/ram0 - /dev/ram15) すべてが指定されたサイズになります。したがって、1 GB の RAM ディスクを作成する場合は、16 GB のメモリが必要になります。

基本的に、/dev/ram0 となる 10GB の RAM ディスクを 1 つ作成したいと思います。どうすればよいでしょうか? カーネル ブート パラメータがあると思いますが、まだ見つけていません。

答え1

カーネルコンパイル時間

ファイルで設定できるカーネル構成オプションは 2 つあります.config

CONFIG_BLK_DEV_RAM_COUNT=1
CONFIG_BLK_DEV_RAM_SIZE=10485760

これにより、カーネルが起動時に 10G の RAM ディスクを 1 つ作成するように構成されました。

ノート:

  • CONFIG_BLK_DEV_RAM_SIZEKB単位です。
  • コンピュータに実際に搭載されている RAM よりも多くのメモリを指定しないでください。
  • menuconfigデバイス ドライバー > ブロック デバイスを確認します。

起動時間

作成する RAM ディスクのサイズは、カーネル ブート パラメータを使用して指定できますramdisk_size。例:

kernel /vmlinuz-2.6.32.24 ro root=LABEL=/ rhgb quiet ramdisk_size=10485760

これで、マシンを起動してファイルシステムを作成し、マウントして、ブロックデバイスとまったく同じように使用できるようになりました。

# mkfs.xfs /dev/ram0
# mount /dev/ram0 /mnt/ramdisk

出典:

  1. http://www.vanemery.com/Linux/Ramdisk/ramdisk.html[死んだ]
  2. https://www.kernel.org/doc/Documentation/blockdev/ramdisk.txt

答え2

使用すべきtmpfsその代わりに。

mount -t tmpfs -o size=10g none /mnt/point

答え3

カーネルパラメータをいじらずに、ブート後に大容量の RAM ディスクを作成します。tmpfs を使用してファイルを作成し、ループ経由でマウントし、ファイルシステム経由でマウントします。

mount -t tmpfs -o size=200M tmpfs temp/
cd temp/
dd if=/dev/zero of=disk.img bs=1M count=199
losetup /dev/loop0 disk.img
mkfs.ext4 /dev/loop0
cd ..
mount /dev/loop0 temp2/

おそらく、複数の異なるレイヤーを通過するとパフォーマンスが少し低下しますが、少なくとも機能します。

答え4

ramdrive の目的は速度です。tmpfs はドライブではありません。ループ デバイスはドライブではありませんが、ループ デバイスにドライブ イメージを置くことができます。ram ディスクはドライブであり、非常に高速なドライブです。次を実行してみてください。

hdparm -t /dev/sda 

その後:

hdparm -t /dev/ram0

私の言っている意味がお分かりになると思います。ただし、hdparm は RAM ドライブを破壊することがあります。そのため、再度作成する必要があります。

/dev/ram デバイスが存在しない場合もあります。作成するには、次の手順を実行します。

mknod -m 0777 /dev/ram0 b 1 0 

しかし、サイズはありません。サイズを指定するには、次のようにします。

dd if=/dev/zero of=/dev/ram0

ドライブがいっぱいになると停止します。最大サイズはカーネル構成パラメータによって決まります: CONFIG_BLK_DEV_RAM_SIZE

次に、フォーマットするだけです。

mke2fs /dev/ram0

そしてマウントします:

mount /dev/ram0 /mnt/ramdrive

私のお気に入りは、RAM ドライブに保存されたコードをデバッグすることです。コンパイルは、ハード ドライブに保存されたコードの少なくとも 10 倍の速度です。RAM ドライブに保存されたデータベース テーブルも高速ですが、定期的にハード ディスクに書き込むスクリプトが必要です。ほとんどの管理者は、RAM ディスクにデータを置く勇気がありません。また、テーブルによっては大きすぎるものもあります。

関連情報