Linux Altında QOS - 1

27 March, 2009 (01:13) | Linux QOS | By: alper

Daha önce QOS un ne olduğu hakkında kısa bir yazım olmuştu QOS kavramına yabancı arkadaşların öne o yazıyı okumalarını tavsiye ederim.  Bundan sonra linux altında qos konusuna daha ayrıntılı olarak değineceğim. en çok referans olarak kullanmayı düşündüğüm site Leonardo Balliache’ e ait sitedir.

QOS bugün gitgide artan internet kullanımı, internetten alınan ses vb hizmetler dolayısıyla özellikle şirket kullanımında kaçınılmaz olmuştur. Özellikle vurgulamak istediğim bir nokta var, QOS denildiğinde ilk akla gelen kısıtlamadır. Bu görüş yerine göre doğru olsada genel olarak yanlıştır. QOS özgürlüktür ! ister büyük bir şirkette olun, ister evinizde ufak bir network de, hatta kendi kendinize tek bir host bile olsanız QOS kullanmanın sağladığı avantajlar sayısızdır. İnternetten bir dosya download ettiğinizde, torrent den dosyaları download için sıraladığınızda diğer insanların, hatta sizin kendi uygulamalarınızın çalışma kalitesinin düşmesi kaçınılmazdır. QOS size tüm bunları göz ardı etme imkanı sunar. iyi yapılandırılmış bir qos la internet yada network de neler olacağını, çalıştırmış olduğunuz proğramın diğer çalışmalarınızı nasıl etkileyeceğini düşünmeksizin özgürce internetin tadını çıkarabilirsiniz.

Linux QOS konusunda özellikle diğer user ların geliştirmiş olduğu extension’larla inanılmaz özellikler sunuyor. Klasik router ve firewall ların sağladığı tüm QOS algoritmalarını sağlarken, iptables entegrasyonu ile resmen oyuncak halini alıyor.

Hemen linux da qos çalışma mantığına girelim.

özet

En basit anlatımıyla bilgisayarımıza gelen bir paketin izlediği yol, NIC0 örneğin eth0 a fiziksel kablo ile gelen paket linux networking kodu tarafından yorumlanarak NIC1 e ( ikinci interface ) oradan fiziksel kablo ile bir sonraki hedefine yollanıyor.  Şimdi QOS un buradaki yerini daha iyi anlamak için Linux Networking Code a daha yakından bakalım.

Şekil 2

Yukarıdaki şekilde kernelin gelen bir paketi nasıl process ettiği  ve gönderdiği görülmektedir. “input De-multiplexing” denilen kısım gelen paketin hedefinin local yani linux un kendisine mi yoksa, başka bir hedefemi gönderildiğini analiz eder, şayet paket başka bir hedefe gönderilmişse, FORWARDING block denilen kısam gönderir, burada routing table a bakılır paket herhangi bir rule ile kesişiyorsa çıkış için OUTPUT QUEUE block una gönderir. Paket kendisine geldi ise , bir üst katmana göndererek paketi işlemeye gönderir, işlenen paket yine FORWARDING block a döndürülerek hedefine yollanır.  İşte bu noktada linux QOS devreye girer, burada yapılan işlemlere az sonra değineceğiz.

Yukardaki şekil Linux networking code nasıl çalıştığı hakkında fikir versede tamamen yeterli değil, gelen paketleri, local bir hizmet vermeyeceğimiz durumda De_multiplexing den geçirmek veya daha yüksek katmana göndermek istemeyiz, Dahada basite imdirgenmiş hali Policy ( kural ) koyarak istemediğimiz paketleri sınıflandırmak isteriz ( Netfilter/ iptables )

şekil 3

Sanırım bu şekil çok daha açıklayıcı kısaca : NIC e gelen paket → Ingress policing ( giriş kuralları ) bu paket istediğimiz standartlara uyuyormu ?uymayan paketler göz ardı edilir. uyan paketler → Inpur De-multiplexing → forwarding → Output Queuing QOS un işlendiği yer → çıkış interface.

Paketlerin işlenme sırasını gördüğümüze göre en basit qos algoritması fifo ya bir göz atalım( firs in first out = ilk giren ilk çıkar )

şekil 4

fifo ( ilk giren ilk çıkar ) mantığında yukardaki şekilde görüldüğü gibi , 16 paketin kuyrukda buluna bildiği bir sistemimiz olduğunu düşünelim. 1 ve 2 nolu paketler işlenip işlerini bitirerek sistemden çıkmış durumdalar 18 nolu paket yeni işlenmeye başlamış olmakla beraber henüz kuyruğa girebilmiş değildir. Bu işlem sırasında network den paket gelmeye devam ettiğini düşünelim, gitgide kuyrukda ( sırada ) bekleyen paketlerimiz çoğaldı. Kernel in kuyruğu bir paket terk etmeden diğerini alması söz konusu değildir. Bu şart altında belirli sayıdan fazla gelen paketler gecikmeye veya düşürülmeye başlayacaktır.

Şimdi başka bir resime bakalım :

Ne güzel değilmi :) . Qdisc içerisinde birden fazla queue tanımlanmış. Bir paket qdisc e gelince ( Queuing Discipline ) , 1 inci kural ( Filter ) bu paketin kendisine uyup uymadığına bakıyor, uyuyorsa 1 inci Class a yani qos kuralımıza yolluyor, uymuyorsa ikinci ve üçüncü kural bu paketin kendilerine uyup uymadıklarına sırasıyla bakıyorlar, şekilde görüldüğü gibi bir qos class’ı için birden fazla filter tanımlanabilir.

Bunun qdisc’ in çalışma mantığını anlamamız için gayet yeterli olduğuna inanıyorum . Gelen paket filter tarafından kontrol ediyor, standartları sağlıyorsa yüksek öncelikli kuyruğuna atılıyor ve TBF ile 1 Mbps bant genişliğine  kavuşuyor, şayet uymuyorsa yani geri kalan tüm paketler düşük öncelikle default kuyruğa gönderiliyor.

örnek : eğer kişi webde gezmek istiyorsa 1 mbit bant genişliği ile yüksek öncelikli işlem görür, geriye kalan tüm işlemleri düşük önceliklidir tanımı yapılmış olabilir.

Bu kavramlarla daha fazla oyalanmanın faydası olduğunu sanmıyorum, genel olarak linux da QOS un nasıl çalıştığını anlamış olduk, geri kalan ayrıntılar bundan sonraki uygulamalarda daha net anlaşılacaktır.

Linux hangi qos algoritmalarını destekler ?

* Class Based Queue (CBQ)
* Token Bucket Flow (TBF)
* Clark-Shenker-Zhang (CSZ)
* First In First Out (FIFO)
* Priority Traffic Equalizer (TEQL)
* Stochastic Fair Queuing (SFQ)
* Asynchronous Transfer Mode (ATM)
* Random Early Detection (RED)
* Generalized RED (GRED)
* Diff-Serv Marker (DS_MARK)

Write a comment