24 мая 2010 г.

Кто оплачивает "воздух"?

Оригинальный пост здесь

В нашей современной культуре чисто промытых мозгов, одним из основных двигателей прогресса является красивая многослойная упаковка. Мы много работаем и значительная часть наших усилий идет на приобретение миллионов тонн ненужного пластика и картона. Каждый участвует в процессе массовой вырубки лесов и превращения полезных ископаемых в горы бесполезного мусора. И, обратите внимание, делает это с удовольствием.

Проблема очевидна и не использовать ее в качестве еще одной маркетинговой заманухи было бы глупо. Только ленивый в наше время не говорит об экологичности технологий, с гордостью не сообщает о "зеленом"  производстве и салатовых энергопотреблении и тепловыделении. Постараюсь быть справедливым, и отмечу, что некий прогресс в этом направлении есть. Правда, он является не основной целью, а, как бы это выразиться, побочным эффектом. Согласитесь, что те же упомянутые выше тепловыделение и энергопотребление оптимизируются в первую очередь не из за экологии, а в связи с более приземленными техническими проблемами.

Однако, если в технологиях наблюдается хоть какое-нибудь движение в правильную сторону, то в таких "пустяковых" вещах как упаковка и логистика производители оборудования зачастую еще находятся на стадии неандертальцев. Правда иногда об экологических моментах вспоминать и вовсе не приходится . Вопросы уже вызывают наличие здравого смысла и элементарной экономической целесообразности.

Вот один из прецедентов. Заказчику приходит коробка.


Ее открывают и обнаруживают ворох пластикового "воздуха"...


.. в котором откапывают упаковку поменьше...


..и в ней находятся 2 жестких диска.


Теперь вопрос знатокам: каковы дополнительные затраты на материалы, упаковку, перевозку и утилизацию доставленного по назначению "воздуха"?
А еще кто все в итоге оплачивает? ... Правильно, Заказчик...


