LINUX.ORG.RU

Проблема с NVME в Alpine Linux на HP Microserver Gen8

 , ,


0

2

Всем привет!

Имеется железка:

07:00.0 Non-Volatile memory controller: Sandisk Corp SanDisk Ultra 3D / WD Blue SN570 NVMe SSD (DRAM-less)

которую засунул через pci-e-переходник в сервер HP Microserver G8.

Система (Alpine Linux), её определяет:

NAME                                 MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINTS
nvme0n1                              259:0    0 931.5G  0 disk
# nvme smart-log /dev/nvme0
Smart Log for NVME device:nvme0 namespace-id:ffffffff
critical_warning                        : 0
temperature                             : 37 °C (310 K)
available_spare                         : 100%
available_spare_threshold               : 10%
percentage_used                         : 0%
endurance group critical warning summary: 0
Data Units Read                         : 420 (215.04 MB)
Data Units Written                      : 0 (0.00 B)
host_read_commands                      : 7199
host_write_commands                     : 2053
controller_busy_time                    : 63
power_cycles                            : 7
power_on_hours                          : 955
unsafe_shutdowns                        : 5
media_errors                            : 0
num_err_log_entries                     : 2126
Warning Temperature Time                : 0
Critical Composite Temperature Time     : 0
Thermal Management T1 Trans Count       : 0
Thermal Management T2 Trans Count       : 0
Thermal Management T1 Total Time        : 0
Thermal Management T2 Total Time        : 0

# smartctl -A /dev/nvme0n1 
smartctl 7.4 2023-08-01 r5530 [x86_64-linux-6.6.59-0-lts] (local build)
Copyright (C) 2002-23, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF SMART DATA SECTION ===
SMART/Health Information (NVMe Log 0x02)
Critical Warning:                   0x00
Temperature:                        37 Celsius
Available Spare:                    100%
Available Spare Threshold:          10%
Percentage Used:                    0%
Data Units Read:                    420 [215 MB]
Data Units Written:                 0
Host Read Commands:                 7,199
Host Write Commands:                2,053
Controller Busy Time:               63
Power Cycles:                       7
Power On Hours:                     955
Unsafe Shutdowns:                   5
Media and Data Integrity Errors:    0
Error Information Log Entries:      2,126
Warning  Comp. Temperature Time:    0
Critical Comp. Temperature Time:    0

# nvme fw-log /dev/nvme0
Firmware Log for device:nvme0
afi  : 0x1
frs1 : 0x4457303131343332 (234110WD)

Проблемы начинаются когда пытаюсь разметить диск:

# fdisk /dev/nvme0n1 

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

Device does not contain a recognized partition table.
Created a new DOS (MBR) disklabel with disk identifier 0x5d84c7bb.

Command (m for help): g
Created a new GPT disklabel (GUID: 768BB787-C2C5-40A2-B783-10714D7BD41F).

Command (m for help): n
Partition number (1-128, default 1): 
First sector (2048-1953525134, default 2048): 
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-1953525134, default 1953523711): 

Created a new partition 1 of type 'Linux filesystem' and of size 931.5 GiB.

Command (m for help): p
Disk /dev/nvme0n1: 931.51 GiB, 1000204886016 bytes, 1953525168 sectors
Disk model: SanDisk Ultra 3D NVMe 1TB               
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: 768BB787-C2C5-40A2-B783-10714D7BD41F

Device         Start        End    Sectors   Size Type
/dev/nvme0n1p1  2048 1953523711 1953521664 931.5G Linux filesystem

Command (m for help): w
fdisk: failed to write disklabel: I/O error

В ядре ошибки:

