Мы ищем хранилище с разумной скоростью. Из-за небольшого бюджета мы решили использовать программные цели iSCSI или AoE. Прежде чем мы изменим нашу производственную инфраструктуру, мы проводим несколько тестов, чтобы выбрать лучшую технологию.
Для тестирования мы используем:
Наша проблема - низкая скорость чтения. Для тестирования мы используем dd
и файл размером 40-100 ГБ.
Мы пробовали ietd, aoetools, LIO. Мы использовали связи двух сетевых карт: balance-rr и LACP, multipathing с r-r. Использовались обычные и большие кадры. Наконец, мы даже установили прямое соединение Ethernet между целью и хостом (без переключателя).
Все тесты дают более менее одинаковые результаты (конечно, использование обычных сетевых адаптеров без TOE и iSCSI дало результаты на 20-30% хуже).
Тестирование сети с помощью iperf показало скорость передачи около 200 МБ / с (2 ГБит). Наблюдение за использованием сетевых адаптеров на цели с помощью bmon показало равное использование обоих устройств (около 50 МБ / с для чтения, около 100 МБ / с для записи).
Поскольку нам не повезло, мы решили использовать третью сетевую карту (разумеется, обе стороны). Результаты были странными:
Есть ли ограничение на целевое программное обеспечение, которое отключает выходную скорость выше 1 ГБит / с?
Что мы делаем не так?
Чтобы выжать максимальную производительность из хранилища, подключенного по iSCSI, вы должны использовать Jumbo Frames и MPIO (не LACP). Рекомендуется использовать RDMA / iSER, если вы можете это сделать.
AOE (ATA over Ethernet) старый и хреновый. Мы уже избавились от Coraid много лет назад. Мы используем StarWind https://www.starwindsoftware.com/ поскольку iSCSI target уже давно, и StarWind попросили нас перейти с Coraid на любое хранилище, которое мы могли бы сделать.
Итак, сейчас мы очень хорошо разбираемся в iSCSI, предоставляемом StarWind, и используем Windows, ESX и SCST. http://scst.sourceforge.net/ на Linux в качестве инициаторов. С RDMA / iSER он работает до 10 Гбит, что пока очень хорошо.
Ваши ожидания относительно того, как работает агрегация каналов Ethernet, неверны.
Все методы агрегации, кроме balance-rr (т.е. все методы, у которых режим> 0), работают не дать вам большую пропускную способность при одном подключении; скорее, они увеличивают общую доступную пропускную способность, когда несколько подключений устанавливаются с / на затронутые хосты. Другими словами, LAG / LACP не даст вам никаких преимуществ для этого сценария с одним подключением.
Единственный метод агрегации, который может дать вам пропускную способность за один сеанс, превышающую ту, которую вы обычно можете иметь на одном интерфейсе, - это баланс-р-р, которые распределяют пакеты по циклическому алгоритму. Вы должны были установить баланс-р-р на обе инициатор и цель. Однако большой загвоздка в том, что это во многом зависит от переключателя.
В любом случае, если вы установите для цели и инициатора значение balance-rr, прямое соединение двух машин должно повысить производительность. Если нет, можете ли вы опубликовать iperf
с balance-rr и обеими машинами напрямую подключенными (без переключателя)? Кроме того, опубликуйте точную dd
команда, которую вы использовали для тестирования.
Примечание: здесь я говорю только об iSCSI. У меня нет опыта работы с AoE, кроме того, что я читал об этом, и я бы в любом случае не стал внедрять его в какую-либо новую инфраструктуру (она почти не существует).
Не используйте balance-rr ни для чего, кроме очень специфических протоколов точка-точка. Он имеет ужасную производительность при практически любой реальной нагрузке и вызывает множество сетевых проблем (таких как БОЛЬШОЙ джиттер). Определенно не используйте его с переключателем.
Используйте MPIO без какого-либо связывания на стороне инициатора, чтобы выполнить балансировку нагрузки и отказоустойчивость. Чтобы гарантировать, что ваши пути не «перепутаются» при отправке всего вашего трафика по одному пути, поместите отдельные пути (гигабитные сетевые адаптеры между целью и инициатором, в вашем случае) в отдельные подсети.
Не стесняйтесь связывать целевую сторону с LACP на путь (как в случае двух связей для двух путей для всего четырех сетевых адаптеров, как пример конфигурации целевого порта). Это отлично работает и может сбалансировать несколько соединений инициатора, использующих одни и те же пути. По возможности используйте также jumbo-кадры и iSER. Использование LACP на целевом устройстве сбалансирует подключения к каждому пути между несколькими сетевыми адаптерами.
Использование LACP на инициаторе будет эффективным только в том случае, если он устанавливает множество соединений с целевым порталом с одновременным использованием (что не характерно практически для любой рабочей нагрузки). Даже если бы вы эффективно реализовали LACP для каждого пути на инициаторе, использование (например) четырех дополнительных фабрик для каждого блока быстро превратилось бы в кошмар для кабелей. Если вам нужна пропускная способность более ~ 2 ГБ / с для одного инициатора, рассмотрите возможность использования Ethernet 10 ГБ / с.
Большинство ответов на АоЕ полностью неверны, не соответствуют действительности и показывают недостаток знаний и опыта в области АоЕ. Во-первых, он не прекратил свое существование. CORAID является поставщиком AoE, и они были перезапущены как «SouthSuite», сохранив при этом торговую марку CORAID. Это тоже те же разработчики. Они производят новые продукты и поддерживают большинство старых. Они также продвигают развитие AoE, о чем ясно свидетельствуют их открытые списки технической рассылки. Проверьте веб-сайт, он все обновлен и рассказывает всю историю на странице с историей.
Кто-то сказал, что AoE не выиграет от jumbo-фреймов, и также был совершенно неправ. Он был поддержан после выпуска версии 13 «vbladed». Вам необходимо настроить MTU для поддержки нового размера кадра, но в остальном он отлично работает.
iSCSI работает на уровне 5 модели OSI. Обычный транспорт - TCP. Это дает вам некоторую коррекцию ошибок (из-за контрольных сумм в TCP) и позволяет маршрутизировать трафик через IP на уровне 3. На этом преимущества iSCSI заканчиваются. Его реальная производительность просто ужасна, если сравнить ее с чем-то вроде FCP, AoE или FCoE. Я приглашаю вас погуглить «сравнение производительности iscsi» для шоу ужасов.
Проблема со скоростью чтения могла быть связана с неправильной конфигурацией сети, отключите управление потоком и убедитесь, что вы используете достаточно большой буфер сокета. Вы также не упомянули, была ли ваша базовая файловая система настроена на предварительную выборку для чтения или нет. В зависимости от вашего сценария это может вам очень помочь, но будьте осторожны, чтобы не использовать это с некоторыми базами данных, которые требуют отключения кеширования.
Агрегация 802.3ad не сильно увеличит пропускную способность вашего отдельного потока даже в циклическом сценарии. Это также усложнит вашу сетевую конфигурацию и даст вам несколько новых возможностей выстрелить себе в ногу из-за несоответствия интервалов PDU или неправильной настройки вашего канала Cisco VPC для поддержки активного-активного состояния. Не используйте LACP с AoE, пусть он сам обрабатывает множественные пути и мультиплексирование. Более поздние версии AoE справляются с этим красиво и в большинстве случаев более изящно, чем даже FCP, поскольку все происходит автоматически. Дополнительные порты Ethernet увеличивают пропускную способность и повышают отказоустойчивость. Если вы распределите порты Ethernet хоста и инициатора по нескольким коммутаторам, это может обеспечить еще большую избыточность. Настраивать режим связывания не нужно. Кроме того, не запускайте IP на тех же интерфейсах, которые вы используете для AoE. Известно, что иногда это также создает проблемы для производительности.
Короче говоря, не слушайте скептиков AoE, они говорят, что у них нет большого опыта, и они просто оседлали модные мозговые волны. Избегайте стада. Настройте резервное хранилище с настраиваемой вручную предварительной выборкой, и вы, вероятно, увидите, что пропускная способность чтения значительно возрастет. Откажитесь от использования протоколов агрегации и запустите screaming с iSCSI. И последнее: прекратите использовать «дд», это не лучший тест и может привести к плохому кешированию. Используйте настоящий инструмент для тестирования производительности, например «fio», «iozone» или «dbench». Это дает гораздо более надежные результаты.
Я знаю, что LACP предназначен для нескольких подключений. Тестирование было актом отчаяния :)
Все тесты проводились с balance-rr и двумя сетевыми картами.
Запись в цель iSCSI:
dd if = / dev / zero of = / mnt / zero.bin bs = 1M count = 2000
2000 + 0 przeczytanych recordów
2000 + 0 zapisanych recordów
2097152000 байт (2,1 ГБ, 2,0 ГБ) скопировано, 101093 с, 207 МБ / с
Чтение с цели iSCSI:
dd if = / mnt / zero.bin of = / dev / null bs = 1M
2000 + 0 przeczytanych recordów
2000 + 0 zapisanych recordów
2097152000 байт (2,1 ГБ, 2,0 ГБ) скопировано, 16 1684 с, 130 МБ / с
Скорость сети:
iperf -c 172.16.10.80
-------------------------------------------------- ----------
Клиент подключается к 172.16.10.80, TCP-порт 5001
Размер окна TCP: 325 КБ (по умолчанию)
-------------------------------------------------- ----------
[3] локальный порт 172.16.10.70 37024 соединен с портом 172.16.10.80 5001
[ID] Интервальная пропускная способность передачи
[3] 0,0-10,0 с 2,30 ГБ 1,98 Гбит / с
Тестирование с использованием iperf и jumbo-фреймов дало одинаковые результаты.
Я набрал скорость чтения, запустив инициатор:
hdparm -a 2048 / dev / dm-1
Раньше было 256, а скорость чтения 96 МБ / с.
Моя цель - добиться скорости чтения около 200 МБ / с.
РЕДАКТИРОВАТЬ:
1. Мы не используем LACP - это был разовый тест.
2. Тестирование с помощью balance-rr и MPIO дает точно такие же результаты. Многопутевость была протестирована с сетевыми адаптерами в разных подсетях.
3. Добавление дополнительных сетевых адаптеров не увеличивает скорость чтения, а только снижает использование каждой сетевой карты.
4. Думаем, проблема в каком-то ограничении (драйвер, модуль?), Которое не позволяет читать быстрее. Но я не уверен, цель это или инициатор.
РЕДАКТИРОВАТЬ 2: Просто провел дополнительный тест: настроил тот же хост в качестве цели и инициатора, чтобы избавиться от проблем с сетевым оборудованием. Я был в шоке: точно такая же скорость чтения! 130 МБ / с! Запись - 227 МБ / с.
Как вы настроили свой nic, правильно ли настроены все буферы, достаточно ли оперативной памяти для сетевых буферов. также не используйте здесь связывание, вы можете использовать 2 канала iscsi и использовать их для нескольких путей на инициаторе, то же самое с ATAoE для многопутий инициатора через полку и идентификатор lun на любом пути.