ISCSI jõudluse suurendamine Linuxis

Allikas: Kuutõrvaja

iSCSI jõudluse suurendamine

vaja leida hea kompromiss latentsi suhtes. Tüüpilise iSCSI kasutava masina kettkasutusmuster on teistsugune -- rohkem väiksemaid pakette ja latents on kriitilisem. Tuleb analüüsida mis kihid üksteise peale on laotud ning kus ja mida puhverdatakse. Võimalik et tuleb tuunida ka I/O scheduleri seadeid hostis ja/või klientides.

Alternatiivseid iSCSI stacke võib kah proovida, selles suhtes on viimastes kernelites toimunud mingid arengud ja loodetavasti paremuse suunas.

Jumbo kaadrite lubamine

Kõik switchid ei pruugi jumbo kaadreid ja flowcontrolli toetada. Tasub enne switchi manualist järgi uurida kui neid hakata lubama. Töötavat võrguseadet saab jooksvalt ümber seadistada ifconfigu abil.

# ifconfig eth0
eth0 Link encap:Ethernet HWaddr 00:0E:0C:70:C9:63
inet addr:172.19.51.160 Bcast:172.19.255.255 Mask:255.255.0.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

See mis meid huvitab on MTU väärtus. Hetkel on see seatud 1500 peale mis pole jumbo paketi suurus. Selleks, et muuta tuleb anda järgnev käsk:

# ifconfig eth0 mtu 9000
# ifconfig eth0
eth0 Link encap:Ethernet HWaddr 00:0E:0C:70:C9:63
inet addr:172.19.51.160 Bcast:172.19.255.255 Mask:255.255.0.0
UP BROADCAST RUNNING MULTICAST MTU:9000 Metric:1

Selleks, et muuta seadistus Debianis püsivaks /etc/network/interfaces

auto eth1
 iface eth1 inet static
 address 192.168.1.100
 netmask 255.255.255.0
 gateway 192.168.1.1
 MTU 9000

isc-dhcpd abil muutmine

subnet 192.168.0.0 netmask 255.255.255.0 {
  option broadcast-address 192.168.0.255;
  option routers 192.168.0.1;
  option interface-mtu 9000;
}

Testimiseks proovime pingida

# ping 10.10.0.1 -M do -s 8972
PING 10.10.0.1 (10.10.0.1) 8972(9000) bytes of data.
8980 bytes from 10.10.0.1: icmp_req=1 ttl=64 time=2.39 ms
8980 bytes from 10.10.0.1: icmp_req=2 ttl=64 time=0.283 ms
8980 bytes from 10.10.0.1: icmp_req=3 ttl=64 time=0.259 ms

Linuxi I/O SCHEDULERi muutmine

Linux pakub mitmesuguseid kerneli I/O scheduleerijaid. Näiteks Redhatis on vaikimisi "CGQ" (Completely Fair Queuing). Näiteks Open-iSCSI grupp teatab, et vahel võib "NOOP"i kasutamine toimida iSCSI serveri puhul paremini.

Scheduleri saab jooksvalt muuta keskonnas näiteks järgnevalt:

#echo noop > /sys/block/${DEVICE}/queue/scheduler

Samamoodi saab hiljem muuta seadistuse tagasi cfg peale

LINUX READ AHEAD VALUE

Vaikimisi küsib Linux lugemise ajal järgmised 256 sektorit. Selle muutuja suurendamine võib lugemiskiirust märkimisväärselt suurendada. Ehk öelda siis kernelile, e ta loeks rohkem sektoreid vaikimisi ette.

Seda read-ahead numbrit saab muuta blockdev käsuga.

See on kasulik muidugi vaid järjestikuliselt I/O'd kasutavate rakenduste puhul ja võib põhjustada jõudluseprobleeme juhusliku lugemise korral. Järjestikuse lugemise puhul võis märgata aga jõudluse tõusu 10% kuni 20% vahemikus.


Süntaks on: blockdev –setra X <device name>

Näiteks

# /sbin/blockdev –setra 4096 /dev/sda

Et vaadelda eksisteerivat read ahead seadistusi kirjuta:

# blockdev –getra <device name>

Jumbod tuelb kindlasti lubada kui switch ja kõik masinad toetavad.

http://forum.open-e.com/showthread.php?t=1138

http://www.randomboot.org/storage/518-iscsi-performance-tuning.html