Во время компиляции 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. Но я могу подсказать, что вы можете попытаться определить, чтобы определить проблему.
Я заметил, что ошибки возникли только на одном из ssd, содержащем / home
Перенесли / домой на другой диск в машине, и пока он работает намного лучше.
Быстрая вещь, которую можно просто попробовать, - это горячая замена драйвера жесткого диска.
но для производительности ввода-вывода вы также не можете дешеветь. Проверьте максимальную задержку, посмотрите, сколько вы перешли. может быть, ты просто пробуешь что-то, что требует лучшего драйвера с ядром.
посмотрите в некоторой конфигурации cmake или некотором агруементе компилятора, чтобы использовать только 1 поток или меньше ввода-вывода, замедлите его каким-либо образом, если вы можете использовать терминал для приостановки процесса вручную, вы можете смоделировать компиляцию, если вы очень отчаялись,
единственное, что можно сделать быстро, - это сделать виртуальную машину из этой машины, скомпилировать ее на виртуальной машине и отладить в реальном времени.