Для тестов файловой системы мы привлечем утилиту 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.