LINUX.ORG.RU
ФорумAdmin

DRBD - низкая производительность на запись

 , ,


0

3

Здравствуйте.

Имею следующий конфиг:

2 x IBM x3630, по 14 2Tb SATA-дисков в каждом, на каждом собран raid10 из 12 дисков, 2 в hot-spare. Гигабитный линк между серверами. DRBD поверх устройств raid10.

Производительность /dev/md127: throughput ~ 900 MB/s

fio со следующим конфигом:

[readtest]
blocksize=4k
filename=/dev/md/raid10
rw=randread
direct=1
buffered=0
ioengine=libaio
iodepth=16

выдает примерно такие цифры:

readtest: (groupid=0, jobs=1): err= 0: pid=5009
  read : io=38632KB, bw=3502.5KB/s, iops=875 , runt= 11030msec
    slat (usec): min=4 , max=135 , avg=15.63, stdev= 4.91
    clat (msec): min=1 , max=149 , avg=18.19, stdev=12.39
     lat (msec): min=2 , max=149 , avg=18.21, stdev=12.39
    bw (KB/s) : min=    0, max= 3736, per=61.09%, avg=2139.33, stdev=1733.77
  cpu          : usr=1.16%, sys=2.03%, ctx=9085, majf=0, minf=36
  IO depths    : 1=0.1%, 2=0.1%, 4=0.1%, 8=0.1%, 16=99.8%, 32=0.0%, >=64=0.0%
     submit    : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
     complete  : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.1%, 32=0.0%, 64=0.0%, >=64=0.0%
     issued r/w/d: total=9658/0/0, short=0/0/0

     lat (msec): 2=0.01%, 4=0.38%, 10=21.22%, 20=49.09%, 50=26.52%
     lat (msec): 100=2.63%, 250=0.16%
875 иопсов при задержке в 18 мс. Меня устраивают такие цифры, всё хорошо.

fio на запись - аналогично.

[writetest]
blocksize=4k
filename=/dev/md/raid10
rw=randwrite
direct=1
buffered=0
ioengine=libaio
iodepth=16

writetest: (groupid=0, jobs=1): err= 0: pid=5023
  write: io=169624KB, bw=3912.7KB/s, iops=978 , runt= 43353msec
    slat (usec): min=2 , max=20841 , avg=10.85, stdev=101.29
    clat (usec): min=15 , max=169027 , avg=16321.19, stdev=33566.14
     lat (usec): min=267 , max=169040 , avg=16332.46, stdev=33566.13
    bw (KB/s) : min= 2936, max= 7334, per=100.26%, avg=3922.26, stdev=526.96
  cpu          : usr=1.02%, sys=1.50%, ctx=40727, majf=0, minf=18
  IO depths    : 1=0.1%, 2=0.1%, 4=0.1%, 8=0.1%, 16=100.0%, 32=0.0%, >=64=0.0%
     submit    : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
     complete  : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.1%, 32=0.0%, 64=0.0%, >=64=0.0%
     issued r/w/d: total=0/42406/0, short=0/0/0
     lat (usec): 20=0.01%, 250=0.01%, 500=33.40%, 750=9.47%, 1000=5.28%
     lat (msec): 2=18.85%, 4=13.12%, 10=1.09%, 20=0.87%, 50=1.70%
     lat (msec): 100=12.06%, 250=4.15%

978 iops при задержке до 17 мс. Тоже прекрасно.

Далее начинается самое интересное.

Создаю drbd-устройство со следующим конфигом:

resource r0 {
	device     /dev/drbd0;
	disk       /dev/md/raid10;
	meta-disk  internal;
	on storage00 {
		address 192.168.254.10:7789;
	}
	on storage01 {
		address 192.168.254.11:7789;
	}
	net {
		max-buffers 8000;
		max-epoch-size 8000;
	}
}
И получаю нечто, не поддающееся обработке разумом, а именно:

throughput на чтение почти не деградирует (чего и следовало ожидать, чтение идёт с локальной ноды). throughput на запись фиксируется ровно на 60 МБ/с. Маловато, от гигабита я ожидал 110 МБ/с, тем более, что initial sync drbd-устройства происходил как раз на скорости 110 МБ/с. Throughput на запись деградирует независимо от состояния ноды (StandAlone/Connected).

Снова fio при StandAlone-устройстве. Чтение:

