Имеется два хоста с четырёхъядерным Intel(R) Xeon(R) CPU X3430 @ 2.40GHz на борту у каждого. 16 Гб RAM. Быстрый SAS-контроллер. Между собой соединены сетевыми картами Intel 82576 GN через четыре агрегированных в один канал интерфейса. Алгоритм balance-rr.
Тесты на скорость проводится так:
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;
}
}
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 раз…
Стал смотреть: похоже, что узкое место — I/O, т.к. процессор ожидает долго.
В ядре 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
Никто не сталкивался? Куда следует рыть, хотя бы направление подскажете? МП, вроде, может через себя достаточно широкий поток пропихнуть.