Saya membaca kertas PostScript asli SIGCOMM '97 tentang HFSC, ini sangat teknis, tapi saya mengerti konsep dasarnya. Alih-alih memberikan kurva layanan linier (seperti dengan hampir semua algoritma penjadwalan lainnya), Anda dapat menentukan kurva layanan cembung atau cekung dan dengan demikian dimungkinkan untuk memisahkan bandwidth dan penundaan. Namun, meskipun tulisan ini menyebutkan jenis algoritma penjadwalan yang digunakan (real-time dan link-share), itu selalu hanya menyebutkan SATU kurva per kelas penjadwalan (decoupling dilakukan dengan menentukan kurva ini, hanya satu kurva yang diperlukan untuk itu ).
Sekarang HFSC telah diimplementasikan untuk BSD (OpenBSD, FreeBSD, dll.) Menggunakan kerangka kerja penjadwalan ALTQ dan telah diimplementasikan Linux menggunakan kerangka kerja penjadwalan TC (bagian dari iproute2). Kedua implementasi menambahkan dua kurva layanan tambahan, yang TIDAK ada di kertas aslinya! Kurva layanan waktu nyata dan kurva layanan batas atas. Sekali lagi, harap dicatat bahwa makalah asli menyebutkan dua algoritma penjadwalan (real-time dan link-share), tetapi dalam makalah itu keduanya bekerja dengan satu kurva layanan tunggal. Tidak pernah ada dua kurva layanan independen untuk keduanya seperti yang saat ini Anda temukan di BSD dan Linux.
Lebih buruk lagi, beberapa versi ALTQ tampaknya menambahkan prioritas antrian tambahan untuk HSFC (tidak ada yang namanya prioritas dalam makalah asli juga). Saya menemukan beberapa BSD HowTo menyebutkan pengaturan prioritas ini (meskipun halaman manual rilis ALTQ terbaru tidak tahu parameter seperti itu untuk HSFC, jadi secara resmi bahkan tidak ada).
Ini semua membuat penjadwalan HFSC bahkan lebih kompleks daripada algoritma yang dijelaskan dalam makalah asli dan ada banyak tutorial di Internet yang sering saling bertentangan, satu mengklaim kebalikan dari yang lain. Ini mungkin alasan utama mengapa tampaknya tidak ada yang benar-benar memahami cara kerja penjadwalan HFSC. Sebelum saya dapat mengajukan pertanyaan, kami membutuhkan beberapa contoh pengaturan. Saya akan menggunakan yang sangat sederhana seperti terlihat pada gambar di bawah ini:
alt teks http://f.imagehost.org/0177/hfsc-test-setup.png
Berikut adalah beberapa pertanyaan yang tidak dapat saya jawab karena tutorialnya saling bertentangan:
Untuk apa saya perlu kurva waktu-nyata sama sekali? Dengan asumsi A1, A2, B1, B2 semuanya 128 kbit / s link-share (tidak ada kurva real-time untuk salah satu), maka masing-masing akan mendapatkan 128 kbit / s jika root memiliki 512 kbit / s untuk didistribusikan (dan A dan B keduanya 256 kbit / s tentu saja), kan? Mengapa saya juga akan memberi A1 dan B1 kurva waktu-nyata dengan 128 kbit / s? Apa gunanya ini? Untuk memberikan keduanya prioritas yang lebih tinggi? Menurut makalah asli saya bisa memberi mereka prioritas yang lebih tinggi dengan menggunakan kurva , itu adalah tentang HFSC. Dengan memberikan kedua kelas kurva [256kbit / s 20ms 128kbit / s] keduanya memiliki prioritas dua kali lipat daripada A2 dan B2 secara otomatis (masih hanya mendapatkan rata-rata 128 kbit / s)
Apakah bandwidth real-time diperhitungkan ke arah bandwidth link-share? Misalkan jika A1 dan B1 keduanya hanya memiliki bandwidth 64kbit / s real-time dan 64kbit / s, apakah itu berarti begitu mereka dilayani 64kbit / s melalui waktu-nyata, persyaratan tautan-bagi mereka juga terpenuhi (mereka mungkin dapatkan kelebihan bandwidth, tetapi mari abaikan itu sebentar) atau apakah itu berarti mereka mendapatkan 64 kbit / dtk melalui tautan-bagikan? Jadi, apakah setiap kelas memiliki "persyaratan" bandwidth real-time plus tautan-bagi? Atau apakah kelas hanya memiliki persyaratan lebih tinggi daripada kurva waktu-nyata jika kurva tautan-bagikan lebih tinggi dari kurva waktu-nyata (persyaratan tautan-bagikan saat ini sama dengan persyaratan tautan-bagikan yang ditentukan dikurangi bandwidth waktu nyata yang telah disediakan untuk ini kelas)?
Apakah kurva batas atas juga berlaku untuk waktu-nyata, hanya untuk berbagi tautan, atau mungkin keduanya? Beberapa tutorial mengatakan satu cara, ada yang mengatakan sebaliknya. Beberapa bahkan mengklaim batas atas adalah maksimum untuk bandwidth waktu-nyata + bandwidth berbagi-tautan? Apa kebenarannya?
Dengan asumsi A2 dan B2 keduanya 128 kbit / s, apakah ada bedanya jika A1 dan B1 hanya 128 kbit / s hanya berbagi tautan, atau 64 kbit / s real-time dan 128 kbit / s tautan-bagi, dan jika demikian , perbedaan apa?
Jika saya menggunakan kurva real-time yang terpisah untuk meningkatkan prioritas kelas, mengapa saya perlu "kurva" sama sekali? Mengapa nilai real-time dan tautan-berbagi tidak real-time juga merupakan nilai tetap? Mengapa keduanya kurva? Kebutuhan akan kurva jelas dalam makalah aslinya, karena hanya ada satu atribut semacam itu per kelas. Tetapi sekarang, memiliki tiga atribut (real-time, berbagi tautan, dan batas atas) untuk apa saya masih perlu kurva pada masing-masing atribut? Mengapa saya ingin bentuk kurva (bukan bandwidth rata-rata, tetapi kemiringannya) berbeda untuk lalu lintas waktu-nyata dan tautan-bagikan?
Menurut sedikit dokumentasi yang tersedia, nilai-nilai kurva waktu nyata benar-benar diabaikan untuk kelas dalam (kelas A dan B), mereka hanya diterapkan pada kelas daun (A1, A2, B1, B2). Jika itu benar, mengapa konfigurasi sampel ALTQ HFSC (mencari 3,3 konfigurasi Sampel ) mengatur kurva real-time pada kelas dalam dan mengklaim bahwa mereka menetapkan tingkat dijamin dari kelas dalam itu? Bukankah itu sama sekali tidak ada gunanya? (catatan: pshare menetapkan kurva tautan berbagi di ALTQ dan memanggang kurva waktu-nyata; Anda dapat melihatnya di paragraf di atas konfigurasi sampel).
Beberapa tutorial mengatakan jumlah semua kurva waktu nyata mungkin tidak lebih tinggi dari 80% dari kecepatan garis, yang lain mengatakan itu tidak boleh lebih tinggi dari 70% dari kecepatan garis. Mana yang benar atau mereka mungkin salah?
Salah satu tutorial mengatakan Anda akan melupakan semua teorinya. Tidak peduli bagaimana hal itu benar-benar bekerja (penjadwal dan distribusi bandwidth), bayangkan tiga kurva sesuai dengan "model pikiran yang disederhanakan" sebagai berikut: waktu nyata adalah bandwidth yang dijamin yang akan selalu didapat oleh kelas ini. link-share adalah bandwidth yang ingin dipenuhi oleh kelas ini, tetapi kepuasan tidak dapat dijamin. Jika ada kelebihan bandwidth, kelas mungkin bahkan ditawarkan bandwidth lebih dari yang diperlukan untuk menjadi puas, tetapi mungkin tidak pernah menggunakan lebih dari batas atas kata. Agar semua ini berfungsi, jumlah semua bandwidth real-time mungkin tidak di atas xx% dari kecepatan jalur (lihat pertanyaan di atas, persentasenya bervariasi). Pertanyaan: Apakah ini lebih atau kurang akurat atau kesalahpahaman total HSFC?
Dan jika asumsi di atas benar-benar akurat, di mana prioritas dalam model itu? Misalnya setiap kelas mungkin memiliki bandwidth real-time (dijamin), bandwidth link-share (tidak dijamin) dan mungkin batas atas, tetapi masih beberapa kelas memiliki kebutuhan prioritas yang lebih tinggi daripada kelas lainnya. Dalam hal ini saya masih harus memprioritaskan, bahkan di antara lalu lintas waktu-nyata dari kelas-kelas itu. Apakah saya akan memprioritaskan kemiringan kurva? Dan jika demikian, kurva apa? Kurva waktu nyata? Kurva tautan-bagikan? Kurva batas atas? Mereka semua? Apakah saya akan memberi mereka semua lereng yang sama atau masing-masing lereng yang berbeda dan bagaimana cara mengetahui lereng yang tepat?
Saya masih belum kehilangan harapan bahwa setidaknya ada satu tangan penuh orang di dunia ini yang benar-benar memahami HFSC dan mampu menjawab semua pertanyaan ini secara akurat. Dan melakukannya tanpa saling bertentangan dalam jawaban akan sangat menyenangkan ;-)