|
Bog BOS: hardware: SSD |
Последнее изменение файла: 2011.08.15
Скопировано с www.bog.pp.ru: 2012.02.04
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 значительно ускорить запись и перезапись данных, а также сборку мусора и избежать замедления записи при заполнении устройства (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 в устройстве.
Выравнивание начала каждого раздела на границу блока стирания: либо изобразить устройство с 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 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 - индикатор доступного числа перезаписей в процентах от первоначального).
|
Bog BOS: hardware: SSD |