|
Bog BOS: hardware: SSD |
Последнее изменение файла: 2022.03.17
Скопировано с www.bog.pp.ru: 2022.03.18
SSD накопитель представляет собой NAND флэш память в корпусе форм фактора 2.5" или 1.8" с интерфейсом SATA. Позволяет использование в качестве "почти обычного" жёсткого диска. Для ускорения операций может использоваться оперативная память под кеш и параллельный доступ к нескольким микросхемам флэш.
Предварительно необходимо ознакомиться с материалами о флэш.
Контроллер SSD обеспечивает равномерное число стираний физических блоков независимо от шаблона записи для чего поддерживается таблица преобразования логических адресов в физические. Таблица преобразования также хранится в страницах флэша. Если есть свободные физические блоки, то контроллер записывает в них, а предыдущие физические блоки освобождаются. Скоростные SSD резервируют много места (от 7% до 25%) для гарантии наличия свободных физических блоков. Если свободных физических блоков нет (например, устройство тестировалось с помощью badblocks ;), то контроллеру приходится считывать старое содержимое блока в буфер, изменять содержимое буфера, стирать блок и записывать буфер обратно (write amplification). На неудачных SSD коэффициент "умножения записи" может достигать 20-40. Если запись приходится на границу двух блоков, количество операций удваивается. Для ускорения записи используется инвалидация прежнего содержимо страницы и алгоритмы сборки мусора (ищутся блоки, содержащие мало полезных данных, остатки полезных данных переписываются в свежий блок, а этот блок стирается, производится при возможности в фоновом режиме). Это также позволяет обеспечить равномерное использование блоков (количество стираний). Чтобы не задерживать контроллер при объёмной записи, "запачканные" блоки не стираются сразу, а только помечаются как неиспользуемые. Реальная очистка и "возвращение в строй" осуществляются при сборке мусора (выбираются блоки, содержащие наибольшее число неиспользуемых страниц, данные с них сливаются вместе, а блоки стираются и добавляются в список свободных). Эффект падения производительности при длительной нагрузке на запись. Со временем фрагментация усиливается и скорость случайной записи на SSD падает (X25-E 64GB - 25%, X25-M G1 160GB - 35%, X25-M G2 160GB - 0%, OCZ Summit 256GB - 70%, предыдущее поколение - в разы). Существуют контроллеры, размер логической страницы которых равен размеру блока стирания, а не записи - требуется меньшая производительность процессора контроллера и меньший размер таблиц, обеспечивается большая скорость последовательного чтения и записи, но получается очень маленькая скорость произвольной посекторной записи (80 KБ/сек!), подходят для цифровых фотоаппаратов.
Контроллер имитирует поведение обычного жёсткого диска (Flash Translation Layer G2, FTL, Flash Abstraction Layer), т.е. блочного устройства с независимыми секторами размером 512 байт, обеспечивая интерфейс ATA (SATA). Однако поведение SSD с их блоками записи в 4КБ и блоками стирания в 512КБ плохо согласуется с привычными алгоритмами работы с дисковыми устройствами. Например, "неправильное" выравнивание раздела замедляет скорость записи в 3 раза.
Команда ATA8 TRIM (SCSI ACS-2 PUNCH, SCSI DISCARD) позволяет ОС сообщить устройству о более неиспользуемых блоках данных, что позволяет контроллеру SSD значительно ускорить запись и перезапись данных, а также сборку мусора и избежать замедления записи при заполнении устройства. В SATA 3.0 и ранее команда TRIM не может быть поставлена в очередь, при выдаче команды контроллер диска останавливает приём команд, выполняет все команды из очереди, затем команду TRIM, возобновляет приём команд - не выдавайте TRIM часто! Исправлено в SATA 3.1. Аналогичные команды SCSI UNMAP (умеет вставать в очередь) и CF ERASE. Не помогает при изменении файла. Как быть с STP (SAS туннель) и RAID контроллерами? LSI MEGARAID не поддерживает. Поддержка появилась в виде заплаток для блочного уровня в ядре 2.6.28 (discard requests), идея оказалась неудачной (точнее говоря, команда TRIM в конечной версии стандарта не может быть поставлена в очередь) и всё переделывается, libata для 2.6.30 (нет?), EXT4 (2.6.33, "mount -o discard"), btrfs (2.6.33, "mount -o ssd,discard"). Версия hdparm 9.17 (июль 2009) имеет экспериментальную поддержку "ручного запуска" команды TRIM ("hdparm --please-destroy-my-drive --trim-sector-ranges адрес:1") и скрипт wiper.sh (ищет свободные блоки в файловой системе ext2/3/4 и посылает информацию о них в устройство командами TRIM), а также сообщается о наличии поддержки TRIM в устройстве
hdparm -I /dev/sda | grep TRIM
* Data Set Management TRIM supported (limit 4 blocks)
* Deterministic read ZEROs after TRIM
Узнать о поддержке discard (TRIM, PUNCH, UNMAP) блочными устройствами можно с помощью "lsblk -D".
Утилита fstrim (указывается активная точка монтирования) ищет неиспользуемые блоки и посылает устройству (через весь стек блочных устройств) сообщение об этом. Опции (размеры в KiB, MiB, GiB, TiB, PiB, KB, MB, GB, PB:
При создании файловых систем (mkfs.ext4 -E discard), swap (discard), логических томов (issue_discards в /etc/lvm/lvm.conf), dm-crypt (discard в /etc/crypttab), mdraid (CentOS 6, ядро 3.7) также обеспечивается возможность TRIM.
Выравнивание начала каждого раздела на границу блока стирания: либо изобразить устройство с 56 секторами на дорожку и 224 головками("fdisk -H 224 -S 56" для 128KB блоков стирания), либо перейти к адресации по секторам (fdisk -u, но количество дорожек и головок всё равно изменить в режиме эксперта), либо отказаться от деления устройства на разделы. Чтобы первый раздел тоже был выровнен необходимо перейти в режим "эксперта". Для выравнивания необходимо точно знать размеры страницы записи и блока стирания.
Выравнивание содержимого LVM
pvcreate --metadatasize 250k /dev/раздел # выравнивание на границу 256KB pvs /dev/раздел -o+pe_start # проверка
Выравнивание файловой системы (размер блока файловой системы - 4KB, размер блока стирания - 256KB)
mke2fs -t ext4 -E stripe-width=64 /dev/имя-логического-тома
Журнал автоматически выравнивается на границу 128KB, начиная с e2fsprogs 1.41.4.
Нужен ли журнал или его можно отключить? Например, отключение журнала уменьшает запись на 12% при сборке ядра (ext4).
Можно ли использовать noatime (chattr +A)? Например, noatime уменьшает запись на 12% при сборке ядра с использованием журнала и на 2% без использования журнала. relatime занимает промежуточное положение.
Отключить планировщик ввода/вывода (elevator=noop)?
В случае перманентной деградации устройство можно привести в чувство (сбросить загаженную таблицу отображения адресов) командой "ATA SECURITY ERASE" (только для "обычного" SATA контроллера!):
hdparm -I /dev/имя-устройства # убедиться, что устройство "Security: not frozen" # если устройство "frozen", то попробовать передёрнуть кабель данных или кабель питания и данных hdparm --user-master u --security-set-pass временный-пароль /dev/имя-устройства # установить пароль # без очистки устройство будет заблокировано при следующем включении! hdparm -I /dev/имя-устройства # убедиться, что пароль задействован hdparm --user-master u --security-erase[-enhanced] временный-пароль /dev/имя-устройства # очистить устройство hdparm -I /dev/имя-устройства # убедиться, что пароль удалён
Более простой (и менее эффективный) способ очистки для устройств с очисткой мусора - записать все блоки последовательно.
Желательно оставлять 20% свободного места (т.е. таких страниц, в которые никогда не было записи после очистки) для облегчения работы алгоритма сборки мусора (Intel X25-E имеет 25% резервных блоков).
SSD может писать во флеш и при чтении, например Kingstom SA400 (вариант Phison)
173 MaxAvgErase_Ct ------ 100 100 000 - 77 (Average 38) 233 Flash_Writes_GiB -O--CK 100 100 000 - 9649 241 Lifetime_Writes_GiB -O--CK 100 100 000 - 985 242 Lifetime_Reads_GiB -O--CK 100 100 000 - 889 244 Average_Erase_Count ------ 100 100 000 - 38 245 Max_Erase_Count ------ 100 100 000 - 77 246 Total_Erase_Count ------ 100 100 000 - 599040 246 Total_Erase_Count ------ 100 100 000 - 599040 0x01 0x018 6 2067766243 --- Logical Sectors Written 0x01 0x028 6 1864439361 --- Logical Sectors Read после badblocks -sv 173 MaxAvgErase_Ct ------ 100 100 000 - 86 (Average 39) 233 Flash_Writes_GiB -O--CK 100 100 000 - 9983 241 Lifetime_Writes_GiB -O--CK 100 100 000 - 985 242 Lifetime_Reads_GiB -O--CK 100 100 000 - 2655 244 Average_Erase_Count ------ 100 100 000 - 39 245 Max_Erase_Count ------ 100 100 000 - 86 246 Total_Erase_Count ------ 100 100 000 - 620000 246 Total_Erase_Count ------ 100 100 000 - 620000 0x01 0x018 6 2067766243 --- Logical Sectors Written 0x01 0x028 6 5569274469 --- Logical Sectors Read
При этом устройство делает паузы при чтении на несколько секунд. Несильно загаженное устройство лечится:
s=0; while [ $s -lt 937703088 ] ; do echo $s:8; s=$[$s+8]; done | hdparm --trim-sector-ranges-stdin --please-destroy-my-drive /dev/sdb badblocks -b 4096 -c 1024 -t 0 -svw /dev/sdb
Intel X25-E, SSD, 2.5", 5V, SATA-II (SATA 2.6 с NCQ и SMART, ATA/ATAPI-7), 50 нм, SLC - SSDSA2SH064G1GC. Объём (в десятичных гигабайтах, немножко занимается под обслуживание) - 32 или 64 GB. Известен также как Kingston SNE125-S2/64GB. Обещана возможность записать 1 или 2 ПБ. На устройстве резервируется 25% блоков.
bonnie++ 1.03 ------Sequential Output------ --Sequential Input- --Random-
-Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
Machine Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP /sec %CP
HPDL365G5 59500M 125907 13 47616 6 126507 10 4571 10 # контроллер P400i умеет только SATA-1
HPDL365G5 59500M 63221 6 42727 5 125256 10 5283 12 # отключено кеширование в контроллере
HPDL365G5 59500M 131417 13 55793 7 127701 9 5190 12 # включено кеширование SSD
HPDL365G5 59500M 133391 13 51901 6 127396 9 4057 9 # включено кеширование SSD и контроллера
Intel SR2625 59500M 304880 29 89721 7 288803 15 +++++ +++ # 48GB памяти
Intel SR2625 100000M 574696 75 208508 27 534533 29 +++++ +++ # RAID-0 из 4 устройств, 48GB памяти
numademo 50g memset # при наличии 48GB памяти, swap на Intel X25-E
memory with no policy memset Avg 75.83 MB/s
numademo 34g memset # при наличии 32GB памяти, swap на RAID-1 из SAS 10000 rpm
memory with no policy memset Avg 4.09 MB/s
Intel X25-M (второе поколение, G2), SSD, 2.5", 5V, SATA-II (SATA 2.6 с NCQ и SMART, ATA/ATAPI-7), MLC, 34 нм, SSDSA2MH080G2xx (серебристые). Объём (в десятичных гигабайтах, немножко занимается под обслуживание) - 80GB, 160GB (10 каналов, 32MB SRAM) и 320GB (всё ещё ожидается). Кеш данных - SRAM 256KB. Первая прошивка оказалась с дефектом (блокировка при попытке защиты паролем). Вторая версия прошивки (HA02, с реализацией команды TRIM) - тоже. Известен также как Kingston SNM125-S2B/80GB. Обещана возможность записывать 20Gb в день в течении 5 лет (в реальности, зависит от свободного места: при полностью заполненном диске, можно суммарно записать 14,5 ТБ (29 TБ) данных для 80 ГБ (160 ГБ) модели; при наличии 10% свободного места на диске, можно суммарно записать 34 ТБ (68 TБ), а при 20% уже можно суммарно записать 52 ТБ (104 TБ) данных). На устройстве аппаратно резервируется 6.9% блоков. После длительного периода (1 час) записи на максимальной нагрузке скорость падает до 10MB в секунду.
bonnie++ 1.03 ------Sequential Output------ --Sequential Input- --Random-
-Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
Machine Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP /sec %CP
HPDL365G5 74500M 58453 12 43944 6 135129 9 4476 9 # включено кеширование SSD и контроллера
Intel SR2625 74500M 67055 8 55261 6 287102 15 +++++ +++
Intel SR2625 100000M 309171 39 174966 15 453858 16 +++++ +++ # RAID-0 из 6 устройств
Intel SR2625 100000M 349611 50 196895 26 654527 44 15193 40
pvcreate -M2 --dataalignment 1024 /dev/sd{abcd}
lvcreate --extents 100%FREE --stripes 4 --name globaltemp --stripesize 1024
mkfs.ext4 -O ^has_journal -v -m 0 -b 4096 -E stride=256,stripe-width=1024
mount -o nodiratime,data=writeback,nobh,nobarrier,stripe=1024,delalloc,commit=60,\
max_batch_time=30000,min_batch_time=1000
Intel SR2625 100000M 56432 27 40092 6 95776 8 6252 16 # по NFS
Обновление прошивки 2.6 от 30 ноября 2009 (2CV102HD для M и 045C8850 для E, в виде загрузочного ISO) действует только для "обычных" SATA контроллеров в режиме AHCI или Legacy (предпочтительно).
Intel утверждает, что коэффициент "умножения записи" на типичной нагрузке - не более 1.1 (для SSD предыдущего поколения - 10), а разброс числа стираний между блоками не превышает 10% и лишь 4% блоков имеют большее число стираний (для SSD предыдущего поколения - 5). Intel SSD Toolbox 1.2.0 для Microsoft Windows XP/Vista/7 включает Optimizer (выдаёт TRIM для блоков удалённых файлов), средства доступа к SMART:
Samsung SSD 840 PRO 512GB (MZ-7PD512BW, 64x64Gb), обзор, SATA 6Gbps, формат 2.5" (SFF), толщина 7мм, прошивка DXM05B0Q (в DXM02B0Q была ошибка безопасного стирания - устройство умирало совсем), MLC 21нм, 8 каналов Toggle DDR 2.0 (400 Mbps), потребление - от 0.3 Вт до 3.5 Вт от 5 В, поддержка TRIM (использовать обязательно, иначе скорость падает до 30 МБ/сек), буфер 512 МБ LPDDR2-1066 (защиты от потери питания нет), запас всего 7% (имеется ПО для настройки). Около 10000 IOPS в однопоточном чтении (75000 IOPS при глубине 32), 30000 IOPS в однопоточной записи (90000 IOPS при глубине 32). В эксперименте выдержал запись 600 TB. Тестирование под серверной нагрузкой (скорость случайной записи упала до 8000 IOPS через 6 часов).
Обнаружились проблемы при подключении к Intel C600 SCU (SAS1) - под тяжёлой нагрузкой (моделируется "badblocks -b 4096 -c 1024", несколько дней) у диска сносит крышу (начинает рапортовать о своём объёме в 600 PB и т.п.), приходится перезагружаться (SSD Intel DC S3500 проходит без проблем). Подключение через LSI MegaRAID 9266-8i выявило отсутствие TRIM у оного и невозможность работы без TRIM.
Серия Samsung PM893 поставляется в формате SFF (2.5") с интерфейсом SATA-3.3 6Gbps, толщина 7мм, ресурс записи - 1.3 DWPD, Samsung V6 (128 Layer) TLC V-NAND, защита от потери данных при отключении питания с помощью конденсатора (PLP), потребление - до 3.2 Вт, имеются версии на 240GB, 480GB, 960GB, 1.92TB, 3.84TB и 7.68TB, обещанные характеристики (методика неизвестна): последовательное чтение/запись - до 530/560 MB/s, случайное чтение/запись - до 98k/31k IOPS.
Серия Samsung PM897 поставляется в формате SFF (2.5") с интерфейсом SATA-3.3 6Gbps, толщина 7мм, прошивка JXTE004Q, ресурс записи - 3 DWPD, Samsung V6 (128 Layer) TLC V-NAND, защита от потери данных при отключении питания с помощью конденсатора (PLP), потребление - до 3.4 Вт, имеются версии на 480GB, 960GB (MZ7L3960HBLT), 1.92TB (MZ7L31T9HBNA-00A07) и 3.84TB, обещанные характеристики (методика неизвестна): последовательное чтение/запись - до 470/550 MB/s, случайное чтение/запись - до 97k/32k IOPS.
Samsung стесняется выпуска этих устройств (на сайте только поиском можно найти двустраничный brief) и обзоров не обнаружено. (кстати, на сайте Samsung поиском находится двустраничный brief).
Объяснение показателей SMART:
Intel DC S3500 800 GB (SSDSC2BB800G401), типоразмер SFF 2,5", толщина 7.5 мм, SATA-3, MLC, ресурс записи не менее 140 TB по стандарту JESD218 (изменено на 450 ТБ? 0.3 записи всего объёма в день), поддерживает команду TRIM, защита от потери данных при отключении питания с помощью конденсатора, с самотестированием и мониторингом SMART, возможность питания только от шины 12 В, устойчивость производительности - 90%, полная задержка записи - типичная 65 мкс, не более 2 мс для 99.9% при QD=1, не более 10мс для 99.9% при QD=32, 5 Вт, гарантия 5 лет. Имеются версии на 80, 120, 160, 240, 300, 480, 600 и 800 GB (впоследствии расширены моделями на 1200GB и 1600GB с другим контроллером), а также в формате 1.8" глубиной 5 мм (маленькие модели - медленные). При разработке Intel сделала упор на обеспечение стабильности производительности при непрерывной большой нагрузке. Содержит 8-канальный контроллер PC29AS21CA0 и 1ГБ DDR3-1600 SDRAM (хранит линейную таблицу трансляции адресов), ECC?. Модель на 240ГБ содержит 52ГБ резерва, 480ГБ - 48ГБ резерва. Без TRIM работает плохо. Стабильность производительности позволяет собирать их в RAID.
Независимое тестирование по методике SNIA Solid State Storage Performance Test Specification (SSS PTS) и JESD218A (JESD219A): 75000 IOPS при чтении блоками 4К очередь 16, 11000 IOPS при записи блоками 4К очередь 2 (резервирование места не помогает, средняя задержка - 2.8 мс при очереди 32).
Был взят на замену несправившемуся Samsung SSD 840 PRO (временные файлы рассчётной фермы). При увеличении (изменении характера?) нагрузки появились проблемы с NFS. При этом индикатор истираемости предсказывает смерть SSD менее чем за год (гарантируется 450ТБ записи). Не надо загружать очередь выше 32 - это всё же SATA!
Объяснение показателей SMART:
Intel DC S3510 - замена контроллера на всей линейке (15200 IOPS при записи блоками 4К), переход на 16nm 128Gbit MLC NAND.
Intel DC S3520 (от 150ГБ до 1600ГБ) - переход на 3D MLC 16nm (?), чуть меньше линейная скорость, 17000 IOPS при записи блоками 4К. Ресурс записи - 1 запись всего объёма в день, полная задержка записи - типичная 42 мкс.
Серия Intel DC S3700 (от 100 до 800 ГБ, например, SSDSC2BA800G301) использует флеш MLC-HET (High Endurance Technology) с большим размером ячеек и более длительным циклом стирания, 200ГБ резерва для модели 800ГБ, что позволило увеличить лимит истирания до 14.6 ПБ и скорость записи до 35000 IOPS при записи блоками 4К очередь 2, средняя задержка - 1 мс при очереди 32.
Серия Intel DC S3610 (от 200 до 1600 ГБ, например, SSDSC2BX800G401) использует флеш MLC-HET (High Endurance Technology) обещает 84000 IOPS при чтении блоками 4К и 27000 IOPS при записи блоками 4К очередь 32, 3 перезаписи в день (DWPD) - 10.7 ПБ (JESD218), типоразмер SFF 2,5", толщина 7.5 мм, SATA-3, MLC, UBER - 1 сектор на 10^17 бит, поддерживает команду TRIM, защита от потери данных при отключении питания с помощью конденсатора, с самотестированием и мониторингом SMART, возможность питания только от шины 5В или 5В и 12В, устойчивость производительности - 90%, полная задержка записи - типичная 65 мкс, не более 0.5 мс для 99.9% при QD=1, не более 10мс для 99.9% при QD=32, время хранения данных без питания - 3 месяца при 40°C 12 Вт, гарантия 5 лет, температурный интервал: 0 - 70°C.
Серия Intel DC S3710 (от 200 до 1200 ГБ, например, SSDSC2BA800G401) использует флеш MLC-HET (High Endurance Technology) обещает 85000 IOPS при чтении блоками 4К и 45000 IOPS при записи блоками 4К очередь 32, 10 перезаписей в день (DWPD) - 24 ПТ (JESD218, JESD219), типоразмер SFF 2,5", толщина 7.5 мм, SATA-3, MLC, UBER - 1 сектор на 10^17 бит, поддерживает команду TRIM, защита от потери данных при отключении питания с помощью конденсатора, с самотестированием и мониторингом SMART, возможность питания только от шины 5В или 5В и 12В, устойчивость производительности - 90%, полная задержка записи - типичная 65 мкс, не более 0.2 мс для 99.9% при QD=1, не более 5мс для 99.9% при QD=32, время хранения данных без питания - 3 месяца при 40°C 12 Вт, гарантия 5 лет, температурный интервал: 0 - 70°C.
Серия Intel DC S3100: TLC, ресурс - 580 TBW (для модули в 1 ТБ), 3900 IOPS при записи блоками 4К очередь 32, скорость линейной записи - 114 МБ/сек (явно прибедняются или нет?!).
Серия Intel DC S4500: 3D TLC второго поколения, 30000 IOPS при записи блоками 4К (21000 для модели 480ГБ), SFF. От 240 ГБ до 7680 ГБ (вес и прочее модели 7680 ГБ подлежит определению). Задержка произвольной записи - 52 мкс (стабильность 90% для модели 480ГБ, прочих от 72% до 90%). Защита от отключения питания есть. Последовательная запись - 330 МБ/сек для модели 480 ГБ. Ресурс записи - 1 запись всего объёма в день по JEDEC при 5-летнем сроке (900 TB для модели 480ГБ). Качество обслуживания записи 99.9% при глубине очереди 32 - 7.46 мс для модели 480ГБ, при глубине 1 - 0.36 мс.
Серия Intel DC S4600: 3D TLC второго поколения, 60000 IOPS при записи блоками 4К для модели 480 ГБ (65000 для модели 960ГБ), SFF. От 240 ГБ до 1920 ГБ (например, SSDSC2KG480G701). Задержка произвольной записи - 37 мкс (стабильность 92% для модели 480ГБ, прочих от 82% до 92%). Защита от отключения питания есть. Последовательная запись - 480 МБ/сек для модели 480 ГБ (490 МБ/сек для модели 960 ГБ). Ресурс записи - 3 записи всего объёма в день по JEDEC при 5-летнем сроке (2950 ТБ для модели 480ГБ). Качество обслуживания записи 99.9% при глубине очереди 32 - 1.17 мс для модели 480ГБ, при глубине 1 - 0.2 мс.
Серия Intel D3-S4610: 3D TLC 64 слоя, SFF. 44500 IOPS при записи блоками 4К для модели 480 ГБ (51000 для модели 960ГБ), при этом тесты показывают увеличение скорости записи относительно S4600 (видимо в пределах ёмкости кеширования, плохой тест). От 240 ГБ до 3840 ГБ (например, SSDSC2KG960G801). Задержка произвольной записи - 37 мкс. Защита от отключения питания есть. Потребление уменьшено относительно S4600. Последовательная запись - 510 МБ/сек для модели 480 ГБ и 960 ГБ. Ресурс записи - 3 записи всего объёма в день по JEDEC при 5-летнем сроке (2950 ТБ для модели 480ГБ).
Серия Intel D3-S4510, 3D TLC, SFF или M.2. 36000 IOPS при записи блоками 4К для модели 960ГБ. От 240 ГБ до 3840 ГБ (например, SSDSC2KB960G801). Последовательная запись - 510 МБ/сек для модели 480 ГБ и 960 ГБ. Задержка произвольной записи - 37 мкс. Защита от отключения питания есть. Ресурс записи - 2 записи всего объёма в день по JEDEC при 5-летнем сроке (3.4PB ТБ для модели 960ГБ).
Обзоры
SATA Express (Serial ATA Express, SATAe, SATA 3.2, 2013) - физический интерфейс, совмещающий SATA и PCI Express. Разъём физически совместим с кабелем SATA 3.0 (2 порта), но дополнительно имеет 2 линии PCIe 2.0 (1ГБ/сек) или PCIe 3.0, питания нет, толщина 7 мм. Реализован в Intel Z97/H97 (2014) и C610.
На логическом уровне SATAe совместим с AHCI (через SATA порт), AHCI (через PCIe, AHCI контроллер на устройстве) и NVM Express (через PCIe, NVMe контроллер на устройстве).
M.2 (NGFF, Next Generation Form Factor) - миниатюрная реализация интерфейсов, предусмотренных SATA Express (2 или 4 линии PCI Express 3.0 и 1 порт SATA 3.0), дополненных USB 2.0 или 3.0, I2C, PCM, SDIO, UART, Future Memory Interface и питание (?) для устройств хранения (и не только) в виде внутренней платы. Всего 67 контактов (ножевой разъём); до 60 циклов вставки; ширина устройства - 12, 16, 22 и 30 мм; длина - 16, 26, 30, 38, 42, 60, 80 и 110 мм. Типичные устройства имеют ширину 22 мм. Детали толщиной до 1.5 мм монтируются на 1 или 2 стороны. Изготовитель может безнаказанно опустить реализацию интерфейса в хосте или устройстве (задаётся ключами). Для совместимости необходимо учитывать все параметры.
Разъём SFF-8639 (aka U.2, 68 контактов, поддерживает горячую замену) обеспечивает в сумме до 6 высокоскоростных линий (1 SATA, 2 SAS, 4 PCIe 3.0 - 4ГБ/сек, линии синхронизации и сброса PCIe, SMBus) для сочетания с SFF-8482 (SAS 6Gbps), SFF-8630 (SAS Multilink, только механический стандарт, интерфейс не расписан, только расположение групп CS1, CS2, CS3 и нумерация контактов), SFF-8680 (SAS 12Gbps, интерфейс не расписан, только расположение групп CS1, CS2 и CS3). Сам SFF-8639 стандартизирует механическую часть и нумерацию контактов - E1-E25 для PCIe (а где официальное описание интерфейсов? EIA-966? Enterprise SSD Form Factor (SSD_Form_Factor_Version1_a.pdf)?). Имеются версии SFF-8637 (12 Gbps на линию) и SFF-8638 (24 Gbps на линию). Линия синхронизации обязательна (в SATAe опциональна). Форм-фактор 2.5" - 15x70x100.45 мм, до 25 Вт.
Модификация SFF-TA-1001 для разъёма SFF-8639 (aka U.3, 68 контактов) - физически совпадает с U.2, но линии PCIe передвинуты для совмещения с линиями SAS. Варианты подключения: NVMe 1x4 и 2x2 и 1x2 и 1x1, SATA, SAS x1 и x2 и 4. Облегчает создание универсальных (SAS/SATA/NVMe) объединительных плат - единый кабель для сигналов SAS и NVMe (PCIe), совмещённые линии для SAS и PCIe в разъёме (кстати, импеданс PCIe - 85 Ом, а SAS - 100 Ом). Хост-адаптер определяет тип устройства с помощью UBM (Universal Backplane Management, SFF-TA-1005) через 3 ранее не использовавшиеся линии SFF-8639 (P10 PRSNT#, P4 IfDet#, E6 IfDet2#). Для опознания количества используемых портов SAS и PCIe (1, 2 или 4) используются 2 ранее не использовавшиеся линии SFF-8639 (S15, E25). UBM также позволяет идентифицировать слот устройства (например, для замены) и демонстрировать состояние устройства, управлять питанием, осуществлять сброс устройства, управлять тактовым сигналом (clock, внешний или встроенный в сигнал). Накопитель U.3 можно подключить к объединительной плате U.2, но накопитель U.2 нельзя подключить к объединительной плате U.3.
OCuLink (SFF-8611, PCIe 3.0 x4, 42 контакта, SGPIO?) - разъём для прямого подключения кабелем 1 SSD. Имеются варианты прямого и углового соединения. Имеется вариант для x8 (бывает ли в природе?).
NVM Express (NVMe, Non-Volatile Memory Host Controller Interface Specification) - логический интерфейс доступа к SSD (1.0 в 2011, 1.1 в 2012). В отличие от AHCI c её 1 очередью в 32 команды NVMe может иметь до 64K очередей в 64К команд, вдвое меньшие задержки (не нужно 4 чтения регистров по 2000 циклов каждое), 2048 MSI-X прерываний (параллельная обработка), не нужна блокировка синхронизации для выдачи команды. Для достижения 1 миллиона IOPS требуется 10 ядер в режиме AHCI и 3.5 ядра Intel в режиме NVMe (3.3 GHz, RHEL 6). NVMe SSD реализуются в формате PCIe карт расширения или SFF дисков с разъёмом SFF-8639 (4 линии PCIe) или M.2 или SATA Express. Обновление и переключение прошивки без остановки работы (несколько слотов).
NVMe 1.4: журнал событий (Persistent Event Log), многомаршрутный доступ к пространству имён (Asymmetric Namespace Access), использование памяти хоста под буфер (Host Memory Buffer).
Драйвера имеются для MS Windows 7, RHEL 6.5, Linux ядра 3.3 (nvme, multiqueue в 3.13), Oracle Solaris 11.2, UEFI 2.3.1. Модуль nvme имеет параметры:
Базовые понятия:
Пакет nvme-cli (/usr/share/doc/nvme-cli-1.8.1, отдельная документация для man по каждой команде) содержит утилиту nvme ("nvme команда устройство параметры") с командами
Smart Log for NVME device:nvme0n1 namespace-id:ffffffff critical_warning : 0 temperature : 13 C available_spare : 100% available_spare_threshold : 10% percentage_used : 0% data_units_read : 4,065,976 data_units_written : 0 host_read_commands : 16,503,661 host_write_commands : 0 controller_busy_time : 0 power_cycles : 2 power_on_hours : 6 unsafe_shutdowns : 0 media_errors : 0 num_err_log_entries : 0 Warning Temperature Time : 0 Critical Composite Temperature Time : 0 Temperature Sensor 1 : 0 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 или Thermal Management T1 Trans Count : 0 Thermal Management T2 Trans Count : 0 Thermal Management T1 Total Time : 0 Thermal Management T2 Total Time : 0
Additional Smart Log for NVME device:nvme0n1 namespace-id:ffffffff key normalized raw program_fail_count : 100% 0 erase_fail_count : 100% 0 wear_leveling : 100% min: 0, max: 1, avg: 0 end_to_end_error_detection_count: 100% 0 crc_error_count : 100% 0 timed_workload_media_wear : 100% 0.000% timed_workload_host_reads : 100% 100% timed_workload_timer : 100% 380 min thermal_throttle_status : 100% 0%, cnt: 0 retry_buffer_overflow_count : 100% 0 pll_lock_loss_count : 100% 0 nand_bytes_written : 100% sectors: 685 host_bytes_written : 100% sectors: 0
Сборка версии 0.9: make.
Дополнения для LightNVM lnvm (LightNVM), memblaze, wdc, huawei, netapp, toshiba (KIOXIA на него не отзывается), micron, seagate и Intel (intel).
Расширения Intel (1.8.1):
Intel Temperature Statistics -------------------------------- Current temperature : 12 Last critical overtemp flag : 0 Life critical overtemp flag : 0 Highest temperature : 28 Lowest temperature : 12 Max operating temperature : 85 Min operating temperature : 0 Estimated offset : 0
Расширения wdc (nvme wdc id-ctrl /dev/nvme0n1):
Интересные данные в log:
Интересные данные в intel smart-log-add:
Серия Intel DC P3700 (17 полных записей в день (65ПБ) по JESD218/JESD219, 175K iops на запись 4KB при очереди 4x32 на весь объём), поставляется в форматах PCIe (AIC, add-in-card, HHHL, до +55°C) и SFF-8639 (до +30°C, горячая замена, 15 мм), имеют объём от 400 до 2000GB (резерв - 25%), достигают 450K iops на чтение, PCIe 3 x4, NVMe 1.0 (трансляция команд SCSI, включая UNMAP), процессор 400 МГц и 18 каналов и DDR3-1600 (1.25ГБ для модели 800ГБ, 2.5ГБ для модели 2000ГБ), типичная задержка 20 мкс, UBER - 1 сектор на 10^17 бит, питание по 3.3 и 12В, до 25Вт (можно программно задать ограничение в 10Вт и 20Вт, по умолчанию 20Вт?), устойчивость производительности - 90%, полная задержка записи - типичная 20 мкс, не более 0.09 мс для 99.9% при QD=1, не более 11мс для 99% при QD=128, защита от потери питания (конденсатор с самотестированием), гарантированная устойчивость скорости и задержек, время хранения данных без питания - 3 месяца при 40°C, встроенный датчик температуры (NVMe Health Log) и датчик температуры по SMBUS, поддержка T10 DIF (512+8 или 4096+8) и переменный размер сектора (512, 520, 528, 4096, 4104, 4160, 4224), индикаторы активности и здоровья, гарантия 5 лет. Обзоры:
Серия Intel DC P3600 - SSDPEDME020T401 (3 полных записи в день (11ПБ) по JESD218/JESD219, 56K iops на запись 4KB при очереди 4x32 на весь объём, в 1.5 раза дешевле) поставляется в форматах PCIe (AIC, add-in-card, HHHL, до +55°C) и SFF-8639 (до +30°C, горячая замена, 15 мм), имеют объём от 400 до 2000GB (резерв - 12%), достигают 450K iops на чтение, PCIe 3 x4, NVMe 1.0 (трансляция команд SCSI, включая UNMAP), задержка 20 мкс, UBER - 1 сектор на 10^17 бит, питание по 3.3 и 12В, до 25Вт (можно программно задать ограничение в 10Вт и 20Вт, по умолчанию 25Вт "nvme id-ctrl /dev/nvme0n1 -H": "ps 0 : mp:25.00W operational"), устойчивость производительности - 90%, полная задержка записи - типичная 20 мкс, не более 0.09 мс для 99.9% при QD=1, не более 11мс для 99% при QD=128, защита от потери питания (конденсатор с самотестированием), гарантированная устойчивость скорости и задержек, время хранения данных без питания - 3 месяца при 40°C, встроенный датчик температуры (NVMe Health Log) и датчик температуры по SMBUS, поддержка T10 DIF (512+8 или 4096+8) и переменный размер сектора (512, 520, 528, 4096, 4104, 4160, 4224), индикаторы активности и здоровья, гарантия 5 лет.
lspci
83:00.0 Non-Volatile memory controller: Intel Corporation PCIe Data Center SSD (rev 01) (prog-if 02 [NVM Express])
Subsystem: Intel Corporation DC P3600 SSD [Add-in Card]
Capabilities: [40] Power Management version 3
Capabilities: [50] MSI-X: Enable+ Count=32 Masked-
Capabilities: [60] Express (v2) Endpoint, MSI 00
LnkCap: Port #0, Speed 8GT/s, Width x4, ASPM L0s L1, Exit Latency L0s <4us, L1 <4us
LnkSta: Speed 8GT/s, Width x4, TrErr- Train- SlotClk- DLActive- BWMgmt- ABWMgmt-
LnkCtl2: Target Link Speed: 8GT/s, EnterCompliance- SpeedDis-
Capabilities: [150 v1] Virtual Channel
Capabilities: [180 v1] Power Budgeting
Kernel driver in use: nvme
lsblk
nvme0n1 259:0 0 1.8T 0 disk
Файлы в /dev (разделы будут nvme0n1p1, n1 - это пространство имён 1)
crw------- 1 root root 245, 0 Oct 26 12:54 /dev/nvme0
brw-rw---- 1 root disk 259, 0 Oct 26 12:54 /dev/nvme0n1
badblocks -sv -b 4096 -c 1024 /dev/nvme0n1 1
Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
nvme0n1 0.00 0.00 21708.00 0.00 2713.50 0.00 256.00 16.40 0.76 0.76 0.00 0.04 94.90
отсутствует в /dev/disk
имеется /sys/block/nvme0n1 (/sys/block/nvme0n1/queue/:
hw_sector_size и logical_block_size равно 512
max_hw_sectors_kb 128
max_sectors_kb 128
nr_requests 1023
read_ahead_kb 128
rq_affinity 1
scheduler none
blockdev --getra /dev/nvme0n1
256
После установки устройства в настройках BIOS (2013 год!) появились пункты
Intel SSD Data Center Tools - утилита командной строки для NVMe и SATA (пакет isdct - /etc/isdct, /usr/bin/isdct, /usr/lib/isdct/ (64 бит!). Например: "isdct show -intelssd" (сообщает, что имеется обновление прошивки) или "isdct show -all -smart" или "isdct show -sensor". Можно обновить прошивку и порулить размером сектора, обработкой ошибок, интерфейсом, мощностью, кешированием, объёмом.
Серия Intel DC P3500 (0.3 полных записи в день, резерв - 7%, 35K iops на запись 4KB) обещается вдвое дешевле P3700, линейная скорость - 2700/1800 МБ/сек, потребляемая мощность - 25 Вт.
Серия Intel DC P3520: PCIe 3.0 x4 (AIC и SFF (15 мм) с U.2 (SFF-8639)), 450ГБ и 1200ГБ и 2000ГБ (полный объём 2304ГБ), на базе 3D MLC (32 слоя, первый эксперимент, 32GB на микросхему), 1 полная запись в день, вдвое дешевле P3600, 18-канальный контроллер, до 2.5GB ОП Micron DDR3-1866 (2ГБ с учётом затрат на ECC), 375K/26K iops на чтение/запись 4KB, линейная скорость - 1700/1350 МБ/сек, потребляемая мощность - 12 Вт, конденсаторы для защиты от пропадания питания с самотестированием, T10 DIF, UBER - 10^-17, обзор.
Серия Intel DC P3320: PCIe 3.0 x4 (AIC и SFF с U.2 (SFF-8639)), 450ГБ и 1200ГБ и 2000ГБ, на базе 3D NAND (?TLC), 365K/22K iops на чтение/запись 4KB, 0.3 полных записи в день, линейная скорость - 1600/1400 МБ/сек, потребляемая мощность - ? Вт.
Серия Intel SSD 750 (219 TB (70GB в день), пиковые 290K IOPS на запись 4KB, реальные 22K IOPS на запись 4KB при очереди 32), втрое дешевле DC P3700, поставляется в форматах PCIe (HHHL, до +55°C) и SFF-8639 (до +30°C, горячая замена, 15 мм), имеют объём 400 или 1200GB (резерв - 18.8%), достигают 440K iops на чтение, PCIe 3 x4, NVMe 1.0 (трансляция команд SCSI, включая UNMAP), процессор 400 МГц и 18 каналов и DDR3-1600, типичная задержка 20 мкс, UBER - 1 сектор на 10^16 бит, питание по 3.3 и 12В, до 25Вт (можно программно задать ограничение в 10Вт и 20Вт, по умолчанию 20Вт?), обещаний по устойчивости производительности и качеству обслуживания не даётся, обещается защита от потери питания, но конденсатор отсутствует, время хранения данных без питания - 3 месяца при 40°C, встроенный датчик температуры (NVMe Health Log), но датчик температуры по SMBUS недоступен, индикаторы активности и здоровья, гарантия 5 лет. Обзоры:
Серия Intel DC P4800X (обзор на anandtech) имеет контроллер на 7 каналов, поставляется в форм-факторе платы PCIe HHHL или U.2 SFF (2.5") толщиной 15mm, интерфейс PCIe 3.0 x4 NVMe, объёмы 375 GB (SSDPED1K375G[A01] и SSDPE21K375G[A01]) или 750 GB (SSDPED1K750GA01[A01] и SSDPE21K750GA01[A01]) или 1.5TB (SSDPED1K015T[A01] и SSDPE21K015T[A01]). Отсутствует память для кеширование и конденсаторы для сохранения её содержимого при пропадании питания. Обещается:
lspci
84:00.0 Non-Volatile memory controller: Intel Corporation Optane DC P4800X Series SSD (prog-if 02 [NVM Express])
Subsystem: Intel Corporation DC P4800X Series [Add-in Card]
DevCap: MaxPayload 256 bytes, PhantFunc 0, Latency L0s <4us, L1 <4us
Capabilities: [40] Power Management version 3
Capabilities: [50] MSI-X: Enable+ Count=32 Masked-
Capabilities: [60] Express (v2) Endpoint, MSI 00
LnkCap: Port #0, Speed 8GT/s, Width x4, ASPM L0s, Exit Latency L0s <4us, L1 unlimited
LnkSta: Speed 8GT/s, Width x4, TrErr- Train- SlotClk+ DLActive- BWMgmt- ABWMgmt-
LnkCtl2: Target Link Speed: 8GT/s, EnterCompliance- SpeedDis-
Capabilities: [150 v1] Virtual Channel
Capabilities: [180 v1] Power Budgeting
Kernel driver in use: nvme
Kernel modules: nvme
Серия Intel DC D4800X - в формфакторе U.2 SFF (2.5") толщиной 15mm, интерфейс PCIe 3.0 2x2 NVMe (2 порта x2), объёмы 375 GB или 750GB или 1.5TB.
Серия Intel DC P4801X - в формфакторе M.2, интерфейс PCIe 3.0 x4 NVMe, объёмы 100GB или 200GB или 375 GB.
Серия KIOXIA CM6-V расчитана на нагрузку 3 DWPD (методика не указана, гарантия 5 лет), поставляются в объёмах 12.8 TB (KCM61VUL12T8), 6.4 TB (KCM61VUL6T40), 3.2 TB (KCM61VUL3T20), 1.6TB (KCM61VUL1T60) и 800 GB (KCM61VUL800G). Изготавливаются на базе 96-уровнего BiCS 3D TLC и 18-канального контроллера, 8GB DRAM. Имеются варианты с шифрованием и безопасной очисткой (SIE, SED, SED FIPS). Поставляется в формате U.3 (SFF-TA-1001, SFF/2.5", 15 мм толщиной) под PCIe 4.0 (1x4 или 2x2) и NVME 1.4. Обещается работоспособность при отказе 2 микросхем флеша, защита от внезапного отключения питания (PLP, конденсатор с самотестированием) и сквозная защита данных (end-to-end). Возможен выбор из 6 режимов потребления (12 В) вплоть до 21 Вт (в реальности устройство предлагает до 27.5 Вт), в ожидании - от 5 Вт. Обещается производительность последовательных операций до 6900/4200 MB/s, случайных - до 1400/350 kIOPS (при QD=256/32), задержки 90/10 мкс при QD=1 (11/99 kIOPS). Из интересного о контроллере (nvme id-ctrl -H /dev/nvme8):
Из интересного о свойствах пространств имён:
LBA Format 0 : Metadata Size: 0 bytes - Data Size: 512 bytes - Relative Performance: 0 Best (in use) LBA Format 1 : Metadata Size: 8 bytes - Data Size: 512 bytes - Relative Performance: 0 Best LBA Format 2 : Metadata Size: 0 bytes - Data Size: 1 bytes - Relative Performance: 0 Best LBA Format 3 : Metadata Size: 0 bytes - Data Size: 4096 bytes - Relative Performance: 0 Best LBA Format 4 : Metadata Size: 8 bytes - Data Size: 4096 bytes - Relative Performance: 0 Best LBA Format 5 : Metadata Size: 64 bytes - Data Size: 4096 bytes - Relative Performance: 0 Best
Серия CD6-V рассчитан только на режим PCIe 1x4 и использует 16-канальный контроллер.
Серии CM6-R и CD6-R расчитаны на нагрузку 1 DWPD.
Серии PM6-V (3DWPD) и PM6-M (10DWPD) - вариант для SAS 24G. PM6-V (3DWPD) KPM61VUG6T40: 6.4TB, 595/290 KIOPS. PM6-M (10DWPD) KPM61MUG1T60: 1.6TB, 595/452 KIOPS.
Серии HK6-V и HK6-M - вариант для SATA.
Серия FL6 (XL-FLASH, SLC) расчитана на нагрузку 60 DWPD и меньшую задержку (29/8 мкс).
Обзоры:
Тестирование многопоточного чтения файлов из файловой системы на базе 4 SSD, подключённых напрямую к ЦП (2 Intel Xeon Gold 6234 (8 ядер @ 3.3/4.0 GHz); 384 GB RDRAM 2933 (12 каналов по 10ГБ/сек); CentOS 7.9 (mitigations=off); BIOS и ОС настроены на полный performance; советы из tuned: vm/swappiness = 10, vm/dirty_ratio = 10, vm/dirty_background_ratio = 3, sched_migration_cost_ns = 5000000, sched_min_granularity_ns = 10000000; SSD подключены напрямую к ЦП1 (2 штуки) и ЦП2 (2 штуки) - задержки чтения/записи/передачи-1МБ 90/10/300 мкс, настройки по умолчанию (ra = 128 KiB, планировщик none); собран LV (lvcreate --name fast --extents 100%FREE --stripes 4 --stripesize 1m --type striped test8left; ra auto = 8 MiB), собрана файловая система XFS (mkfs.xfs -f -L fast -d su=64k(?!),sw=256k(?!) -l su=4k(64k?!),lazy-count=1 /dev/test8left/fast), смонтирована (relatime,attr2,logbufs=8,logbsize=65536,filestreams,inode32,noauto), для 169 каталогов общим объёмом 25 ТБ (24877705076736) выполняется многопоточное чтение dd последовательности файлов (find $1 -type f -exec dd if={} iflag=... bs=10240k of=/dev/null status=none)
| потоков | B/s | +fullblock,nonblock | +iflag=nocache,fullblock,nonblock | +direct,fullblock,nonblock | UEK6/u3 | +direct |
| 64 | 4528149024 | 4485674013 | 4059310740 | 4873228556 | 4848468474 | 5593719768 |
| 48 | 4624063197 | 4614822492 | 4260364674 | 4869782011 | 4853161747 | 5499008092 |
| 40 | 4744775083 | 4754142500 | 4347022430 | 4982778002 | 4902017613 | 5552163139 |
| 36 | 4795276039 | 4822374679 | 4402973108 | 5052027704 | 4962673794 | 5593632985 |
| 32 | 4905877554 | 4912562940 | 4503409017 | 5139857107 | 5031986824 | 5635599313 |
| 28 | 5036080749 | 5017623826 | 4631366566 | 5261883229 | 5077390420 | 5637092106 |
| 24 | 5188439282 | 5179597473 | 4800448496 | 5408511860 | 5142510089 | 5675918737 |
| 20 | 5165695429 | 5146595315 | 4810670672 | 5431002242 | 5123819219 | 5632866068 |
| 16 | 4788189686 | 4777133293 | 4660533679 | 5049305306 | 4928454560 | 5320886787 |
| 12 | 4197248570 | 4195664351 | 4139910786 | 4430537102 | 4368685973 | 4706002821 |
| 10 | 3727822441 | 3728604085 | 3641006532 | 3924193778 | 3855209441 | 4184951738 |
| 8 | 3205054697 | 3204624085 | 3119114144 | 3334991832 | 3280927084 | 3545328538 |
| 6 | 2552344831 | 2556193414 | 2499160682 | 2676830782 | 2613527436 | 2853276676 |
| 5 | ? | 2184133377 | 2123742194 | 2290604861 | 2233391262 | 2463121557 |
| 4 | ? | 1838861754 | 1783386258 | 1924339938 | 1852008701 | 2033833844 |
| 3 | ? | ? | 1393315483 | 1481170201 | 1451821181 | 1597688191 |
| 2 | ? | ? | 991287621 | 1051611499 | 997977668 | 1244720398 |
| 1 | ? | ? | ? | 495918285 | ? | ? |
Пересобрал XFS (mkfs.xfs -f -L fast -m finobt=1 -d su=1m,sw=4 -l su=256k,lazy-count=1 /dev/test8left/fast; монтирование relatime,nodiratime,attr2,largeio,logbufs=8,logbsize=262144,filestreams,inode32,noquota,noauto) и запустил под UEK6/u3 для 169 каталогов (77456505 файлов, dentry - 15 млн, 44 GB) общим объёмом 25 ТБ (24877705076736) выполняется многопоточное чтение dd последовательности файлов (find $1 -type f -exec dd if={} iflag=... bs=10240k of=/dev/null status=none; от 75 минут; причём "find ... -exec echo ..." занимает 50 минут! "find ..." - менее 30 секунд)
| потоков | B/s | +direct | +cgroups | +nomerges=2 | LV read_ahead_kb=512 | kswapd_threads=4 | kswapd_threads=2 memoptimizer |
| 64 | 4656781525 | 5443618142 | 4362027898 | 4576916319 | 4566133285 | 4498145623 | 4654932536 |
| 48 | 4740144491 | 5484217548 | 4479362077 | 4670000620 | 4688992907 | 4533192953 | 4757733862 |
| 40 | 4818995932 | 5466976258 | 4518606018 | 4725651404 | 4741676775 | 4506504071 | 4811602966 |
| 36 | 4838269629 | 5532400346 | 4578021349 | 4751201627 | 4778526202 | 4575543354 | 4814862318 |
| 32 | 4888002751 | 5532573826 | 4617815474 | 4796374369 | 4839697482 | 4552826549 | 4915887701 |
| 28 | 4951655220 | 5558347042 | 4662497221 | 4867060086 | 4931546687 | 4636897278 | 4952933844 |
| 24 | 4988949315 | 5613470384 | ? | 4920993767 | 4994228419 | 4660953675 | 4977785000 |
| 20 | 5102767291 | 5569199903 | ? | 4995852151 | 5031231719 | ? | 5052230848 |
| 16 | 4834970062 | 5251288262 | ? | 4767826825 | 4810705091 | ? | ? |
| 12 | 4296876079 | 4613691925 | ? | 4225288626 | 4281280075 | ? | ? |
| 10 | 3773575086 | 4123909906 | ? | 3690397121 | 3736891520 | ? | ? |
| 8 | 3232264440 | 3495058149 | ? | 3159453597 | 3202774141 | ? | ? |
| 6 | 2574737679 | 2804577551 | ? | 2519062554 | ? | ? | ? |
| 5 | 2202759429 | 2406304119 | ? | 2158123040 | ? | ? | ? |
| 4 | 1820441853 | 1982365761 | ? | ? | ? | ? | ? |
| 3 | 1422511030 | 1544724430 | ? | ? | ? | ? | ? |
| 2 | 975880009 | 1063027359 | ? | ? | ? | ? | ? |
| 1 | ? | ? | ? | ? | ? | ? | ? |
Чтение начинается на [почти] полной скорости (13ГБ) пока pagecache не заполнит всю память.
Ограничение памяти с помощью cgroups делалось так (pagecache держится на уровне 7.5GB)
cgcreate -g memory:backup echo 6G > /sys/fs/cgroup/memory/backup/memory.kmem.limit_in_bytes echo 6G > /sys/fs/cgroup/memory/backup/memory.limit_in_bytes echo номер-процесса-головного-bash > /sys/fs/cgroup/memory/backup/tasks
Отключение слияния делалось так:
echo 2 > /sys/block/dm-2/queue/nomerges echo 2 > /sys/block/nvme8n1/queue/nomerges echo 2 > /sys/block/nvme9n1/queue/nomerges echo 2 > /sys/block/nvme22n1/queue/nomerges echo 2 > /sys/block/nvme23n1/queue/nomerges
Использование nocache (добавляет POSIX_FADV_DONTNEED в close) не принесло счастья - pagecache остаётся в пределах 20ГБ (и 25 ГБ в used), но скорость падает катастрофически - до 1.5GB при 64 потоках, idle 35%, а umount идёт вечность. Сборка стандартная: unzip nocache-master.zip; cd nocache-master; make; make install (/usr/local/lib/nocache.so, /usr/local/bin/{nocache,cachede,cachestats}, /usr/local/share/man/man1/{nocache.1,cachestats.1,cachedel.1}). Использование: nocache ключи-nocache программа ключи-программы. Ключи nocache: Количество дескрипторов NOCACHE_MAX_FDS=1Mi по умолчанию, если надо больше, то надо поменять и пересобрать
Отключение /sys/block/dm-2/bdi/read_ahead_kb для LV приводит к разбиению запросов на чтение по 4КиБ, увеличению IOPS до 160K и значительному уменьшению пропускной способности. Отключение /sys/block/nvme*n1/bdi/read_ahead_kb для устройств приводит к загрузке ЦП в 100% и значительному уменьшению пропускной способности.
Для увеличения потоков kswapd на узел NUMA (4 в /proc/sys/vm/kswapd_threads) ЦП слабоват.
memoptimizer запускается в фоне и периодически подстраивает /proc/sys/vm/watermark_scale_factor под текущую нагрузку и запускает дефрагментатор pagecache при необходимости и ограничивает память занимаемую неудачными dentry (статически при запуске, пишет 15 (1.5% от размера ОП) в /proc/sys/fs/negative-dentry-limit). Оформлен как сервис systemd. /proc/sys/vm/watermark_scale_factor (в 1/10000 от (high watermark - low watermark); по умолчанию - 10) используется kswapd для определения количество освобождаемых страниц pagecache при каждом проходе. Также имеется /proc/sys/vm/watermark_boost_factor (в 1/10000 от high watermark; по умолчанию - 15000), который определяет количество освобождаемых страниц pagecache при каждом вызове дефрагментатора. Параметры (/etc/sysconfig/memoptimizer, /etc/default/memoptimizer):
cTDP Level 1 - понижение скорости на 11%. Level 2 - ещё хуже.
Теперь то же с HT.
| потоков | HT | +memoptimizer | +memoptimizer +kswapd_threads=2 | +memoptimizer +max_sectors_kb=4096 | +memoptimizer +dm_mq_nr_hw_queues=4 | +memoptimizer +rq_affinity=2 | + ограничение C-State | +C-State +polling | +C-State +сектора 4096 |
| 64 | 5435237060 | 5467181703 | 5444909650 | 5539376414 | 5496654658 | 5538276421 | 5513646442 | 5399121536 | 5369628813 |
| 48 | 5450241816 | 5453076763 | 5474769958 | 5517707659 | 5557240744 | 5516047475 | 5532434795 | 5397220452 | 5463160905 |
| 40 | 5494452493 | 5491632561 | 5505325051 | 5557311504 | 5569158761 | 5512637263 | 5576815406 | 5488768294 | ? |
| 36 | 5585817244 | 5521644953 | 5548069621 | 5597923779 | 5576637890 | 5552440716 | 5614212733 | 5558977991 | ? |
| 32 | 5572571877 | 5577513077 | 5637408899 | 5653419993 | 5652956243 | 5577381782 | 5674559337 | 5577901998 | ? |
| 28 | 5674006701 | 5698085623 | 5683474613 | 5723195198 | 5651939086 | 5651069912 | ? | 5605637041 | ? |
| 24 | 5720677575 | 5770682155 | 5746545881 | 5759174629 | 5752134376 | 5665950707 | ? | 5653430270 | ? |
| 20 | 5602086176 | 5674229295 | ? | 5676125941 | 5677506823 | 5572474515 | ? | 5570082734 | ? |
| 16 | 5145066852 | 5230094967 | ? | 5191232575 | 5179551102 | 5107081037 | ? | ? | ? |
| 12 | 4411952862 | 4497507264 | ? | 4480514909 | ? | ? | ? | ? | ? |
| 10 | 3833680149 | 3923394812 | ? | ? | ? | ? | ? | ? | ? |
| 8 | 3247050377 | 3290807505 | ? | ? | ? | ? | ? | ? | ? |
| 6 | 2541103959 | 2592575366 | ? | ? | ? | ? | ? | ? | ? |
| 5 | 2178250099 | 2233938768 | ? | ? | ? | ? | ? | ? | ? |
| 4 | 1786552815 | 1830643193 | ? | ? | ? | ? | ? | ? | ? |
| 3 | 1392219955 | 1432956564 | ? | ? | ? | ? | ? | ? | ? |
| 2 | ? | 982893704 | ? | ? | ? | ? | ? | ? | ? |
| 1 | ? | ? | ? | ? | ? | ? | ? | ? | ? |
Включение HT даёт ускорение 17% при большом количестве потоков и небольшое (2%) замедление при малом, memoptimizer смягчает ситуацию. Для kswapd_threads=2 нужно более производительный ЦП.
Почему-то /sys/block/nvme8n1/queue/max_hw_sectors_kb=4096, а max_sectors_kb=1280 (изменяемо) при mdts=32M, не показало преимущества (при большом количестве потоков - лучше, при малом - хуже):
cat /sys/block/dm-2/queue/max_sectors_kb 1280 cat /sys/block/nvme8n1/queue/max_sectors_kb 1280 echo 4096 > /sys/block/dm-2/queue/max_sectors_kb echo 4096 > /sys/block/nvme8n1/queue/max_sectors_kb echo 4096 > /sys/block/nvme9n1/queue/max_sectors_kb echo 4096 > /sys/block/nvme22n1/queue/max_sectors_kb echo 4096 > /sys/block/nvme23n1/queue/max_sectors_kb
Увеличение /sys/module/dm_mod/parameters/dm_mq_nr_hw_queues с 1 до 4 немного помогает при реально большом количестве потоков и мешает при малом.
Смена режима привязки потоков к ядрам немного помогает при реально большом количестве потоков и мешает при малом.
cat /sys/block/dm-2/queue/rq_affinity
0
cat /sys/block/nvme{8,9,22,23}n1/queue/rq_affinity
1
1
1
1
echo 2 > /sys/block/dm-2/queue/rq_affinity
echo 2 > /sys/block/nvme8n1/queue/rq_affinity
echo 2 > /sys/block/nvme9n1/queue/rq_affinity
echo 2 > /sys/block/nvme22n1/queue/rq_affinity
echo 2 > /sys/block/nvme23n1/queue/rq_affinity
Увеличение локальности данных за счёт кеширования (1 в /proc/sys/vm/zone_reclaim_mode) ускоряет незначительно.
Предварительный прогрев высокопараллельным find (findhot_all.sh, 1 в /proc/sys/vm/vfs_cache_pressure вместо 100) ничего не даёт.
Блокировка C-state ниже 1 (в /etc/default/grub: processor.max_cstate=1 intel_idle.max_cstate=0; grub2-mkconfig -o /etc/grub2-efi.cfg) ускоряет незначительно.
Отключение сбора статистики (0 в /sys/block/nvme8n1/queue/iostats) ничего не даёт.
Переход на опросы вместо прерываний (адаптивный, poll_queues требуется устанавливать при загрузке), однако каждое устройство NVME имеет 32 (по числу ядер с учётом HT) очереди, отдельное прерывание на каждую привязано к ядру и их немного (/proc/interrupts, 200 в секунду на ядро на устройство; 4800/сек на все устройства на ядро), так что стало хуже
echo 4 > /sys/module/nvme/parameters/poll_queues # 0 echo 1 > /sys/block/nvme8n1/queue/io_poll -bash: echo: write error: Invalid argument добавил nvme.poll_queues=32 в /etc/default/grub и "grub2-mkconfig -o /etc/grub2-efi.cfg" reboot echo 1 > /sys/block/nvme8n1/queue/io_poll echo 1 > /sys/block/nvme9n1/queue/io_poll echo 1 > /sys/block/nvme22n1/queue/io_poll echo 1 > /sys/block/nvme23n1/queue/io_poll echo 0 > /sys/block/nvme8n1/queue/io_poll_delay # было -1 echo 0 > /sys/block/nvme9n1/queue/io_poll_delay echo 0 > /sys/block/nvme22n1/queue/io_poll_delay echo 0 > /sys/block/nvme23n1/queue/io_poll_delay
Переход на блоки размером 4096 вместо 512 (уже сейчас 4096 в optimal_io_size и physical_block_size и minimum_io_size):
разобрать LVM nvme list-ns /dev/nvme8 [ 0]:0x1 nvme id-ns /dev/nvme8 - -namespace-id=0x1 nlbaf : 5 # 6 штук форматов = количество поддерживаемых комбинаций размера данных LBA и размера метаданных - 1 flbas : 0 # использованный вариант lbaf 0 : ms:0 lbads:9 rp:0 (in use) # ms - размер метаданных, lbads - 2^9 - размер блока lbaf 1 : ms:8 lbads:9 rp:0 lbaf 2 : ms:0 lbads:0 rp:0 lbaf 3 : ms:0 lbads:12 rp:0 lbaf 4 : ms:8 lbads:12 rp:0 lbaf 5 : ms:64 lbads:12 rp:0 nvme format - -lbaf=3 /dev/nvme8n1 cat /sys/block/nvme8n1/queue/hw_sector_size 4096 на всякий случай перезагрузиться собрать LVM
|
Bog BOS: hardware: SSD |