воскресенье, 22 мая 2011 г.

Важность выравнивания разделов диска относительно архитектуры SSD

Терминология:
Офсет (offset) - число, обозначающее расстояние от начала объекта до определённой точки.
Блок (block) - наименьшая секция стирания в NAND флеш-памяти.
Страница (page) - наименьшая секция записи и чтения в NAND флеш-памяти.

Что нужно знать о выравнивании разделов (partition alignment), так это следующее:
1) Если вы устанавливаете Windows XP, то выравнивать разделы относительно архитектуры SSD нужно вручную, так как Windows XP не выравнивает разделы.
2) Если устанавливается Vista, Server 2008, или Windows 7, о выравнивании даже не стоит задумываться, так как упомянутые операционные системы выравнивают разделы автоматически.

Какие преимущества от выравнивания разделов?
1) Выравненные разделы являются гарантией максимальной производительности SSD, могут устранить неровную работу, задержки, нагрузку контроллера SSD в Windows XP 32-bit/64-bit.
2) Выравнивание разделов оптимизирует запись кластеров данных Windows XP в страницы флеш-памяти.

Архитектура NAND флеш-памяти
Массив NAND флеш-памяти состоит из последовательности блоков. Размер блока 2 Гигабитного (2 Gb) 90-нм SLC NAND чипа от Micron равен 128 KB. Количество блоков - 2048. Каждый блок состоит из страниц. Количество страниц на блок - 64. Страницы сопоставимы с секторами HDD. Страница 2 Gb SLC NAND флеш-памяти может вмещать четыре 512 Байтовых (512 B) сектора стандартного HDD. Размер страницы - 2 KB.
Размеры блоков и страниц у современных чипов варьируются в сторону увеличения.

Геометрия HDD: Предыстория невыравненных разделов
Механический диск разбит на треки. Накопитель уведомляет операционную систему, что трек состоит из 63-х секторов (CHS 1-63). Windows XP использует первый трек под информацию структуры диска при создании раздела диска, впоследствии разделы создаются, начиная с 64-го сектора, тогда как раздел следовало бы начать со следующего 65-го сектора. Начало раздела с 64-го сектора (с которого начинается установка Windows) создаёт дополнительную операцию ввода-вывода для контроллера накопителя, так как контроллер пытается считать/записать четырёх-килобайтовый (4 KB) блок данных на границе двух предполагаемых треков, и в действительности, на границе двух страниц SSD, между секторами 64 и 65.
Другими словами, система использует первые 63 сектора под внутреннюю информацию (MBR, геометрию диска и т.д.). Далее Windows записывает данные блоками по 4096 Байт (блок определяется размером кластера) в следующие свободные сектора, начиная с 64-го сектора, в который записываются первые 512 Байт данных. Далее процесс записи останавливается, потому что контроллер достигает конца текущей страницы. Далее контроллер переходит на следующую страницу, дописывая оставшиеся 3584 Байт данных из 4096 Байт за одну операцию ввода-вывода, продолжая запись до достижения следующей границы страниц. Если бы контроллер мог записать все данные в одну страницу, начиная с сектора 65, тогда бы накопитель завершил задачу за одну операцию ввода-вывода. Вследствие просчёта в выравнивании, запись/чтение данных на границе страниц требует две операции ввода-вывода для завершения, что будет происходить на каждой границе между станицами до тех пор, пока разделы не будут выравнены.
Поэтому, при установке Windows XP или Server 2003, необходимо создать выравненный раздел вручную программными средствами Diskpar или Diskpart, если производительность для вас является критически важной.


В версиях Windows, предшествующих и включая Windows XP/Server 2003, разделы диска создаются на основе устарелой схемы адресации Cylinder/Head/Sector (CHS), используемой в предыдущих поколениях контроллеров дисков. Разделы, созданные в Windows XP/Server 2003, сохраняют изначальное, неправильное выравнивание и при установке Windows Vista/7/Server 2008.

В Windows XP/Server 2003 не предполагалось родной поддержки SSD. Независимо от вида накопителя, первый раздел в этих ОС создаётся с сектора LBA 63 - середина страницы SSD.

При LBA-адресации размер трека не имеет значения, так как секторам присваивается свой порядковый номер, начиная с LBA 0. Настоящий размер трека современных HDD известен только производителю, и в действительности превышает 63 сектора/трек.
Для совместимости с операционными системами, предшествующих Windows XP, каждый накопитель, механический и твердотельный, сообщает операционной системе искусственный, заведомо неправдивый набор своих характеристик, таких как размер сектора 512 Байт; и размер трека в 63 сектора, максимально возможный при схеме адресации (Cylinder/Head/Sector) CHS. Windows XP/Server 2003 повинуется заявленным характеристикам накопителя и резервирует первые 63 сектора, начиная раздел с 64 сектора. Данные зарезервированные секторы не совпадают с основными физическими границами страниц SSD, фрагментов RAID (stripe unit), контроллеров дисков и другого оборудования, что в совокупности может стать причиной существенного падения производительности.