[ 2298.492689] nvme0n1: I/O Cmd(0x1) @ LBA 1953525128, 40 blocks, I/O Error (sct 0x0 / sc 0x4) MORE 
[ 2298.492700] I/O error, dev nvme0n1, sector 1953525128 op 0x1:(WRITE) flags 0x800 phys_seg 5 prio class 2
[ 2298.492704] buffer_io_error: 121 callbacks suppressed
[ 2298.492706] Buffer I/O error on dev nvme0n1, logical block 244190641, lost async page write
[ 2298.492717] Buffer I/O error on dev nvme0n1, logical block 244190642, lost async page write
[ 2298.492720] Buffer I/O error on dev nvme0n1, logical block 244190643, lost async page write
[ 2298.492722] Buffer I/O error on dev nvme0n1, logical block 244190644, lost async page write
[ 2298.492725] Buffer I/O error on dev nvme0n1, logical block 244190645, lost async page write

Что в данной ситуации можно попробовать? Под рукой нет материнки с M2, чтобы проверить диск без переходника.


Что интересно, dd вроде работает:

# dd if=/dev/zero of=/dev/nvme0n1 bs=512 count=5
5+0 records in
5+0 records out
2560 bytes (2.5KB) copied, 0.005556 seconds, 450.0KB/s

но dmesg сыпет ошибками:

2684.711921] nvme0n1: I/O Cmd(0x1) @ LBA 0, 8 blocks, I/O Error (sct 0x0 / sc 0x4) MORE 
[ 2684.711928] I/O error, dev nvme0n1, sector 0 op 0x1:(WRITE) flags 0x800 phys_seg 1 prio class 2
[ 2684.711931] Buffer I/O error on dev nvme0n1, logical block 0, lost async page write

santic
() автор топика
Ответ на: комментарий от santic

У меня есть переходник с M2 на USB, он на отрез открывается работать с одним диском. А если ткнуть его «штатно» в материнскую плату – работает.
Начитался SoF и было хотел уже пытаться шить контроллер, а потом забил хрен, сходил в ближайший DNS и купил переходник на другом контроллере.

IIIypuk ★★★★
()

Есть ещё подозрение, что переходник не тот, потому что на сервере pci-e v2:

# dmidecode | grep "PCI"
                PCI is supported
        Designation: PCI-E Slot 1
        Type: PCI Express 2 x16
HP BIOS PXE NIC PCI and MAC Information
        NIC 1: PCI device 03:00.0, MAC address 11111
        NIC 2: PCI device 03:00.1, MAC address 11111

А сам переходник pci-e v4

santic
() автор топика
Ответ на: комментарий от anonymous

Ошибка мне ни о чём не говорит, к сожалению:

# nvme error-log /dev/nvme0                                                                    
Error Log Entries for device:nvme0 entries:64                                                                                                                                                                                         
.................                                                                                                  
 Entry[ 0]                                                                                                                                                                                                                            
.................                                                                                                  
error_count     : 2144                                                                                             
sqid            : 2                                                                                                                                                                                                                   
cmdid           : 0x6200                                                                                           
status_field    : 0x2004(Data Transfer Error: Transferring the data or metadata associated with a command experienced an error)
phase_tag       : 0                                                                                                
parm_err_loc    : 0xffff                                                                                           
lba             : 0                                                                                                                                                                                                                   
nsid            : 0x1                                                                                              
vs              : 7                                                                                                
trtype          : The transport type is not indicated or the error is not transport related.                       
csi             : 0                                                                                                
opcode          : 0                                                                                                                                                                                                                   
cs              : 0                                                                                                
trtype_spec_info: 0                                                                                                
log_page_version: 0                                                                                                                                                                                                                   
.................            
santic
() автор топика
Ответ на: комментарий от anonymous

Часть с вышеуказанной ошбкой, а часть без ошибки:

 Entry[20]                                                                                                                                                                                                                            
