Я только что закончил сборку аппаратного обеспечения, ожидая большой выгоды от нового накопителя NVMe. Моя предыдущая производительность была ниже, чем ожидалось (~ 3 Гб передано), поэтому я заменил материнскую плату / процессор / память / жесткий диск. В то время как производительность вдвое больше, чем это было , это еще половина того, что я получаю на мой 3 - летний MacBook Pro с SATA6 приводом.
- Процессор: i7-5820k 6core
- Mobo: MSI X99A MPOWER
- Память: 32 ГБ
- Диск: Samsung 950 pro NVMe PCIe
Ubuntu (также подтверждено 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"
Вот мои результаты теста:
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
Планировщик настроен на none
:
# cat /sys/block/nvme0n1/queue/scheduler
none
Вот lspci
информация:
# 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
Это имеет несколько сопоставимых ориентиров, это далеко. Когда я тестировал с fio и отключен sync
, это другая история:
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
Вот полные sync
результаты для одной работы и 7 работ:
$ 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%
центровка
Я проверил соответствие с parted
, а также сделал математику на основе 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;
Я чувствую, что у меня что-то неправильно настроено, хотя мои исследования ничего не выявили. Я ожидаю пропускную способность ~ в 4 раза больше моего 3-летнего MacBook Pro с SATA6, и я получаю половину от этого с NVMe. Я добавил, noatime,nodiratime
что дало мне очень небольшое улучшение, но ничего похожего на 4х я ожидаю. Я переразбил / переустановил свежий 15.10 сервер, чтобы убедиться, что у меня ничего не осталось и у меня были те же результаты.
Приведенные fio
выше результаты синхронизации / отсутствия синхронизации свидетельствуют о проблеме?
Так что у меня есть чистый лист и я могу попробовать что угодно. Что я могу попытаться довести до совершенства? Любые ссылки приветствуются.
источник
smartctl --scan
а затемsmartctl --all /dev/xxx
гдеxxx
находится то, что появилось в первой команде ???apt-get install smartmontools
терпит неудачу сgrub-probe: error: cannot find a GRUB drive for /dev/nvme0n1p3. Check your device.map.
. Похоже (основываясь на моих усилиях), чтоupdate-grub
не работает из-заgrub-probe
ошибки.smartctl -i /dev/nvme0n1
возвращает/dev/nvme0n1: Unable to detect device type. Please specify device type with the -d option.
NVMe не отображается вsmartctl -h
качестве типа устройства.uname --kernel-release&&lsb_release --code --short
???4.2.0-16-generic wily
Skylake
процессор для работы этих SSD на полной скорости ...Ответы:
Спасибо за ваш вопрос, он был невероятно полезен для меня.
У меня очень похожий опыт, другое аппаратное обеспечение (я использую твердотельный накопитель Intel NVMe). Но я также использую Ubuntu 16.04. Учитывая ваши доказательства и аналогичный результат, найденный в этой статье, я был убежден, что проблема была в том, как Ubuntu настраивал диски NVMe.
Я был полон решимости решить проблему, не отказываясь полностью от Ubuntu. Но независимо от того, что я сделал, мне не удалось получить скорость выше 2000 МБ / с при тестировании с hdparm точно так, как вы описали.
Итак, я немного покопался и нашел руководство, предоставленное Intel. Я перепробовал все, что они предложили в этом руководстве, и обнаружил, что одна часть была другой. Внизу обсуждается правильное выравнивание разделов диска. Это та часть, которая не совпадает с моей установкой. Мой стартовый блок не делился на 4096 байт. Он использовал размер сектора 512 байт вместо размера сектора 4 КБ.
Конечно же, я отформатировал диск, чтобы начать раздел со значением, кратным 4096, и, наконец, мне удалось разогнать скорость до 2000 МБ / с.
Сейчас он составляет в среднем 2,3 ГБ / с, когда я ожидаю, что он будет немного выше. Я виню в этом тот факт, что при запуске
sudo fdisk -l
диск NVMe по-прежнему отображается с размером физического сектора 512 байт. Я планирую продолжить расследование, но я надеюсь, что это поможет вам!источник
parted
говорит, что он выровнен, на основе размера блока 512, но не делится на 4096. Поэтому я просто хочу подтвердить: размер вашего сектора остается на 512, и единственное, что вы сделали, это запустили раздел в месте, кратном 4096 , верный?Внимание: этот ответ старый. В Linux 4.19 blk_mq является планировщиком по умолчанию . Скорее всего, проблема для вашего SSe PCIe NVMe, работающего с медленными стеблями, возникает в другом месте.
Оригинальный ответ:
Пожалуйста, добавьте
к параметрам загрузки вашего ядра, в противном случае я не думаю, что вы увидите выгоду от увеличения очереди команд NVMe и количества команд в очереди.
Примечание: я знаю, что это для arch, но вы также можете взглянуть на Wiki для получения дополнительной информации о настройке ввода / вывода.
источник
Этой теме исполнился год (октябрь 2016 года). В одном из самых популярных ответов рекомендуется драйвер Intel NVMe, которому два года (2015).
В феврале 2017 года компания Samsung выпустила обновление прошивки, которое использует загрузочный установщик ISO на основе Linux. По этой же ссылке есть драйверы, которые вы можете установить для Windows 7/8/10. Скоро я буду устанавливать и на мой новый Samsung 960 Pro, и на новый ноутбук Dell на базе i7-6700. Наряду с перепрошивкой BIOS и обновлением других драйверов на базе Dell.
Я думаю, что важно пересмотреть эти старые темы и предоставить новым пользователям текущие (по состоянию на 11 октября 2017 года) ссылки, чтобы у них были открыты все опции.
Многие поиски Google возвращаются из-за низкой производительности Samsung 960 Pro под Linux, что вдвое меньше скорости Windows, поэтому я призываю всех искать как можно больше вариантов.
После реализации
scsi_mod.use_blk_mq=1
параметра ядра:Удаление параметра ядра и перезагрузка:
Таким образом, теперь кажется, что
scsi_mod.use_blk_mq=1
система замедляется, а не быстрее. В свое время это могло быть полезным, хотя.источник
Вот некоторая интересная информация: в Windows диск не работает в соответствии с контрольными показателями, пока очистка кэша не отключена. Обычно это не делается напрямую; вместо этого устанавливается драйвер производителя (в данном случае, драйвер Samsung NVMe).
Если вы сравнитесь с драйвером поставщика, а затем отключите очистку кэша в Windows, вы получите те же цифры. Это вряд ли имело бы место, если бы поставщик не игнорировал очистку кеша.
В переводе на Linux-land это означает, что в Windows, чтобы получить большие результаты тестов, которые вы видите во всех обзорах, вам необходимо отключить
fsync
, что означает надежность (отсутствие fsync или, в частности, отсутствие барьера записи, означает, что питание потеря в неподходящее время может сломать всю ФС, в зависимости от реализации - переупорядоченные записи создают «невозможные» ситуации).SSD-накопители Samsung с «центром обработки данных» поставляются с конденсаторами для обеспечения правильного сброса кэшированных данных. Это не относится к их потребителям.
Я только что разработал это из первых принципов, добавив вчера 1MB NVMe к моей новой сборке. Я не особенно счастлив, и я начал контактировать со службой поддержки Samsung, чтобы узнать, что они говорят, но я сомневаюсь, что услышу ответ.
источник
Я пока не могу комментировать, поэтому я должен ответить. :-(
У меня нет сопоставимого диска, но я бы предположил, что значения из hdparm в порядке. Если это так, я бы предположил, что вы просто используете sysbench неоптимальным образом. Попробуйте поэкспериментировать с параметром --num-threads, чтобы увеличить нагрузку на диск. По крайней мере, на моем компьютере разница между 1 потоком (по умолчанию) и 16 потоками составляла примерно 1: 4 на стандартном SATA SSD. Насколько я понимаю, диски NVMe начинают сиять, когда на них загружается больше параллельных задач.
источник
fio
тест с 1 и 7 потоками и ссылку на кучу тестов, используя его в качестве основы.Большинство твердотельных накопителей не имеют четкого изображения, если установлен флаг sync = 1 (D_SYNC). К сожалению, это хорошо известная проблема для журналов Ceph. См. Эту страницу для получения дополнительной информации и списка дисков, которые хорошо работают с включенной синхронизацией:
http://www.sebastien-han.fr/blog/2014/10/10/ceph-how-to-test-if-your-ssd-is-suitable-as-a-journal-device/
источник
Intel 750 NVMe 400GB 261 MB/s (1 job) 884 MB/s (5 jobs)
с большим отрывом с синхронизацией и даже с низкими показателями по сравнению с предыдущим поколениемSamsung XP941 256GB 2.5 MB/s (1 job) 5 MB/s (7 jobs)
. Так что, хотя это может быть хорошо известно, оно все же меньше, чем должно быть.Мой слот M.2 был ограничен 10 Мбит / с. Я использовал адаптер PCIe, чтобы обойти это ограничение: https://www.amazon.com/Lycom-DT-120-M-2-PCIe-to-PCIe-3-0-x4-Adapter-Support-M-2 -PCIe-2280-2260-2242 / др / B00MYCQP38 /
Твоя материнская плата говорит, что она в обоих направлениях - 32 Мбит / с, и, возможно, это правда, но я подумал, что упомяну адаптер, потому что он работает для меня (я почти вдвое увеличил скорость подключения к встроенному разъему M.2). Я думаю, что это было $ 25, и если вы уже потратили достаточно времени на игры, возможно, стоит попробовать.
Я написал о своем опыте в своем обзоре Amazon: https://www.amazon.com/gp/customer-reviews/R21BXILGXW4D9C/ref=cm_cr_arp_d_rvw_ttl?ie=UTF8&ASIN=B01639694M
источник