Linux

如果 tmpfs 達到以百分比定義的限制會發生什麼

  • March 23, 2020

假設我們在/etc/fstab

tmpfs /data tmpfs size=90% 0 0

然後我們

mount -a

現在/data是與tmpfs

在以下情況下可能會發生什麼

/data達到90%RAM記憶體(達到90%)的情況tmpfs是否意味著在這種情況下90%將使用交換記憶體?

簡短回答: 如果您的物理記憶體無法提供百分比部分(90%),最終將使用交換。當 IO 大於指定百分比時發生 IO 錯誤。

長答案: 百分比代表你的記憶體部分(物理記憶體+交換分區或交換文件}。假設你有 1TiB DIMM(RAM)並根據 Redhat 的建議設置交換 100GiB,理論上講任何 IO 到 /data 高於 0.989 TiB 會像所有其他文件系統一樣發生 IO 錯誤。在實踐中,由於所有其他東西都在使用記憶體和交換空間,所以要注意OOM 導致的死鎖將無法在過度增長的情況下清除記憶體。

這是我在筆記型電腦上執行的關於我在說什麼的證明:

  1. 寫入 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
  1. 我使用下面的腳本來生成 IO,它位於 /data 掛載路徑的 90% 以上。
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 
  1. 讓我們生成 IO 看看會發生什麼
ceto@dell:~$ sudo sh deadlock.sh
  1. 在輸出文件中,我們看到發生 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

引用自:https://unix.stackexchange.com/questions/574357