Acabo de terminar una compilación de hardware esperando una gran ganancia del nuevo disco NVMe. Mi rendimiento anterior fue menor de lo esperado (~ 3 gb transferidos), por lo que he reemplazado la placa base / cpu / memory / hdd. Si bien el rendimiento es el doble de lo que era , sigue siendo la mitad de lo que obtengo en mi Macbook Pro de 3 años con una unidad SATA6.
- CPU: i7-5820k 6core
- Mobo: MSI X99A MPOWER
- Memoria: 32 GB
- Unidad: Samsung 950 pro NVMe PCIe
Ubuntu (también confirmado con 16.04.1 LTS
):
Release: 15.10
Codename: wily
4.2.0-16-generic
$ sudo blkid
[sudo] password for kross:
/dev/nvme0n1p4: UUID="2997749f-1895-4581-abd3-6ccac79d4575" TYPE="swap"
/dev/nvme0n1p1: LABEL="SYSTEM" UUID="C221-7CA5" TYPE="vfat"
/dev/nvme0n1p3: UUID="c7dc0813-3d18-421c-9c91-25ce21892b9d" TYPE="ext4"
Aquí están los resultados de mi prueba:
sysbench --test=fileio --file-total-size=128G prepare
sysbench --test=fileio --file-total-size=128G --file-test-mode=rndrw --max-time=300 --max-requests=0 run
sysbench --test=fileio --file-total-size=128G cleanup
Operations performed: 228000 Read, 152000 Write, 486274 Other = 866274 Total
Read 3.479Gb Written 2.3193Gb Total transferred 5.7983Gb (19.791Mb/sec)
1266.65 Requests/sec executed
Test execution summary:
total time: 300.0037s
total number of events: 380000
total time taken by event execution: 23.6549
per-request statistics:
min: 0.01ms
avg: 0.06ms
max: 4.29ms
approx. 95 percentile: 0.13ms
Threads fairness:
events (avg/stddev): 380000.0000/0.00
execution time (avg/stddev): 23.6549/0.00
El planificador está configurado para none
:
# cat /sys/block/nvme0n1/queue/scheduler
none
Aquí está la lspci
información:
# lspci -vv -s 02:00.0
02:00.0 Non-Volatile memory controller: Samsung Electronics Co Ltd Device a802 (rev 01) (prog-if 02 [NVM Express])
Subsystem: Samsung Electronics Co Ltd Device a801
Physical Slot: 2-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: 32 bytes
Interrupt: pin A routed to IRQ 45
Region 0: Memory at fb610000 (64-bit, non-prefetchable) [size=16K]
Region 2: I/O ports at e000 [size=256]
Expansion ROM at fb600000 [disabled] [size=64K]
Capabilities: [40] 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: [50] MSI: Enable- Count=1/8 Maskable- 64bit+
Address: 0000000000000000 Data: 0000
Capabilities: [70] Express (v2) Endpoint, MSI 00
DevCap: MaxPayload 128 bytes, PhantFunc 0, Latency L0s unlimited, L1 unlimited
ExtTag- AttnBtn- AttnInd- PwrInd- RBE+ FLReset+
DevCtl: Report errors: Correctable- Non-Fatal- Fatal- Unsupported-
RlxdOrd- ExtTag- PhantFunc- AuxPwr- NoSnoop+ FLReset-
MaxPayload 128 bytes, MaxReadReq 512 bytes
DevSta: CorrErr+ UncorrErr- FatalErr- UnsuppReq+ AuxPwr+ TransPend-
LnkCap: Port #0, Speed 8GT/s, Width x4, ASPM L1, Exit Latency L0s <4us, L1 <64us
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: Not Supported, 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: -6dB, EqualizationComplete+, EqualizationPhase1+
EqualizationPhase2+, EqualizationPhase3+, LinkEqualizationRequest-
Capabilities: [b0] MSI-X: Enable+ Count=9 Masked-
Vector table: BAR=0 offset=00003000
PBA: BAR=0 offset=00002000
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: [148 v1] Device Serial Number 00-00-00-00-00-00-00-00
Capabilities: [158 v1] Power Budgeting <?>
Capabilities: [168 v1] #19
Capabilities: [188 v1] Latency Tolerance Reporting
Max snoop latency: 0ns
Max no snoop latency: 0ns
Capabilities: [190 v1] L1 PM Substates
L1SubCap: PCI-PM_L1.2+ PCI-PM_L1.1+ ASPM_L1.2+ ASPM_L1.1+ L1_PM_Substates+
PortCommonModeRestoreTime=10us PortTPowerOnTime=10us
Kernel driver in use: nvme
hdparm
:
$ sudo hdparm -tT --direct /dev/nvme0n1
/dev/nvme0n1:
Timing O_DIRECT cached reads: 2328 MB in 2.00 seconds = 1163.98 MB/sec
Timing O_DIRECT disk reads: 5250 MB in 3.00 seconds = 1749.28 MB/sec
hdparm -v
:
sudo hdparm -v /dev/nvme0n1
/dev/nvme0n1:
SG_IO: questionable sense data, results may be incorrect
multcount = 0 (off)
readonly = 0 (off)
readahead = 256 (on)
geometry = 488386/64/32, sectors = 1000215216, start = 0
fstab
UUID=453cf71b-38ca-49a7-90ba-1aaa858f4806 / ext4 noatime,nodiratime,errors=remount-ro 0 1
# /boot/efi was on /dev/sda1 during installation
#UUID=C221-7CA5 /boot/efi vfat defaults 0 1
# swap was on /dev/sda4 during installation
UUID=8f716653-e696-44b1-8510-28a1c53f0e8d none swap sw 0 0
UUID=C221-7CA5 /boot/efi vfat defaults 0 1
fio
Esto tiene algunos puntos de referencia comparables , está muy lejos. Cuando probé con fio y deshabilitado sync
, es una historia diferente:
sync=1
1 job - write: io=145712KB, bw=2428.5KB/s, iops=607, runt= 60002msec
7 jobs - write: io=245888KB, bw=4097.9KB/s, iops=1024, runt= 60005msec
sync=0
1 job - write: io=8157.9MB, bw=139225KB/s, iops=34806, runt= 60001msec
7 jobs - write: io=32668MB, bw=557496KB/s, iops=139373, runt= 60004msec
Aquí están los sync
resultados completos para un trabajo y 7 trabajos:
$ sudo fio --filename=/dev/nvme0n1 --direct=1 --sync=1 --rw=write --bs=4k --numjobs=1 --iodepth=1 --runtime=60 --time_based --group_reporting --name=journal-test
journal-test: (g=0): rw=write, bs=4K-4K/4K-4K/4K-4K, ioengine=sync, iodepth=1
fio-2.1.11
Starting 1 process
Jobs: 1 (f=1): [W(1)] [100.0% done] [0KB/2368KB/0KB /s] [0/592/0 iops] [eta 00m:00s]
journal-test: (groupid=0, jobs=1): err= 0: pid=18009: Wed Nov 18 18:14:03 2015
write: io=145712KB, bw=2428.5KB/s, iops=607, runt= 60002msec
clat (usec): min=1442, max=12836, avg=1643.09, stdev=546.22
lat (usec): min=1442, max=12836, avg=1643.67, stdev=546.23
clat percentiles (usec):
| 1.00th=[ 1480], 5.00th=[ 1496], 10.00th=[ 1512], 20.00th=[ 1528],
| 30.00th=[ 1576], 40.00th=[ 1592], 50.00th=[ 1608], 60.00th=[ 1608],
| 70.00th=[ 1608], 80.00th=[ 1624], 90.00th=[ 1640], 95.00th=[ 1672],
| 99.00th=[ 2192], 99.50th=[ 6944], 99.90th=[ 7328], 99.95th=[ 7328],
| 99.99th=[ 7520]
bw (KB /s): min= 2272, max= 2528, per=100.00%, avg=2430.76, stdev=61.45
lat (msec) : 2=98.44%, 4=0.58%, 10=0.98%, 20=0.01%
cpu : usr=0.39%, sys=3.11%, ctx=109285, majf=0, minf=8
IO depths : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0%
submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
issued : total=r=0/w=36428/d=0, short=r=0/w=0/d=0
latency : target=0, window=0, percentile=100.00%, depth=1
Run status group 0 (all jobs):
WRITE: io=145712KB, aggrb=2428KB/s, minb=2428KB/s, maxb=2428KB/s, mint=60002msec, maxt=60002msec
Disk stats (read/write):
nvme0n1: ios=69/72775, merge=0/0, ticks=0/57772, in_queue=57744, util=96.25%
$ sudo fio --filename=/dev/nvme0n1 --direct=1 --sync=1 --rw=write --bs=4k --numjobs=7 --iodepth=1 --runtime=60 --time_based --group_reporting --name=journal-test
journal-test: (g=0): rw=write, bs=4K-4K/4K-4K/4K-4K, ioengine=sync, iodepth=1
...
fio-2.1.11
Starting 7 processes
Jobs: 6 (f=6): [W(2),_(1),W(4)] [50.4% done] [0KB/4164KB/0KB /s] [0/1041/0 iops] [eta 01m:00s]
journal-test: (groupid=0, jobs=7): err= 0: pid=18025: Wed Nov 18 18:15:10 2015
write: io=245888KB, bw=4097.9KB/s, iops=1024, runt= 60005msec
clat (usec): min=0, max=107499, avg=6828.48, stdev=3056.21
lat (usec): min=0, max=107499, avg=6829.10, stdev=3056.16
clat percentiles (usec):
| 1.00th=[ 0], 5.00th=[ 2992], 10.00th=[ 4512], 20.00th=[ 4704],
| 30.00th=[ 5088], 40.00th=[ 6176], 50.00th=[ 6304], 60.00th=[ 7520],
| 70.00th=[ 7776], 80.00th=[ 9024], 90.00th=[10048], 95.00th=[12480],
| 99.00th=[15936], 99.50th=[18048], 99.90th=[22400], 99.95th=[23936],
| 99.99th=[27008]
bw (KB /s): min= 495, max= 675, per=14.29%, avg=585.60, stdev=28.07
lat (usec) : 2=4.41%
lat (msec) : 2=0.57%, 4=4.54%, 10=80.32%, 20=9.92%, 50=0.24%
lat (msec) : 250=0.01%
cpu : usr=0.14%, sys=0.72%, ctx=173735, majf=0, minf=63
IO depths : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0%
submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
issued : total=r=0/w=61472/d=0, short=r=0/w=0/d=0
latency : target=0, window=0, percentile=100.00%, depth=1
Run status group 0 (all jobs):
WRITE: io=245888KB, aggrb=4097KB/s, minb=4097KB/s, maxb=4097KB/s, mint=60005msec, maxt=60005msec
Disk stats (read/write):
nvme0n1: ios=21/122801, merge=0/0, ticks=0/414660, in_queue=414736, util=99.90%
Alineación
He comprobado la alineación con parted
, así como las matemáticas basadas en http://www.intel.com/content/dam/www/public/us/en/documents/technology-briefs/ssd-partition-alignment-tech -brief.pdf
kross@camacho:~$ sudo parted
GNU Parted 3.2
Using /dev/nvme0n1
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) unit s
(parted) print all
Model: Unknown (unknown)
Disk /dev/nvme0n1: 1000215216s
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 2048s 206847s 204800s fat32 EFI system partition boot, esp
2 206848s 486957055s 486750208s ntfs msftdata
3 486957056s 487878655s 921600s ntfs hidden, diag
4 590608384s 966787071s 376178688s ext4
5 966787072s 1000214527s 33427456s linux-swap(v1)
kross@camacho:~$ sudo parted /dev/nvme0n1
GNU Parted 3.2
Using /dev/nvme0n1
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) align-check opt 1
1 aligned
(parted) align-check opt 2
2 aligned
(parted) align-check opt 3
3 aligned
(parted) align-check opt 4
4 aligned
(parted) align-check opt 5
5 aligned
TLDR;
Siento que tengo algo fundamentalmente configurado incorrectamente, aunque mi investigación no ha encontrado nada. Espero un rendimiento ~ 4 veces mayor que mi Macbook Pro de 3 años con SATA6, y obtengo la mitad con NVMe. Agregué lo noatime,nodiratime
que me dio una mejora muy pequeña, pero nada como el 4x que esperaba. He particionado / reinstalado el nuevo servidor 15.10 solo para asegurarme de que no me quedaba nada y que obtuve los mismos resultados.
¿Mis fio
resultados anteriores de sincronización / no sincronización son indicativos de un problema?
Así que tengo una pizarra limpia y puedo probar cualquier cosa. ¿Qué puedo intentar para mejorar mi rendimiento? Cualquier referencia es bienvenida.
fuente
smartctl --scan
y luegosmartctl --all /dev/xxx
dóndexxx
está lo que surgió en el primer comando?apt-get install smartmontools
falla congrub-probe: error: cannot find a GRUB drive for /dev/nvme0n1p3. Check your device.map.
. Parece (basado en mis esfuerzos) queupdate-grub
no funciona bien debido a ungrub-probe
error.smartctl -i /dev/nvme0n1
devuelve/dev/nvme0n1: Unable to detect device type. Please specify device type with the -d option.
NVMe no aparece en elsmartctl -h
como un tipo de dispositivo.uname --kernel-release&&lsb_release --code --short
???4.2.0-16-generic wily
Skylake
procesador para ejecutar esos SSD a toda velocidad ...Respuestas:
Gracias por su pregunta, ha sido increíblemente útil para mí.
Tengo una experiencia muy similar, configuración de hardware diferente (estoy usando un SSD Intel NVMe). Pero también estoy ejecutando Ubuntu 16.04. Dada su evidencia y un resultado similar encontrado en este artículo , estaba convencido de que el problema era con cómo Ubuntu estaba configurando las unidades NVMe.
Estaba decidido a resolver el problema sin renunciar por completo a Ubuntu. Pero no importa lo que hice, no pude obtener velocidades superiores a 2000 MB / seg cuando probé con hdparm exactamente como lo describiste.
Entonces, investigué un poco y encontré una guía proporcionada por Intel. Intenté todo lo que sugirieron en esta guía y descubrí que una parte era diferente. Cerca de la parte inferior, analiza la alineación correcta de las particiones de la unidad. Esta es la parte que no coincide con mi instalación. Mi bloque inicial no era divisible por 4096 bytes. Estaba usando un tamaño de sector de 512 bytes en lugar de un tamaño de sector de 4k.
Efectivamente, formateé el disco para iniciar la partición en un valor divisible por 4096 y FINALMENTE pude romper velocidades de 2000 MB / s.
En este momento está promediando 2.3 GB / s cuando espero que sea un poco más alto. Culpo esto al hecho de que cuando ejecuto
sudo fdisk -l
la unidad NVMe todavía se muestra con un tamaño de sector físico de 512 bytes. ¡Planeo continuar investigando pero espero que esto te ayude!fuente
parted
dice que está alineado, según el tamaño del bloque 512, pero no es divisible por 4096. Por lo tanto, solo quiero confirmar: el tamaño de su sector permanece en 512 y lo único que hizo fue iniciar la partición en una ubicación divisible por 4096 ¿correcto?Precaución: esta respuesta es antigua. A partir de Linux 4.19, blk_mq es el planificador predeterminado . Es muy probable que el problema para su SSD PCIe NVMe que ejecuta tallos lentos se forme en otro lugar.
Respuesta original:
Por favor añadir
a los parámetros de arranque de su núcleo, de lo contrario no creo que vea el beneficio de la mayor cola de comandos de NVMe y el comando por cola.
Nota: Sé que es para arch, pero es posible que también desee echar un vistazo a Wiki para obtener más información sobre cómo ajustar E / S.
fuente
Este hilo tiene un año (octubre de 2016). Una de las respuestas más votadas recomienda un controlador Intel NVMe que tenga dos años (2015).
En febrero de 2017, Samsung lanzó una actualización de firmware que utiliza un instalador ISO de arranque basado en Linux. En el mismo enlace hay controladores que puede instalar para Windows 7/8/10. Pronto instalaré tanto en mi nuevo Samsung 960 Pro como en el nuevo portátil i7-6700 basado en Dell. Junto con la actualización del BIOS y la actualización de otros controladores basados en Dell.
Creo que es importante volver a visitar estos viejos hilos y proporcionar a los nuevos usuarios enlaces actuales (al 11 de octubre de 2017) para que tengan abiertas todas las opciones.
Hay muchas búsquedas en Google que muestran que el rendimiento lento de Samsung 960 Pro en Linux es la mitad de la velocidad de Windows, por lo que animo a todos a buscar tantas opciones como sea posible.
Después de implementar el
scsi_mod.use_blk_mq=1
parámetro del kernel:Eliminando el parámetro del núcleo y reiniciando:
Por lo tanto, parece que ahora
scsi_mod.use_blk_mq=1
hace que el sistema sea más lento, no más rápido. En un momento puede haber sido beneficioso sin embargo.fuente
Aquí hay información interesante: en Windows, la unidad no funciona de acuerdo con los puntos de referencia de revisión hasta que se desactiva el vaciado de caché. Por lo general, esto no se hace directamente; en su lugar, se instala el controlador del proveedor (en este caso, el controlador Samsung NVMe).
Si compara con el controlador del proveedor y luego deshabilita el vaciado de caché en Windows, obtendrá los mismos números. Este sería un caso improbable si el proveedor no ignorara el vaciado de caché.
Traducido a Linux-land, eso significa que en Windows, para obtener los grandes números de referencia que ve en todas las revisiones, debe deshabilitar
fsync
, con todo lo que significa confiabilidad (sin fsync, o específicamente, sin barrera de escritura, eso significa poder la pérdida en el momento equivocado podría romper todo el FS, dependiendo de la implementación: las escrituras reordenadas crean situaciones "imposibles").Los SSD de "centro de datos" de Samsung vienen con condensadores para garantizar que los datos en caché se vacíen correctamente. Este no es el caso con sus unidades de consumo.
Acabo de resolver esto desde los primeros principios, ayer agregué un NVMe de 1TB a mi nueva versión. No estoy particularmente contento, y he iniciado contacto con el soporte de Samsung para ver lo que dicen, pero dudo que tenga noticias.
fuente
Todavía no puedo comentar, así que tengo que responder. :-(
No tengo una unidad comparable, pero supongo que los valores de hdparm están bien. Si es así, supongo que solo usa sysbench de una manera subóptima. Intente experimentar con el parámetro --num-threads para generar más carga en la unidad. Al menos en mi computadora, la diferencia entre 1 subproceso (el predeterminado) y 16 subprocesos era de aproximadamente 1: 4 en un SSD SATA estándar. Tengo entendido que las unidades NVMe comienzan a brillar a medida que las tareas más paralelas les ponen carga.
fuente
fio
prueba con 1 y 7 hilos, y una referencia a un montón de puntos de referencia que lo usan como base.La mayoría de los SSD caen de bruces si el indicador sync = 1 (D_SYNC). Desafortunadamente, este es un problema bien conocido para las revistas Ceph. Consulte esta página para obtener más información y una lista de unidades que funcionan bien con la sincronización habilitada:
http://www.sebastien-han.fr/blog/2014/10/10/ceph-how-to-test-if-your-ssd-is-suitable-as-a-journal-device/
fuente
Intel 750 NVMe 400GB 261 MB/s (1 job) 884 MB/s (5 jobs)
por un gran margen con la sincronización, e incluso un rendimiento inferior al de la generación anteriorSamsung XP941 256GB 2.5 MB/s (1 job) 5 MB/s (7 jobs)
. Entonces, aunque puede ser bien conocido, todavía es menos de lo que debería ser.Mi ranura M.2 tenía un límite de 10 Mbps. Utilicé un adaptador PCIe para sortear esta limitación: https://www.amazon.com/Lycom-DT-120-M-2-PCIe-to-PCIe-3-0-x4-Adapter-Support-M-2 -PCIe-2280-2260-2242 / dp / B00MYCQP38 /
Su placa base dice que es de 32Mbps completos en ambos sentidos y tal vez sea cierto, pero pensé en mencionar el adaptador porque funcionó para mí (obtuve aproximadamente el doble de velocidad de conexión en la ranura M.2 incorporada). Creo que fueron $ 25 y si ya ha pasado suficiente tiempo jugando, podría valer la pena intentarlo.
Escribí sobre mi experiencia en mi revisión de Amazon: https://www.amazon.com/gp/customer-reviews/R21BXILGXW4D9C/ref=cm_cr_arp_d_rvw_ttl?ie=UTF8&ASIN=B01639694M
fuente