[readtest]
blocksize=4k
filename=/dev/drbd0
rw=randread
direct=1
buffered=0
ioengine=libaio
iodepth=16
readtest: (groupid=0, jobs=1): err= 0: pid=5214
  read : io=154380KB, bw=3500.5KB/s, iops=875 , runt= 44103msec
    slat (usec): min=5 , max=417 , avg=17.87, stdev= 5.28
    clat (msec): min=1 , max=209 , avg=18.25, stdev=12.51
     lat (msec): min=1 , max=209 , avg=18.27, stdev=12.51
    bw (KB/s) : min= 3048, max= 3840, per=100.16%, avg=3505.55, stdev=113.92
  cpu          : usr=1.02%, sys=2.17%, ctx=36213, majf=0, minf=37
  IO depths    : 1=0.1%, 2=0.1%, 4=0.1%, 8=0.1%, 16=100.0%, 32=0.0%, >=64=0.0%
     submit    : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
     complete  : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.1%, 32=0.0%, 64=0.0%, >=64=0.0%
     issued r/w/d: total=38595/0/0, short=0/0/0

     lat (msec): 2=0.01%, 4=0.47%, 10=21.24%, 20=48.90%, 50=26.46%
     lat (msec): 100=2.79%, 250=0.13%

Запись:

[readtest]
blocksize=4k
filename=/dev/drbd0
rw=randread
direct=1
buffered=0
ioengine=libaio
iodepth=16
writetest: (groupid=0, jobs=1): err= 0: pid=5229
  write: io=2396.0KB, bw=109341 B/s, iops=26 , runt= 22439msec
    slat (msec): min=8 , max=67 , avg=37.40, stdev= 9.43
    clat (usec): min=440 , max=741029 , avg=553594.77, stdev=83784.27
     lat (msec): min=40 , max=783 , avg=590.99, stdev=86.72
    bw (KB/s) : min=    6, max=  131, per=98.23%, avg=104.12, stdev=19.29
  cpu          : usr=0.30%, sys=0.11%, ctx=601, majf=0, minf=20
  IO depths    : 1=0.2%, 2=0.3%, 4=0.7%, 8=1.3%, 16=97.5%, 32=0.0%, >=64=0.0%
     submit    : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
     complete  : 0=0.0%, 4=99.8%, 8=0.0%, 16=0.2%, 32=0.0%, 64=0.0%, >=64=0.0%
     issued r/w/d: total=0/599/0, short=0/0/0
     lat (usec): 500=0.17%
     lat (msec): 50=0.17%, 100=0.17%, 250=0.83%, 500=14.36%, 750=84.31%

Чтение не деградировало или почти не деградировало. Запись деградировала во много раз (напоминаю, drbd находится в StandAlone-режиме)

Кроме того, присутствует страшная задержка на slat - больше 37 мс только на обработку io-запроса дисковым стеком.

Что я делаю не так с drbd? Это же ненормальное поведение, когда просто еще один слой (drbd over md) рубит производительность в сорок раз?

DRBD 8.3, ядро 3.5.0-27-generic, система Ubuntu 12.04 LTS. Планировщик io - cfq.

Помогите?

а BBU точно есть и массив на writeback?

37ms по скорости это несколько запросов в очереди. drbd синхронно должен работать, а это двойная задержка IO+ round trip (несколько раз, потому что блок 4k, а сеть скорее всего 1.5к пакеты имеет)

ihanick
()
Ответ на: комментарий от ihanick

Это md-raid, без примочек типа flashcache, поэтому writeback там нет.

Приведены тесты при отключенной сетевой части DRBD (устройство в режиме StandAlone). Никаких round-trip, никакой сетевой связи вообще нет.

Тормоз возникает между drbd-устройством и md-устройством, вероятно, внутри drbd (потому что md-устройство не тормозит).

Тест fio drbd0 с iodepth=1 не меняет картину.

writetest: (groupid=0, jobs=1): err= 0: pid=5365
  write: io=2488.0KB, bw=106225 B/s, iops=25 , runt= 23984msec
    slat (msec): min=16 , max=57 , avg=38.03, stdev= 7.08
    clat (usec): min=354 , max=1364 , avg=469.38, stdev=64.27
     lat (msec): min=16 , max=58 , avg=38.50, stdev= 7.08
    bw (KB/s) : min=   79, max=  122, per=100.46%, avg=103.48, stdev= 8.70
  cpu          : usr=0.27%, sys=0.15%, ctx=1245, majf=0, minf=19
  IO depths    : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0%
     submit    : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
     complete  : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
     issued r/w/d: total=0/622/0, short=0/0/0
     lat (usec): 500=94.21%, 750=4.98%, 1000=0.16%
     lat (msec): 2=0.64%
