如果 tmpfs 达到以百分比定义的限制,会发生什么

如果 tmpfs 达到以百分比定义的限制,会发生什么

假设我们定义了以下内容/etc/fstab

tmpfs /data tmpfs size=90% 0 0
然后我们

mount -a

现在/data是与tmpfs

以下场景可能会发生什么

/data达到90%RAM 内存(达到 90%)的情况tmpfs是否意味着在这种情况下90%将使用交换内存?

答案1

简短回答: 如果您的物理内存无法满足百分比部分(90%),最终将使用交换。当IO大于指定百分比时发生IO错误。

长答案: 该百分比代表您的内存部分(物理内存 + 交换分区或交换文件}。假设您有 1TiB DIMM (RAM) 并按照 Redhat 的建议设置交换 100GiB,理论上讲任何对 /data 超过 0.989 TiB 的 IO 都会发生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
    
  2. 我使用下面的脚本生成了 IO,该 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 
    
  3. 让我们生成 IO 并看看会发生什么

    ceto@dell:~$ sudo sh deadlock.sh
    
  4. 在输出文件中我们看到发生了 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
    

相关内容