Trickle วิธีจำกัดแบนด์วิธที่ง่ายที่สุด


หากเรานำแนวคิดของผู้รู้ เก็บแง่มุมที่สร้างสรรค์ และแบ่งบันสู่สังคม ตนเองก็ได้รับการพัฒนาด้วย

โดย ธีรภัทร มนตรีศาสตร์,RHCE 

ในยุคที่อินเตอร์เน็ตบรอดแบนด์กำลังขยายตัวเช่นทุกวันนี้ หลายๆ คนกำลังสนุกสุดเหวี่ยงกับความเร็วในการดาวน์โหลดที่ทำให้โมเด็มความเร็ว 56Kbps กลายเป็นเศษเสี้ยวในความทรงจำ เนื่องจากเป็นการใช้บริการแบบเหมาจ่ายเป็นรายเดือนหรือรายปีนั่นเอง แต่ถึงอย่างไรก็ตามผู้ที่ใช้บริการบรอดแบนด์ในบางพื้นที่ยังจำเป็นต้องใช้บริการแบบจำกัดปริมาณการใช้งาน ซึ่งจะต้องเสียค่าใช้จ่ายในการใช้อินเตอร์เน็ตตามปริมาณการใช้งานในแต่ละเดือน ดังนั้นผู้บริหารระบบเครือข่ายจึงต้องพยายามหาวิธีการต่างๆ เพื่อที่จะควบคุมปริมาณการใช้งานมิให้เกินโควต้าหรือผิดเงื่อนไขที่ผู้ให้บริการอินเตอร์เน็ตกำหนดไว้

การควบคุมการใช้แบนด์วิธของผู้ใช้งานเป็นอีกวิธีหนึ่งในหลายๆ มาตรการที่ถูกนำมาใช้เพื่อการนี้ นอกเหนือจากการปิดกั้นบริการที่ไม่ก่อให้เกิดประโยชน์กับองค์กร ( ผู้บริหารรุ่นใหญ่นิยมใช้คำว่าไม่สร้างสรรค์ ? ) ด้วยเครื่องมือประเภทไฟร์วอลล์ต่างๆ ทั้งระดับแพคเก็ตและระดับแอปพลิเคชั่นแต่การควบคุมแบนด์วิธนี้มีอยู่ด้วยกันหลายเทคนิคหลายวิธีการ อีกทั้งยังสามารถกระทำได้หลายจุดในระบบเครือข่าย ได้แก่ การควบคุมที่ตัวอุปกรณ์ต่างๆ ในระบบเครือข่าย เช่น สวิทช์ เร้าเตอร์ หรือ ไฟร์วอลล์ เป็นต้น การควบคุมที่ตัวโปรแกรมพร๊อกซี่ เช่น กลไก Delaypool ในโปรแกรม Squid เป็นต้น การควบคุมคุณลักษณะของไอพีแพคเก็ตในระดับเคอร์เนลของระบบปฏิบัติการ เช่น เทคนิค QoS ทั้งหลายที่มีอยู่ในเคอร์เนลทั้งประเภท Classless หรือ Classful ก็ตาม เป็นต้น แน่นอนว่าการใช้เทคนิควิธีการต่างๆ ตามที่ได้กล่าวมานี้ย่อมมีทั้งข้อดีข้อเสียและข้อจำกัดที่แต่กต่างกันออกไป ซึ่งผู้บริหารระบบเครือข่ายควรศึกษาในรายละเอียดของแต่ละวิธีเพื่อการเลือกใช้งานให้เหมาะสมกับสภาพแวดล้อมในองค์กรของท่านมากที่สุดในโอกาสนี้ผู้เขียนอยากเสนอแนวทางที่แตกต่างออกไปบ้าง ( สร้างสรรค์…? ) โดยจะกล่าวถึงวิธีการควบคุมแบนด์วิธในระดับแอปพลิเคชั่น ซึ่งมีความพิเศษตรงที่แทนที่เราจะควบคุมแบนด์วิธโดยรวมทั้งหมดแต่กลับให้ความสนใจเฉพาะบางแอปพลิเคชั่นในโฮสต์ของเราเท่านั้น จัดการแบนด์วิธด้วย Trickle Trickle มีลักษณะการใช้งานที่เป็นการ "ห่อหุ้ม" การสื่อสารของโปรแกรมแอปพลิเคชั่นอื่นไว้ โดยสามารถทำงานร่วมกับโปรแกรมส่วนใหญ่ได้อย่างไม่มีปัญหา จึงทำให้มันสามารถควบคุมการไหลเข้าออกของข้อมูลแบบ TCP ได้ตามต้องการทั้งด้าน upstream และ downstream ดังนั้นจึงไม่จำเป็นต้องแก้ไขคุณสมบัติของตัวโปรแกรมหรือเคอร์เนลของระบบปฏิบัติการแต่อย่างใด

