Многие считают, что математика точная наука. Я тоже был в этом уверен, пока мне в 6 классе не подарили калькулятор MK-61 (уж не знаю, что заставило родителей так разориться на штуку, которую нельзя было надеть или съесть :) ). В первый же день экспериментов с этим чудесным устройством, я обнаружил, что 2 в кубе по каким-то причинам равно 7,99что-то_там... Из умных книжек я уже тогда знал, что такое куб. Поэтому был уверен, что 2 в кубе вычисляется как 2*2*2 и это точно равно 8, а вовсе не той загадочной комбинации цифр, которую высвечивал зеленый экранчик. Я жутко расстроился, а мама сказала, что нужно отнести этот бракованный агрегат обратно в магазин и поменять. Делать это юный лентяй, конечно, не стал, а нашел более приемлимое для себя решение - считать фичей (благо как округлять до целого я был в курсе).
Немного повзрослев я поступил на физфак и познакомился с методами приближенных вычислений и неопределенностью Гейзенберга. Это окончательно убедило в том, что на руке у меня приблизительно 10 пальцев, а человек, который знает что-то точно - глупец.
К чему эти воспоминания? Нахлынуло, когда прочитал пост в блоге Анила Гупта о том, как как он посчитал факториал 30. Вот здесь
18 февраля 2010 г.
17 февраля 2010 г.
Несколько забавных фактов о Clariion
Название CLARiiON имеет интересную историю. Ни для кого не секрет, что этот продукт был приобретен в 1999г. вместе с компанией Data General. До этого DG активно продавала 16-битный миникомпьютер NOVA. После разработки нового продукта, инженеры собирались назвать его NOVAII. Но маркетинг был против повторного использования бренда и потребовал изменить название. Инженеры схитрили и предложили анаграмму AViiON, а для пущей неузнаваемости вставили две буквы “i” посередине. Название CLARiiON продолжило традицию таких именований. Кстати, буквально слово Clarion переводится как “рожок, горн”.
Операционная среда FLARE получило свое название как аббревиатура от Fibre Logic Array Runtime Environment. Буквально это слово переводится как “взрыв, вспышка”.
Ну и напоследок, история происхождения загадочного “messner” (надо объяснять, что это такое? ;) ). Некоторые члены группы разработчиков, работающей над управлением Clariion, увлекались скалолазанием. Поэтому это слово они выбрали в честь альпиниста-легенды Рейнхольда Месснера, который в 1980г. совершил бескислородное соло-восхождение на Эверест и был первым покорителем всех 14 вершин восмитысячников. По слухам, до этого использовалось сочетание “pink floyd”, но маркетингу это не нравилось и его заставили сменить.
Операционная среда FLARE получило свое название как аббревиатура от Fibre Logic Array Runtime Environment. Буквально это слово переводится как “взрыв, вспышка”.
Ну и напоследок, история происхождения загадочного “messner” (надо объяснять, что это такое? ;) ). Некоторые члены группы разработчиков, работающей над управлением Clariion, увлекались скалолазанием. Поэтому это слово они выбрали в честь альпиниста-легенды Рейнхольда Месснера, который в 1980г. совершил бескислородное соло-восхождение на Эверест и был первым покорителем всех 14 вершин восмитысячников. По слухам, до этого использовалось сочетание “pink floyd”, но маркетингу это не нравилось и его заставили сменить.
10 февраля 2010 г.
Заметки на полях (HBA) -2
Какие моменты стоит учитывать для того, чтобы достичь высокого уровня нагрузки с одного сервера? Они очевидны:
Еще короткие заметки о HBA...
- Во-первых, реальные данные не могут просто взяться из /dev/null. Их надо сначала создать посредством каких-либо вычислений либо скопировать из другого хранилища. Поэтому для генерации такого плотного потока информации понадобится действительно мощный сервер и высокопроизводительный источник данных.
- Во-вторых, для обеспечения таких предельно высоких значений Bandwidth и Throughput драйверам HBA потребуются значительные ресурсы сервера. Это приведет к дополнительной достаточно высокой нагрузке на центральные процессоры и шины ввода-вывода.
- В-третьих, получатель данных, т. е. наш дисковый массив, должен быть готов их принять, обеспечив требуемую производительность (эффект обратной связи мы уже обсуждали ранее).
Еще короткие заметки о HBA...
5 февраля 2010 г.
Заметки на полях (HBA)
- У карт HBA с драйверами под различные операционные системы существуют множество параметров, настройка которых может повлиять на производительность I/O. В качестве примера приведу параметры Maximum Scatter/Gather List и Maximum Sectors. Их настройка всегда очень индивидуальна и обязательно требует предварительных экспериментов с замерами производительности.
- Если вы обнаружили, что серверу доступно меньшее количество томов, чем было настроено на дисковом массиве, возможно, необходимо увеличить значение параметра LUNs Per Target.
- Пользователям дисковых массивов EMC настоятельно рекомендую перед подключению сервера к дисковому массиву почитать соответствующий документ Connectivity Guide (как всегда, свежие версии доступны на Powerlink). В зависимости от типа HBA и операционной системы там могут даваться более детальные рекомендации по настройке параметров HBA.
29 января 2010 г.
Queue Depth
О внутренних соединениях HBA здесь...
Одной из причин очень сильного снижения производительности HBA может стать некорректная настройка глубины очереди (Queue Depth, QD). Queue Depth контролирует максимальное количество I/O команд, которые могут одновременно находиться в исходящих очередях портов HBA. Слишком маленькое значение глубины очереди не позволяет раскрыть весь потенциал адаптера.
Слишком большая QD перегружает входящие буферы портов дискового массива. В этом случае он посылает драйверу HBA сообщение контроля передачи SCSI QFULL. Если адаптер проигнорирует данное сообщение и продолжит посылать данные, они могут быть просто отброшены. Это может повлиять на целостность хранимой информации. Поэтому получив QFULL, драйвер должен срочно предпринять какие-либо меры по снижению нагрузки. Эти меры различны для разных драйверов, операционных систем и конкретных настроек. Но независимо от того, каким образом система среагирует на получение QFULL, сама эта ситуация обязательно приведет к заметному падению производительности, а в некоторых случаях даже к потере работоспособности. Использование ПО multipathing (например, PowerPath), являющимся посредником между драйверами HBA и уровнем SCSI, может в некоторой степени сгладить катастрофичность ситуации, но не приведет к полному решению проблемы.
Возникает резонный вопрос, в каких случаях нам стоит ожидать перегрузки входящих буферов? Front-end порты дисковых массивов EMC Clariion имеют следующие ограничения:
Для того, чтобы избежать перегрузки буферов портов дискового массива, драйвер HBA имеют возможность ограничивать количество направляемых I/O команд. На уровне каждого порта массива это ограничение реализуется драйвером адаптера при помощи параметра QueueDepthTarget, а для всех LUNs, доступных серверу через любой из портов Clariion, при помощи QueueDepthLUN. Соответственно, при настройке HBA необходимо придерживаться некоторых правил. Вот правила для дисковых массивов Clariion::
Вроде, все просто. Но, к сожалению, есть несколько моментов, которые при настройке параметров QD потребуют от вас дополнительных усилий:
Если мы можем настроить только QueueDepthLUN, то обязательно нужно проследить за тем, чтобы произведение этого параметра на количество LUNs, доступных на порту, не превышало Target Port Queue Depth Limit.
Если нам доступен только QueueDepthTarget, следует убедиться, что произведение, рассчитанного для данной конфигурации, LUN Queue Depth Limit на количество LUNs, доступных на порту, не превышало значения настраиваемого параметра. В противном случае его требуется уменьшить.
Рассмотрим небольшой пример. Два сервера подключены к одному порту дискового массива. Общая нагрузка между Server1 и Server2 распределяется как 30/70. На дисковом массиве сформированы две RAID Groups. На RAID 5 созданы и распределены между серверами 11x LUNs, а на RAID 10 - 48x LUNs. Предположим, что в используемой версии драйвера HBA обоих серверов можно настраивать только QueueDepthLUN.
Посчитаем ограничения порта дискового массива:
А вот если взять QueueDepthLUN=59 в случае Server2, то мы не сможем удовлетворить требованию Target Port Queue Depth Limit ( (15+40)*59=3245 > 1120 ). Поэтому здесь расчет необходимо проводить от обратного: QueueDepthLUN=1120/(15+40)=20. Отметим, что полученное значение удовлетворяет требованиям LUN Port Queue Depth Limit (20<59).
Заметки на полях о HBA здесь и здесь...
Одной из причин очень сильного снижения производительности HBA может стать некорректная настройка глубины очереди (Queue Depth, QD). Queue Depth контролирует максимальное количество I/O команд, которые могут одновременно находиться в исходящих очередях портов HBA. Слишком маленькое значение глубины очереди не позволяет раскрыть весь потенциал адаптера.
Слишком большая QD перегружает входящие буферы портов дискового массива. В этом случае он посылает драйверу HBA сообщение контроля передачи SCSI QFULL. Если адаптер проигнорирует данное сообщение и продолжит посылать данные, они могут быть просто отброшены. Это может повлиять на целостность хранимой информации. Поэтому получив QFULL, драйвер должен срочно предпринять какие-либо меры по снижению нагрузки. Эти меры различны для разных драйверов, операционных систем и конкретных настроек. Но независимо от того, каким образом система среагирует на получение QFULL, сама эта ситуация обязательно приведет к заметному падению производительности, а в некоторых случаях даже к потере работоспособности. Использование ПО multipathing (например, PowerPath), являющимся посредником между драйверами HBA и уровнем SCSI, может в некоторой степени сгладить катастрофичность ситуации, но не приведет к полному решению проблемы.
Возникает резонный вопрос, в каких случаях нам стоит ожидать перегрузки входящих буферов? Front-end порты дисковых массивов EMC Clariion имеют следующие ограничения:
- Общая глубина входящей очереди каждого порта (Target Port Queue Depth Limit).
- Глубина очереди на каждый LUN, доступный через порт (LUN Queue Depth Limit).
Для того, чтобы избежать перегрузки буферов портов дискового массива, драйвер HBA имеют возможность ограничивать количество направляемых I/O команд. На уровне каждого порта массива это ограничение реализуется драйвером адаптера при помощи параметра QueueDepthTarget, а для всех LUNs, доступных серверу через любой из портов Clariion, при помощи QueueDepthLUN. Соответственно, при настройке HBA необходимо придерживаться некоторых правил. Вот правила для дисковых массивов Clariion::
- Сумма QueueDepthTarget всех HBA серверов, использующих некий порт дискового массива, не должна превышать Target Queue Depth Limit. Например, порт SPA-2 используется 8 серверами с приблизительно одинаковой нагрузкой. В этом случае необходимо проследить, чтобы QueueDepthTarget <= 200 (1600/8). Если через HBA сервера используются сразу несколько портов дискового массива, QueueDepthTarget должен выставляться в минимальное из значений, рассчитанных для каждого порта.
- Сумма QueueDepthLUN всех HBA, использующих некий LUNs на порту дискового массива, не должна превышать LUN Queue Depth Limit. Например, если 3 сервера одновременно используют LUN5 (RAID5 7+1) на порту SPB-1, на каждом из них должна быть установлена QueueDepthLUN <= 43 ( ((14*7)+31)/3 ). Если сервер использует несколько LUNs, имеющих различный LUN Queue Depth Limit, в качестве параметра HBA должно выбираться минимальное из возможных значений.
Вроде, все просто. Но, к сожалению, есть несколько моментов, которые при настройке параметров QD потребуют от вас дополнительных усилий:
- Во-первых, требования к нагрузке с нескольких серверов, использующих один порт, может быть различной. В таких случаях, при расчете QueueDepthTarget обязательно придется учесть пропорцию нагрузок.
- Во-вторых, названия параметров QD в драйверах HBA различных производителей и операционных систем могут быть разными. Настоятельно рекомендую проштудировать соответствующую документацию. Искать следует по словам “queue” и “throttle”.
- В-третьих, опять же в зависимости от типа HBA и ОС, могут поддерживаться либо оба параметра настройки глубины очереди, либо только один из них.
Если мы можем настроить только QueueDepthLUN, то обязательно нужно проследить за тем, чтобы произведение этого параметра на количество LUNs, доступных на порту, не превышало Target Port Queue Depth Limit.
Если нам доступен только QueueDepthTarget, следует убедиться, что произведение, рассчитанного для данной конфигурации, LUN Queue Depth Limit на количество LUNs, доступных на порту, не превышало значения настраиваемого параметра. В противном случае его требуется уменьшить.
Рассмотрим небольшой пример. Два сервера подключены к одному порту дискового массива. Общая нагрузка между Server1 и Server2 распределяется как 30/70. На дисковом массиве сформированы две RAID Groups. На RAID 5 созданы и распределены между серверами 11x LUNs, а на RAID 10 - 48x LUNs. Предположим, что в используемой версии драйвера HBA обоих серверов можно настраивать только QueueDepthLUN.
Посчитаем ограничения порта дискового массива:
- TargetQueueDepthLimit = 1600,. Для того, чтобы удовлетворить этому ограничению? с учетом различий нагрузки Server1 должен использовать не более 784 входных буферов порта дискового массива (1600*0,3). Оставшиеся 1120 буферов достанутся Server2 (1600*0,7).
- LUNQueueDepthLimitRAID5 = 87 (14*4+31), LUNQueueDepthLimitRAID10 = 59 (14*2+31). Так как мы не можем настроить QueueDepthLUN отдельно на каждую из RAID Groups, для дальнейших расчетов необходимо использовать минимальное из этих двух значений, т. е. 59.
А вот если взять QueueDepthLUN=59 в случае Server2, то мы не сможем удовлетворить требованию Target Port Queue Depth Limit ( (15+40)*59=3245 > 1120 ). Поэтому здесь расчет необходимо проводить от обратного: QueueDepthLUN=1120/(15+40)=20. Отметим, что полученное значение удовлетворяет требованиям LUN Port Queue Depth Limit (20<59).
Заметки на полях о HBA здесь и здесь...
24 января 2010 г.
Внутренние соединения HBA
Об уровнях драйверов и HBA рассуждаю здесь.
Современные HBA для подключения к серверу используют соединения PCI-X и PCI-express. Напомню, что PCI-X как любая шина имеет следующие ограничения: во-первых, общая пропускная способность разделяется между всеми подключенными устройствами, а во-вторых, устройство, работающее на минимальной частоте, будет определять рабочую частоту для всех устройств на шине.
В отличие от PCI-X, соединение PCI-express (PCIe) является не шиной, а коммутируемым соединением. Поэтому совершенно не нужно задумываться в какие их существующих в сервере слотов следует подключать устройства. Единственным ограничением является “ширина” соединения, определяемая количеством полнодуплексных полос (lanes). Адаптер имеющий некое количество lanes можно подключать только в слот с идентичным или большим количеством полос. Например, HBA PCIe 2.0 x4 можно подключать только в слоты PCIe 2.0 или 1.0 x4, x8, x16 и x32. Подключение устройства в к более широкому слоту не дает никаких преимуществ по производительности передачи данных.
Может ли полоса пропускания внутренних соединений ограничивать производительность адаптеров HBA? На диаграмме представлено сравнение параметров производительности внешних и внутренних интерфейсов FC HBAs. Как мы видим, для HBA с различным количеством FC портов все же существуют минимальные требования по Bandwidth внутренних соединений.
Я не поленился и проверил, соответствуют ли этим минимальным требованиям основные модели трех ведущих производителей HBA. Все оказалось замечательно. На данный момент мы можем быть уверены в том, что Bandwidth внутренних соединений никак не будет сказываться на производительности карт HBA.
О Queue Depth...
Современные HBA для подключения к серверу используют соединения PCI-X и PCI-express. Напомню, что PCI-X как любая шина имеет следующие ограничения: во-первых, общая пропускная способность разделяется между всеми подключенными устройствами, а во-вторых, устройство, работающее на минимальной частоте, будет определять рабочую частоту для всех устройств на шине.
В отличие от PCI-X, соединение PCI-express (PCIe) является не шиной, а коммутируемым соединением. Поэтому совершенно не нужно задумываться в какие их существующих в сервере слотов следует подключать устройства. Единственным ограничением является “ширина” соединения, определяемая количеством полнодуплексных полос (lanes). Адаптер имеющий некое количество lanes можно подключать только в слот с идентичным или большим количеством полос. Например, HBA PCIe 2.0 x4 можно подключать только в слоты PCIe 2.0 или 1.0 x4, x8, x16 и x32. Подключение устройства в к более широкому слоту не дает никаких преимуществ по производительности передачи данных.
Интерфейс | Ширина | Частота | Bandwidth |
PCI-X 1.0 | 64 bit | 66 MHz | 533 MB/s |
PCI-X 1.0 | 64 bit | 100 MHz | 800 MB/s |
PCI-X 1.0 | 64 bit | 133 MHz | 1066 MB/s |
PCI-X 2.0 | 64 bit | 266 MHz | 2,15 GB/s |
PCI-X 2.0 | 64 bit | 533 MHz | 4,3 GB/s |
PCIe 1.0 | x1 | 2,5 GHz | 0,5 GB/s |
PCIe 1.0 | x2 | 2,5 GHz | 1 GB/s |
PCIe 1.0 | x4 | 2,5 GHz | 2 GB/s |
PCIe 1.0 | x8 | 2,5 GHz | 4 GB/s |
PCIe 1.0 | x16 | 2,5 GHz | 8 GB/s |
PCIe 1.0 | x32 | 2,5 GHz | 16 GB/s |
PCIe 2.0 | x1 | 5,0 GHz | 1 GB/s |
PCIe 2.0 | x2 | 5,0 GHz | 2 GB/s |
PCIe 2.0 | x4 | 5,0 GHz | 4 GB/s |
PCIe 2.0 | x8 | 5,0 GHz | 8 GB/s |
PCIe 2.0 | x16 | 5,0 GHz | 16 GB/s |
PCIe 2.0 | x32 | 5,0 GHz | 32 GB/s |
Может ли полоса пропускания внутренних соединений ограничивать производительность адаптеров HBA? На диаграмме представлено сравнение параметров производительности внешних и внутренних интерфейсов FC HBAs. Как мы видим, для HBA с различным количеством FC портов все же существуют минимальные требования по Bandwidth внутренних соединений.
Я не поленился и проверил, соответствуют ли этим минимальным требованиям основные модели трех ведущих производителей HBA. Все оказалось замечательно. На данный момент мы можем быть уверены в том, что Bandwidth внутренних соединений никак не будет сказываться на производительности карт HBA.
Transfer Rate | Кол-во портов | Производитель | Модель | Интерфейс подключения | Частота | Ширина |
8Gbps | Quad | Qlogic | QLE2564 | PCIe 2.0 | 5.0GHz / 2.5GHz | x8 / x8 |
Dual | Brocade | 825 | PCIe 2.0 | 5.0GHz / 2.5GHz | x8 / x8 | |
Emulex | LPe12002 | PCIe 2.0 | 5.0GHz / 2.5GHz | x4 / ? | ||
Qlogic | QLE2562 | PCIe 2.0 | 5.0GHz / 2.5GHz | x4 / x8 | ||
Single | Brocade | 815 | PCIe 2.0 | 5.0GHz / 2.5GHz | x8 / x8 | |
Emulex | LPe12000 | PCIe 2.0 | 5.0GHz / 2.5GHz | x4 / ? | ||
Emulex | LPe1250 | PCIe 2.0 | 5.0GHz / 2.5GHz | x4 / ? | ||
Qlogic | QLE2560 | PCIe 2.0 | 5.0GHz / 2.5GHz | x4 / x8 | ||
4Gbps | Quad | Qlogic | QLE2464 | PCIe 2.0 | 2.5GHz | x8 |
Dual | Qlogic | QLA2462 | PCI-X 2.0 | 266MHz | 64bit | |
Brocade | 425 | PCIe 2.0 | 5.0GHz / 2.5GHz | x8 / x8 | ||
Qlogic | QLE2462 | PCIe 2.0 | 2.5GHz | x4 | ||
Emulex | LPe11002 | PCIe 1.0 a | 2.5GHz | x4 | ||
Single | Emulex | LP1150 | PCI-X 2.0 | 266MHz | 64bit | |
Qlogic | QLA2460 | PCI-X 2.0 | 266MHz | 64bit | ||
Brocade | 415 | PCIe 2.0 | 5.0GHz / 2.5GHz | x8 / x8 | ||
Qlogic | QLE2460 | PCIe 2.0 | 2.5GHz | x4 | ||
Emulex | LPe11000 | PCIe 1.0 a | 2.5GHz | x4 | ||
Emulex | LPe1150 | PCIe 1.0 a | 2.5GHz | x4 | ||
Emulex | LPe111 | PCIe 1.0 a | 2.5GHz | x4 | ||
2Gbps | Quad | Qlogic | QLA2344 | PCI-X | 133MHz | 64bit |
Dual | Emulex | LP11002 | PCI-X 2.0 | 266MHz | 64bit | |
Emulex | LP10000DC | PCI-X 1.0 | 133MHz | 64bit | ||
Emulex | LP1050DC | PCI-X 1.0 | 133MHz | 64bit | ||
Qlogic | QLA2342 | PCI-X | 133MHz | 64bit | ||
Qlogic | QLA2342L | PCI-X | 133MHz | 64bit | ||
Emulex | LP10000ExDC | PCIe 1.0 a | 2.5GHz | x4 | ||
Single | Emulex | LP11000 | PCI-X 2.0 | 266MHz | 64bit | |
Emulex | LP10000 | PCI-X 1.0 | 133MHz | 64bit | ||
Emulex | LP1050 | PCI-X 1.0 | 133MHz | 64bit | ||
Emulex | LP101 | PCI-X 1.0 | 133MHz | 64bit | ||
Qlogic | QLA2340 | PCI-X | 133MHz | 64bit | ||
Qlogic | QLA2340L | PCI-X | 133MHz | 64bit | ||
Qlogic | QLA2310F | PCI-X | 66MHz | 64bit | ||
Qlogic | QLA2310FL | PCI-X | 66MHz | 64bit | ||
Emulex | LP1050Ex | PCIe 1.0 a | 2.5GHz | x4 |
О Queue Depth...
Подписаться на:
Сообщения (Atom)

