14 Aralık 2011, 17:50 | #1 | |
Çevrimdışı
Kullanıcıların profil bilgileri misafirlere kapatılmıştır.
IF Ticaret Sayısı: (1) | FreeBSD Isletim Sistemi'ni Yuksek Hizlar Icin Optimize Etmek Gunumuzde aglarin hizi ve tasidigi bant genisligi gun be gun daha fazlaca artmaktadir. Daha uc bes yil oncesine kadar ulkemizde 2 Mbit/sn baglantiya Internet Servis Saglayici'lar ancak sahip olabiliyorken, simdi ADSL hizmeti sayesinde ayni baglanti hizini evimizde de kullanabiliyoruz. Kullanicilarin bant genisliginin bu denli katlanarak arttigini goz onunde alirsak, aglar arasi trafigi yoneten ve yonlendiren cihazlarin 1 saniye mertebesinde Gigabit'ler seviyesinde trafik tasimakla yukumlu oldugunu herkes tahmin edebilir. Artan bant genisligi ve hizin yaninda ve buna paralel olarak, her paketi islemek icin gereken islemci zamani da artmaktadir. Dolayisila isletim sistemlerinde paket protokollerini yonetmekle yukumlu "stack" kod- larinin daha efektif ve optimize calismasi, ag isleme yukunun mumkun olabildigince aza indirilmesi ve asil isi yapan userspace sureclere daha fazla CPU zamani ayrilmasi gerekmektedir. Bu makalede, FreeBSD isletim sisteminin yuksek hiz ve bant genisliklerindeki aglarin yukunu tasiyabilmesi icin, cekirdek tarafinda 5-CURRENT serisi'nden beri yapilan onemli iyilestirmeler ve bu iyilestirmelerin sistem yoneticileri tarafindan nasil kullanilabilecegi ile ilgili bilgi ve ipuclari listelenecektir. FreeBSD isletim sistemi, "Power to Serve" slogani ile ozellikle kararli ve performansli bir "ag servisleri" platformu olma konusunda iddialidir. Dolayisi ile projede ag performansi oncelikli bir basari kriteri olarak daima kontrol altinda tutulmaktadir. Yapilan arastirmalar, yuksek hizlardaki aglarda "TCP veri iletim" performans' inin aradaki ag donanimlarindan ziyade, paketi yollayan ve alan uc birimler tarafindan sinirlandirildigini gosteriyor. Uc birimler, TCP katmaninin altinda ve ustunde yapacaklari iyilestirmelerle, veri iletim hizlarini ciddi oranlarda artirabilirler. Bu makalede, ust paragrafta isaret edilen TCP alti ve ustu iyilestirmelerden hangilerinin ozellikle onemli oldugunu anlatilmaya calisilacaktir. 1. Hangi kablo? OSI katmanlarina gore 1. katmandan baslayalim. Eger 100 Mbit/s bir agda calisiyorsaniz en azindan CAT-5 bir kablo, 1 Gbit/s hizlarinda bir aga bagli iseniz CAT-6 kablo bulup makinaniza takmakla ise baslayiniz. 2. Hangi ethernet karti? Ethernet karti secimi cok onemlidir. Eger cok yuksek hizlarda veri transferi yapmiyorsaniz (yuksek hizlardan kastim, ag karti maksimum hizinin yuzde 40-50' sinden fazlasini kullanmiyorsaniz: 100 Mbit/s kartiniz var ve 50 Mbit/s bant genisliginden fazlasini kullaniyorsaniz demektir) FreeBSD tarafindan taninan herhangi bir ag kartini kullanabilirsiniz. NOT 1: Burada marka ismi vermek yerine, o marka ethernet kartinin FreeBSD aygit ismine referans verilecektir. Eger o aygit ismi ile taninan kartlarin marka ve modelini ogrenmek istereniz, man 4 aygit_ismi komunutu vererek ilgili manual sayfasindan bu bilgiyi edinebilirsiniz. Mesela rl aygit ismi ile taninan kartlari ogrenmek icin: man 4 rl yazmaniz yeterlidir. Size asagidakina benzer bir sayfa acilacak, orada hangi marka/model'in bu surucu tarafindan tanindigi bilgisi sunulacaktir: RL(4) FreeBSD Kernel Interfaces Manual RL(4) NAME rl -- RealTek 8129/8139 Fast Ethernet device driver rl, re, vr, fxp, bge aygit suruculeri tarafindan taninan kartlar isinizi cok buyuk olasilikla gorecektir. Eger yuksek hizlarda veri transferi yapacaksaniz (1 Gbps hattiniz sature oluyorsa mesela) ag kartinizin biraz kaliteli, ve ilgili aygit surucusunun FreeBSD tarafindan cok iyi destekleniyor olmasi gerekmektedir. Bu noktada size tavsiye edebilecegim, em aygit surucusu tarafindan yonetilen ethernet kartlaridir. Bu kartlar yazar tarafindan uzun zamandir kullanilmakta ve stabilite ve performans acisindan diger kartlara gore cok daha kararli durumda gorunmektedirler. Kartin fabrika ureticisi firma da, FreeBSD surucusu konusunda ilk elden destek vermekte ve FreeBSD gelistiricileri ile cok siki bir iliski icerisindedir. Bu siki bilgi alisverisi ve her daim destek, ethernet kartinin butun ozelliklerinin FreeBSD tarafindan tamamiyle kullanilabilmesini netice vermektedir. Ornek vermek gerekirse, Interrupt coalescing, polling gibi FreeBSD iyilestirmeleri direkt olarak em kartlarinin suruculerinde gelistirilmis ve sonradan diger aygitlara aktarilmisti. Ag karti secerken dikkat edilecek diger bir husus ta, kartin uzerinde calisacagi BUS'in hizi ve bant genisligidir. Eger 66-Mhz hizinda, 32-bit bir PCI BUS'iniz var sa, sizin bu BUS'tan elde edebileceginiz maksimum hiz: 66 Mhz x 32 = 2.112 Mbit/s (yaklasik 2 Gbit/s) veri transfer genisligidir. Siz bu PCI bus'a 10 Gbit/s hizinda bir kart taksaniz dahi, BUS hizi 2 Gbit/s'den fazlasini kaldirmadigi icin beklediginiz performansi elde edemeyeceksiniz. Dolayisiyla, en az 133 Mhz hizinda; ve yeni veriyollarini (PCI-X, PCI-E) destek- leyen bir kart edinmeniz mutlaka gereklidir. 3. MTU (Maximum Transmission Unit) Iyi bir kablo edindik, iyi bir ethernet kartimiz ve ethernet kartimizi yoneten iyi yazilmis bir aygit surucumuz var. Simdi devam edebiliriz. Paketlerin bir noktadan bir noktaya transferinde, islemcinin iki turlu yuku olabilir: a) Paket basina yuk (per-packet overhead) b) Byte basina yuk (per-byte overhead) Gonderilecek veri ne kadar ufak parcalara (frame) ayrilirsa, agda tasinmasi gereken parca sayisi artar. Bu da, ag karti tarafinda daha fazla interrupt ve daha dogal olarak, isletim sistemi tarafinda daha fazla context switch manasina gelmektedir. Gonderilecek verinin ne kadarlik parcalara ayrilacagi ag kartinin MTU degiskeni ile belirlenir. Ethernet aglarinda bu deger 1500 byte'dir (1514 - 14 byte ethernet basligi) Veri transferi yapan iki bilgisayar senkron olarak daha buyuk MTU degerlerinde ayarlanirsa, bu paket basina dusen yuku azaltacaktir. Alteon firmasi, "Jumbo frames" denilen teknigi bu nedenle gelistirmistir. Ag kartlari, opsiyonel olarak daha yuksek MTU degerleri icin ayarlanabilmektedir. Fakat bu ozellik ag karti ve surucusu tarafindan destekleniyor olmalidir. FreeBSD'de em surucusunun bu destegi vardir. Aktive etmek icin: # ifconfig em0 mtu 9000 komutunu vermek yeterlidir. Fakat burada dikkat edilmesi gereken nokta, bu MTU degerinin agdaki diger cihazlarla paylasiliyor ve ayni olmasi gerektigidir. 10/100 Mbit/s ag kartlarinda bu ozellik bulunmamakta, genellikle gigabit kartlarda gelmektedir. 4. Checksum off-loading Byte basina dusen yuku en aza indirmek icin gelistirilmis bir yontemdir. Her IP paketinde isletim sistemi, dolayisiyla CPU tarafindan yapilan IP/UDP/TCP checksum kontrol islemini, CPU'nun degil, bizzat ag karti tarafindan yapilmasini onerir. Paketler ag kartina checksum'u hesaplanmadan gonderilir, ag kartinin chip'i tarafindan checksum'lari hesaplanip ilgili kisimlara yazildiktan sonra aga basilir. Yine ayni sekilde, gelen paketlerin checksum kontrolu ag kartinin uzerindeki chip tarafindan yapilir, checksum'i bozuk paketler direk ag karti tarafindan isletim sistemini mesgul etmeyerek drop edilir. Eger kartiniz checksum offloading ozelligini destekliyorsa, # ifconfig em0 txsum komutu ile paket gonderimi; # ifconfig em0 rxsum komutu ile de paket alimi sirasinda checksum offloading'i etkinlestirebilir- siniz. Ayni sekilde, ag kartinizda bu ozellikleri pasiflestirmek icin; # ifconfig em0 -txsum # ifconfig em0 -rxsum komutlarini kullanabilirsiniz. 5. POLLING Cok fazla paket alisverisi olan sistemlerinizde, CPU'nuz ag kartlarindan gelen interrupt isteklerini karsilamaya calisirken, diger islemlere vakti kalmaya- bilir. POLLING ozelligi bu gibi durumlarda makinanin tamamen kullanilmaz hale gelmesini onlemek icin gelistirilmistir. Eger bir ag arayuzunde POLLING etkinlestirilirse, o kart icin rx interrupt'lari disable edilir. Fakar her CPU swclock tick'inde, polling aktive edilmis kartlar "poll" edilir, yani bu kartlarda gelen herhangi bir veri var mi yok mu kontrol edilir. Eger veri varsa, normal yoldan veri ust katmanlara ayni sekilde aktarilir. Bu ozelligi sisteminizde aktif hale getirmek icin cekirden ayar dosyaniza device POLLING options HZ=1000 degerlerini girip, cekirdeginizi yeniden derleyip, sistemi yeni cekirdek ile acmaniz gerekmektedir. Sistem POLLING destekli olarak acildiktan sonra: # ifconfig em0 polling komutunu vermeniz, bu arayuzde kesme isteklerinin kapatilmasini ve arayuzun polling moduna alinmasini netice verecektir. # ifconfig em0 -polling komutu bu islemi tersine cevirecektir. 6. Interrupt Coalescing POLLING mekanizmasinin dezavantaji, paketlerin alinmasinin bir muddet gecikmesi seklinde olusmaktadir. BSD gelistiricileri, pure-interrupt-driven bir mode veya POLLING gibi paket alim latency sikintisi olan mekanizma yerine, bu ikisinin avantajlarini bulusturan, dezavantajlarini da barindirmayan bir yapi olarak "Interrupt Coalescing"'i sisteme entegre ettiler. Bu model'de, asenkron kesme isteklerinin tamamen durdurulmasi yerine, kesme isteklerinin belirli bir algoritma tabaninda bir muddet geciktirilmesi dusuncesi yer etmektedir. Bu sekilde, birden fazla paket, ayni ISR (interrupt service routine) tarafindan karsilanacak, boylece, kesme isteginin sisteme verecegi yuk de dogrusal orantili olarak azalacaktir. Burada da paketlerin alimi sirasinda bir sure gecikmeden soz edilebilir, fakat bu gecikme POLLING'e gore cok daha az ve farkedilmesi zordur. Bu ozellik, ag karti tarafindan compile time'da aktive edildigi icin, kullanici tarafindan sistem calisirken degistirilememektedir. Cogu modern ag karti ve surucusu bu model'den fazlasiyla destek almaktadir. 7. ZERO-COPY sockets Byte basina dusen yuku (per-byte overhead) azaltmak icin onerilmis bir yontem olan ZERO-COPY sockets, paketlerin ag kartindan, cekirdek buffer'ina, oradan da userspace buffer'a kopyalanmasi yerine, ag kartindan direk userspace prog- ramin bellegine yazilmasi fikrine dayanir. Tek paketin iki defa kopyalanmasi onlenmis olacagi icin, paketlerin userspace'e aktarildigi durumlarda (zero-copy soketler, eger makinaniz sadece routing yapiyorsa bir isinize yaramayacaktir) ciddi performans artirimlari saglayabilecektir. ZC soketler, paket alimi ile iliskilendirildiginde on istek olarak, soket'e verilen paketin page-aligned olmasini istemektedirler. Dolayisiyla paket aliminda ZC socket kullanmak icin en azindan 4K'lik bir MTU buyuklugu gerekmektedir. Bu da, FreeBSD makinanizda Jumbo Frames ozelligini kullanmanizi zorunlu kilar. Paket gonderimi noktasinda bir kisitlama yoktur. Butun modern ag kartlari ile kullanilabilir. Bu ozelligi kullanabilmek icin, cekirdek ayar dosyanizda: options ZERO_COPY_SOCKETS options MCLSHIFT=12 options TI_JUMBO_HDRSPLIT seceneklerini yazip, cekirdeginizi yeniden derlemeniz gerekmektedir. Makinaniz yeni cekirdekle acildiktan sonra; 1. ag kartinizin MTU degerini 9000 yapin: # ifconfig em0 mtu 9000 2. Bu ozellikten cok daha fazla verim alabilmek icin, yazari asagidaki sysctl degisikliklerinin de aktive edilmesinin faydali olacagini soylemektedir: TCP maksimum segment buyuklugunun 64K'dan fazla olabilmesi: # sysctl -w net.inet.tcp.rfc1323=1 socket buffer'larinin artirilmasi: # sysctl -w kern.ipc.maxsockbuf=2097152 # sysctl -w net.inet.tcp.sendspace=524288 # sysctl -w net.inet.tcp.recvspace=524288 # sysctl -w net.inet.udp.recvspace=65535 # sysctl -w net.inet.udp.maxdgram=57344 8. SMPng (Symmetric Multiprocessing Next Generation) FreeBSD 4.x serisinin sonuna kadar, FreeBSD isletim sistemi userspace'de multi- programming'e olanak saglamakla beraber cekirdek seviyesinde birden fazla islemcinin sagladigi olanaklardan faydalanamamaktaydi. Bunun dogal sonucu olarak birden fazla islemcisi olan sunucularla, tek islemcisi olan FreeBSD sunucular ag performansi noktasinda hicbir farki haiz degildi. FreeBSD gelistiricileri 5.x serisi icin SMPng projesini adeta bir kilometre tasi ilan ettiler. Cekirdek kodunun, ozellikle de ag katmanlarinin GIANT lock tabir edilen tek bir semafor'dan kurtarilip, "fine-grained locking" altyapisina kavusturulmasi konusunda cok fazla efor sarfedildi. 5.x serisinin ilk surumleri'leri bu kodun ilk test sahasi olmasi acisindan sancili gecse de, 6.2-RELEASE surumu itibariyle bu kodun oldukca stabil oldugunu soylemek mumkundur. Bugun itibariyle hemen hemen butun ag suruculeri, ve onemli ag protokolleri (IPv4, IPv6, UDP, TCP, IPSec) SMPng'nin nimetlerinden sonuna kadar faydalanmaktadir. Makinaniza ps aux komutu ciktisina bakarsaniz asagidaki gibi process'ler goreceksiniz: 18 ?? WL 0:00.00 [swi6: task queue] 19 ?? WL 0:00.00 [irq9: acpi0] 20 ?? WL 0:00.00 [irq14: ata0] 21 ?? WL 0:00.00 [irq15: ata1] 22 ?? WL 0:05.45 [irq17: bt0] 23 ?? WL 0:09.44 [irq18: lnc0] 24 ?? WL 0:00.01 [irq1: atkbd0] 25 ?? WL 0:00.00 [irq12: psm0] 26 ?? WL 0:00.00 [irq7: ppc0] 27 ?? WL 0:00.00 [swi0: sio] Bu surecler, userspace surecler degillerdir. Tamamen cekirdek icinde calisan "kernel thread"lerdir. Tahmin edeceginiz gibi, her bir aygit surucusunun interrupt'lari farkli bit kernel thread tarafindan okunmakta. SMP-aware ag alt sistemi, FreeBSD'nin guncel surumlerinde (6.x serisi) ontanimli olarak gelmektedir. Sizin bu konuda ayrica bir ayar yapmaniza gerek yoktur. 9. TCP automatic sizing of send windows Paket basina dusen yuku azaltmak icin Andre Oppermann tarafindan onerilen ve gerceklenen bu yontem, bir tcp baglantisinda tradisyonel olarak statik olan send buffer'inin, baglantinin kaliteli olmasi durumunda kontrollu olarak artirilmasi ve baglantinin bandwidth'inin daha etkili kullanilmasi dusuncesine dayanir. Cekirdekteki ilgili kod, link'in maksimum kullanimi icin buffer'in en optimum buyuklukte tutulmasini saglar. Bu ozellik su anda 6.x serisinde ontanimli olarak gelmemekle beraber 7.x serisinde bulunmaktadir. Ozelligi etkinlestirmek icin asagidaki sysctl degisteknleri set edilebilir: tx tarafinda: # sysctl -w net.inet.tcp.sendbuf_auto=1 # sysctl -w net.inet.tcp.sendbuf_inc=8192 # sysctl -w net.inet.tcp.sendbuf_max=262144 rx tarafinda: # sysctl -w net.inet.tcp.recvbuf_auto=1 # sysctl -w net.inet.tcp.recvbuf_inc=16384 # sysctl -w net.inet.tcp.recvbuf_max=262144 10. DIGER IYILESTIRMELER Asagkidaki sysctl degerleri, sisteminizin cekirdek tarafindan belirlenmis limitlerini yukari cekmenizi saglar. Bu limitleri, CPU saat hiziniz ve sisteminizdeki RAM'inizi dikkate alarak artirmaniz tavsiye edilir: blocking write sistem cagrilarinin buffer yetersizligi nedeniyle block etmemsi icin: # sysctl -w sysctl net.inet.tcp.sendspace=65536 Daha yuksek TCP maksimum segment size degerlerinin kullanilabilmesi icin: # sysctl -w net.inet.tcp.rfc1323=1 Maksimum socket tampon bellek miktari: # sysctl -w kern.ipc.maxsockbuf=2097152 TCP/UDP send/receive buffer'lari: # sysctl -w net.inet.tcp.sendspace=524288 # sysctl -w net.inet.tcp.recvspace=524288 # sysctl -w net.inet.udp.recvspace=65535 # sysctl -w net.inet.udp.maxdgram=57344 11. USERSPACE tarafinda yapilacaklar Buraya kadar yazdiklarimiz Layer IV dahil olmak uzere bu katmana kadar olan kisimlarda yapilabilecek iyilesitirmelerdi. Bundan sonra butun is, iyi dizayn edilmis ve guzelce kodlanmis uygulamalar gelistirmeye ve boyle uygulamalari bulup kullanmaya kaliyor. 12. Sistemin Durumunu Izleme Sisteminizin durumunu, netstat, vmstat, systat gibi araclarla izleyebiliriniz. Ag karti baglaminda sistemi izlemek icin: # systat -ifstat 1 /0 /1 /2 /3 /4 /5 /6 /7 /8 /9 /10 Load Average Interface Traffic Peak Total lo0 in 0.000 KB/s 0.000 KB/s 3.474 MB out 0.000 KB/s 0.000 KB/s 3.474 MB lnc0 in 0.000 KB/s 0.000 KB/s 14.957 MB out 0.000 KB/s 0.000 KB/s 12.697 MB IP katmanini izlemek icin: # systat -ip 1 /0 /1 /2 /3 /4 /5 /6 /7 /8 /9 /10 Load Average IP Input IP Output 58494 total packets received 53530 total packets sent 0 - with bad checksums 53530 - generated locally 0 - too short for header 0 - output drops 0 - too short for data 0 output fragments generated 0 - with invalid hlen 0 - fragmentation failed 0 - with invalid length 0 destinations unreachable 0 - with invalid version 67 packets output via raw IP 0 - jumbograms 0 total fragments received UDP Statistics 0 - fragments dropped 1682 total input packets 0 - fragments timed out 0 - too short for header 0 - packets reassembled ok 0 - invalid checksum 0 packets forwarded 0 - no checksum 0 - unreachable dests 0 - invalid length 0 - redirects generated 2 - no socket for dest port 0 option errors 1170 - no socket for broadcast 0 unwanted multicasts 0 - socket buffer full # systat -tcp 1 TCP katmanini izlemek icin: TCP Connections TCP Packets 0 connections initiated 1 total packets sent 0 connections accepted 1 - data 0 connections established 0 - data (retransmit) 0 connections dropped 0 - ack-only 0 - in embryonic state 0 - window probes 0 - on retransmit timeout 0 - window updates 0 - by keepalive 0 - urgent data only 0 - from listen queue 0 - control 0 - resends by PMTU discovery TCP Timers 1 total packets received 0 potential rtt updates 0 - in sequence 1 - successful 0 - completely duplicate 0 delayed acks sent 0 - with some duplicate data 0 retransmit timeouts 0 - out-of-order 0 persist timeouts 0 - duplicate acks 0 keepalive probes 1 - acks 0 - timeouts 0 - window probes 0 - window updates 0 - bad checksum Sistemin load durumunu, CPU durumunu gormek icin: # vmstat 1 procs memory page disks faults cpu r b w avm fre flt re pi po fr sr da0 pa0 in sy cs us sy id 1 8 0 615388 45760 11 0 0 0 10 1 0 0 185 107 442 0 1 99 0 8 0 615388 45760 2 0 0 0 0 0 0 0 183 162 438 0 1 99 ^C Sistemin interrupt durumunu gormek icin: # netsat -i Name Mtu Network Address Ipkts Ierrs Opkts Oerrs Coll lnc0 1500 00:0c:29:18 Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir. 50 172723 2 50232 0 0 lnc0 1500 10/24 freefall6.endersy 55428 - 50522 - - plip0 1500 0 0 0 0 0 lo0 16384 3163 0 3163 0 0 lo0 16384 fe80:3::1 fe80:3::1 0 - 0 - - lo0 16384 localhost ::1 35 - 35 - - lo0 16384 your-net localhost 3128 - 3128 - - pflog 33208 0 0 0 0 0 13. SON SOZLER FreeBSD isletim sistemi, IPv4, TCP, IPv6, IPSec gibi, su anda iletisim dunyamizi derinden etkileyen protokollerin gelistirildigi cok eski ve saglam bir kod mirasina sahip bir isletim sistemi projesidir. Bu baglamda, ozellikle ag tek- nolojileri ile bir cok ar-ge calismasi bu projenin bunyesinde veya, bu proje baz alinmak suretiyle devam ettirilmektedir. Yukarida siralamaya calistigimiz performans iyilestirmeleri bu minvalde ortaya cikmis, ve halen de cikmaya devam etmektedir. Yurt disinda, ozellikle universitelerin Bilgisayar ve Elektronik Muhendisligi lisans, yuksek-lisans ve doktora ogrencileri tez calismasi olarak bu tip projeleri almakta, hem dunya IT sektorune cok onemli katkilar saglamakta hem de kendi bilgi ve gorgulerini inanilmaz artirmaktadirlar. Ulkemiz kurumlarinin ve insaninin da bu yolu takip etmesi umidiyle... 14. REFERANSLAR 1. Jeffrey S. Chase et al., End-System Optimizations for High-Speed TCP, Duke University 2. Tuning kernel limits: [Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...] 3. Zero-copy sockets: [Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...] 4. FreeBSD Netperf: [Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...] 5. Auto-size of tcp send buffers: [Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...] 6. Marko Zec, Miljenko Mikuc, Mario Zagar, Estimating the Impact of Interrupt Coalescing Delays on Steady State TCP Throughput. University of Zagreb. Kaynak: Murat Balaban [Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...] | |
|
Etiketler |
etmek, freebsd, hizlar, icin, isletim, optimize, sistemini, yuksek |
Konuyu Toplam 1 Üye okuyor. (0 Kayıtlı üye ve 1 Misafir) | |
| |