.................                                                                                                  
error_count     : 0                                                                                                
sqid            : 0                                                                                                                                                                                                                   
cmdid           : 0                                                                                                
status_field    : 0(Successful Completion: The command completed without error)                                                                                                                                                       
phase_tag       : 0                                                                                                
parm_err_loc    : 0                                                                                                
lba             : 0                                                                                                                                                                                                                   
nsid            : 0                                                                                                
vs              : 0                                                                                                                                                                                                                   
trtype          : The transport type is not indicated or the error is not transport related.                       
csi             : 0                                                                                                
opcode          : 0                                                                                                                                                                                                                   
cs              : 0                                                                                                
trtype_spec_info: 0                                                                                                                                                                                                                   
log_page_version: 0                                                                                                
.................         
santic
() автор топика
Ответ на: комментарий от santic

если там ничего нет нужного

dd if=/dev/urandom of=dd if= bs=4M count=256

sha256sum ~/test.bin

dd if=~/test.bin of=/dev/nvme0n1 bs=1M status=progress

dd if=/dev/nvme0n1 of=~/test1.bin count=256 status=progress

sha256sum ~/test1.bin



dmesg все еще в другом очке

потом читаем логи

anonymous
()
Ответ на: комментарий от anonymous

Неудача - запись бинаря на диск началась и висит, а dmesg вываливает кучу трейсов:

[Sat Nov  9 01:18:12 2024] nvme nvme0: Device not ready; aborting reset, CSTS=0x3                                                                                                                                                     
[Sat Nov  9 01:18:12 2024] nvme nvme0: Disabling device after reset failure: -19                                                                                                                                                      
[Sat Nov  9 01:18:12 2024] ------------[ cut here ]------------                                                                                                                                                                       
[Sat Nov  9 01:18:12 2024] WARNING: CPU: 6 PID: 18378 at mm/slab_common.c:975 free_large_kmalloc+0x57/0x90                                                                                                                            
[Sat Nov  9 01:18:12 2024] Modules linked in: authenc echainiv nvme nvme_core overlay seqiv geniv crypto_null esp4 xfrm_interface xfrm6_tunnel tunnel6 tunnel4 xfrm_user xfrm_algo cfg80211 rfkill veth btrfs blake2b_generic xor raid
6_pq vhost_vsock vmw_vsock_virtio_transport_common vsock vhost vhost_iotlb autofs4 fuse xt_CHECKSUM xt_MASQUERADE xt_conntrack ipt_REJECT nf_reject_ipv4 xt_tcpudp nft_compat x_tables nft_chain_nat nf_tables bridge stp llc nfnetlin
k_cttimeout nfnetlink openvswitch nsh nf_conncount nf_nat nf_conntrack nf_defrag_ipv6 nf_defrag_ipv4 dm_thin_pool dm_persistent_data dm_bio_prison dm_bufio libcrc32c dm_mod af_packet tun joydev input_leds hid_generic usbhid hid ps
mouse serio_raw pcspkr iTCO_wdt intel_pmc_bxt gpio_ich iTCO_vendor_support lpc_ich ie31200_edac nvme_common tg3 libphy hpilo mgag200 i2c_algo_bit intel_rapl_msr coretemp intel_rapl_common x86_pkg_temp_thermal intel_powerclamp kvm_
intel kvm irqbypass crct10dif_pclmul ghash_clmulni_intel sha512_ssse3 sha256_ssse3 sha1_ssse3 aesni_intel crypto_simd cryptd                                                                                                          
[Sat Nov  9 01:18:12 2024]  rapl intel_cstate thermal evdev button ipmi_ssif acpi_ipmi ipmi_si ipmi_devintf ipmi_msghandler acpi_power_meter hwmon raid1 crc32_pclmul xhci_pci xhci_pci_renesas xhci_hcd uhci_hcd ehci_pci ehci_hcd ah
ci libahci libata simpledrm drm_shmem_helper drm_kms_helper drm loop ext4 crc32c_generic crc32c_intel crc16 mbcache jbd2 usb_storage usbcore usb_common sd_mod t10_pi crc64_rocksoft crc64 scsi_mod scsi_common [last unloaded: nvme_c
ore]                                                                                                                                                                                                                                  
[Sat Nov  9 01:18:12 2024] CPU: 6 PID: 18378 Comm: kworker/u128:2 Tainted: G          I        6.6.59-0-lts #1-Alpine                                                                                                                 
[Sat Nov  9 01:18:12 2024] Hardware name: HP ProLiant MicroServer Gen8, BIOS J06 07/16/2015                                                                                                                                           
[Sat Nov  9 01:18:12 2024] Workqueue: nvme-reset-wq nvme_reset_work [nvme]                                                                                                                                                            

