Rabu, 12 November 2014

SIMULASI MANAJEMEN BANDWIDTH DENGAN MENGGUNAKAN HIERARCHICAL TOKEN BUCKET



HIERARCHICAL TOKEN BUCKET
SEBAGAI SUATU DISIPLIN ANTRIAN

Setiap perangkat jaringan dapat diasosiasikan dengan suatu disiplin antrian. Dengan antrian, kita dapat menentukan bagaimana data akan dikirimkan. Harus dipahami bahwa kita hanya dapat menshaping data yang akan kita kirimkan. Antrian diidentifikasi dengan menggunakan bantuan sebuah handle yang memiliki format X:Y, di mana X merepresentasikan nomor mayor, dan Y merepresentasikan nomor minor. Handle-handle inilah yang akan mengasosiasikan kelas-kelas ke disiplin antrian masing-masing.
Setiap switch dan router akan melakukan proses antrian, di mana paket akan disimpan sampai kapasitas tersedia untuk mengirimkannya ke suatu link. Waktu yang diperlukan untuk proses antrian akan menimbulkan delay, yang akan terakumulasi di setiap peralatan jaringan yang dilaluinya.
\begin{figure}
\centerline{\psfig{file=figures/combination_queue.eps,width=4.0in}}\end{figure}

Gambar 3.1
Contoh Traffic Control pada Interface Output

Dalam Linux, dikenal 2 macam disiplin antrian, yaitu disiplin antrian dengan kelas-kelas (classful queuing discipline) dan disiplin antrian non kelas (classless queuing discipline).

3.1 Classless Queuing Discipline
Classless queuing discipline merupakan suatu disiplin antrian yang hanya dapat  menunda ataupun mendrop paket yang diterimanya. Ini dapat digunakan untuk menshape trafik pada semua interface tanpa adanya pembagian-pembagian kelas lagi. Pada Linux, dikenal beberapa jenis classless queueing discipline, di antaranya adalah:
  1. FIFO Queueing
FIFO queueing merupakan teknik antrian interface yang paling sederhana dan umum digunakan. Antrian ini dapat bekerja dengan baik apabila link-link tidak mengalami kongesti. Antrian ini menjadi suatu mekanisme default untuk setiap interface dengan bandwidth lebih dari 2MB. Paket pertama yang ditempatkan pada antrian di interface output adalah paket yang akan pertama kali meninggalkan interface tersebut. Masalah yang akan muncul pada antrian ini adalah jika sebuah node melakukan transfer file, ia akan memakai semua bandwidth pada sebuah link yang akan merugikan suatu sesi yang interaktif. Fenomena ini mengacu pada barisan paket yang disebabkan satu sumber mengirimkan suatu “baris” paket ke tujuannya, sehingga paket dari node lain terjebak di belakang barisan paket tersebut. Antrian ini sangat efektif untuk link-link yang besar yang memiliki delay yang kecil dan kongesti yang minimal.

Gambar 3.2
FIFO Queuing

  1. Token Bucket Filter (TBF)
Token bucket merupakan suatu definisi formal dari suatu transfer rate. Antrian ini memiliki tiga buah komponen: ukuran burst, mean rate, dan interval waktu (Tc).

Gambar 3.3
Token Bucket Filter
Implementasi TBF terdiri dari sebuah buffer (bucket), yang secara konstan diisi oleh beberapa informasi virtual yang dinamakan token, pada rate yang spesifik (token rate). Parameter paling penting dari bucket adalah ukurannya, yaitu banyaknya token yang dapat disimpan.
Setiap token yang masuk mengumpulkan satu paket yang datang dari antrian data dan kemudian dihapus dari bucket. Dengan menghubungkan algoritma ini dengan dua aliran – token dan data, akan kita dapati tiga buah kemungkinan skenario:
o   Data yang datang pada TBF memiliki rate yang sama dengan masuknya token. Dalam hal ini, setiap paket yang masuk memiliki tokennya masing-masing dan akan melewati antrian tanpa adanya delay.
o   Data yang datang pada TBF memiliki rate yang lebih kecil daripada rate token. Hanya sebagian dari token yang dihapus pada output pada tiap paket data yang dikirim ke antrian, sehingga token akan menumpuk, memenuhi ukuran bucket. Token yang tidak digunakan kemudian akan dapat digunakan untuk mengirimkan data pada kecepatan yang melampaui rate token standar, ini terjadi jika ada ledakan data yang pendek.
o   Data yang datang pada TBF memiliki rate yang lebih besar daripada rate token. Hal ini berarti bucket akan segera kosong dari token, yang akan menyebabkan TBF akan menutup alirannya untuk sementara. Hal inilah yang dinamakan situasi overlimit. Jika paket-paket tetap datang, maka paket-paket akan segera didrop.
Skenario terakhir ini sangatlah penting, karena dengan skenario ini kita dapat menshaping bandwidth yang tersedia terhadap data yang melewati filter.
  1. Stochastic Fairness Queueing (SFQ)