Выравнивание разделов
1) Самый простой способ - присоединить SSD к системе с установленной Windows 7 и создать разделы в Диспетчере дисков.
По умолчанию, офсет (смещение относительно начала диска) в Windows 7, Server 2008 равен 1024 KB (1 048 576 Байт). Данное значение является оптимальным выбором. Значение 1024 KB отлично соотносится с распространёнными размерами фрагментов RAID (stripe unit), такими как 64 KB, 128 KB и 256 KB, а также с менее распространёнными значениями фрагментов - 512 KB и 1024 KB. Наименьшим эффективным значением офсета для SQL Server является 64 KB, вследствие соотношений (формул), указанных в дальнейшем.
2) Второй способ - использование программных средств Diskpar или Diskpart.

Определение текущего офсета
1) Выполните следующую команду в Командной строке (Выполнить > cmd > Enter):
"wmic partition get BlockSize, StartingOffset, Name, Index". Значение указано в байтах для каждого раздела.
2) В Командной строке запустите Diskpar с командой "diskpar -i 0", где вместо нуля подставьте порядковый номер накопителя, который отображается в Диспетчере дисков. Значение указано в скрытых секторах (hidden sectors).
Загрузка Diskpar:
members.dslextreme.com/users/ocz/Software/Diskpar.zip
3) Запустите MSInfo32 (Выполнить > msinfo32 > Enter), где под Компоненты > Запоминающие устройства > Диски, в байтах указан офсет для каждого раздела.

Расчеты офсета
Необходимые соотношения для стандартных конфигураций:
1) Офсет раздела ÷ Размер страницы/сектора = Целое число
2) Офсет раздела ÷ Размер кластера = Целое число

Пример типичного сценария невыравненного раздела SSD:

Офсет первого раздела в Windows XP равен 32 256 Байт (31,5 KB или 63 сектора), Размер страницы 34-нм флеш-памяти - 4 096 Байт (4 KB) и стандартный Размер кластера - 4 096 Байт (4 KB).
Результат обоих соотношений - 7,875 – не является целым числом - что равносильно невыравненному разделу.
Результатом этих двух соотношений должны быть только целые числа (без остатка).

Возможные значения офсета: 32 768 Байт (32 KB или 64 сектора), 65 536 Байт (64 KB), 131 072 Байт (128 KB) и так далее.

Необходимые соотношения для RAID-конфигураций:
1) Офсет раздела ÷ Размер страницы/сектора = Целое число
2) Офсет раздела ÷ Размер кластера = Целое число
3) Офсет раздела ÷ Размер фрагмента RAID = Целое число
4) Размер фрагмента RAID ÷ Размер кластера = Целое число

Пример типичного сценария невыравненного раздела HDD:

Офсет первого раздела в Windows XP равен 32 256 Байт (31,5 KB или 63 сектора), Размер сектора Advanced Format - 4 096 Байт (4 KB) и Размер фрагмента RAID равен 65 536 Байт (64 KB).
Результат первых двух соотношений - 7,875 – не является целым числом; третьего - 0,4921875 – не является целым числом, поэтому Офсет и Размер фрагмента RAID не соотносимы - что равносильно невыравненному разделу.
Тем не менее, при Офсете первого раздела 1 048 576 Байт (1 MB), Размере сектора Advanced Format 4 096 Байт (4 KB) и Размере фрагмента RAID 65 536 Байт, результатами всех четырёх соотношений являются целые числа - что равносильно выравненному разделу.
Результатом всех четырёх соотношений должны быть только целые числа (без остатка). Соответствие всем четырём соотношениям является фундаментальным предусловием оптимальной производительности диска. Первое из двух последних соотношений является наиболее важным для оптимальной производительности RAID-конфигурации.

Возможные значения Размера фрагмента RAID: 8 KB, 64 KB, 128 KB и так далее, согласно настройкам BIOS.

При создании разделов нужно учитывать архитектуру NAND флеш-памяти. На форуме OCZ предполагают учитывать размер блока и страницы NAND чипа при вычислении офсета. Например, если размер блока - 512 KB, в теории, значение офсета должно соответствовать размеру блока. Информация об архитектуре конкретных NAND чипов находится в закрытом доступе. Известно, что размер блока 34-нм Intel MLC NAND чипов равен 512 KB, и размер страницы - 4 KB.

Ваше дело экспериментировать с разными значениями, или использовать рекомендуемые.

Онлайн калькулятор выравнивания SSD:
www.techpowerup.com/articles/other/157