[Sat Nov  9 01:18:12 2024] object pointer: 0x00000000c5d0979e
[Sat Nov  9 01:18:12 2024] Buffer I/O error on dev nvme0n1, logical block 640, lost async page write
[Sat Nov  9 01:18:12 2024] Buffer I/O error on dev nvme0n1, logical block 641, lost async page write
[Sat Nov  9 01:18:12 2024] Buffer I/O error on dev nvme0n1, logical block 14058, lost async page write
[Sat Nov  9 01:18:12 2024] Buffer I/O error on dev nvme0n1, logical block 14059, lost async page write
[Sat Nov  9 01:18:12 2024] Buffer I/O error on dev nvme0n1, logical block 642, lost async page write
[Sat Nov  9 01:18:12 2024] Buffer I/O error on dev nvme0n1, logical block 643, lost async page write
[Sat Nov  9 01:18:12 2024] Buffer I/O error on dev nvme0n1, logical block 644, lost async page write
[Sat Nov  9 01:18:12 2024] Buffer I/O error on dev nvme0n1, logical block 645, lost async page write
[Sat Nov  9 01:18:12 2024] Buffer I/O error on dev nvme0n1, logical block 646, lost async page write
[Sat Nov  9 01:18:12 2024] Buffer I/O error on dev nvme0n1, logical block 647, lost async page write
[Sat Nov  9 01:18:12 2024] ------------[ cut here ]------------
[Sat Nov  9 01:18:12 2024] list_del corruption. next->prev should be ffff94236a386e88, but was ffff942365538a08. (next=ffff94236a389188)
[Sat Nov  9 01:18:12 2024] WARNING: CPU: 2 PID: 601 at lib/list_debug.c:65 __list_del_entry_valid_or_report+0xe1/0xf0

[Sat Nov  9 01:18:12 2024] BUG: kernel NULL pointer dereference, address: 00000000000000c0                         
[Sat Nov  9 01:18:12 2024] #PF: supervisor read access in kernel mode                                              
[Sat Nov  9 01:18:12 2024] #PF: error_code(0x0000) - not-present page    
[Sat Nov  9 01:18:12 2024] CR2: 00000000000000c0                                                                   
[Sat Nov  9 01:18:12 2024] ---[ end trace 0000000000000000 ]---                                                    
[Sat Nov  9 01:18:12 2024] pstore: backend (erst) writing error (-28)                                                                                                                                                                 
[Sat Nov  9 01:18:12 2024] RIP: 0010:blk_mq_dispatch_rq_list+0xef/0x7d0                                                                                                                                                                                 
santic
() автор топика

Что в данной ситуации можно попробовать?

pci-e-переходник на один nvme диск или на несколько?

Если переходник на несколько дисков, но вы используете один, то играет роль nvme слот который используется на переходнике. У меня, например, 4х слотовый переходник и один диск нужно пихать во второй слот на переходнике, два диска - во 2й и 4й и тд.

Также проверьте что переключили PCI слот в который воткнули PCI переходник в режим PCI RAID. Это делается в BIOS/UEFI. Если этого не сделать, то возможно даже с однослотовым переходником не заработает т.к. ограничение материнской платы из-за «PCI Bifurcation».

Если платформа G8 не поддерживает PCI Bifurcation, то даже с иcправным nvme и переходником может ничего не заработать, тк это аппаратное ограничение материнской платы.

Obezyan
()
Ответ на: комментарий от anonymous

Gen8 это 1155сок, там не было никогда поддержки nvme

https://qna.habr.com/q/1267182

