WD (SanDisk) не совсем рабочая палка NVMe M.2

Чтобы быть ясным, я ожидал проблему. Компьютером является старый HP Z820 (конечно, никакая поддержка BIOS для NVMe) с последним обновлением BIOS 2018. Палка является новым (-выход?) Модель Western Digital (Sandisk):

WD черный NVMe на 500 ГБ SSD - M.2 2280 - WDS500G2X0C

Смонтированный на карте PCIe 3.0 x4:

Mailiya M.2 PCIe к адаптеру PCIe 3.0 x4

Я не пытаюсь загрузиться от NVMe, просто использовать для устройства хранения данных. Linux действительно видит диск (через lsblk и lspci) и может читать..., но не запись.

Это - Ubuntu 18.04.2 LTS с версией ядра:

Linux brutus 4.15.0-46-универсальный # SMP с 49 Ubuntu среда 6 февраля 9:33:07 GNU/Linux UTC 2019 x86_64 x86_64 x86_64

(Также протестированный на 18,10.)

Вытянутый источники Linux для этой версии, и для текущих 5.0 Linux (от torvalds/linux на GitHub). Существуют существенные различия в driver/nvme между Ubuntu LTS и текущий с обновлениями, столь же недавними (!) как вчера (16.03.2019 в "CD drivers/nvme; журнал мерзавца").

Как я сказал в запуске, ожидая проблему.:)

Должен упомянуть, что я немного знаком с драйверами устройств Linux, записав одну из умеренной сложности.

Испытанная компиляция текущих источников Linux 5.0, и "rmmod nvme; insmod nvme" - который не работал (не удивительно). Испытанное копирование 5,0 nvme драйверов в 4,15 дерева и компиляцию - который не работал (также не удивительно, но эй, полученный для попытки).

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

Чтения, которые, как замечают, работали, но медленнее, чем ожидалось:

# hdparm -t --direct /dev/nvme0n1 

/dev/nvme0n1:
 Timing O_DIRECT disk reads: 4840 MB in  3.00 seconds = 1612.83 MB/sec

# dd bs=1M count=8192 if=/dev/nvme0n1 of=/dev/null
8192+0 records in
8192+0 records out
8589934592 bytes (8.6 GB, 8.0 GiB) copied, 4.57285 s, 1.9 GB/s

Записи перестали работать плохо:

# dd bs=1M count=2 if=/dev/zero of=/dev/nvme0n1 
(hangs)

От journalctl:

Mar 17 18:49:23 brutus kernel: nvme nvme0: async event result 00010300
Mar 17 18:49:23 brutus kernel: print_req_error: I/O error, dev nvme0n1, sector 0
Mar 17 18:49:23 brutus kernel: buffer_io_error: 118 callbacks suppressed
Mar 17 18:49:23 brutus kernel: Buffer I/O error on dev nvme0n1, logical block 0, lost async page write
[snip]
Mar 17 18:49:23 brutus kernel: print_req_error: I/O error, dev nvme0n1, sector 1024
Mar 17 18:49:23 brutus kernel: print_req_error: I/O error, dev nvme0n1, sector 3072

Введенный по абсолютному адресу вокруг немного с "nvme" инструментом командной строки, но только предположением:

