Tuesday, 12 October 2010

Тестирование iSCSI поверх 100 мегабитной сети

Планируем использовать iSCSI для одного из проектов, поэтому решил его протестировать. Для начала, пожалуй, стоит проверить оверхед технологии самой по себе, то есть, запустить и target и initiator на одной машине.

Для тестов файловой системы мы привлечем утилиту fio, о ней я писал несколько дней назад: http://phpsuxx.blogspot.com/2010/10/linux-fio.html Также по ссылке можете найти 3 измерения производительности SSD диска, подключенного напрямую по протоколу SATA2. Теперь давайте измерим, как изменится скорость при доступе напрямую, но по протоколу iSCSI.

Рандомное чтение (было 10939; во время теста load average поднималось до 1-1,5):
/usr/src/fio-1.41/fio -readonly -name iops -rw=randread -bs=512 -runtime=20 -iodepth 1 -filename /dev/sde -ioengine libaio -direct=1
iops: (g=0): rw=randread, bs=512-512/512-512, ioengine=libaio, iodepth=1
Starting 1 process
Jobs: 1 (f=1): [r] [100.0% done] [1874K/0K /s] [3661/0 iops] [eta 00m:00s]
iops: (groupid=0, jobs=1): err= 0: pid=19915
read : io=58185KB, bw=2909KB/s, iops=5818, runt= 20001msec
slat (usec): min=9, max=138, avg=13.30, stdev= 2.79
clat (usec): min=47, max=499, avg=153.16, stdev=75.35
bw (KB/s) : min= 1756, max= 4464, per=100.97%, avg=2937.15, stdev=1209.60
cpu : usr=5.22%, sys=9.74%, ctx=116459, majf=0, minf=25
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: total=116370/0, short=0/0
lat (usec): 50=0.01%, 100=31.24%, 250=51.24%, 500=17.52%


Run status group 0 (all jobs):
READ: io=58185KB, aggrb=2909KB/s, minb=2978KB/s, maxb=2978KB/s, mint=20001msec, maxt=20001msec

Disk stats (read/write):
sde: ios=115918/0, merge=0/0, ticks=17248/0, in_queue=17240, util=86.21%


Рандомная запись (было 2876; во время теста load average поднималось до 1-1,5):
/usr/src/fio-1.41/fio -name iops -rw=randwrite -bs=512 -runtime=20 -iodepth 1 -filename /dev/sde -ioengine libaio -direct=1
iops: (g=0): rw=randwrite, bs=512-512/512-512, ioengine=libaio, iodepth=1
Starting 1 process
Jobs: 1 (f=1): [w] [100.0% done] [0K/1472K /s] [0/2875 iops] [eta 00m:00s]
iops: (groupid=0, jobs=1): err= 0: pid=19927
write: io=29647KB, bw=1482KB/s, iops=2964, runt= 20001msec
slat (usec): min=6, max=145, avg=15.62, stdev= 4.37
clat (usec): min=99, max=6877, avg=315.64, stdev=334.37
bw (KB/s) : min= 1412, max= 1640, per=100.06%, avg=1482.85, stdev=36.07
cpu : usr=3.24%, sys=5.72%, ctx=59324, majf=0, minf=24
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: total=0/59294, short=0/0
lat (usec): 100=0.01%, 250=72.39%, 500=19.53%, 750=2.68%, 1000=1.24%
lat (msec): 2=3.35%, 4=0.78%, 10=0.02%

Run status group 0 (all jobs):
WRITE: io=29647KB, aggrb=1482KB/s, minb=1517KB/s, maxb=1517KB/s, mint=20001msec, maxt=20001msec

Disk stats (read/write):
sde: ios=0/58936, merge=0/0, ticks=0/17820, in_queue=17808, util=89.05%

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

Теперь же проведем те же самые тесты, но с машины, подключенной к тому же коммутатору, что и наша тестовая. Связь между машинами работате вот с такой задержкой:
ping -c4 188.40.68.15
PING 188.40.68.15 (188.40.68.15) 56(84) bytes of data.
64 bytes from 188.40.68.15: icmp_seq=1 ttl=62 time=0.294 ms
64 bytes from 188.40.68.15: icmp_seq=2 ttl=62 time=0.430 ms
64 bytes from 188.40.68.15: icmp_seq=3 ttl=62 time=0.301 ms
64 bytes from 188.40.68.15: icmp_seq=4 ttl=62 time=0.364 ms

