FastNetMon

Показаны сообщения с ярлыком iSCSI. Показать все сообщения
Показаны сообщения с ярлыком iSCSI. Показать все сообщения

понедельник, 23 мая 2011 г.

Какие сетевые драйверы в RHEL 6 поддерживают iSCSI offloading?

Offload iSCSI — like the Chelsio cxgb3i, Broadcom bnx2i and ServerEngines be2iscsi modules, this stack allocates a scsi_host for each PCI device. As such, each port on a host bus adapter will show up as a different PCI device, with a different scsi_host per HBA port.

Источник: http://docs.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/6/html/Storage_Administration_Guide/iscsioffloadmain.html

Сетевые адаптеры с поддержкой iSCSI offload

Broadcom 5709 Dual Port 1GbE NIC with TOE, iSCSI Offload PCIe-4: http://accessories.us.dell.com/sna/productdetail.aspx?c=us&l=en&s=bsd&cs=04&sku=430-3261&dgc=SS&cid=52102&lid=1342490 и всего за 175 баксов :)

Вот вся линейка их продуктов с поддержкой iSCSI offload: http://www.broadcom.com/products/Ethernet-Controllers/Enterprise-Server

вторник, 12 октября 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 за счет своей легковесности.

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

Производительность MySQL при работе на iSCSI массиве

Всем, кто заинтересован в сабже, рекомендую прочесть статью:
http://ralpartha.blogspot.com/2006/07/mysql-sysbench-benchmarking-iscsi.html

А вот больше технических подробностей теста: http://ralpartha.blogspot.com/2006/07/more-info-on-iscsi-benchmark.html

А вот результаты внедрения в продакшене: http://ralpartha.blogspot.com/2007/02/mysql-and-iscsi-winning-combo.html

А вот комментарии специалистов на mysqlperformanceblog: http://www.mysqlperformanceblog.com/2006/07/06/sysbench-evaluation-of-iscsi-performance/

Я понимаю, что многие заголовок посчитают бредом сумасшедшего, но прошу прочесть статьи по ссылкам :)

понедельник, 11 октября 2010 г.

Настройка iSCSI initiator на Debian 6 Squeeze

Теперь попробуем поставить инициатор и подключиться к нашему устройству:
apt-get install -y open-iscsi

И добавляем в самый верх конфига:
vi /etc/iscsi/iscsid.conf

Следующее (это есть данные для аутентификации на таргете, аутентификацию таргета мы не осуществляем):
discovery.sendtargets.auth.authmethod = CHAP
discovery.sendtargets.auth.username = joe
discovery.sendtargets.auth.password = YourSecurePwd1
node.session.auth.authmethod = CHAP
node.session.auth.username = joe
node.session.auth.password = YourSecurePwd1

И чуточку ниже корректируем настройки запуска для автозапуска (не забывая убрать node.startup = manual):
node.startup = automatic

Подгружаем клиент-демон:
/etc/init.d/open-iscsi start

Все, теперь пробуем сделать discovery, чтобы обнаружить наш экспортированный SSD (-p задает IP адрес портала, -m задает тип операции):
iscsiadm -m discovery -t st -p 127.0.0.1
127.0.0.1:3260,1 iqn.2012-03.ru.fastvps.storage:storage1
xx.yy.zz.kk:3260,1 iqn.2012-03.ru.fastvps.storage:storage1

Выполняем логин:
iscsiadm -m node --targetname "iqn.2012-03.ru.fastvps.storage:storage1" --portal "127.0.0.1:3260" --login

Logging in to [iface: default, target: iqn.2012-03.ru.fastvps.storage:storage1, portal: 127.0.0.1,3260]
Login to [iface: default, target: iqn.2012-03.ru.fastvps.storage:storage1, portal: 127.0.0.1,3260]: successful

