Всем привет !
Постоянные читатели моего блога наверняка могли заметить, что я могу быть довольно консервативен в плане апгрейдов компьютерного железа, а сменить систему почти 10-и летней давности меня смогла сподвигнуть только сдохшая видеокарта.
Аналогичный подход я практиковал и к накопителям, используя долгое время классические жёсткие диски (с блинами и двигателем). SSD, конечно, очень радовали характеристиками, но у меня были сомнения насчёт их надёжности в силу ограниченности ресурса перезаписи.
Однако собрав множество отзывов и статистики, в том числе на работе, и посмотрев на гарантийные сроки, я решил два года назад купить небольшой, но шустрый SSD чисто под систему и некоторые профили тяжелых приложений.
Прошло два года, и опыт использования SSD оказался очень и очень позитивным.
Впрочем, накопитель M6e использует внутренний SATA-3 интерфейс, виден как /dev/sdd, да и его скоростные показатели хоть и позитивны — 770 Мб/сек чтение + 96K IOPS, но всё же ещё не самое «вау» из того, что есть, хотя для комфортного использования операционки более чем хватает.
Мне же захотелось устранить одно из последних узких мест в домашнем компе — скорость чтения/записи на диск для домашнего каталога. Ну, чтобы тестовые стенды с тяжёлыми виртуальными машинами и всякие красивые игрушки запускались существенно быстрее, да и меньше выжигали мои нервные клетки долгим запуском.
Но поскольку длинные PCI-E порты у меня кончились, я решил заюзать M.2 порт, раз уж он у меня появился после апгрейда платформы.
После чтения мануалов и средней длительности поединка с собственной жабой нашел такой девайс, как PLEXTOR PX-1TM8PeG.
Видится он уже как NVMe, а не как SATA. Поскольку у плекстора есть свой контроллер, и в отличие от M6e, тут нет эмуляции SATA, то схема устройств на системе будет такая:
/dev/nvme0 - контроллер NVMe /dev/nvme0n1 - SSD-накопитель на NVMe /dev/nvme0n1p1 - 1-й раздел на SSD-накопителе
Тут /dev/nvme0n1 — обычное блочное устройство, разделы создаём на нём с помощью привычных утилит fdisk, gparted или подобных.
Перенос данных прост, как мычание — создаём раздел, подключаем, копируем все нужные каталоги, правим fstab, ребутимся, прогоняем restorecon -R /home.
smartctl
Работает также, как и с обычными дисками, показывает местный SSD-шный SMART
# smartctl -a /dev/nvme0 smartctl 6.5 2016-05-07 r4318 [x86_64-linux-4.13.11-100.fc25.x86_64] (local build) Copyright (C) 2002-16, Bruce Allen, Christian Franke, www.smartmontools.org === START OF INFORMATION SECTION === Model Number: PLEXTOR PX-1TM8PeG Serial Number: P0xxx Firmware Version: 1.04 PCI Vendor ID: 0x14a4 PCI Vendor Subsystem ID: 0x1b4b IEEE OUI Identifier: 0x002303 Total NVM Capacity: 1 024 209 543 168 [1,02 TB] Unallocated NVM Capacity: 0 Controller ID: 1 Number of Namespaces: 1 Namespace 1 Size/Capacity: 1 024 209 543 168 [1,02 TB] Namespace 1 Utilization: 0 Namespace 1 Formatted LBA Size: 512 Local Time is: Sat Nov 11 23:25:28 2017 MSK Firmware Updates (0x14): 2 Slots, no Reset required Optional Admin Commands (0x001f): Security Format Frmw_DL NS_Mngmt *Other* Optional NVM Commands (0x001f): Comp Wr_Unc DS_Mngmt Wr_Zero Sav/Sel_Feat Maximum Data Transfer Size: 32 Pages Warning Comp. Temp. Threshold: 85 Celsius Critical Comp. Temp. Threshold: 95 Celsius ...
Все смарт-атрибуты цитировать смысла нет.
hdparm
А вот эта тулза с NVMe не работает, это не ATA!
Писать будет что-то такое:
# hdparm /dev/nvme0 /dev/nvme0: HDIO_DRIVE_CMD(identify) failed: Inappropriate ioctl for device BLKROGET failed: Inappropriate ioctl for device BLKRAGET failed: Inappropriate ioctl for device BLKGETSIZE failed: Inappropriate ioctl for device # hdparm /dev/nvme0n1 /dev/nvme0n1: HDIO_DRIVE_CMD(identify) failed: Inappropriate ioctl for device readonly = 0 (off) readahead = 256 (on) geometry = 976762/64/32, sectors = 2000409264, start = 0
Так что оставим hdparm для дисков c интерфейсами IDE/SATA/SAS/SCSI.
nvme-cli
Для мониторинга и управления NVMe-устройствами в федоре есть пакет nvme-cli. Ставим его. ВАЖНО! Многие команды там опасны и потенциально деструктивны, внимательно читаем маны и хелпы ( nvme —help ) !
Список наших NVMe:
# nvme list Node SN Model Namespace Usage Format FW Rev ---- -- ----- --------- ----- ------ -- --- /dev/nvme0n1 P0xxx PLEXTOR PX-1TM8PeG 1 0,00B/1,02TB 512B+0B 1.04
Смарт-лог читаем и понятен:
# nvme smart-log /dev/nvme0 Smart Log for NVME device:nvme0 namespace-id:ffffffff critical_warning : 0 temperature : 44 C available_spare : 100% available_spare_threshold : 0% percentage_used : 0% data_units_read : 136 692 data_units_written : 382 341 host_read_commands : 766 300 host_write_commands : 1 557 905 controller_busy_time : 61 power_cycles : 1 power_on_hours : 1 unsafe_shutdowns : 1 media_errors : 0 num_err_log_entries : 0 Warning Temperature Time : 0 Critical Composite Temperature Time : 0 Temperature Sensor 1 : 44 C Temperature Sensor 2 : 0 C Temperature Sensor 3 : 0 C Temperature Sensor 4 : 0 C Temperature Sensor 5 : 0 C Temperature Sensor 6 : 0 C Temperature Sensor 7 : 0 C Temperature Sensor 8 : 0 C
Лог ошибок пуст:
# nvme error-log /dev/nvme0 Error Log Entries for device:nvme0 entries:64 ................. Entry[ 0] ................. error_count : 0 sqid : 0 cmdid : 0 status_field : 0(SUCCESS) parm_err_loc : 0 lba : 0 nsid : 0 vs : 0 .................
В принципе, если за 5 лет гарантии что и навернётся — бэкапы наше всё.
Бенч.
Заявленные 240K IOPS и 2500 Мб/сек на чтение + 1400 Мб/сек на запись в пике — это ОЧЕНЬ зверство, а из устройств, способных принять такие потоки данных, у меня мало чего есть, да и настолько жирных файлов немного. Тут надо понимать, что маркетологи любят указывать максимальные значения, достижимые лишь в каких-то особых условиях на особо хитрых тестах, а конкретно на вашей машине и с вашей задачей результаты могут отличаться, иногда весьма сильно от максимума. Вот и проверим.
1). Копирование в tmpfs миднайт-коммандером:
2). Первое копирование крупного файла с помощью dd в /dev/null/, чтобы не завязываться на работу механизмов tmpfs, но без параметра bs (размер блока). Для этого в одной вкладке приготовимся запустить вот такую команду:
$ dd if=./MicroWin7.vmdk of=/dev/null
А в соседней вкладке быстро выполним в процессе этого копирования
$ ps axfu | grep ‘ dd ‘
$ kill -USR1
Это позволит получить от dd данные о текущей скорости. Вуаля:
$ dd if=./MicroWin7.vmdk of=/dev/null
30219922+0 записей получено
30219921+0 записей отправлено
15472599552 байт (15 GB, 14 GiB) скопирован, 10,6856 s, 1,4 GB/s
51956736+0 записей получено
51956736+0 записей отправлено
26601848832 байт (27 GB, 25 GiB) скопирован, 18,3505 s, 1,4 GB/s
3). Попробуем другой файл, но укажем зверский размер блока:
$ dd if=./Fedora\ 26\ x64-disk001.vmdk of=/dev/null bs=4G
0+4 записей получено
0+4 записей отправлено
7416250368 байт (7,4 GB, 6,9 GiB) скопирован, 4,77266 s, 1,6 GB/s
4). Повторим ранее читавшийся файл + укажем опцию читать крупным блоком, выполним пару раз:
$ dd if=./MicroWin7.vmdk of=/dev/null bs=4G
0+11 записей получено
0+11 записей отправлено
23622275072 байт (24 GB, 22 GiB) скопирован, 9,64067 s, 2,5 GB/s
$ dd if=./MicroWin7.vmdk of=/dev/null bs=4G
0+13 записей получено
0+13 записей отправлено
26601848832 байт (27 GB, 25 GiB) скопирован, 3,9037 s, 6,8 GB/s
Кэш он такой, да.
5). Ну и финальный тест — одновременный запуск 18 виртуалок. На обычном диске — это выстрел в голову и ощутимо тупящая несколько минут система, насилующая жесткий диск со страшным скрежетом, пока все виртуалки не стартанут =)
На NVMe SSD это плавный одновременный старт всех ВМ и уже через 10-15 секунд почти все они будут полностью загруженные, и это с учётом POST-процедур самого виртуалбокса и таймаутов! Очень позитивно. ВМ у меня не самые злые в плане аппетитов на оперативку, там много всяких мелких линуксов, в 10 Гб оперативки влезло.
Гамы тоже стартовать начинают очень бодренько, IOPS-ы рулят.
Не знаю, как насчёт 2500, но 1400-1600 при чтении есть стабильно в любых вариантах. 2500 видимо достигаются только в каких-то хитрых условиях, при использовании оптимизированных драйверов (у меня девайс запустился на встроенных модулях ядра nvme_core / nvme из 4.13, возможно, в текущем ядре этот модуль недостаточно оптимизирован и это пофиксят в будущем) или при использовании особой маркетингово-синтетической магии. Буду рад, если кто разъяснит.
А вот на запись никаких странностей нет — файл из tmpfs пишется примерно с той скоростью, какая указана в характеристиках.
Всем приятных апгрейдов.
[…] NVMe-SSD дома, ня […]