奇怪的 I/O 活动

奇怪的 I/O 活动

我的服务器上出现了一些奇怪的 I/O 活动,我不知道它来自哪里。

先介绍一下背景情况,由于磨损,我不得不更换服务器上的 NVMe(三星 PM81)。我没有注意到任何性能问题,但 SMART 报告说是时候更换了。我确实注意到设备上有一些不寻常的 IO 活动,但我认为这可能是由于设备磨损造成的,所以没多想。

现在,使用全新的 NVMe(三星 980 Pro)和从头安装的操作系统(Debian 10),IO 活动问题仍然存在。

/proc/diskstats以下是1 分钟内的内容:

$ cat /proc/diskstats; sleep 1m; cat /proc/diskstats 
 259       0 nvme0n1 2323590 271 213032732 285413 43708052 69809516 16770577066 269903507 0 901057472 1159862364 0 0 0 0
 259       1 nvme0n1p1 2006 0 7264 3665 2 0 2 0 0 44 3080 0 0 0 0
 259       2 nvme0n1p2 74879 0 5283682 9424 2001773 386508 28620456 971285 0 455348 825152 0 0 0 0
 259       3 nvme0n1p3 2246597 271 207737634 272318 40382341 69423008 16741956608 266611966 0 12038708 266043996 0 0 0 0
 259       0 nvme0n1 2323590 271 213032732 285413 43710868 69817259 16771166530 269907653 0 901114568 1159920624 0 0 0 0
 259       1 nvme0n1p1 2006 0 7264 3665 2 0 2 0 0 44 3080 0 0 0 0
 259       2 nvme0n1p2 74879 0 5283682 9424 2002019 386548 28623272 971330 0 455376 825180 0 0 0 0
 259       3 nvme0n1p3 2246597 271 207737634 272318 40384852 69430711 16742543256 266615967 0 12041324 266047732 0 0 0 0

如您所见,它报告nvme0n195% 以上的时间用于执行 IO ((901114568-901057472)/60000*100)... 但分区上的 IO 使用率几乎为零。那么 IO 在哪里进行呢?在分区表上吗?此外,读取所花费的时间 (0 毫秒) 加上写入所花费的时间 (4146 毫秒) 加起来不等于执行 I/O 所花费的时间 (57096 毫秒)。除了读取和写入,还有什么可做的?

设备上不再有任何分区或未分配的空间:

$ echo p | sudo fdisk /dev/nvme0n1