รูปที่ 1 ภาพจำลองความสัมพันธ์ของโปรแกรมที่เกี่ยวข้อง

Trickle เป็นฟรีซอฟต์แวร์ที่เผยแพร่ในแบบ BSD License โดย Marius Aamodt Eriken สามารถทำงานได้หลายแพลตฟอร์ม เช่น Linux FreeBSD OpenBSD และ Solaris คุณสามารถดาว์นโหลดโปรแกรมได้ที่เว็บไซต์ http://monkey.org/~marius/trickle/ เป็นไฟล์ชื่อ trickle-1.06.tar.gz ขนาดประมาณ 163KB แต่ลำพังโปรแกรม Trickle เองจะยังไม่สามารถทำงานได้เต็มที่ แต่จะต้องอาศัยซอฟต์แวร์ประกอบอีกตัวหนึ่งคือ libevent ซึ่งเป็นไลบรารี่แบบ run-time ที่จะช่วยตรวจจับสถานะ เหตุการณ์ต่างๆ ที่เกิดขึ้นกับการสื่อสารบน TCP Stack โดยผ่านฟังชั่นด้านเครือข่ายต่างๆ ที่กำลังทำงานอยู่ในขณะนั้น ดังนั้นเราจึงต้องดาวน์โหลดโปรแกรม libevent นี้มาเพิ่มลงในระบบของเราด้วย มิฉะนั้นจะไม่สามารถติดตั้งโปรแกรมนี้ได้ท่านสามารถดาวน์โหลดไฟล์โปรแกรม libevent-1.1a.tar.gz ได้จาก http://monkey.org/~provos/libevent/ ขนาดไฟล์ประมาณ 339KBการติดตั้งโปรแกรม
ผู้เขียนได้ใช้งานโปรแกรมนี้โดยติดตั้งไว้บนลินุกซ์ Fedora Core 3 โดยมีขั้นตอนการติดตั้งดังนี้
  1. ดาวน์โหลดไฟล์ทั้งสองดังที่กล่าวไว้ข้างต้น นำเก็บไว้ที่ /root
  2. แตกไฟล์ libevent-1.1a.tar.gz ออก จะได้ไดเร็คทอรี่ชื่อ libevent-1.1a
  3. คอมไพล์ซอร์สโค๊ดนี้ด้วยขั้นตอนปรกติ ( ./configure ,make และ make install )
  4. ผลที่ได้จะเป็นไฟล์ในไดเร็คทอรี่ /usr/local/lib เช่น libevent-1.1a.so.1 เป็นต้น
  5. แตกไฟล์ trickle-1.06.tar.gz ออก แล้วคอมไพล์ในลักษณะเดียวกันกับข้อ 2-3
  6. จะได้โปรแกรมที่ /usr/local/bin จำนวน 3 ไฟล์ คือ trickle trickled และ tricklectl
  7. นอกจากนี้ยังได้ man document อีก 3 ไฟล์ คือ trickle(1) , trickled(8) และ trickled.conf(5) และที่ /usr/local/lib จะมีไฟล์ไลบรารี่เพิ่มอีก 1 ตัว คือ trickle-overload.so
  8. สำคัญมากคือ ต้องเพิ่มข้อความ /usr/local/lib ลงในไฟล์ /etc/ld.so.conf แล้วทำคำสั่ง ldconfig ในฐานะ root
    หลังจากติดตั้งโปรแกรมสำเร็จแล้วสามารถลบไฟล์และไดเร็คทอรี่ต้นฉบับที่อยู่ที่ /root ออกได้เพราะไม่จำเป็นต้องใช้อีกแล้ว