Обратите внимание, slat 38.03 ms, в то время как в аналогичном тесте md-устройства 10.85 us. Разница - почти 35000 раз.

spuzirev
() автор топика
Ответ на: комментарий от ihanick

У него DRBD в неподключенном режиме. Там задержек быть не должно.

blind_oracle ★★★★★
()
Ответ на: комментарий от spuzirev

Неправильно поделил, разница в 3500 раз.

spuzirev
() автор топика
Ответ на: комментарий от spuzirev

Может другие ядра попробовать? У меня на ядре 3.2.28 уже почти год работает iSCSI таргет как раз в режиме отключенного drbd поверх массива. Правда массив не софтовый, а на LSI Megaraid, может в этом дело. Хотя сомневаюсь.

Чтобы проверить создай нулевое устройство, к примеру так:

echo "0 2147483648 zero" | dmsetup create zerodisk
Повесь на него DRBD с метаданными где-нибудь в другом месте (в tmpfs том же). И уже его тестируй. Тут точно не будет зависимости от дисковой.

blind_oracle ★★★★★
()
Ответ на: комментарий от blind_oracle

Весёлые результаты :)

Запись в само устройство zerodisk получается на скорости 320 киопсов, slat - 2 мкс, clat - 47 мкс. Запись в drbd идёт со скоростью 47 киопсов, slat 21 мкс, clat - 346 мкс.

То есть по сравнению с device-mapper оно конечно жутко тормозное, но не настолько, как в паре с md-raid.

Насчёт другого ядра - сильно сомневаюсь. Руками отдельно собирал drbd 8.4 (userland + kernel module) на этом же ядре, цифры не изменились. Нужно попробовать, наверное, на 3.2.

spuzirev
() автор топика
Ответ на: комментарий от spuzirev

Вот у себя погонял zero диск на 3.4.39, drbd ядерный, метаданные в tmpfs через /dev/loop0:

# fio fio.write
writetest: (g=0): rw=randwrite, bs=4K-4K/4K-4K, ioengine=libaio, iodepth=16
Starting 1 process
Jobs: 1 (f=1): [w] [100.0% done] [0K/65K /s] [0/16 iops] [eta 00m:00s]
writetest: (groupid=0, jobs=1): err= 0: pid=1042
  write: io=1024GB, bw=231479KB/s, iops=57869, runt=4638617msec
    slat (usec): min=3, max=20028, avg=14.93, stdev=19.43
    clat (usec): min=160, max=1095K, avg=259.67, stdev=2056.18
    bw (KB/s) : min=   52, max=341376, per=100.13%, avg=231778.04, stdev=44305.55
  cpu          : usr=15.88%, sys=40.72%, ctx=268238781, majf=0, minf=20958
  IO depths    : 1=0.1%, 2=0.1%, 4=0.1%, 8=0.1%, 16=100.0%, 32=0.0%, >=64=0.0%
     submit    : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
     complete  : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.1%, 32=0.0%, 64=0.0%, >=64=0.0%
     issued r/w: total=0/268435456, short=0/0
     lat (usec): 250=18.75%, 500=81.19%, 750=0.02%, 1000=0.01%
     lat (msec): 2=0.01%, 4=0.01%, 10=0.01%, 20=0.01%, 50=0.01%
     lat (msec): 100=0.01%, 250=0.01%, 500=0.01%, 750=0.01%, 1000=0.01%
     lat (msec): 2000=0.01%

Run status group 0 (all jobs):
  WRITE: io=1024GB, aggrb=231478KB/s, minb=237034KB/s, maxb=237034KB/s, mint=4638617msec, maxt=4638617msec

Disk stats (read/write):
  drbd0: ios=16/268435452, merge=0/0, ticks=0/3085000, in_queue=320400, util=6.91%
В общем и целом как у тебя. В дрбд еще советуют шедулер deadline. С mdraid проверить пока не могу.

blind_oracle ★★★★★
()

В стародавние временя я получил теже 60 МБ/сек. Сделал бондинг, получил порядка 88 МБ/сек кажется. :(

DALDON ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.