Linux 커널과 nvme 드라이버 간의 충돌. 배터리 절약 모드가 잘못 활성화되었나요? ("nvme_core.default_ps_max_latency_us=0 pcie_aspm=off"가 도움이 되지 않았습니다)

Linux 커널과 nvme 드라이버 간의 충돌. 배터리 절약 모드가 잘못 활성화되었나요? ("nvme_core.default_ps_max_latency_us=0 pcie_aspm=off"가 도움이 되지 않았습니다)

거의 동일한 두 개의 서버가 있습니다. 두 서버 모두 다음을 갖추고 있습니다.

  1. 바이오스타 GTA690 메인보드
  2. 인텔 CPU
  3. 동일한 양의 RAM 및 디스크 레이아웃
  4. PVE 배포(Debian 기반 하이퍼바이저). 커널 5.19.17-1-pve.

저는 Seagate Firecuda 530(2TB)을 각각 3대 구입했습니다. 두 서버 모두에 있는 6개의 드라이브가 같은 방식으로 실패했는데 이유를 모르겠습니다.

이전에 NVMe SSD 펌웨어 업그레이드를 시도했는데, 다운로드 받으러 가보니 제가 설치한 버전(SU6SM003, 출시일 03/01/22)과 동일한 버전이었습니다. 그래서 최신 버전으로 업데이트된 것을 당연하게 여겼습니다.

또한 드라이브는 완전히 포맷되지 않고 "비어 있는" 상태였으며 성능을 테스트하기 위해 원시 fio 테스트를 실행하고 있던 중 드라이브가 실패하는 것을 확인했습니다.

모든 종류의 테스트 모드(읽기, 쓰기, randread 및 ranwrite)에서 실패합니다. 드라이브 중 2개는 gen4 m2 커넥터에 연결되고 1개는 gen3에 연결됩니다. PCIe 3세대가 데이터 전송에 병목 현상이 발생하지 않더라도 3세대 드라이브는 더 오랜 기간 작동을 견딜 수 있는 것으로 보입니다. 나는 벤치의 온도를 모니터링했지만 온도가 60°C에 도달하는 것을 본 적이 없습니다. 경고 및 임계 온도는 90도, 95도 이므로 기본 메인보드 쿨러를 사용해도 온도 문제는 아닌 것 같습니다.

여기에 실패한 kernel.log예를 첨부합니다 nvme0.

Feb 17 10:42:58 pve-02 kernel: [   63.521693] pcieport 0000:00:06.0: AER: Corrected error received: 0000:00:06.0
Feb 17 10:42:58 pve-02 kernel: [   63.521703] pcieport 0000:00:06.0: PCIe Bus Error: severity=Corrected, type=Physical Layer, (Receiver ID)
Feb 17 10:42:58 pve-02 kernel: [   63.521704] pcieport 0000:00:06.0:   device [8086:464d] error status/mask=00000001/00002000
Feb 17 10:42:58 pve-02 kernel: [   63.521706] pcieport 0000:00:06.0:    [ 0] RxErr
Feb 17 10:43:29 pve-02 kernel: [   95.188263] nvme nvme0: controller is down; will reset: CSTS=0xffffffff, PCI_STATUS=0x10
Feb 17 10:43:29 pve-02 kernel: [   95.188269] nvme nvme0: Does your device have a faulty power saving mode enabled?
Feb 17 10:43:29 pve-02 kernel: [   95.188270] nvme nvme0: Try "nvme_core.default_ps_max_latency_us=0 pcie_aspm=off" and report a bug
Feb 17 10:43:29 pve-02 kernel: [   95.244775] nvme 0000:01:00.0: enabling device (0000 -> 0002)
Feb 17 10:43:29 pve-02 kernel: [   95.244881] nvme nvme0: Removing after probe failure status: -19
Feb 17 10:43:29 pve-02 kernel: [   95.268964] nvme0n1: detected capacity change from 3907029168 to 0

nvme1및 에도 마찬가지입니다 nvme2. 그리고 두 서버 모두 동일합니다.

nvme_core.default_ps_max_latency_us=0 pcie_aspm=off커널 로그에서 제안한 대로 설정을 시도했습니다 . 저는 systemd-boot를 사용하고 있으므로 이것을 파일의 옵션 줄에 추가했습니다 /boot/efi/loader/entries/proxmox-5.19.17-1-pve.conf. 다시 시작한 후 복귀 nvme get-feature /dev/nvme0 -f 0x0c -H:

get-feature:0xc (Autonomous Power State Transition), Current value:00000000
    Autonomous Power State Transition Enable (APSTE): Disabled

활성화하기 전에는 지금쯤 오류가 해결되기를 바랐지만 그렇지 않습니다. 드라이브에 계속 오류가 발생하지만 이제 로그는 약간 다릅니다.

Feb 20 10:50:38 pve-02 kernel: [ 1117.637355] nvme nvme0: controller is down; will reset: CSTS=0xffffffff, PCI_STATUS=0x10
Feb 20 10:50:38 pve-02 kernel: [ 1117.637377] nvme nvme0: Does your device have a faulty power saving mode enabled?
Feb 20 10:50:38 pve-02 kernel: [ 1117.637384] nvme nvme0: Try "nvme_core.default_ps_max_latency_us=0 pcie_aspm=off" and report a bug
Feb 20 10:50:38 pve-02 kernel: [ 1117.694007] nvme0: Admin Cmd(0x6), I/O Error (sct 0x3 / sc 0x71)
Feb 20 10:50:38 pve-02 kernel: [ 1117.733561] nvme 0000:01:00.0: enabling device (0000 -> 0002)
Feb 20 10:50:38 pve-02 kernel: [ 1117.733671] nvme nvme0: Removing after probe failure status: -19
Feb 20 10:50:38 pve-02 kernel: [ 1117.761606] nvme0n1: detected capacity change from 3907029168 to 0