а на некоторых материнках pcie3.0 видяхи не запускались, вот такая там совместимость.

все в спирте

нет

anonymous
()
Ответ на: комментарий от anonymous

а на некоторых материнках pcie3.0 видяхи не запускались, вот такая там совместимость.

ну это хулет-плацкарт.

а по спекам pci gen1-4 все должно быть компатибля

anonymous
()
Ответ на: комментарий от einhander

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

грузят с sd/usb/sata, но вообще nvme через адаптер работает у ребят:

https://flying-geek.blogspot.com/2021/03/hp-microserver-gen-8-nvme-upgrading.html

anonymous
()
Ответ на: комментарий от anonymous

Because the internal optical bay SATA connection is not (to my knowledge) bootable, I have an 8GB SanDisk Cruzer Fit installed in the internal USB connector. That drive is partitioned MBR, with a 500MB /boot volume that’s flagged bootable

У них вообще загрузочная флешка используется, так же как я сказал.

einhander ★★★★★
()
Ответ на: комментарий от anonymous

Gen8 это 1155сок, там не было никогда поддержки nvme

А причем тут сокет к nvme? BIOS не поддерживает, это да.

Этих gen8 столько на вторичке, странно, что либру еще никто не впилил )

anonymous
()
Ответ на: комментарий от anonymous

через адаптер работает у ребят

Везде, где описывают работу NVME через адаптер на древней материнке, почему-то ничего не пишут про Host Memory Buffer (HMB). Сейчас все дешман NVME такие, используют ОЗУ компа под свой буфер.

Если BIOS поддерживает NVME, то он должен активировать/разрешить HMB. А старые материки, получается, не активируют. Линукс позволяет менять размер HMB, но что происходит в случае старого BIOS непонятно. Линукс сам включит HMB, или нужно вручную, или, если BIOS не активировал, то линукс и размер буфера поменять не сможет?

Хотя, формально, NVME SSD обязан уметь работать без HMB, просто медленее, но я только один тест находил. Никому не интерестно тестировать, что там с SSD на старой материнке. ЕМНИП, тут на форуме промелкивало, что безбуферный SSD на китайской Xeon-материнке не заработал, только «правильный» с DRAM.

Может и у ТС проблема из этой области.

mky ★★★★★
()
Ответ на: комментарий от mky

Везде, где описывают работу NVME через адаптер на древней материнке, почему-то ничего не пишут про Host Memory Buffer (HMB). Сейчас все дешман NVME такие, используют ОЗУ компа под свой буфер.

ну он и есть DRAM-less

07:00.0 Non-Volatile memory controller: Sandisk Corp SanDisk Ultra 3D / WD Blue SN570 NVMe SSD (DRAM-less)

только ОЗУ использует не NVME а драйвер контроллера в ядре.

Если BIOS поддерживает NVME, то он должен активировать/разрешить HMB. А старые материки, получается, не активируют. Линукс позволяет менять размер HMB, но что происходит в случае старого BIOS непонятно. Линукс сам включит HMB, или нужно вручную, или, если BIOS не активировал, то линукс и размер буфера поменять не сможет?

Если ядро загрузилось - все остальное его проблемы.

Хотя, формально, NVME SSD обязан уметь работать без HMB, просто медленее, но я только один тест находил. Никому не интерестно тестировать, что там с SSD на старой материнке. ЕМНИП, тут на форуме промелкивало, что безбуферный SSD на китайской Xeon-материнке не заработал, только «правильный» с DRAM.

Буферный, безбуферный - какая ра3ница - ядро общается с контроллером nvme по PCIe

anonymous
()
Ответ на: комментарий от shalom_

Прошивать серверные биосы от HP, я бы самостоятельно не решился бы, хотя слышал, что народ этим развлекается и продаёт такую услугу. В любом случае, флешка там живёт в комфортных условиях, нагрузки минимальные, и прошивка биоса нужна как акт перфекционизма или для того чтобы ставить офтопик.

einhander ★★★★★
()
Ответ на: комментарий от anonymous