--- 188.40.68.15 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 2999ms
rtt min/avg/max/mdev = 0.294/0.347/0.430/0.056 ms

Рандомное чтение (на локалхост было 5800, стало по сети 1340; нагрузка на сеть при этом порядка 8 мегабит/с):
/usr/src/fio-1.41/fio -readonly -name iops -rw=randread -bs=512 -runtime=20 -iodepth 1 -filename /dev/sdd -ioengine libaio -direct=1
iops: (g=0): rw=randread, bs=512-512/512-512, ioengine=libaio, iodepth=1
Starting 1 process
Jobs: 1 (f=1): [r] [100.0% done] [690K/0K /s] [1349/0 iops] [eta 00m:00s]
iops: (groupid=0, jobs=1): err= 0: pid=5378
read : io=13406KB, bw=686352B/s, iops=1340, runt= 20001msec
slat (usec): min=13, max=53, avg=25.26, stdev= 1.75
clat (usec): min=379, max=1040, avg=716.82, stdev=51.30
bw (KB/s) : min= 666, max= 686, per=100.10%, avg=670.69, stdev= 3.50
cpu : usr=0.62%, sys=5.42%, ctx=53626, majf=0, minf=25
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: total=26812/0, short=0/0
lat (usec): 500=0.43%, 750=76.95%, 1000=22.61%
lat (msec): 2=0.01%

Run status group 0 (all jobs):
READ: io=13406KB, aggrb=670KB/s, minb=686KB/s, maxb=686KB/s, mint=20001msec, maxt=20001msec

Disk stats (read/write):
sdd: ios=26648/0, merge=0/0, ticks=19032/0, in_queue=19024, util=95.14%


Рандомная запись (на локалхост было 2900, стало по сети 1964):
/usr/src/fio-1.41/fio -name iops -rw=randwrite -bs=512 -runtime=20 -iodepth 1 -filename /dev/sdd -ioengine libaio -direct=1
iops: (g=0): rw=randwrite, bs=512-512/512-512, ioengine=libaio, iodepth=1
Starting 1 process
Jobs: 1 (f=1): [w] [100.0% done] [0K/1011K /s] [0/1975 iops] [eta 00m:00s]
iops: (groupid=0, jobs=1): err= 0: pid=5347
write: io=19644KB, bw=982KB/s, iops=1964, runt= 20001msec
slat (usec): min=19, max=153, avg=34.11, stdev= 5.27
clat (usec): min=307, max=1183, avg=467.78, stdev=47.46
bw (KB/s) : min= 901, max= 999, per=100.04%, avg=982.44, stdev=23.28
cpu : usr=1.24%, sys=7.92%, ctx=78595, majf=0, minf=24
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: total=0/39287, short=0/0
lat (usec): 500=87.68%, 750=12.26%, 1000=0.06%
lat (msec): 2=0.01%

Run status group 0 (all jobs):
WRITE: io=19643KB, aggrb=982KB/s, minb=1005KB/s, maxb=1005KB/s, mint=20001msec, maxt=20001msec

Disk stats (read/write):
sdd: ios=0/39039, merge=0/0, ticks=0/18896, in_queue=18880, util=94.42%


Итого резюмируя все выше сказанное можно сказать, что:
1) iSCSI прожорлив до проца (поднять до 1.5 la на i7 975 - это круто, угу)
2) iSCSI упирается в какой-то лимит Linux при очень большом IOPS чтения
3) Для подключения устройств с меньшим IOPS, чем у SSD (SAS, SATA), iSCSI подходит почти идеально.
4) Все же стоит еще посмотреть в сторону AoE, возможно, он позволит избавится от таких обвалов IOPS за счет своей легковесности.

У кого есть дополнения - прошу в комментарии.

No comments:

Post a Comment

Note: only a member of this blog may post a comment.