Welcome to fdisk (util-linux 2.33.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.


Command (m for help): Disk /dev/nvme0n1: 1.8 TiB, 2000398934016 bytes, 3907029168 sectors
Disk model: Samsung SSD 980 PRO 2TB                 
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 0B698EB9-DD2E-4131-9730-4193DD9D5FB5

Device             Start        End    Sectors  Size Type
/dev/nvme0n1p1      2048    1953791    1951744  953M EFI System
/dev/nvme0n1p2   1953792  197265407  195311616 93.1G Linux filesystem
/dev/nvme0n1p3 197265408 3907028991 3709763584  1.7T Linux filesystem

Command (m for help): 

SMART 也报告了错误,但如果我理解正确的话,它只是报告设备缺少某个功能,而不是功能问题:

$ sudo smartctl -a /dev/nvme0n1
smartctl 6.6 2017-11-05 r4594 [x86_64-linux-4.19.0-21-amd64] (local build)
Copyright (C) 2002-17, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF INFORMATION SECTION ===
Model Number:                       Samsung SSD 980 PRO 2TB
Serial Number:                      S69ENL0T610188X
Firmware Version:                   5B2QGXA7
PCI Vendor/Subsystem ID:            0x144d
IEEE OUI Identifier:                0x002538
Total NVM Capacity:                 2,000,398,934,016 [2.00 TB]
Unallocated NVM Capacity:           0
Controller ID:                      6
Number of Namespaces:               1
Namespace 1 Size/Capacity:          2,000,398,934,016 [2.00 TB]
Namespace 1 Utilization:            1,736,883,855,360 [1.73 TB]
Namespace 1 Formatted LBA Size:     512
Namespace 1 IEEE EUI-64:            002538 b621a0ae58
Local Time is:                      Tue Sep 27 10:47:54 2022 CEST
Firmware Updates (0x16):            3 Slots, no Reset required
Optional Admin Commands (0x0017):   Security Format Frmw_DL Self_Test
Optional NVM Commands (0x0057):     Comp Wr_Unc DS_Mngmt Sav/Sel_Feat Timestmp
Maximum Data Transfer Size:         128 Pages
Warning  Comp. Temp. Threshold:     82 Celsius
Critical Comp. Temp. Threshold:     85 Celsius

Supported Power States
St Op     Max   Active     Idle   RL RT WL WT  Ent_Lat  Ex_Lat
 0 +     8.49W       -        -    0  0  0  0        0       0
 1 +     4.48W       -        -    1  1  1  1        0     200
 2 +     3.18W       -        -    2  2  2  2        0    1000
 3 -   0.0400W       -        -    3  3  3  3     2000    1200
 4 -   0.0050W       -        -    4  4  4  4      500    9500

Supported LBA Sizes (NSID 0x1)
Id Fmt  Data  Metadt  Rel_Perf
 0 +     512       0         0

=== START OF SMART DATA SECTION ===
SMART overall-health self-assessment test result: PASSED

SMART/Health Information (NVMe Log 0x02, NSID 0x1)
Critical Warning:                   0x00
Temperature:                        40 Celsius
Available Spare:                    100%
Available Spare Threshold:          10%
Percentage Used:                    0%
Data Units Read:                    214,200 [109 GB]
Data Units Written:                 16,891,230 [8.64 TB]
Host Read Commands:                 2,350,427
Host Write Commands:                42,643,472
Controller Busy Time:               238
Power Cycles:                       1
Power On Hours:                     262
Unsafe Shutdowns:                   0
Media and Data Integrity Errors:    0
Error Information Log Entries:      0
Warning  Comp. Temperature Time:    0
Critical Comp. Temperature Time:    0
Temperature Sensor 1:               40 Celsius
Temperature Sensor 2:               55 Celsius

Read Error Information Log failed: NVMe Status 0x02

我也检查过了iotop,但没有看到任何相关内容:

$ sudo iotop -aoPb -n 2 -d 60
unable to set locale, falling back to the default locale
Total DISK READ:         0.00 B/s | Total DISK WRITE:         0.00 B/s
Current DISK READ:       0.00 B/s | Current DISK WRITE:       0.00 B/s
  PID  PRIO  USER     DISK READ  DISK WRITE  SWAPIN      IO    COMMAND
Total DISK READ:         0.00 B/s | Total DISK WRITE:        36.82 K/s
Current DISK READ:       0.00 B/s | Current DISK WRITE:      46.88 K/s
  PID  PRIO  USER     DISK READ  DISK WRITE  SWAPIN      IO    COMMAND
  649 be/3 root          0.00 B     84.00 K  0.00 %  0.07 % [jbd2/nvme0n1p3-]
  396 be/3 root          0.00 B     40.00 K  0.00 %  0.05 % [jbd2/nvme0n1p2-]
31590 be/4 root          0.00 B      0.00 B  0.00 %  0.00 % [kworker/u48:0-flush-259:0]
 4761 be/4 root          0.00 B      2.02 M  0.00 %  0.00 % minio server /data
  733 be/4 root          0.00 B     12.00 K  0.00 %  0.00 % dcgm-exporter
  737 be/4 root          0.00 B      8.00 K  0.00 %  0.00 % nscd

我猜这意味着 IO 是由内核本身执行的?

有人能帮我找出导致此 IO 活动的原因以及如何避免它吗?我不希望这个 NVMe 很快磨损并需要再次更换。

答案1

终于解开了谜团!

Linux 内核似乎存在错误。它会导致diskstats报告某些存储设备的错误指标。

我将内核升级到 5.10.0( 上可用的版本buster-backports),现在指标是正确的。

如果有人感兴趣的话,可以使用装有 Debian 10 的 t2.micro 和 t3.micro 实例在 AWS 上复制该问题。

相关内容