pcieport 오류는 사라졌지만 이제 다음과 같은 새로운 개념이 있습니다. Admin Cmd(0x6), I/O Error (sct 0x3 / sc 0x71), 그리고 그것이 무엇을 의미하는지 신은 아십니다.

여기에 서버 2에 nvme0의 스마트 데이터를 첨부합니다.

root@pve-02:~# smartctl -a /dev/nvme0
smartctl 7.2 2020-12-30 r5155 [x86_64-linux-5.19.17-1-pve] (local build)
Copyright (C) 2002-20, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF INFORMATION SECTION ===
Model Number:                       Seagate FireCuda 530 ZP2000GM30013
Serial Number:                      7VR033KY
Firmware Version:                   SU6SM003
PCI Vendor/Subsystem ID:            0x1bb1
IEEE OUI Identifier:                0x6479a7
Total NVM Capacity:                 2,000,398,934,016 [2.00 TB]
Unallocated NVM Capacity:           0
Controller ID:                      1
NVMe Version:                       1.4
Number of Namespaces:               1
Namespace 1 Size/Capacity:          2,000,398,934,016 [2.00 TB]
Namespace 1 Formatted LBA Size:     512
Namespace 1 IEEE EUI-64:            6479a7 6d3f00fdd1
Local Time is:                      Mon Feb 20 11:46:09 2023 CET
Firmware Updates (0x18):            4 Slots, no Reset required
Optional Admin Commands (0x0017):   Security Format Frmw_DL Self_Test
Optional NVM Commands (0x005d):     Comp DS_Mngmt Wr_Zero Sav/Sel_Feat Timestmp
Log Page Attributes (0x08):         Telmtry_Lg
Maximum Data Transfer Size:         512 Pages
Warning  Comp. Temp. Threshold:     90 Celsius
Critical Comp. Temp. Threshold:     95 Celsius

Supported Power States
St Op     Max   Active     Idle   RL RT WL WT  Ent_Lat  Ex_Lat
 0 +     7.80W       -        -    0  0  0  0        0       0
 1 +     2.90W       -        -    1  1  1  1        0       0
 2 +     2.80W       -        -    2  2  2  2        0       0
 3 -   0.0250W       -        -    3  3  3  3     2500    7500
 4 -   0.0050W       -        -    4  4  4  4    10500   65000

Supported LBA Sizes (NSID 0x1)
Id Fmt  Data  Metadt  Rel_Perf
 0 +     512       0         2
 1 -    4096       0         1

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

SMART/Health Information (NVMe Log 0x02)
Critical Warning:                   0x00
Temperature:                        28 Celsius
Available Spare:                    100%
Available Spare Threshold:          5%
Percentage Used:                    0%
Data Units Read:                    9,323,369 [4.77 TB]
Data Units Written:                 2,755,621 [1.41 TB]
Host Read Commands:                 125,896,434
Host Write Commands:                271,550,259
Controller Busy Time:               26
Power Cycles:                       2,348
Power On Hours:                     287
Unsafe Shutdowns:                   2,312
Media and Data Integrity Errors:    0
Error Information Log Entries:      88
Warning  Comp. Temperature Time:    0
Critical Comp. Temperature Time:    0

Error Information (NVMe Log 0x01, 16 of 63 entries)
Num   ErrCount  SQId   CmdId  Status  PELoc          LBA  NSID    VS
  0         88     0  0x0008  0x4004  0x028            0     0     -
  1         87     0  0x1014  0x4004      -            0     0     -

다음에 무엇을 해야할지 모르겠고 막다른 골목에 도달한 것 같아서 어떤 도움이라도 도움이 될 것입니다.

일종의 부록으로, 누군가에게 유용할 경우를 대비해 제가 수행한 fio 테스트에 대한 자세한 설명을 여기에 작성하겠습니다.

먼저 드라이브의 최대 쓰기 IOPS를 테스트하기 위해 4k 무작위 쓰기 모드에서 테스트했습니다. 400,000 IOPS를 제공하는 3개의 디스크가 있어도(처음에는 시간이 지남에 따라 천천히 감소함) 3세대 디스크는 오랫동안 지속되었습니다. 이것을 여러 번 반복했지만 항상 동일하며 세 디스크 모두 성능이 동일한 이유를 이해하지 못합니다.

그런 다음 출력 설정 iolength 및 jobs를 1로 줄였습니다. 이렇게 하면 IOPS가 140,000 IOPS에서 시작됩니다. Gen 4 드라이브도 이 모드(56 및 57°C)에서 실패했지만 Gen 3 드라이브는 오류 없이 4시간 동안 실행되었습니다. 물론 Gen 3와 Gen 4 드라이브의 BW와 IOPS는 동일합니다.

그런 다음 최대 4k IOPS로 전환했습니다. 4세대는 1M IOPS, 3세대는 700K입니다. Gen 4 드라이브는 몇 초 만에 지워졌고, Gen 3 드라이브는 최대 2분 만에 지워졌습니다. 온도는 결코 55도를 넘지 않았습니다.

마지막으로 최대 4M 순차 읽기로 전환했습니다. 4세대의 경우 1700 IOPS, 3세대의 경우 850 IOPS입니다. b. 여기서는 4세대가 먼저 충돌했고 그 다음 3세대, 마지막으로 4세대가 충돌했습니다. 사실 마지막이 15~20분 동안 지속되어 가장 달랐습니다.

그런 다음 이 중 어느 것도 이해가 되지 않아 포기했으므로 어떤 도움이라도 환영합니다.

관련 정보