การใช้งานแบบ Stand alone
โปรแกรม Trickle สามารถทำงานได้ 2 ลักษณะ คือ แบบ Standalone กับแบบ Daemon สำหรับการใช้งานในแบบ Standalone ทำได้โดยใช้คำสั่งดังตัวอย่างนี้
# trickle -d 25 ncftp ftp.domain.com
จะเห็นว่าเป็นการนำโปรแกรม trickle มาครอบการใช้งานคำสั่ง ncftp ไว้โดยระบุพารามิเตอร์ -d 25 หมายถึง ให้มี download stream ที่ 25Kbps นั่นเอง หากต้องการกำหนดความเร็วในการ upload สามารถระบุพารามิเตอร์ -u เพิ่มเข้าไปได้ในลักษณะเดียวกันนี้ผู้เขียนได้ทดสอบการจำกัดความเร็วในการดาวน์โหลดด้วยโปรแกรม Mozilla Firefox โดยใช้คำสั่ง
# trickle -d 25 mozilla
แล้วเปรียบเทียบกับการใช้งาน mozilla ตามปรกติจะสังเกตเห็นความเร็วในการดาวน์โหลดที่วัดด้วย Speed Meter ของ http://www.adslthailand.com ได้ผลลัพธ์ที่ชัดเจนมาก ( รูปที่ 2 และ 3 )

รูปที่ 2 ค่าความเร็วในการ Download ตามปรกต



รูปที่ 3 ค่าความเร็วที่ลดลงเมื่อใช้ Trickle ( -d 25 )

ในการใช้งานแบบ Standalone นี้ จะเห็นว่าการควบคุมแบนด์วิธจะเกิดขึ้นกับโปรแกรมที่เรากำหนดให้ trickle หุ้มห่อหรือครอบไว้เท่านั้น ไม่มีผลใดๆ ต่อโปรแกรมอื่นๆ ในระบบการใช้งานแบบ Daemon
Trickle สามารถใช้งานได้อีกแบบหนึ่งคือ แบบ Daemon ซึ่งจะใช้โปรแกรมชื่อ trickled รันในแบบฉากหน้าหรือฉากหลังก็ได้ โดยจะต้องทำงานร่วมกับ libevent ซึ่งเราได้ติดตั้งไว้เรียบร้อยแล้ว มีรูปแบบคำสั่งในการเรียกใช้งานดังนี้
# trickled -d 25 -u 5 -f -N 5
พารามิเตอร์ -d และ -u หมายถึง ค่า Kbps ของการดาวน์โหลดและอัพโหลดเช่นเดียวกับการใช้งานในแบบ Standalone ในที่นี้คือ 25Kbps และ 5Kbps ตามลำดับพารามิเตอร์ -f หมายถึง ให้รันในแบบฉากหน้า ( Foreground )
พารามิเตอร์ -N เป็นการระบุให้มีจังหวะในแสดงผลที่เอาต์พุตทุกๆ 5 วินาทีนอกจากพารามิเตอร์คำสั่งตามตัวอย่างนี้แล้วยังมี -s เป็นการระบุให้แสดงผลลัพธ์ออกทาง SysLog แทนการแสดงผลออกทาง standard output เช่นนี้ และยังมีวิธีกำหนดค่าในไฟล์ trickle.conf ได้อีก ซึ่งสามารถศึกษาเพิ่มเติมได้จาก man page ที่ติดตั้งไว้แล้ว

รูปที่ 4 การทดสอบแบบ Daemon

ผลการทำงานของ trickled จะช่วยให้สามารถระบุขอบเขตของ trickle ได้และยังช่วยในการมอนิเตอร์ค่าความเร็วที่กำลังใช้อยู่ได้อีกด้วย ดังรูปการทดลองดาวน์โหลดไฟล์ในรูปที่ 4 เป็นการดาวน์โหลดไฟล์ด้วยคำสั่ง ncftp ซึ่งจะเฉลี่ยให้ใช้ความเร็วไม่มากนักทำให้สามารถใช้งานอื่นๆ ไปพร้อมกันได้เป็นปรกติประโยชน์และการประยุกต์ใช้งาน
หากมองอย่างผิวเผินท่านผู้อ่านอาจจะเห็นว่า Trickle ไม่เหมาะกับการควบคุมแบนด์วิธโดยทั่วไปเท่าไรนัก เพราะเป็นการควบคุมแบบเฉพาะเจาะจงเกินไป เป็นการใช้งานในระดับยูสเซอร์และโปรแกรมประยุกต์โปรแกรมใดโปรแกรมหนึ่งเท่านั้น แต่ผู้เขียนมองว่าทุกสิ่งย่อมมีคุณค่าในตัวของมันเองครับ ลักษณะการประยุกต์ใช้งานที่สามารถนำ Trickle ไปใช้ให้เกิดประโยชน์ ได้แก่ การจำกัดปริมาณการโอนถ่ายข้อมูลระหว่างโฮสต์โดยผ่านระบบเครือข่าย โดยเฉพาะอย่างยิ่งในโฮสต์ที่ฝากไว้ที่ Data Center หรือใช้บริการ Co-location ซึ่งอาจจะต้องการโอนถ่ายข้อมูลเพื่อการสำรองข้อมูลของระบบปฏิบัติการ การส่งผ่านข้อมูลสำรองของฐานข้อมูล อีเมล์ เว็บเพจหรือข้อมูลสำคัญใดๆ ก็ตามไปเก็บรักษาในอีกโฮสต์หนึ่ง หรืออาจจะเป็นการเปิดช่องทางในการทำ Mirror site ซึ่งต้องมีการ sync ข้อมูลเป็นระยะๆ อย่างสม่ำเสมอ หรืออาจจะเป็นการส่งสถานะจำพวก Event Log ต่างๆ ก็เป็นไปได้