# nvme list -o json
{
  "Devices" : [
    {
      "DevicePath" : "/dev/nvme0n1",
      "Firmware" : "101140WD",
      "Index" : 0,
      "ModelNumber" : "WDS500G2X0C-00L350",
      "ProductName" : "Unknown Device",
      "SerialNumber" : "184570802442",
      "UsedBytes" : 500107862016,
      "MaximiumLBA" : 976773168,
      "PhysicalSize" : 500107862016,
      "SectorSize" : 512
    }
  ]

К вашему сведению - lspci вывод:

03:00.0 Non-Volatile memory controller: Sandisk Corp Device 5002 (prog-if 02 [NVM Express])
        Subsystem: Sandisk Corp Device 5002
        Physical Slot: 1
        Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR+ FastB2B- DisINTx+
        Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
        Latency: 0, Cache Line Size: 64 bytes
        Interrupt: pin A routed to IRQ 37
        NUMA node: 0
        Region 0: Memory at de500000 (64-bit, non-prefetchable) [size=16K]
        Region 4: Memory at de504000 (64-bit, non-prefetchable) [size=256]
        Capabilities: [80] Power Management version 3
                Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mA PME(D0-,D1-,D2-,D3hot-,D3cold-)
                Status: D0 NoSoftRst+ PME-Enable- DSel=0 DScale=0 PME-
        Capabilities: [90] MSI: Enable- Count=1/32 Maskable- 64bit+
                Address: 0000000000000000  Data: 0000
        Capabilities: [b0] MSI-X: Enable+ Count=65 Masked-
                Vector table: BAR=0 offset=00002000
                PBA: BAR=4 offset=00000000
        Capabilities: [c0] Express (v2) Endpoint, MSI 00
                DevCap: MaxPayload 512 bytes, PhantFunc 0, Latency L0s <1us, L1 unlimited
                        ExtTag- AttnBtn- AttnInd- PwrInd- RBE+ FLReset+ SlotPowerLimit 0.000W
                DevCtl: Report errors: Correctable+ Non-Fatal+ Fatal+ Unsupported+
                        RlxdOrd- ExtTag- PhantFunc- AuxPwr- NoSnoop+ FLReset-
                        MaxPayload 256 bytes, MaxReadReq 1024 bytes
                DevSta: CorrErr+ UncorrErr- FatalErr- UnsuppReq- AuxPwr- TransPend-
                LnkCap: Port #0, Speed 8GT/s, Width x4, ASPM L1, Exit Latency L0s <256ns, L1 <8us
                        ClockPM+ Surprise- LLActRep- BwNot- ASPMOptComp+
                LnkCtl: ASPM Disabled; RCB 64 bytes Disabled- CommClk+
                        ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt-
                LnkSta: Speed 8GT/s, Width x4, TrErr- Train- SlotClk+ DLActive- BWMgmt- ABWMgmt-
                DevCap2: Completion Timeout: Range B, TimeoutDis+, LTR+, OBFF Not Supported
                DevCtl2: Completion Timeout: 50us to 50ms, TimeoutDis-, LTR-, OBFF Disabled
                LnkCtl2: Target Link Speed: 8GT/s, EnterCompliance- SpeedDis-
                         Transmit Margin: Normal Operating Range, EnterModifiedCompliance- ComplianceSOS-
                         Compliance De-emphasis: -6dB
                LnkSta2: Current De-emphasis Level: -3.5dB, EqualizationComplete+, EqualizationPhase1+
                         EqualizationPhase2+, EqualizationPhase3+, LinkEqualizationRequest-
        Capabilities: [100 v2] Advanced Error Reporting
                UESta:  DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF- MalfTLP- ECRC- UnsupReq- ACSViol-
                UEMsk:  DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF- MalfTLP- ECRC- UnsupReq- ACSViol-
                UESvrt: DLP+ SDES+ TLP- FCP+ CmpltTO- CmpltAbrt- UnxCmplt- RxOF+ MalfTLP+ ECRC- UnsupReq- ACSViol-
                CESta:  RxErr- BadTLP- BadDLLP- Rollover- Timeout- NonFatalErr+
                CEMsk:  RxErr- BadTLP- BadDLLP- Rollover- Timeout- NonFatalErr+
                AERCap: First Error Pointer: 00, GenCap+ CGenEn- ChkCap+ ChkEn-
        Capabilities: [150 v1] Device Serial Number 00-00-00-00-00-00-00-00
        Capabilities: [1b8 v1] Latency Tolerance Reporting
                Max snoop latency: 0ns
                Max no snoop latency: 0ns
        Capabilities: [300 v1] #19
        Capabilities: [900 v1] L1 PM Substates
                L1SubCap: PCI-PM_L1.2- PCI-PM_L1.1- ASPM_L1.2+ ASPM_L1.1- L1_PM_Substates+
                          PortCommonModeRestoreTime=255us PortTPowerOnTime=10us
                L1SubCtl1: PCI-PM_L1.2- PCI-PM_L1.1- ASPM_L1.2- ASPM_L1.1-
                           T_CommonMode=0us LTR1.2_Threshold=0ns
                L1SubCtl2: T_PwrOn=10us
        Kernel driver in use: nvme
        Kernel modules: nvme

Heh. Кредит, где должный.:)