PS Поговаривают, что иногда в таких коробках посылают даже лицензии...  ;(

17 мая 2010 г.

Disk crossing и Partition Alignment

Проблема, описанная в данном посте, является общей для достаточно большого количества дисковых массивов различных производителей и моделей. Однако, для большей наглядности я поговорю о ней на примере конкретного хранилища EMC Clariion. Итак, как я уже писал в посте об организации RAID в массивах Clariion, по умолчанию размер Stripe element равен 64KB.


При выполнении операции ввода-вывода, оптимальным вариантом будет чтение или запись, зависящая от минимально возможного количества шпинделей. Очевидно, что для операций блоками <=64KB это будут обращения только к одному физическому диску.


Однако, бывают ситуации, когда адресация блока даже небольшого размера по каким-то причинам смещена, что, в свою очередь, приводит к тому, что количество физических накопителей, к которым будет необходимо обратиться, увеличится на 1.


При блоках <=64KB это приводит к удвоению количества требуемых операций. Особенно это критично при записи данных в RAID 5, когда и без того высокое значение Write Penalty=4 увеличится до 8.


Ситуация, когда одна операция ввода-вывода требует обращения к данным (Parity не считается) на нескольких физических накопителях называется пересечение границы диска (Disk Crossing). При анализе статистических данных о производительности дисковых массивов Clariion, необходимо учитывать, что метрика Disk Crossing инкрементируется на 1 при выполнении всей операции, не зависимо от количества “пересекаемых” шпинделей.


Пересечение границ страйпа Stripe Crossing также может негативно влиять на производительность. Так, высокоэффективный Full Stripe Write может “превратиться” в медленную запись нескольких независимых блоков.


Чаще всего причиной Disk Crossing является отсутствие выравнивания разделов в серверах архитектуры x86. Давайте рассмотрим это более подробно. Дело в том, что первый сектор диска (LBA 0) всегда содержит обязательную запись MBR (Master Boot Record), которая хранит таблицу разделов диска (partition table) и крохотную область кода, при необходимости используемую для передачи управления загрузчику ОС (boot loader) с активного раздела.

Новые разделы (partitions) на жестком диске по умолчанию создаются по границам треков. Но т. к. в первом треке уже записаны данные MBR, то раздел 0 приходится создавать с начала следующего трека, пропустив 63 блока LBA (32256 Bytes) Это мы уже видели здесь. Получается, что данные, записанные в раздел всегда будут смещены на 32256 Bytes относительно начала страйпа, что приводит к сдвигу адресации.

Естественно, такое смещение не всегда будет приводить к появлению Disk Crossing. Его вероятность зависит от размера операций, которыми записываются данные. Так, при записи 4KB, вероятность Disk Crossing будет равна 5,5% (4KB это 8 блоков по 512KB, (7/128)*100=5.5%. А при записи 16KB уже 24%. Конечно, запись данных размером >64KB будет приводить к инкрементации метрики Disk Crossing при любых обстоятельствах.



Для оптимизации производительности необходимо выровнять раздел (Partition Alignment) по границам 64KB Stripe Element. Для этого необходимо использовать утилиты, описанные в таблице.

Утилита
ОС
Параметры
Комментарии
diskpar
Windows NT и выше
Starting Offset in sectors = 128
не входит в дистрибутив ОС, можно установить из Microsoft Windows 2000 Resource Kit
diskpart
Windows 2003 SP1 и выше
Primary Align = 64
входит в дистрибутив ОС с Windows 2000, но начала поддерживать partition alignment только с версии 5.2.3790, которая появилась в Win 2003 SP1
fdisk
Linux
adjust starting block number = 128
в expert mode
VMware ESX
adjust starting block for partition = 128
в expert mode

В идеале, неплохо было бы избежать Stripe Crossing и выравнивать раздел не на 64KB, а сразу на размер всего страйпа.

Добавлено
При создании разделов в Windows 2008, Vista и Windows 7 разделы создаются по границе 1MB и в выравнивании не нуждаются.

Тома VMware VMFS-3 при создании через vClient также автоматически выравниваются по границе 64KB. И их тоже выравнивать не надо. Однако, это не относится к томам на уровне самих виртуальных машин. Каждую ВМ придется выравнивать внутри .vmdk файлов

Случаи создания томов средствами LVM без использования стандартных разделов ОС необходимо рассмотривать индивидуально. Так, при использовании Physical Volumes в LVM ОС Linux выравнивание не нужно. Это связано с тем, что размер метаданных PV сам по себе кратен 64KB.

О Morley Parity здесь...

13 мая 2010 г.

Flash-память (часть 2 SSD)

Как я уже писал раньше, flash-накопители (SSD или EFD), которые используются в дисковых массивах, выпускаются на базе архитектуры NAND. Ключевыми элементами накопителей являются сами чипы flash-памяти NAND, память SDRAM, которая выполняет функции кэша данных и хранилища таблиц трансляции логических адресов, а также чипы ввода-вывода, обеспечивающих одновременный доступ к данным по нескольким параллельным каналам.


Ячейки сгруппированы в страницы (pages) по 4KB (в накопителях первого поколения 73GB и 146GB) или 16KB (в накопителях 200GB и 400GB). Именно страница является атомарной единицей при обращении к SSD диску. Поэтому при записи порции данных размером меньше страницы, обязательна процедура read-modify-write при которой целая страница предварительно считывается с накопителя, в нее вносятся изменения и далее она снова записывается на SSD. Конечно, это сказывается на производительности записи.
Страницы, в свою очередь, сгруппированы в блоки (blocks) размером 256KB.


Для адресации страницы используется специальная таблица LBA->NAND. В ней каждому логическому адресу LBA ставится в соответствие физическая координата текущего местоположения данных, т. е. номера блока и страницы в нем. На рисунке ниже приведен пример адресации ячейки и записи данных. После выборки адреса блока и страницы, данные могут быть физически записаны в энергонезависимую память.


Биты готовой к записи ячейки всегда хранят значение 1 (низкий заряд). Переключение 1 в 0 является штатной операцией над индивидуальными ячейками. А вот переключение из 0 в 1 в flash NAND возможно только стиранием блока целиком. После этой операции все ячейки опять переводятся в состояние 1, а все страницы блока получают статус Erased. Первая запись данных в страницу изменяет ее статус на Valid. Любая повторная операция модификации переключает состояние страницы на Invalid, а измененная информация записывается в какую-либо другую Erased страницу, переводя ее в состояние Valid и, естественно, меняя ссылку на нее в таблице LBA->NAND.


Когда все страницы блока имеют статус Invalid, она снова очищается. Однако даже несколько страниц в состоянии Valid не позволят очистить блок, что приводит к внутренней фрагментации и не оптимальной утилизации ресурсов. Поэтому если в нескольких блоках страниц со статусом Erased уже не осталось, а количество Valid страниц стало меньше заданного уровня, содержимое этих блоков загружается в кэш, после чего все Valid данные консолидируются и вместе записываются в один из уже очищенных блоков. Ссылки на LBA перестраиваются, а освободившиеся блоки очищаются. Конечно, контроллер старается делать такую оптимизацию в периоды пониженной нагрузки.


Индивидуальная ячейка flash-памяти выдерживает ограниченное количество циклов перезаписи. Это связано с износом туннельного слоя, проводящего электроны. Ячейки SLC NAND в среднем выдерживают примерно 100 тыс. циклов стирания. Для увеличения сроков службы используются специальные технологии.
Одним из наиболее очевидных методов продления срока службы flash памяти является активное использование кэш самого накопителя. При работе с данными, в SDRAM создаются образы блоков. Внутренние контроллеры стараются объединять страницы в такие кэш-образы блоков и “сбрасывать” их на физические чипы NAND целиком в рамках единой операции. Конечно, если это не возможно, то операции записи на физический носитель могут осуществляться и постранично, но контроллер пытается избегать таких ситуаций.

Для более равномерного износа ячеек за счет оптимизации размещения и миграции данных между блоками используются технология wear-leveling. Общая сырая емкость накопителей flash- превышает адресное пространство, доступное для использования дисковыми массивами. Избыточная емкость (scratchpad), обычно составляет значительную часть общего объема. Так, scratchpad в дисках STEC 73GB составляет 43%, а в 400GB – 22%. Контроллеры накопителей имеют специальные счетчики количества циклов перезаписи ячеек и, в соответствии с этой информацией, равномерно используют все доступное дисковое пространство, при необходимости, перемещая данные в другие блоки. Необходимо заметить, что чем больше относительный объем scratchpad, тем проще найти свободное пространство для консолидации страниц.
Контроллер накопителя также следит за уровнем сигнала в используемых ячейках и, в случае каких-либо аномалий, оптимально перемещает такие блоки на новое место.

Естественно, внутренняя фрагментация накопителей flash очень сильно влияет на их производительность. Поэтому для получения релевантных результатов тестов, следует их проводить в, так называемом, стабильном состоянии (steady-state), когда все блоки, включая scratchpad, имеют записанные страницы. Максимальные результаты будут получены при операциях ввода-вывода равных размеру страницы.

Классический жесткий диск с интерфейсом Fibre Channel имеет 2 порта. Но т. к. единовременно возможно обращаться к данным, находящимся только в одной области магнитного диска, то и очередь обработки запросов всего одна. Flash накопители STEC имеют 16 независимых очередей и, соответственно, 16 Front-end каналов доступа. Выигрыш в производительности достигается за счет того, что контроллер накопителя имеет возможность параллельно выполнять в Back-end операции ввода-вывода из кэш на 16 независимых чипов NAND. В случае запросов на чтение, нагрузка на накопитель достаточно хорошо масштабируется до 25 параллельных запросов. Запись данных масштабируется до 8-10 запросов, что также является очень хорошим результатом.

При планировании размещения данных не стоит также забывать, что технологически операции чтения данных в SSD накопителях значительно быстрее записи.

4 мая 2010 г.

Flash-память (часть 1 общие принципы)

Flash-память хранит данные в ячейках (cell), состоящих из транзисторов с плавающим затвором.
При программировании ячейки используется эффект туннелирования электронов через слой изолятора на затвор. Высокий заряд соответствует биту со значением 0. Изолированный плавающий затвор способен удерживать электроны до 10 лет. Заряд на затворе изменяет порогового напряжения транзистора. Этот эффект используется для чтения текущего значения бита. Переключение ячейки из 0 в 1 возможно только посредством стирания информации. При этом на транзистор подаётся высокое отрицательное напряжение, под влиянием которого электроны уходят с плавающего затвора. Очевидно, что энергопотребление flash-памяти при чтении данных значительно ниже, чем при записи ли стирании.

Каждая ячейка в зависимости от реализации может запоминать два или более уровней электрического заряда. Двухуровневые ячейки называются SLC (single-level cell). Они способны хранить только один бит информации. Ячейки с четырьмя и более уровнями (multi-level cell, MLC) могут одновременно сохранять несколько битов.


В настоящее время при производстве flash-памяти используются две основных архитектуры: NOR и NAND. NOR реализована на основе логических элементов “или-не” (Not-OR). Особенностью ее производства является то, что к каждому транзистору необходимо подвести индивидуальные контакты, что, в свою очередь, увеличивает размеры схемы, но позволяет записывать и стирать информацию индивидуально в каждой ячейке и работать с отдельными байтами. Память этой архитектуры имеет высокие характеристики производительности произвольного доступа к данным.

В основе NAND flash-памяти лежат логические элементы “и-не” (Not-AND). Ее принципиальным отличием от NOR является размещение ячеек и их контактов. Ячейки группируются в блоки аналогичные кластерам жесткого диска. В результате уже не требуется подводить индивидуальный контакт к каждой ячейке, что приводит к существенному уменьшению размеров и снижению стоимости NAND чипов. Процесс записи и стирания проводится сразу над группой ячеек и поэтому происходит быстрее. Однако эта архитектура имеет свои недостатки. Используя NAND чипы, мы теряем возможность обращаться к произвольной ячейке. Для изменения даже нескольких байтов информации требуется считать в буфер целый блок данных, сделать нужные изменении я и после этого записать весь блок обратно. По этим причинам память NAND эффективнее использовать для операций последовательного доступа к данным.

Обе архитектуры сейчас существуют параллельно и не конкурируют друг с другом, поскольку находят применение в разных областях хранения данных. Чипы NAND применяются для недорогого хранения больших объемов информации, например, в картах памяти фотоаппаратов. Flash память NOR часто используются для хранения и эффективного доступа к программному коду в BIOS или RAM карманных компьютеров. Ее объем обычно не велик и не превышает десятки мегабайт. В качестве накопителей EFD в дисковых массивах всегда используется flash память NAND.

Часть 2 здесь