Назад | Перейти на главную страницу

Linus / ext4 / nvme вылетает при высоком io

Во время компиляции mvn у меня случаются случайные сбои.

Проблема, похоже, связана с большим количеством операций ввода-вывода, и в kern.log я вижу такие вещи, как:

kernel: [158430.895045] nvme nvme1: controller is down; will reset: CSTS=0xffffffff, PCI_STATUS=0x10
kernel: [158430.951331] blk_update_request: I/O error, dev nvme0n1, sector 819134096 op 0x0:(READ) flags 0x80700 phys_seg 1 prio class 0
kernel: [158430.995307] nvme nvme1: Removing after probe failure status: -19
kernel: [158431.035065] blk_update_request: I/O error, dev nvme0n1, sector 253382656 op 0x1:(WRITE) flags 0x4000 phys_seg 127 prio class 0
kernel: [158431.035083] EXT4-fs warning (device nvme0n1p1): ext4_end_bio:309: I/O error 10 writing to inode 3933601 (offset 16777216 size 2101248 starting block 31672832)
kernel: [158431.035085] Buffer I/O error on device nvme0n1p1, logical block 31672320
kernel: [158431.035090] ecryptfs_write_inode_size_to_header: Error writing file size to header; rc = [-5]

Чтобы воспроизвести ошибку, я использую:

stress-ng --all 8  --timeout 60s --metrics-brief --tz

Я пробовал несколько вариантов загрузки, например, добавление acpiphp.disable=1 pcie_aspm=off к /etc/default/grup, похоже, это помогло стресс-тесту, но не моей компиляции.

nvme list показывает:

Node             SN                   Model                            Namespace Usage                      Format           FW Rev  
---------------- -------------------- ---------------------------------------- --------- -------------------------- ---------------- --------
/dev/nvme0n1     28FF72PTFQAS         KXG50ZNV256G NVMe TOSHIBA 256GB          1        256,06  GB / 256,06  GB    512   B +  0 B   AADA4102
/dev/nvme1n1     37DS103NTEQT         THNSN5512GPU7 NVMe TOSHIBA 512GB         1         512,11 GB / 512,11  GB    512   B +  0 B   57DC4102

Я не могу точно сказать вам, в чем проблема, поскольку это просто «общий сбой» где-то в подсистеме NVMe. Но я могу подсказать, что вы можете попытаться определить, чтобы определить проблему.

  1. Попробуйте добавить параметр загрузки ядра nvme_core.default_ps_max_latency_us = 5500.
  2. Установите пакет nvme-cli (или, что еще лучше, создайте самый последний из источники) и проверяйте с его помощью различные журналы, такие как smart-log и error-log. Это может помочь в дальнейшей диагностике ошибки.
  3. Попробуйте загрузить некоторые другие дистрибутивы (живые) и провести стресс-тест под ними, чтобы узнать, связано ли это с версией ядра / дистрибутивом. Дистрибутив Systemrescuecd может стать хорошей отправной точкой.
  4. Если это не помогает, вы можете попробовать обновить прошивку MB («BIOS», которая сейчас не является BIOS с UEFI) до последней версии. Хотя это не кажется очевидным, и даже примечания к патчу могут не иметь ничего напрямую связанного с подсистемами NVMe / PCI-E, иногда это помогает (практические знания).
  5. Обновите прошивку накопителя NVMe. Для этого ищите инструменты и руководство, предоставленные поставщиком.
  6. Если все вышеперечисленное не поможет или не даст никаких подсказок, возможно, вы столкнулись с еще неизвестной ошибкой или отказом оборудования.

Я заметил, что ошибки возникли только на одном из ssd, содержащем / home

Перенесли / домой на другой диск в машине, и пока он работает намного лучше.

Быстрая вещь, которую можно просто попробовать, - это горячая замена драйвера жесткого диска.

но для производительности ввода-вывода вы также не можете дешеветь. Проверьте максимальную задержку, посмотрите, сколько вы перешли. может быть, ты просто пробуешь что-то, что требует лучшего драйвера с ядром.

посмотрите в некоторой конфигурации cmake или некотором агруементе компилятора, чтобы использовать только 1 поток или меньше ввода-вывода, замедлите его каким-либо образом, если вы можете использовать терминал для приостановки процесса вручную, вы можете смоделировать компиляцию, если вы очень отчаялись,

единственное, что можно сделать быстро, - это сделать виртуальную машину из этой машины, скомпилировать ее на виртуальной машине и отладить в реальном времени.