
次のように定義したとします/etc/fstab
tmpfs /data tmpfs size=90% 0 0
そして私たちは
mount -a
今/data
はtmpfs
次のシナリオでは何が起こるでしょうか
RAM メモリの/data
使用率が90% に達した場合、この場合、それ以上の使用率はスワップ メモリに使用されることになりますか?90%
tmpfs
90%
答え1
短い答え: 物理メモリがパーセンテージ部分 (90%) を提供できない場合、最終的にはスワップが使用されます。IO が指定されたパーセンテージよりも大きい場合、IO エラーが発生します。
長い答え: パーセンテージはメモリの割合(物理メモリ + スワップパーティションまたはスワップファイル)を表します。1TiB DIMM(RAM)があり、Redhatの推奨に従ってスワップを100GiBに設定していると仮定すると、理論的には、0.989 TiBを超える/dataへのIOは、他のファイルシステムと同様にIOエラーが発生します。実際には、メモリとスワップスペースは他のすべてのものによって使用されているため、デッドロックが発生することに注意してください。OOM では、過成長の場合にメモリをクリアできなくなります。
以下は私が話していることの証拠であり、私のラップトップで実行したものです。
書き込み IO 前のシステムの状態。
ceto@dell:~$ free total used free shared buff/cache available Mem: 8041716 2110100 3461592 208904 2470024 5464012 Swap: 2097148 0 2097148 ceto@dell:~$ cat /etc/fstab | grep data tmpfs /data tmpfs rw,nodev,nosuid,size=90% 0 0 ceto@dell:~$ mv rh/rhel-8.1-x86_64-dvd.iso /var/lib/libvirt/images/^C ceto@dell:~$ findmnt /data TARGET SOURCE FSTYPE OPTIONS /data tmpfs tmpfs rw,nosuid,nodev,relatime,size=7237548k ceto@dell:~$ df /data Filesystem 1K-blocks Used Available Use% Mounted on tmpfs 7237548 0 7237548 0% /data
以下のスクリプトを使用して、/data マウント パスの 90 パーセントを超える IO を生成しました。
ceto@dell:~$ cat deadlock.sh dd if=/dev/urandom of=/data/test.img bs=16M count=454 > deadlock.txt 2>&1 df /data >> deadlock.txt free >> deadlock.txt sleep 1 rm -rf /data/test.img sync /data
IOを生成して何が起こるか見てみましょう
ceto@dell:~$ sudo sh deadlock.sh
出力ファイルでは、IOエラーが発生し、システムが不安定になっていることがわかります。
ceto@dell:~$ cat deadlock.txt dd: error writing '/data/test.img': No space left on device 442+0 records in 441+0 records out 7411249152 bytes (7.4 GB, 6.9 GiB) copied, 39.6605 s, 187 MB/s Filesystem 1K-blocks Used Available Use% Mounted on tmpfs 7237548 7237548 0 100% /data total used free shared buff/cache available Mem: 8041716 2284836 126108 5358092 5630772 139840 Swap: 2097148 2097084 64