preston@brutus:~/sources/linux/drivers/nvme$ git log . | grep -i 'wdc.com\|@sandisk' | sed -e 's/^.*: //' | sort -uf
Adam Manzanares <adam.manzanares@wdc.com>
Bart Van Assche <bart.vanassche@sandisk.com>
Bart Van Assche <bart.vanassche@wdc.com>
Chaitanya Kulkarni <chaitanya.kulkarni@wdc.com>
Jeff Lien <jeff.lien@wdc.com>

Также протестированный с током (2019.03.17) ядро Linux:

root@brutus:~# uname -a
Linux brutus 5.1.0-rc1 #1 SMP Mon Mar 18 01:03:14 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux

root@brutus:~# pvcreate /dev/nvme0n1 
  /dev/nvme0n1: write failed after 0 of 4096 at 4096: Input/output error
  Failed to wipe new metadata area at the start of the /dev/nvme0n1
  Failed to add metadata area for new physical volume /dev/nvme0n1
  Failed to setup physical volume "/dev/nvme0n1".

Из журнала:

Mar 18 02:05:10 brutus kernel: print_req_error: I/O error, dev nvme0n1, sector 8 flags 8801
Mar 18 02:09:06 brutus kernel: print_req_error: I/O error, dev nvme0n1, sector 8 flags 8801
Mar 18 02:09:36 brutus kernel: print_req_error: I/O error, dev nvme0n1, sector 8 flags 8801

Так... (еще) не работающий ни в какой версии Linux, это кажется.

4
задан 18 March 2019 в 05:16

1 ответ

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

Я имею этот тот же диск и использую его, как мой основной диск, работающий 18.04. Я использовал утилиту встроенного микропрограммного обеспечения Windows и не видел обновлений этой точки. Я также протестировал продуктивную среду на 19,04, который имеет те же взлеты/отказ замораживания для установки, я испытал с 18,04 и 18.10, таким образом, проблема, кажется, все еще открыта.

Проблема, кажется, что диск становится нестабильным, когда он входит в состояния низкой мощности, таким образом, фиксация должна отключить режимы низкой мощности через параметр начальной загрузки ядра. Я сделал это несколько месяцев назад и имел нулевые проблемы на 18,04 с тех пор. Этот метод должен работать над новыми версиями (18.10/19.04) также, но это - позор, что это еще не было зафиксировано.

В меню начальной загрузки GRUB нажмите e для редактирования параметра запуска. Добавить nvme_core.default_ps_max_latency_us=5500 к концу тихого Ctrl-x всплеска для начальной загрузки установщик должен обнаружить этот диск на шаге раздела.

После заканчивающейся установки конца нажмите сдвиг, в то время как включаются для ввода GRUB снова, добавьте тот же параметр ядра nvme_core.default_ps_max_latency_us=5500, Ctrl-x для начальной загрузки. Вы будете видеть, что Ubuntu загружается успешно, редактирование /etc/default/grub, добавьте параметр nvme_core.default_ps_max_latency_us=5500 снова, выполниться sudo update-grub. Так, чтобы каждый раз загрузились, будет содержать этот параметр в личинке автоматически, нет более вручную редактировать.

https://community.wd.com/t/linux-support-for-wd-black-nvme-2018/225446/9

1
ответ дан 1 December 2019 в 10:31

Другие вопросы по тегам:

Похожие вопросы: