系统因磁盘 I/O 而冻结

系统因磁盘 I/O 而冻结

我遇到了类似的问题(可能是相同的问题),报告者是系统因磁盘 I/O 而冻结. 该问题在 Fedora 36 首次发布时也出现过。

当我启动一个对磁盘 I/O 要求更高的进程时,所有应用程序都会冻结,磁盘灯会持续亮几秒钟甚至几分钟。简单的任务,如复制 [200 MB 目录] 或解压文件(使用图形界面或终端),就足以触发问题。即使在恢复模式下使用 shell 也会发生这种情况。

我尝试了磁盘 I/O 的两个可用调度选项:mq-deadline(默认)和无。

我的配置:

  • Ubuntu 22.04(内核 5.15.0-37-generic)
  • i7 9700k
  • 16 GB RAM
  • RTX 2070
  • 固态硬盘金士顿 A400
$ free -h
               total        used        free      shared  buff/cache   available
Mem:            15Gi       1,6Gi        11Gi        88Mi       2,2Gi        13Gi
Swap:          2,0Gi          0B       2,0Gi
# smartctl -a /dev/sda
...
ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
  1 Raw_Read_Error_Rate     0x0032   100   100   000    Old_age   Always       -       100
  9 Power_On_Hours          0x0032   100   100   000    Old_age   Always       -       6174
 12 Power_Cycle_Count       0x0032   100   100   000    Old_age   Always       -       1145
148 Unknown_Attribute       0x0000   100   100   000    Old_age   Offline      -       0
149 Unknown_Attribute       0x0000   100   100   000    Old_age   Offline      -       0
167 Write_Protect_Mode      0x0000   100   100   000    Old_age   Offline      -       0
168 SATA_Phy_Error_Count    0x0012   100   100   000    Old_age   Always       -       3
169 Bad_Block_Rate          0x0000   100   100   000    Old_age   Offline      -       0
170 Bad_Blk_Ct_Erl/Lat      0x0000   100   100   010    Old_age   Offline      -       0/0
172 Erase_Fail_Count        0x0032   100   100   000    Old_age   Always       -       0
173 MaxAvgErase_Ct          0x0000   100   100   000    Old_age   Offline      -       0
181 Program_Fail_Count      0x0032   100   100   000    Old_age   Always       -       0
182 Erase_Fail_Count        0x0000   100   100   000    Old_age   Offline      -       0
187 Reported_Uncorrect      0x0032   100   100   000    Old_age   Always       -       0
192 Unsafe_Shutdown_Count   0x0012   100   100   000    Old_age   Always       -       201
194 Temperature_Celsius     0x0022   037   073   000    Old_age   Always       -       37 (Min/Max 26/73)
196 Reallocated_Event_Count 0x0032   100   100   000    Old_age   Always       -       0
199 SATA_CRC_Error_Count    0x0032   100   100   000    Old_age   Always       -       0
218 CRC_Error_Count         0x0032   100   100   000    Old_age   Always       -       3
231 SSD_Life_Left           0x0000   095   095   000    Old_age   Offline      -       95
233 Flash_Writes_GiB        0x0032   100   100   000    Old_age   Always       -       7968
241 Lifetime_Writes_GiB     0x0032   100   100   000    Old_age   Always       -       4379
242 Lifetime_Reads_GiB      0x0032   100   100   000    Old_age   Always       -       2333
244 Average_Erase_Count     0x0000   100   100   000    Old_age   Offline      -       53
245 Max_Erase_Count         0x0000   100   100   000    Old_age   Offline      -       153
246 Total_Erase_Count       0x0000   100   100   000    Old_age   Offline      -       37087
...
# gdisk /dev/sda
...
Model: KINGSTON SA400S3
Sector size (logical/physical): 512/512 bytes
...
Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048         2000895   976.0 MiB   EF00  
   2         2000896         6000639   1.9 GiB     8300  
   3         6000640       937701375   444.3 GiB   8300
...

编辑:

$ df -h
Filesystem              Size  Used Avail Use% Mounted on
tmpfs                   1,6G  3,6M  1,6G   1% /run
/dev/mapper/sda3_crypt  437G  297G  118G  72% /
tmpfs                   7,8G  127M  7,7G   2% /dev/shm
tmpfs                   5,0M  4,0K  5,0M   1% /run/lock
/dev/sda2               1,9G  244M  1,5G  14% /boot
/dev/sda1               975M   33M  942M   4% /boot/efi
tmpfs                   1,6G  2,4M  1,6G   1% /run/user/1000

答案1

用 HDD 测试我的设置后,注意到读取速度正常,并考虑到@Esther 对该问题的评论,我终于解决了它。

看起来是 Luks2 加密。它加密了整个磁盘(分区),SSD 无法区分空闲扇区和已用扇区,因此无法使用修剪功能(据我了解)。

在 luks2 上启用 trim分区起了作用:

# cryptsetup --allow-discards --persistent refresh <mapping_of_the_encrypted_drive>

如果你想尝试一下,请记住以下几点安全警告

警告:此命令可能会对安全造成负面影响,因为它会使文件系统级操作在物理设备上可见。例如,如果稍后可以找到丢弃的块,则可能会从物理设备中提取泄露文件系统类型、已用空间等信息。如果有疑问,请不要使用它。

相关内容