@ Карта сайта News Автора!

Bog BOS: hardware:  SSD

Последнее изменение файла: 2022.03.17
Скопировано с www.bog.pp.ru: 2022.03.18

Bog BOS: hardware: SSD

SSD накопитель представляет собой NAND флэш память в корпусе форм фактора 2.5" или 1.8" с интерфейсом SATA. Позволяет использование в качестве "почти обычного" жёсткого диска. Для ускорения операций может использоваться оперативная память под кеш и параллельный доступ к нескольким микросхемам флэш.

Предварительно необходимо ознакомиться с материалами о флэш.

  • Архитектура SSD
  • Адаптация к архитектуре SSD
  • Intel SSD X25
  • Samsung SSD 840 PRO
  • Серия Samsung PM893/PM897
  • Intel DC S3500 и другие
  • SATA Express, U.2, U.3, M.2 (NGFF), NVM Express, OCuLink
  • Серия Intel DC P3700 и другие
  • Серия Intel DC P4800X (Optane, 3D XPoint)
  • KIOXIA CM6-V
  • Архитектура SSD

    Контроллер 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.

    Адаптация к архитектуре SSD

    Выравнивание начала каждого раздела на границу блока стирания: либо изобразить устройство с 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 SSD X25

    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

    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 часов).

    Объяснение показателей SMART:

    Обнаружились проблемы при подключении к Intel C600 SCU (SAS1) - под тяжёлой нагрузкой (моделируется "badblocks -b 4096 -c 1024", несколько дней) у диска сносит крышу (начинает рапортовать о своём объёме в 600 PB и т.п.), приходится перезагружаться (SSD Intel DC S3500 проходит без проблем). Подключение через LSI MegaRAID 9266-8i выявило отсутствие TRIM у оного и невозможность работы без TRIM.

    Серия Samsung PM893/PM897

    Серия 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 и другие

    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, U.2, U.3, M.2 (NGFF), NVM Express, OCuLink

    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 команда устройство параметры") с командами

    Сборка версии 0.9: make.

    Дополнения для LightNVM lnvm (LightNVM), memblaze, wdc, huawei, netapp, toshiba (KIOXIA на него не отзывается), micron, seagate и Intel (intel).

    Расширения Intel (1.8.1):

    Расширения wdc (nvme wdc id-ctrl /dev/nvme0n1):

    Интересные данные в log:

    Интересные данные в intel smart-log-add:

    Серия Intel DC P3700 и другие

    Серия 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 (Optane, 3D XPoint)

    Серия 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 и другие

    Серия 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):

    Из интересного о свойствах пространств имён:

    Серия 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,nonblockUEK6/u3+direct
    64452814902444856740134059310740487322855648484684745593719768
    48462406319746148224924260364674486978201148531617475499008092
    40474477508347541425004347022430498277800249020176135552163139
    36479527603948223746794402973108505202770449626737945593632985
    32490587755449125629404503409017513985710750319868245635599313
    28503608074950176238264631366566526188322950773904205637092106
    24518843928251795974734800448496540851186051425100895675918737
    20516569542951465953154810670672543100224251238192195632866068
    16478818968647771332934660533679504930530649284545605320886787
    12419724857041956643514139910786443053710243686859734706002821
    10372782244137286040853641006532392419377838552094414184951738
    8320505469732046240853119114144333499183232809270843545328538
    6255234483125561934142499160682267683078226135274362853276676
    5?21841333772123742194229060486122333912622463121557
    4?18388617541783386258192433993818520087012033833844
    3??1393315483148117020114518211811597688191
    2??99128762110516114999979776681244720398
    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=2LV read_ahead_kb=512kswapd_threads=4kswapd_threads=2 memoptimizer
    644656781525544361814243620278984576916319456613328544981456234654932536
    484740144491548421754844793620774670000620468899290745331929534757733862
    404818995932546697625845186060184725651404474167677545065040714811602966
    364838269629553240034645780213494751201627477852620245755433544814862318
    324888002751553257382646178154744796374369483969748245528265494915887701
    284951655220555834704246624972214867060086493154668746368972784952933844
    2449889493155613470384?4920993767499422841946609536754977785000
    2051027672915569199903?49958521515031231719?5052230848
    1648349700625251288262?47678268254810705091??
    1242968760794613691925?42252886264281280075??
    1037735750864123909906?36903971213736891520??
    832322644403495058149?31594535973202774141??
    625747376792804577551?2519062554???
    522027594292406304119?2158123040???
    418204418531982365761?????
    314225110301544724430?????
    29758800091063027359?????
    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
    64543523706054671817035444909650553937641454966546585538276421551364644253991215365369628813
    48545024181654530767635474769958551770765955572407445516047475553243479553972204525463160905
    4054944524935491632561550532505155573115045569158761551263726355768154065488768294?
    3655858172445521644953554806962155979237795576637890555244071656142127335558977991?
    3255725718775577513077563740889956534199935652956243557738178256745593375577901998?
    28567400670156980856235683474613572319519856519390865651069912?5605637041?
    24572067757557706821555746545881575917462957521343765665950707?5653430270?
    2056020861765674229295?567612594156775068235572474515?5570082734?
    1651450668525230094967?519123257551795511025107081037???
    1244119528624497507264?4480514909?????
    1038336801493923394812???????
    832470503773290807505???????
    625411039592592575366???????
    521782500992233938768???????
    417865528151830643193???????
    313922199551432956564???????
    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
    

    Ссылки

    @ Карта сайта News Автора!

    Bog BOS: hardware:  SSD

    TopList

    Copyright © 1996-2021 Sergey E. Bogomolov; www.bog.pp.ru (КГБ знает все, даже то что у Вас на диске ;)