Stochastic Fairness Queueing (SFQ) merupakan suatu implementasi sederhana dari keluarga algoritma fair queueing. Ia kurang akurat apabila dibandingkan dengan yang lain, tetapi ia juga membutuhkan perhitungan yang lebih sedikit dibandingkan dengan yang lain. Kata kunci dari SFQ adalah conversation (atau aliran), yang sangat berhubungan dengan sebuah sesi TCP atau sebuah aliran UDP. Traffik akan dibagi ke dalam beberapa jumlah besar antrian FIFO, satu untuk setiap conversation. Traffik kemudian dikirim secara round-robin, dengan memberikan kesempatan kepada tiap sesi untuk mengirimkan data pada gilirannya. SFQ disebut stochastic karena ia sebenarnya tidak menyediakan sebuah antrian untuk setiap sesi, ia memiliki suatu algoritma yang membagi traffik melalui sejumlah antrian yang terbatas dengan menggunakan algoritma hashing. Karena hash inilah, sesi yang banyak dapat berakhir di bucket yang sama, yang akan membagi dua tiap sesi kesempatan untuk mengirimkan paket, sehingga membagi dua kecepatan efektif yang tersedia. Untuk menghindari situasi ini menjadi terlihat, SFQ mengubah algoritma hashing yang ia miliki secara sering sehingga dua sesi yang bertabrakan akan terjadi dalam waktu yang singkat. SFQ hanya berguna jika interface outgoing yang kita miliki benar-benar penuh. Jika tidak, maka tidak akan ada queue pada mesin linux kita sehingga tidak akan ada efeknya.

3.2 Classful Queueing Discipline
Classful Queueing Discipline merupakan suatu disiplin antrian yang akan membagi trafik berdasarkan kelas-kelas. Classful qdisc sangat berguna apabila kita memiliki traffik yang berbeda-beda yang harus memiliki pembedaan penanganan. Ketika traffik memasuki suatu classful queueing discipline, maka paket tersebut akan dikirimkan ke kelas-kelas di dalam qdisc, dengan kata lain paket tersebut perlu diklasifikasikan terlebih dahulu. Untuk menentukan apa yang harus dilakukan dengan sebuah paket yang datang, maka filter-filter akan digunakan. Harus dipahami bahwa filter-filter ini dipanggil dari dalam sebuah qdisc, bukan sebaliknya. Filter-filter yang terdapat pada qdisc tersebut akan menghasilkan suatu keputusan, dan qdisc akan menggunakan hasil ini untuk mengantrikan paket ke salah satu kelas yang telah tersedia. Setiap subklas mungkin saja akan mencoba filter-filter yang lainnya untuk melihat apakah ada instruksi lain yang berlaku. Jika tidak, maka kelas akan mengantrikan paket tersebut ke qdisc yang ia miliki.
Di samping memiliki suatu qdisc, kebanyakan dari classful qdisc juga menerapkan fungsi shaping. Ini sangat berguna untuk melakukan penjadwalan paket (misal dengan SFQ) dan pengontrolan rate sekaligus. Kita akan sangat membutuhkan proses ini apabila kita memiliki suatu interface dengan kecepatan tinggi (misal ethernet) ke suatu alat yang lebih lambat (misal modem). Beberapa contoh classful queueing discipline di Linux adalah:

  1. CBQ (Class Based Queueing)
CBQ dapat menerapkan pembagian kelas dan menshare link bandwidth melalui struktur kelas-kelas secara hirarki. Setiap kelas memiliki antriannya masing-masing dan diberikan jatah bandwidthnya. Sebuah kelas child dapat meminjam bandwidth dari kelas parent selama terdapat kelebihan bandwidth. Gambar di bawah ini menunjukkan komponen dasar dari CBQ. CBQ bekerja sebagai berikut: classifier akan mengarahkan paket-paket yang datang ke kelas-kelas yang bersesuaian. Estimator akan mengestimasi bandwidth yang sedang digunakan oleh sebuah kelas. Jika sebuah kelas telah melampaui limit yang telah ditentukannya, maka estimator akan menandai kelas tersebut sebagai kelas yang overlimit. Scheduler menentukan paket selanjutnya yang akan dikirim dari kelas-kelas yang berbeda-beda, berdasarkan pada prioritas dan keadaan dari kelas-kelas. Weighted round robin scheduling digunakan antara kelas-kelas dengan prioritas yang sama.
Gambar 3.4
Cara Kerja CBQ

  1. PRIO
