[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 написал(а):Процессор тут

wi написал(а):
Процессор тут ни при чем. В топе wa показывает ожидание ввода вывода. Тоесть это явное указание на то что подсистема ввода-вывода не справляется с поставленной задачей.

Точно, я уже торможу.

wi написал(а):
Тест первый …

Пишем на диск:

# dd if=/dev/urandom of=/mnt/drbd/test.raw 'oflag=direct'
^C97596+0 records in
97595+0 records out
49968640 bytes (50 MB) copied, 14.0006 s, 3.6 MB/s

# dd if=/dev/urandom of=/mnt/drbd/test.raw bs=1M count=100
100+0 records in
100+0 records out
104857600 bytes (105 MB) copied, 14.05 s, 7.5 MB/s

Читаем с диска:

# dd if=/mnt/drbd/test.raw of=/dev/null  
204800+0 records in
204800+0 records out
104857600 bytes (105 MB) copied, 0.113735 s, 922 MB/s

# dd if=/mnt/drbd/test.raw of=/dev/null bs=1M count=100 
100+0 records in
100+0 records out
104857600 bytes (105 MB) copied, 0.0197605 s, 5.3 GB/s

В общем, не медленно.

wi написал(а):
В вашем случае вы получили 400 мегабайт в секунду (на самом деле это не так, ибо чтение одновременно с записью но ...), или в привычных единицах 4 гигабита.

Это неважно, т.к. я делал только для сравнения вывода из памяти на диск и на DRBD.

wi написал(а):
В вашем случае вы каким-то макаром умудрились получить искомые 4 гигабита.. Так что на первый взгляд все пучком.

Теперь по поводу материнки. Четырех сетевых портов у нее я не увидел,

Что значит «каким-то макаром»? Кажется, в первом сообщении я указал совершенно однозначно, какие сетевые карты использовались, какой метод агрегирования каналов использовался и ничего про свичи не писал. Так?

wi написал(а):
как впрочем и сас-контроллера. На матери сата, выдающий в пике три гигабита/сек. Плюс три сетевыухи, одна из которых ипми. Так что ваша ссылка ничего отвечающим о вашей системе не говорит.

Так ли важно, как называется SAS-контроллер? Опять же, указано, что он есть. В тестах выше показано, что он довольно быстрый. Во всяком случае, сомнительно, что такое можно получить на SATA-дисках и встроенном контроллере.

wi написал(а):
По идее pci-express 2.0 что у вас c вашими запросами должно справится на ура (ибо 8 гигабит в одну сторону на ней получить согласно спеке можно).

Вот и выходит, что должно хотя бы 200+ МБ/сек давать, а не даёт. Лыжи или я?

HolyBoy написал(а): Читаем с

HolyBoy написал(а):
Читаем с диска:

# dd if=/mnt/drbd/test.raw of=/dev/null  
204800+0 records in
204800+0 records out
104857600 bytes (105 MB) copied, 0.113735 s, 922 MB/s

# dd if=/mnt/drbd/test.raw of=/dev/null bs=1M count=100 
100+0 records in
100+0 records out
104857600 bytes (105 MB) copied, 0.0197605 s, 5.3 GB/s

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

Лыжи или я? скорее 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 if=/var/tmp/test.raw of=/dev/vg/testdrbd bs=10M  'oflag=direct'
100+0 records in
100+0 records out
1048576000 bytes (1.0 GB) copied, 1.56732 s, 669 MB/s

dd if=/var/tmp/test.raw of=/dev/drbd13 bs=10M  'oflag=direct'
100+0 records in
100+0 records out
1048576000 bytes (1.0 GB) copied, 3.38932 s, 309 MB/s

dd if=/var/tmp/test.raw of=/dev/drbd13 bs=128k  'oflag=direct'
8000+0 records in
8000+0 records out
1048576000 bytes (1.0 GB) copied, 18.8894 s, 55.5 MB/s

dd if=/dev/zero of=/dev/vg/testdrbd bs=10M  'oflag=direct'
dd: writing `/dev/vg/testdrbd': No space left on device
205+0 records in
204+0 records out
2147483648 bytes (2.1 GB) copied, 3.48434 s, 616 MB/s

dd if=/dev/zero of=/dev/drbd13 bs=10M  'oflag=direct'
dd: writing `/dev/drbd13': No space left on device
205+0 records in
204+0 records out
2147381248 bytes (2.1 GB) copied, 7.00496 s, 307 MB/s

В общем, если изменения идут крупными блоками, плюс, dd не тратит время процессора на чтение мелкими блоками, то скорость вполне на уровне. Пробовал до 50М блок брать, скорость поднималась незначительно. Видимо, 300 с небольшим плюсом MB/s — максимум, что можно выжать из моей связки. И это нормально, учитывая, что скорость сетевого соединения между DRBD-хостами как раз примерно 400MB/s.

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".