После этого в системе появится еще одно блочное устройство:
dmesg | tail -15
[62342.477969] Loading iSCSI transport class v2.0-870.
[62342.484054] iscsi: registered transport (tcp)
[62342.500410] iscsi: registered transport (iser)
[62424.188944] scsi9 : iSCSI Initiator over TCP/IP
[62425.189703] scsi 9:0:0:0: Direct-Access IET VIRTUAL-DISK 0 PQ: 0 ANSI: 4
[62425.189820] sd 9:0:0:0: Attached scsi generic sg11 type 0
[62425.189913] sd 9:0:0:0: [sdd] Very big device. Trying to use READ CAPACITY(16).
[62425.189952] sd 9:0:0:0: [sdd] 23404216320 512-byte logical blocks: (11.9 TB/10.8 TiB)
[62425.189992] sd 9:0:0:0: [sdd] Write Protect is off
[62425.189993] sd 9:0:0:0: [sdd] Mode Sense: 77 00 00 08
[62425.190063] sd 9:0:0:0: [sdd] Write cache: disabled, read cache: enabled, doesn't support DPO or FUA
[62425.190165] sd 9:0:0:0: [sdd] Very big device. Trying to use READ CAPACITY(16).
[62425.190292] sdd: unknown partition table
[62425.190696] sd 9:0:0:0: [sdd] Very big device. Trying to use READ CAPACITY(16).
[62425.190885] sd 9:0:0:0: [sdd] Attached SCSI disk


После этого я с легкостью (как будто это мой диск в компьютере) запустил команду fdisk, создал логический раздел на удаленном устройстве и создал на нем файловую систему.

Для того, чтобы отключить его делаем logout:
iscsiadm -m node --targetname "iqn.2012-03.ru.fastvps.storage:storage1" --portal "127.0.0.1:3260" --logout
Logging out of session [sid: 1, target: iqn.2012-03.ru.fastvps.storage:storage1, portal: 127.0.0.1,3260]
Logout of [sid: 1, target: iqn.2012-03.ru.fastvps.storage:storage1, portal: 127.0.0.1,3260]: successful

О настройке серверной части читайте в другой статье: http://phpsuxx.blogspot.com/2010/10/iscsi-target-debian-5-lenny-x8664.html

Источник initiator: http://wiki.debian.org/SAN/iSCSI/open-iscsi

воскресенье, 10 октября 2010 г.

Настройка iSCSI target на Debian 6 Squeeze x86_64

Что такое iSCSI и зачем оно нужно: http://ru.wikipedia.org/wiki/ISCSI

Ставим пакет служебных программ, а также модуль ядра (собирается автоматически при обновлении ядра):
apt-get install -y iscsitarget iscsitarget-dkms

Активируем запуск iSCSI target:
vi /etc/default/iscsitarget

Указываем там следующее:
ISCSITARGET_ENABLE=true

Я планирую экспортировать по iSCSI блочное устройство /dev/sdc, так что

Теперь открываем главный конфиг-файл:
vi /etc/iet/ietd.conf


Теперь в самый низ добавляем следующие строки:
Target iqn.2012-03.ru.fastvps.storage:storage1
IncomingUser joe YourSecurePwd1
OutgoingUser jim YourSecurePwd2
Lun 0 Path=/dev/sdc,Type=fileio

Для начала стоит объяснить, что запись "iqn.2012-03.ru.fastvps.storage" представляет собой уникальное имя iSCSI target. Как можно заметить, в самом начале всегда "iqn", потом год и месяц создания домена и некий сабдомен (допустим, поддомен в домене всех сторадж-серверов), записанный в обратном формате. storage1 просто является дополнительным идентификатором.

IncomingUser предназначен для аутентификации iSCSI инициатора. А OutgoingUser предназначен для аутентификации самого сервера (target) на инициатор. Пароли при этом должны быть ровно 12 символов.

На последней строке идентифицируется устройство, которое мы экспортируем и режим (кроме fileio доступен blockio - прямой ввод/вывод с избежанием страничного кэша, подробнее об их отличиях можно прочесть man ietd.conf).

Все, запускаем:
/etc/init.d/iscsitarget start

Убеждаемся, что модуль ядоа зацепился:
lsmod|grep iscsi_trgt
iscsi_trgt 69353 4

А также смотрим dmesg:
dmesg|tail -4
[61850.263686] iSCSI Enterprise Target Software - version 1.4.20.2
[61850.263746] iscsi_trgt: Registered io type fileio
[61850.263748] iscsi_trgt: Registered io type blockio
[61850.263749] iscsi_trgt: Registered io type nullio

Как видим, наш демон забиндился на 3260й порт:
netstat -lnpt | grep 3260
tcp 0 0 0.0.0.0:3260 0.0.0.0:* LISTEN 7169/ietd
tcp6 0 0 :::3260 :::* LISTEN 7169/ietd

О настройке инициатора (клиентской части) читайте в другом посте: http://phpsuxx.blogspot.com/2010/10/iscsi-initiator-debian-5-lenny.html

Источник target: http://wiki.debian.org/iSCSI/iscsitarget