[DRBD] Проблемы с производительностью [SOLVED]
Имеется два хоста с четырёхъядерным Intel(R) Xeon(R) CPU X3430 @ 2.40GHz на борту у каждого. 16 Гб RAM. Быстрый SAS-контроллер. Между собой соединены сетевыми картами Intel 82576 GN через четыре агрегированных в один канал интерфейса. Алгоритм balance-rr. База: http://www.supermicro.com/xeon_3400/Motherboard/X8SIA.cfm?IPMI=Y
Тесты на скорость записи проводится так:
1. Создаём на tmpfs-разделе файл: dd if=/dev/urandom of=/var/tmp/test.raw bs=128k count=8000
2. Готовый файл пишется в указанное место, изменяется только устройство, монтируемое к /mnt/drbd/ :
dd if=/var/tmp/test.raw of=/mnt/drbd/test.raw bs=128k count=8000 'oflag=direct'
Скорость сетевого соединения, померенная iperf: 453000 КБ/сек (здесь и далее все цифры в килобайтах и мегабайтах)
Сперва, создаём LVM-раздел на диске, пишем на него, как сказано в 2. Скорость получается в 400 МБ/сек.
Создаём DRBD-устройство с global_common.conf
global { usage-count no; minor-count 64; dialog-refresh 5; } common { protocol C; handlers { pri-on-incon-degr "/usr/lib64/drbd/notify-pri-on-incon-degr.sh; /usr/lib64/drbd/notify-emergency-reboot.sh; echo b > /proc/sysrq-trigger ; reboot -f"; pri-lost-after-sb "/usr/lib64/drbd/notify-pri-lost-after-sb.sh; /usr/lib64/drbd/notify-emergency-reboot.sh; echo b > /proc/sysrq-trigger ; reboot -f"; local-io-error "/usr/lib64/drbd/notify-io-error.sh; /usr/lib64/drbd/notify-emergency-shutdown.sh; echo o > /proc/sysrq-trigger ; halt -f"; fence-peer "/usr/lib64/drbd/crm-fence-peer.sh"; after-resync-target /usr/lib64/drbd/crm-unfence-peer.sh; } startup { wfc-timeout 60; degr-wfc-timeout 120; } disk { on-io-error detach; fencing resource-only; no-disk-flushes; no-md-flushes; no-disk-barrier; } net { max-buffers 20000; max-epoch-size 20000; unplug-watermark 512; sndbuf-size 0; } syncer { rate 410000K; } }
и файлом ресурса r13.res
resource r13 { device /dev/drbd13; disk /dev/vg/testdrbd; meta-disk internal; startup { become-primary-on nd1; } on nd1 { address 172.16.0.1:7802; } on nd2 { address 172.16.0.2:7803; } }
Созданный диск /dev/drbd13 монтируется, как показано в шаге 2 и скорость в результате оказывается… 57 МБ/сек. Я всё понимаю, но падение скорости почти в 7 раз…
Стал смотреть: похоже, что узкое место — процессор. Каждое ядро во время работы показывает большой wa, хотя, в целом процессор не нагружен. Складывается впечатление, что тормоза наблюдаются на стыке между сетью и диском.
В ядре DMA имеется:
zgrep -i dma /proc/config.gz | grep -v "#" CONFIG_ZONE_DMA=y CONFIG_NEED_DMA_MAP_STATE=y CONFIG_NEED_SG_DMA_LENGTH=y CONFIG_GENERIC_ISA_DMA=y CONFIG_ZONE_DMA32=y CONFIG_HAVE_DMA_ATTRS=y CONFIG_HAVE_DMA_API_DEBUG=y CONFIG_ARCH_DMA_ADDR_T_64BIT=y CONFIG_ZONE_DMA_FLAG=1 CONFIG_ISA_DMA_API=y CONFIG_SCSI_DMA=y CONFIG_ATA_BMDMA=y CONFIG_DMADEVICES=y CONFIG_INTEL_MID_DMAC=y CONFIG_INTEL_IOATDMA=y CONFIG_TIMB_DMA=y CONFIG_PCH_DMA=y CONFIG_DMA_ENGINE=y CONFIG_NET_DMA=y CONFIG_ASYNC_TX_DMA=y CONFIG_PROVIDE_OHCI1394_DMA_INIT=y CONFIG_ASYNC_TX_DISABLE_PQ_VAL_DMA=y CONFIG_ASYNC_TX_DISABLE_XOR_VAL_DMA=y CONFIG_HAS_DMA=y
, сам процессор, вроде, не настолько дохлый, чтобы не прокачать через себя хотя бы 200-250 МБ/сек.
Никто не сталкивался? Куда следует рыть, хотя бы направление подскажете? Или тут, о ужас, материнка так себе?
- Для комментирования войдите или зарегистрируйтесь
Процессор тут ни при чем. В
Процессор тут ни при чем. В топе wa показывает ожидание ввода вывода. Тоесть это явное указание на то что подсистема ввода-вывода не справляется с поставленной задачей.
Тест первый - насколько быстро работает /dev/urandom. dd if=/dev/urandom of=/mnt/.../delete.me Мой хиленький нетбук на таком тесте выдает 758 kB/s ну или грубо 8 мегабит/сек. Тут почти чистый тест скорости записи (urandom это почти процессор,и мы почти напрямую пишем с процессора на диск). Почти чистый тест скорости чтения можно выполнить скопировав полученный файл в /dev/null. Цифири лучше сравнить со спецификациями на диск и на материнку. Результаты не должны сильно (10-15%) отличаться от наихудших параметров спецификаций.
В вашем случае вы получили 400 мегабайт в секунду (на самом деле это не так, ибо чтение одновременно с записью но ...), или в привычных единицах 4 гигабита.
Чтение у дрбд сравнимо с о скоростью чтения с локального диска. Тут никаких проблем возникнуть не должно. А вот с записью...
Естественно,что в случае дрбд призаписи мы имеем два (почти) одинаковых потока. Один уйдет в сторону винта, другой в сторону сетевой. Соответственно, для сохранения подобной скорости, пропускная шина на материнке по спецификации должна быть как минимум два раза шире нежели полученный нами результат. Естественно,что сетевая должна все это без заминки пропустить. В моем случае мне нужно чтоб сетевуха пропускала что-то в районе 7 мегабит/сек (как то так 758K*10=7m). В принципе с этим справится любая 10 мегабитная сетевуха, при одном но... Их надо соединять мимо свича кроссом. Либо через отдельный свич. Гонять дрбд трафло через общую сеть некошерно, ибо не каждая сеть может похвастать свичами с неблокируемыми интерфейсами. В вашем случае вы каким-то макаром умудрились получить искомые 4 гигабита.. Так что на первый взгляд все пучком.
Теперь по поводу материнки. Четырех сетевых портов у нее я не увидел, как впрочем и сас-контроллера. На матери сата, выдающий в пике три гигабита/сек. Плюс три сетевыухи, одна из которых ипми. Так что ваша ссылка ничего отвечающим о вашей системе не говорит. По идее pci-express 2.0 что у вас c вашими запросами должно справится на ура (ибо 8 гигабит в одну сторону на ней получить согласно спеке можно).
ИМХО проблема в сетевой. Можно для начала попробовать объединить сервера по гигабитному интерфейсу кроссом. Скорость должна получиться почти гигабит, что в 2 раза больше чем у вас сейчас.
wi написал(а):Процессор тут
Точно, я уже торможу.
Пишем на диск:
Читаем с диска:
В общем, не медленно.
Это неважно, т.к. я делал только для сравнения вывода из памяти на диск и на DRBD.
Что значит «каким-то макаром»? Кажется, в первом сообщении я указал совершенно однозначно, какие сетевые карты использовались, какой метод агрегирования каналов использовался и ничего про свичи не писал. Так?
Так ли важно, как называется SAS-контроллер? Опять же, указано, что он есть. В тестах выше показано, что он довольно быстрый. Во всяком случае, сомнительно, что такое можно получить на SATA-дисках и встроенном контроллере.
Вот и выходит, что должно хотя бы 200+ МБ/сек давать, а не даёт. Лыжи или я?
HolyBoy написал(а): Читаем с
я не совсем в теме, но помоему в этом тесте вы забыли предварительно сбросить файловый кэш перед каждым чтением.
Лыжи или я? скорее softirq.
скорее softirq. Рекомендую oprofile
Compute:
Bosch M2.8.1 -> custom Bosch M2.8.3 clone from Russia.
Speed about 260 km,Ram 2 pers.,HDD - 70 kg,210 FLOPS ;)
Скорее, это можно назвать
Скорее, это можно назвать моей невнимательностью.
В общем, если изменения идут крупными блоками, плюс, dd не тратит время процессора на чтение мелкими блоками, то скорость вполне на уровне. Пробовал до 50М блок брать, скорость поднималась незначительно. Видимо, 300 с небольшим плюсом MB/s — максимум, что можно выжать из моей связки. И это нормально, учитывая, что скорость сетевого соединения между DRBD-хостами как раз примерно 400MB/s.