только ОЗУ использует не NVME а драйвер контроллера в ядре.

В смысле? Там таблицы отображения блоков флеш-памяти и пр. что решила закешировать прошивка NVME. Драйвер в ядре вобще не в курсе что там. Драйвер может изменить размер этого буфера, проициализировать (занулить) его на всякий случай, отключить HMB при уходе в сон и т.д. Но обмен идёт мимо драйвера/ядра, по DMA.

все остальное его проблемы.

Проблемы кривой прошивки SSD не проблемы ядра.

какая ра3ница - ядро общается с контроллером nvme по PCIe

Ядру то никакой, а если в прошивке NVME бага, и прошивка некорректно работает без HMB, то разница будет.

mky ★★★★★
()
Ответ на: комментарий от shalom_

Ну, дороги можно развести так, что большие МегаГерцы по ним не пойдут.

Вон, на алике продаётся переходник SATA в M.2 SATA + mSATA, с механическим переключаетелем. Некоторые M.2 на нём нормально на SATA-2 и SATA-3 не работают,

mky ★★★★★
()
Ответ на: комментарий от mky

В смысле? Там таблицы отображения блоков флеш-памяти и пр. что решила закешировать прошивка NVME. Драйвер в ядре вобще не в курсе что там. Драйвер может изменить размер этого буфера, проициализировать (занулить) его на всякий случай, отключить HMB при уходе в сон и т.д. Но обмен идёт мимо драйвера/ядра, по DMA.

да, когда и если ядро разрешит ему это сделать после загрузки

Проблемы кривой прошивки SSD не проблемы ядра.

Ядру без разницы - не шмогла - досвидос

Ядру то никакой, а если в прошивке NVME бага, и прошивка некорректно работает без HMB, то разница будет.

Контроллер может там чуть-чуть порулить ДО загрузки ядра, если есть этот пресловутый Option ROM, которому мамкин BIOS передаст управление при ините. После - нет.

anonymous
()
Ответ на: комментарий от anonymous

да, когда и если ядро разрешит ему это сделать после загрузки

Откуда информация, что современный BIOS не инициализирует HMB?

не шмогла - досвидос

Ну, в ядро регулярно добавляют костыли для того или иного накопителя, типа NVME_QUIRK_DELAY_BEFORE_CHK_RDY.

Контроллер может там чуть-чуть порулить

И этого вполне может хватать для того, чтобы эта конкретная модель NMVE SSD не заработала на этой материнке, а на куче остальных работает нормально.

mky ★★★★★
()
Ответ на: комментарий от mky

Откуда информация, что современный BIOS не инициализирует HMB?

а кто такое сказал? может, инициализирует, может нет. Биосов как грязи, опшн ромов еще больше. Даже DMA не везде есть.

Я говорю о том что ПОСЛЕ загрузки ядра, оно может забить на все эти аллокации, а может, посредством драйвера, принять их во внимание и разрешить конкретному PCIe устройству пользоваться ресурсами, в т.ч. DMA.

Ну, в ядро регулярно добавляют костыли для того или иного накопителя, типа NVME_QUIRK_DELAY_BEFORE_CHK_RDY.

Конечно, добавляют. Этож ОСС, железо есть, надо юзать. Правда иногда всплывают темки типа «XXXX жуёт kernel space через DMA».

И этого вполне может хватать для того, чтобы эта конкретная модель NMVE SSD не заработала на этой материнке, а на куче остальных работает нормально.

Это вопрос партикулярный, и имеет отношение только к конкретной связке драйвер-девайс. (Ну и PCIe, конечно не везде такой как в спеках)

anonymous
()
Ответ на: комментарий от linuxuser112

Естественно что модифицированные биосы шьются программатором. Смысл сидеть думать как родной прошивальщик заставить его прошить, а потом всё равно разбирать и прогером шить, да ещё и в непонятках, это ты модуль efi криво воткнул, или софтина накосячила

shalom_ ★★
()