Priority queueing memungkinkan manajer jaringan untuk menentukan bagaimana traffik diprioritaskan dalam suatu jaringan. Dengan menentukan serangkaian filter berdasarkan karakteristik dari paket, traffik ditempatkan pada suatu antrian; antrian dengan prioritas yang lebih tinggi dilayani lebih dahulu, kemudian antrian yang lebih rendah lagi dilayani sesuai urutannya. Jika antrian dengan prioritas paling tinggi selalu penuh, maka antrian ini akan secara kontinyu dilayani dan paket-paket dari antrian yang lain akan didrop. Dalam algoritma antrian ini, maka satu jenis traffik jaringan dapat mendominasi traffik-traffik lainnya. Priority queueing akan menentukan traffik ke dalam salah satu dari 4 antrian: tinggi, sedang, normal, dan rendah.
Priority Queueing dapat menjamin bahwa traffik-traffik yang penting mendapatkan penanganan yang tercepat pada setiap titik di mana ia digunakan. Queueing ini di buat untuk memberikan prioritas yang ketat pada traffik-traffik yang penting. Priority queueing dapat secara fleksibel membagi prioritas berdasarkan protokol jaringan (misal IP, IPX, atau AppleTalk), interface yang masuk, ukuran paket, alamat asal/tujuan, dan sebagainya.

Gambar 3.5
PRIO Queuing

  1. HTB (Hierarchical Token Bucket)



Gambar 3.6
Konsep Link Sharing
HTB menggunakan TBF sebagai estimator yang sangat mudah diimplementasikan.  TBF sangat mudah diset karena banyak dari administrator jaringan yang memiliki ilmu tentangnya. Estimator ini hanya menggunakan parameter rate, sebagai akibatnya seseorang hanya perlu mengeset rate yang akan diberikan ke suatu kelas. Oleh karena itu HTB lebih mudah dan intuitif dibandingkan CBQ.
Pada HTB terdapat parameter ceil sehingga kelas akan selalu mendapatkan bandwidth di antara base rate dan nilai ceil ratenya. Parameter ini dapat dianggap sebagai estimator kedua, sehingga setiap kelas dapat meminjam bandwidth selama bandwidth total yang diperoleh memiliki nilai di bawah nilai ceil. Hal ini mudah diimplementasikan dengan cara tidak mengijinkan proses peminjaman bandwidth pada saat kelas telah melampaui rate ini (keduanya leaves dan interior dapat memiliki ceil). Sebagai catatan, apabila nilai ceil sama dengan nilai base rate, maka akan memiliki fungsi yang sama seperti parameter bounded pada CBQ, di mana kelas-kelas tidak diijinkan untuk meminjam bandwidth. Sedangkan jika nilai ceil diset tak terbatas atau dengan nilai yang lebih tinggi seperti kecepatan link yang dimiliki, maka akan didapat fungsi yang sama seperti kelas non-bounded. Sebagai contoh, seseorang dapat menjamin bandwidth 1 Mbit untuk suatu kelas, dan mengijinkan penggunaan bandwidth sampai dengan 2 Mbit pada kelas tersebut apabila link dalam keadaan idle. Parameter ceil ini sangatlah berguna untuk ISP karena para ISP kemungkinan besar akan memakainya untuk membatasi jumlah servis yang akan diterima oleh suatu pelanggan walaupun pelanggan lain tidak melakukan permintaan servis, dengan kata lain kebanyakan ISP menginginkan pelanggan untuk membayar sejumlah uang lagi untuk memperoleh pelayanan yang lebih baik.
Untuk menjadwalkan pengiriman paket dari antrian, maka HTB menggunakan suatu proses penjadwalan yang dapat dijelaskan sebagai berikut:
            Keterangan:
