Acabei de terminar uma construção de hardware esperando um grande ganho com o novo drive NVMe. Meu desempenho anterior foi menor do que o esperado (~ 3GB transferidos), então substituí a placa-mãe / cpu / memory / hdd. Embora o desempenho seja o dobro do que era , ainda é metade do que recebo no meu macbook pro de 3 anos com uma unidade SATA6.
- CPU: i7-5820k 6core
- Mobo: MSI X99A MPOWER
- Memória: 32GB
- Unidade: Samsung 950 pro NVMe PCIe
Ubuntu (também confirmado com 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"
Aqui estão os resultados dos meus testes:
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
O planejador está definido como none
:
# cat /sys/block/nvme0n1/queue/scheduler
none
Aqui está a lspci
informação:
# 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
Isso tem alguns benchmarks comparáveis . Quando testei com fio e desabilitei sync
, é uma história 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
Aqui estão os sync
resultados completos para um trabalho e 7 empregos:
$ 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%
Alinhamento
Verifiquei o alinhamento com parted
, bem como a matemática, com base em 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;
Sinto que tenho algo fundamentalmente definido incorretamente, embora minha pesquisa não tenha revelado nada. Estou esperando uma taxa de transferência ~ 4x do meu macbook pro de 3 anos com SATA6, e estou recebendo 1/2 com o NVMe. Eu adicionei o noatime,nodiratime
que me deu uma melhora muito pequena, mas nada como o 4x que eu estou esperando. Eu re-particionei / reinstalei o servidor 15.10 fresco apenas para ter certeza de que não havia nada remanescente e obtive os mesmos resultados.
Meus fio
resultados acima de sincronização / sem sincronização são indicativos de um problema?
Então, eu tenho uma lousa limpa e posso tentar qualquer coisa. O que posso tentar alcançar meu desempenho ao mesmo nível? Quaisquer referências são bem-vindas.
fonte
smartctl --scan
e, em seguida, umsmartctl --all /dev/xxx
ondexxx
está o que apareceu no primeiro comando ???apt-get install smartmontools
falha comgrub-probe: error: cannot find a GRUB drive for /dev/nvme0n1p3. Check your device.map.
. Parece (com base nos meus esforços) queupdate-grub
não funciona bem devido a umgrub-probe
erro.smartctl -i /dev/nvme0n1
retorna O/dev/nvme0n1: Unable to detect device type. Please specify device type with the -d option.
NVMe não aparece nosmartctl -h
tipo de dispositivo.uname --kernel-release&&lsb_release --code --short
???4.2.0-16-generic wily
Skylake
processador para executar aqueles de SSD em velocidade máxima ...Respostas:
Obrigado pela sua pergunta, foi incrivelmente útil para mim.
Tenho uma experiência muito semelhante, uma configuração de hardware diferente (estou usando um SSD Intel NVMe). Mas também estou executando o Ubuntu 16.04. Dadas as suas evidências e um resultado semelhante encontrado neste artigo, eu estava convencido de que o problema estava em como o Ubuntu estava configurando as unidades NVMe.
Eu estava determinado a resolver o problema sem desistir completamente do Ubuntu. Mas não importa o que fiz, não consegui obter velocidades acima de 2000 MB / s ao testar com o hdparm exatamente como você descreveu.
Então, eu fiz algumas escavações e encontrei um guia fornecido pela Intel. Tentei tudo o que eles sugeriram neste guia e descobri que uma parte era diferente. Perto da parte inferior, discute o alinhamento correto das partições da unidade. Esta é a única parte que não correspondeu à minha instalação. Meu bloco inicial não era divisível por 4096 bytes. Ele estava usando um tamanho de setor de 512 bytes em vez de um tamanho de setor de 4k.
Com certeza, formatei o disco para iniciar a partição com um valor divisível por 4096 e, finalmente, consegui quebrar velocidades de 2000 MB / s.
No momento, a média é de 2,3 GB / s quando espero que seja um pouco maior. Eu culpo isso pelo fato de que, quando eu executo,
sudo fdisk -l
a unidade NVMe ainda é mostrada com um tamanho de setor físico de 512 bytes. Pretendo continuar investigando, mas espero que isso ajude você!fonte
parted
diz que está alinhado, com base no tamanho do bloco 512, mas não é divisível em 4096. Então, só quero confirmar: o tamanho do seu setor permanece em 512 e a única coisa que você fez foi iniciar a partição em um local divisível em 4096 correto?Cuidado: Esta resposta é antiga. No Linux 4.19, blk_mq é o planejador padrão . É mais provável que o problema do SSD PCIe NVMe executando hastes lentas se formem em outro lugar.
Resposta original:
Por favor adicione
aos parâmetros de inicialização do seu kernel, caso contrário, não acho que você verá o benefício do aumento da fila de comandos e do comando por fila do NVMe.
Nota: Eu sei que é para arch, mas você também pode dar uma olhada no Wiki para obter mais informações sobre o ajuste de E / S.
fonte
Este tópico tem um ano (outubro de 2016). Uma das respostas mais altas aprovadas recomenda um driver Intel NVMe com dois anos (2015).
Em fevereiro de 2017, a Samsung lançou uma Atualização de Firmware que usa um instalador ISO de inicialização baseado em Linux. No mesmo link, existem drivers que você pode instalar no Windows 7/8/10. Em breve instalarei o meu novo Samsung 960 Pro e o novo laptop i7-6700 da Dell. Junto com o BIOS piscando e a atualização de outros drivers baseados na Dell.
Eu acho que é importante revisar esses tópicos antigos e fornecer aos novos usuários os links atuais (a partir de 11 de outubro de 2017) para que eles tenham todas as opções em aberto.
Existem muitas pesquisas no Google voltadas para o desempenho lento do Samsung 960 Pro no Linux, sendo metade da velocidade do Windows, então eu incentivo todos a procurar o maior número possível de opções.
Após implementar o
scsi_mod.use_blk_mq=1
parâmetro do kernel:Removendo o parâmetro do kernel e reiniciando:
Portanto, parece que agora o
scsi_mod.use_blk_mq=1
sistema fica mais lento e não mais rápido. Ao mesmo tempo, pode ter sido benéfico.fonte
Aqui estão algumas informações interessantes: no Windows, a unidade não funciona de acordo com os benchmarks de revisão até que a liberação do cache seja desativada. Geralmente isso não é feito diretamente; em vez disso, o driver do fornecedor (nesse caso, o driver Samsung NVMe) está instalado.
Se você comparar o driver do fornecedor e desabilitar a liberação de cache no Windows, obterá os mesmos números. Isso seria improvável se o fornecedor não estivesse ignorando a liberação do cache.
Traduzido para Linux-land, isso significa que, no Windows, para obter os grandes números de referência que você vê em todas as análises, é necessário desativar
fsync
, com todos os meios para confiabilidade (sem fsync, ou especificamente, sem barreira de gravação, significa que o poder perda no momento errado pode quebrar todo o FS, dependendo da implementação - gravações reordenadas criam situações "impossíveis").Os SSDs de "data center" da Samsung vêm com capacitores para garantir que os dados em cache sejam descarregados corretamente. Este não é o caso de suas unidades de consumo.
Acabei de resolver isso a partir dos primeiros princípios, depois de adicionar um NVMe de 1 TB à minha nova compilação ontem. Não estou particularmente feliz e iniciei contato com o suporte da Samsung para ver o que eles dizem - mas duvido que seja informado.
fonte
Ainda não posso comentar, então tenho que responder. :-(
Não tenho uma unidade comparável, mas acho que os valores do hdparm estão bons. Nesse caso, eu diria que você acabou de usar o sysbench de maneira subótima. Tente experimentar o parâmetro --num-threads para gerar mais carga no inversor. Pelo menos no meu computador, a diferença entre 1 thread (o padrão) e 16 threads era de 1: 4 em um SSD SATA padrão. Meu entendimento é que as unidades NVMe começam a brilhar, pois as tarefas mais paralelas as sobrecarregam.
fonte
fio
teste com 1 e 7 threads e uma referência a vários benchmarks usando-o como base.A maioria dos SSDs cai de cara no flag se sync = 1 (D_SYNC). Infelizmente, esse é um problema conhecido dos periódicos Ceph. Consulte esta página para obter mais informações e uma lista de unidades com bom desempenho com a sincronização ativada:
http://www.sebastien-han.fr/blog/2014/10/10/ceph-how-to-test-if-your-ssd-is-suitable-as-a-journal-device/
fonte
Intel 750 NVMe 400GB 261 MB/s (1 job) 884 MB/s (5 jobs)
por uma grande margem com sincronização e até mesmo com a geração anteriorSamsung XP941 256GB 2.5 MB/s (1 job) 5 MB/s (7 jobs)
. Portanto, embora possa ser bem conhecido, ainda é menor do que deveria ser.Meu slot M.2 foi limitado a 10 Mbps. Usei um adaptador PCIe para contornar essa limitação: 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 /
Sua placa - mãe diz que são 32 Mbps completos nos dois sentidos e talvez isso seja verdade, mas pensei em mencionar o adaptador porque funcionou para mim (eu consegui o dobro da velocidade de conexão no slot M.2 integrado). Acho que foram US $ 25 e se você já passou tempo suficiente brincando, isso pode valer a pena tentar.
Eu escrevi sobre minha experiência na minha revisão da Amazon: https://www.amazon.com/gp/customer-reviews/R21BXILGXW4D9C/ref=cm_cr_arp_d_rvw_ttl?ie=UTF8&ASIN=B01639694M
fonte