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

Bog BOS: hardware:  SSD

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

Bog BOS: hardware: SSD

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

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

Архитектура 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 значительно ускорить запись и перезапись данных, а также сборку мусора и избежать замедления записи при заполнении устройства (Intel MLC замедляется вдвое на случайной записи). Не помогает при изменении файла. Как быть с SAS туннелем и RAID контроллерами? Поддержка появилась в виде заплаток для блочного уровня в ядре 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 в устройстве.

Адаптация к архитектуре 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% резервных блоков).

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 лет. На устройстве резервируется 6.9% блоков.

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 (B8/184 (только для G2) - число ошибок LBA(?) в процентах, E1/225 - количество записанных групп по 64K секторов, E8/232 - доступное резервное пространство в процентах от первоначального, E9/233 - индикатор доступного числа перезаписей в процентах от первоначального).

Ссылки

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

Bog BOS: hardware:  SSD

TopList

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