Создание новых разделов
1) Если создаётся всего один раздел, достаточно использовать Diskpar. Все предыдущие разделы необходимо удалить в Диспетчере дисков. В Diskpar офсет задаётся в секторах. Размер стандартного сектора - 512 Байт.
64 сектора-32 KB
128 секторов-64 KB
256 секторов-128 KB
512 секторов-256 KB
1024 сектора-512 KB
2048 секторов-1024 KB
Раздел создаётся командой "diskpar -s 0", где вместо нуля подставьте порядковый номер накопителя, который отображается в Диспетчере дисков.
Иллюстрации по Diskpar:
www.ocztechnologyforum.com/forum/showthread.php?48366...
www.ocztechnologyforum.com/forum/showthread.php?55238...

2) При создании двух и более разделов, необходимо использовать Diskpart. Diskpart интегрирован в любой Windows, является эволюцией Diskpar, но версия Windows XP не способна задавать нужный офсет. Поэтому вызывайте Diskpart из командной строки в Vista или Windows 7 (Выполнить > cmd > Enter, в командной строке наберите Diskpart, и Enter). Дальнейшие действия:
1) "list disk" > Enter - показать присоединённые диски
2) "select disk 0" > Enter - выбрать нужный диск (замените ноль на номер выбираемого диска)
3) "detail disk" - показать присутствующие разделы
4) Если на диске имеются невыравненные разделы, наберите "clean" > Enter - стереть всю информацию и данные с диска
5) Создаём первый начальный раздел: "create partition primary size=<n> align=<n>"; size - размер раздела в Мегабайтах (MB); align - смещение раздела от начала диска в Килобайтах (KB)
Пример: "create partition primary size=3000 align=128"
6) Создаём второй расширенный раздел: "create partition extended size=<n> align=<n>"; если size не указывать, раздел займет всё оставшиеся пространство; align - смещение второго раздела от конца первого.
Внимание: Значение size указывать не нужно, так как нам нужно всё оставшиеся пространство для логических разделов. Значение align должно быть идентично первоначальному, в ином случае офсет второго раздела задаётся автоматически (установлено испытательным путём посредством Diskpar и WinHex, см. значение HiddenSectors в Diskpar).
Пример: "create partition extended align=128"
7) Создаём первый логический раздел в расширенном разделе: "create partition logical size=<n> align=<n>".
Внимание: Значение align должно быть идентично первоначальному, в ином случае офсет первого логического раздела задаётся автоматически. Значение size не указываем, если создавать последующие разделы нет необходимости.
Пример: "create partition logical align=128"
8) Форматируем второй раздел: "format fs=<ntfs|fat|fat32> unit=<n> quick"; unit - размер кластера (allocation unit). Если unit не указывать, используется стандартный размер кластера; quick - быстрое форматирование
Примечание: Не лишним будет задать размер кластера равный размеру страницы 8 KB.
Пример: "format fs=ntfs unit=8K quick"
9) "select volume 2" - выбираем первый раздел диска (замените "2" на номер выбираемого раздела, который отображается при выполнении команды "detail disk")
10) Форматируем первый раздел: "format fs=ntfs unit=8K quick"
11) "list partition" - проверяем созданные офсеты и разделы
Примечание: Diskpart изначально округляет офсет 31,5 KB до 32 KB.
12) "exit" - выход из Diskpart.

Можно создать до четырёх начальных разделов или три начальных и один расширенный при использовании MBR-структуры. В расширенном разделе можно создать неограниченное количество логических разделов.

Осталось проверить созданные офсеты на соответствие, используя методы проверки указанные выше; см. "Определение текущего офсета".

Используя Diskpar, обратите внимание на значения скрытых секторов (HiddenSectors), в данном случае это 256 (align=128), одинаковы для первого и второго разделов. Если не задавать параметр align для второго раздела, HiddenSectors равно 2048 (1 MB). При разбиении диска родным Diskpart в Windows XP, HiddenSectors равно 63, значит разделы не выравнены.

Испытуемый образец - 8 GB USB флеш-память. Были созданы два раздела с офсетом 128 KB каждый, используя Vista Recovery Disc > Diskpart.

Если нет установленной Vista или Windows 7 в распоряжении, можно использовать Диск аварийного восстановления Vista или Windows 7 (находим в интернете, напр. Vista/Windows 7 Recovery Disc), загрузить систему с CD/DVD-ROM, далее запустить из меню командную строку и вызвать Diskpart.

3) Третий способ создать разделы - найти подходящую утилиту, во власти которой выполнять требуемые операции.

После создания разделов можно приступать к свежей установке Windows XP или восстановить предварительно созданные образы системы и вторичных дисков. Важно не удалять созданные разделы.