รูปที่ 5 การใช้ประโยชน์จาก Trickle

จากรูปที่ 5 จะเห็นว่าหากมีการขนส่งข้อมูลจำนวนมากออกจากเว็บเซิร์ฟเวอร์โดยไม่มีการจำกัดปริมาณแบนด์วิธ จะทำให้โปรแกรมนั้นนำแบนด์วิธทั้งหมดไปใช้ซึ่งมีผลทำให้การสื่อสารประเภทอื่นๆ เช่น การเข้าชมเว็บไซต์ การใช้ FTP เพื่อการแก้ไขหน้าเว็บเพจ หรือการรีโมตเข้ามาจัดการระบบต้องล่าช้าลงหรือไม่อาจเชื่อมต่อได้เลยดังนั้นการนำ Trickle มาใช้จึงทำให้เราสามารถจัดสรรทรัพยากรที่มีอยู่อย่างจำกัดคือ แบนด์วิธ ได้อย่างมีประสิทธิภาพ โดยแบ่งอัตราส่วนการใช้แบนด์วิธให้พอเหมาะกับงานแต่ละประเภท ตัวอย่างเช่น การโอนถ่ายฐานข้อมูลระยะสั้นให้ใช้ได้ประมาณ 20Kbps การส่งผ่านข้อมูล FTP Mirror ให้จำกัดแค่ 5Kbps ส่วนที่เหลือไว้ให้ FTP หรือ SSH ของผู้จัดการระบบและการให้บริการเว็บแก่บุคคลทั่วไป เป็นต้นQoS : Quality of Services
ความหมายของ QoS นั้น มิใช่เพียงแค่การจำกัดแบนด์วิธของการใช้บริการประเภทต่างๆ ในอัตราส่วนที่เหมาะสมตามความต้องการของผู้บริหารเครือข่ายเท่านั้น แต่หมายถึงการจัดสรรทรัพยากรและบริการที่มีอยู่ในองค์กรอย่างทั่วถึง คุ้มค่า ประหยัดและได้ประสิทธิภาพเพื่อให้ผู้ใช้บริการเครือข่ายเกิดความพึงพอใจ ความสามารถในด้านเทคนิคแต่เพียงอย่างเดียวจึงไม่อาจทำให้ระบบเครือข่ายในองค์กรมีความสมบูรณ์ได้ ความเข้าใจในลักษณะการใช้งานของผู้ใช้และคุณภาพของเครื่องมือที่เลือกใช้จึงเป็นส่วนสำคัญต่อความสำเร็จของการจัดการเครือข่าย ถึงเวลานั้น QoS น่าจะหมายถึง Quality of System Administrator ก็เป็นได้

 

แหล่งข้อมูลอ้างอิง
Trickle : http://monkey.org/~marius/trickle
Libevent : http://monkey.org/~provos/libevent

คำสำคัญ (Tags): #trickle
หมายเลขบันทึก: 153652เขียนเมื่อ 14 ธันวาคม 2007 22:17 น. ()แก้ไขเมื่อ 18 พฤษภาคม 2012 04:31 น. ()สัญญาอนุญาต: จำนวนที่อ่านจำนวนที่อ่าน:


ความเห็น (0)

ไม่มีความเห็น

พบปัญหาการใช้งานกรุณาแจ้ง LINE ID @gotoknow
ClassStart
ระบบจัดการการเรียนการสอนผ่านอินเทอร์เน็ต
ทั้งเว็บทั้งแอปใช้งานฟรี
ClassStart Books
โครงการหนังสือจากคลาสสตาร์ท