·         Class merupakan parameter yang diasosiasikan dengan rate yang dijamin (assured rate) AR, ceil rate CR, prioritas P, level dan quantum. Class dapat memiliki parent. Selain AR dan CR, didefinisikan juga actual rate atau R, yaitu rate dari aliran paket yang meninggalkan class dan diukur pada suatu perioda waktu tertentu.
·         Leaf merupakan class yang tidak memiliki anak. Hanya leaf yang dapat memegang antrian paket.
·         Level dari kelas menentukan posisi dalam suatu hirarki. Leaf-leaf memiliki level 0, root class memiliki level=jumlah level-1 dan setiap inner class memiliki level kurang dari satu dari parentnya. Untuk gambar di bawah (jumlah level=3).
·         Mode dari class merupakan nilai-nilai buatan yang diperhitungkan dari R, AR, dan CR. Mode-mode yang mungkin adalah:
o    Merah: R > CR
o    Kuning: R <= CR and R > AR
o    Hijau selain yang di atas
Kita asumsikan terdapat kelas-kelas yang tersusun seperti pohon pada HTB scheduler. Dalam tiap level, terdapat sebuah self feed yang terdiri dari self slot. Sehingga jika misalkan terdapat tiga buah level, maka terdapat 6 buah self slot (kita abaikan dulu slot putih). Setiap self slot, memegang daftar kelas-kelas, daftar tersebut digambarkan melalui garis berwarna yang terhubung dari self slot menuju kelas. Self slot berisikan daftar dari semua kelas-kelas hijau yang memiliki permintaan.
Setiap kelas inner (non-leaf), memiliki inner feed slot. Inner feed memiliki sebuah inner feed slot per prioritas (merah untuk prioritas tinggi, biru untuk prioritas rendah) dan per inner class.  Inner slot akan menangani kelas-kelas anak yang berwarna kuning.
Gambar 3.7
Cara Kerja Scheduler di HTB
Slot putih yang terdapat pada gambar di atas berfungsi sebagai antrian tunggu per level. Ia akan memegang daftar kelas-kelas yang berada pada levelnya yang berwarna merah atau kuning.
Dari sini kita mungkin telah dapat melihat apabila kita dapat menjaga semua kelas pada daftar yang bersesuaian, maka proses pemilihan paket selanjutnya yang akan melakukan pengiriman paket dari antrian akan sangatlah mudah. HTB cukup melihat pada daftar self feed dan memilih slot yang tidak kosong (yaitu slot yang terhubung dengan garis ke sebuah kelas) dengan level yang paling rendah dan prioritas yang paling tinggi. Pada gambar 1 di atas tidak terdapat slot yang tidak kosong, sehingga tidak ada paket yang akan dikirim. Pada gambar 2, terdapat slot merah dengan level 0 pada kelas D, sehingga kelas D dapat mengirim paketnya.
Untuk lebih jelasnya dapat dijelaskan sebagai berikut. Pada gambar 1, tidak terdapat backlogged leaf (semua non-backlogged leaf digambarkan dengan lingkaran tipis) sehingga tidak ada yang dapat dilakukan. Pada gambar 2, paket-paket datang untuk C dan D. Sehingga HTB akan mengaktifkan kelas-kelas ini, dan karena keduanya berwarna hijau, HTB akan menambahkannya ke self slot yang bersesuaian. Proses dequeue akan memilih D karena D berada pada level yang rendah dan memiliki prioritas yang lebih tinggi daripada C.
Gambar 3.8
Cara Kerja Scheduler di HTB
Kita asumsikan paket telah dikirim dari kelas D dan HTB mengukur berapa besar paket yang dikirim melalui bantuan TBF. Karena paket yang dikirim melampaui besar rate yang telah ditetapkan untuk kelas D, maka HTB akan memaksa D untuk berubah warna menjadi kuning. Sebagai bagian dari perubahan ini, HTB akan menghapus D dari daftar self feed dan menambahkan D ke inner feed B. HTB juga secara rekursif akan menambahkan B ke self feed pada levelnya. Karena D akan kembali ke keadaan hijau lagi pada suatu waktu, maka HTB akan menambahkan D ke slot putih pada level 0.
Proses dequeue sekarang akan memilih kelas C meskipun kelas C memiliki prioritas yang lebih rendah dibandingkan D. Ini dikarenakan C berada pada daftar slot dengan level yang lebih rendah. Secara intuitifpun hal ini baik dilakukan, untuk apa meminjam bandwidth jika ada yang dapat mengirim paket tanpa meminjam bandwidth.
a.       TBF lebih akurat dalam menentukan rate.
b.      TBF tidak memerlukan waktu akhir pengiriman yang tepat seperti pada ewma-idle. Akibatnya, HTB akan bekerja secara kuat pada semua perangkat jaringan di mana CBQ menunjukkan rate yang aneh dan salah.
c.       HTB memungkinkan cross-device bandwidth sharing. Sehingga ethernet pertama dapat memakai bandwidth dari ethernet kedua.


0 komentar:

Posting Komentar