Установка RAID-драйвера
Во время установки Windows XP, для RAID-конфигурации, системе нужно предоставить соответствующий RAID-драйвер. Для этой цели можно интегрировать RAID-драйвера в установочный диск с помощью программы nLite, но можно заставить BIOS эмулировать USB флеш-память в USB-FDD. Для этого, на USB флеш-памяти создайте раздел размером не более 2 Гигабайт (если размер вашей USB флеш-памяти больше 2-х Гигабайт) с офсетом 0 (ноль) в Diskpart. Отформатируйте раздел в файловую систему FAT16. Данные параметры необходимы для гарантирования того, что BIOS сможет правильно считать и передать данные с USB флеш-памяти во время установки Windows XP. Далее, отключите (положение Disabled) в BIOS все физические FDD (если таковы имеются). Найдите опцию в BIOS наподобие "USB Legacy I/O Support" (эмулирование USB устройств), включите её (положение Enabled), если данная настройка не включена по умолчанию (Примечание: Данная надпись для разных производителей отображается по разному). Сохраните настройки BIOS. Во время установки Windows XP, жмите F6 для загрузки драйвера. После вышеуказанных манипуляций, Windows должен распознать USB флеш-память как USB-FDD, привод A:/, и успешно загрузить драйвер. Данный способ доказал свою работоспособность на AsRock K7VT4A Pro (северный мост KT400A, и южный VT8237).
К сведению: Файловой системой дискет 1.44" является FAT16/12. Максимальный размер раздела в FAT16 - 2 Гигабайта (2048 Мегабайт). В BIOS, USB флеш-память должна определятся как USB-FDD или USB-ZIP. USB флеш-память, размер которой больше 32 Гигабайт, определяется как USB-HDD. Не все BIOS могут распознавать отличные от FAT16/12 файловые системы.

Дальнейшая оптимизация SSD
Индексирование диска, дефрагментация, superfetch и prefetch - абсолютно ненужные оптимизаторы для SSD, так как время доступа к данным находиться в пределах 0.1 ms по всему пространству SSD, и предназначены исключительно для оптимизации работы HDD. К примеру, время доступа к данным для HDD находиться в пределах 8-10 ms, что значит, SSD находит и предоставляет данные быстрее чем HDD успевает найти данные. По умолчанию, Windows 7 отключает данные задачи при обнаружении SSD. В Windows XP, и, возможно, в Vista, данные задачи необходимо выключить вручную.
Если у вас установлено избыточное количество оперативной памяти, SuperSpeed Ramdrive Plus позволяет создать из неё виртуальный HDD, который можно использовать под файл подкачки и перемещение временных папок веб-браузеров. При выключении программы, все данные можно сохранить на обыкновенный HDD. В результате, можно сократить износ SSD.

Выравнивание разделов HDD
Практика выравнивания разделов в Windows XP/Server 2003 также применима к HDD, у которых размер физического сектора равен 4 KB, для обычных и RAID-конфигураций; и для HDD с размером физического сектора 512 Байт для RAID-конфигураций.

Размер сектора HDD
Исторически принятый размер сектора HDD равен 512 Байт. На замену устаревшей технологии принята новая - Advanced Format, которая устанавливает новый, более эффективный, размер сектора, равный 4-м Килобайт (4 KB). Данный формат не поддерживает ни одно программное обеспечение и, возможно, ни один контроллер материнской платы на сегодня. По этой причине производители используют эмуляцию 512 Байтовых секторов (512e), выполняемую контроллером HDD, для облегчения перехода на новый формат и совместимости с аппаратным и программным обеспечением. Поэтому важно правильно создавать разделы на диске для обеспечения оптимальной производительности, в особенности, записи 4 KB файлов. Разделы должны быть выравнены с началом физического 4 KB сектора. Эмуляция подразумевает использование 8-ми логических 512 Байтовых секторов, которые записываются в один физический 4 KB сектор.

На рисунке изображён пример эмуляции 512 Байтовых секторов при двух физических 4 KB секторах.

Windows Vista SP1 и выше, поддерживают Advanced Format и автоматически выравнивают разделы с границами 4 KB секторов. Для Windows XP/Server 2003 необходимо выравнивать разделы вручную. Производители, напр. Hitachi GST и Western Digital, предлагают пользователям собственные утилиты выравнивания невыравненных разделов.

Источники:
1) Все вышеуказанные
2) www.ocztechnologyforum.com/forum/showthread.php?58096...
3) www.ocztechnologyforum.com/forum/showthread.php?48309...
4) www.ocztechnologyforum.com/forum/showthread.php?50376...
5) www.ocztechnologyforum.com/forum/showthread.php?57599...
6) download.microsoft.com/download/.../DiskPartitionAlignment.docx
7) technet.microsoft.com/en-us/library/cc770877(WS.10).aspx
8) www.micron.com/.../145tn2919_nand_101.ashx
9) www.hitachigst.com/tech/techlib.nsf/techdocs/...

Комментариев нет: