20 คะแนน โดย xguru 2024-11-19 | 2 ความคิดเห็น | แชร์ทาง WhatsApp
  • เครื่องมือน้ำหนักเบาที่ออกแบบมาเพื่อปรับแต่งประสิทธิภาพของระบบโดยอัตโนมัติอยู่เสมอ โดยอาศัยความสามารถด้านการสังเกตการณ์ของ BPF (eBPF)

ปัญหาที่ต้องการแก้ไข

  • ตัวเลือกการปรับแต่งมีมากเกินไป: เคอร์เนล Linux มีพารามิเตอร์ sysctl ที่สามารถปรับแต่งได้มากกว่า 1,600 รายการ การค้นหาค่าที่เหมาะสมสำหรับสภาพแวดล้อมที่หลากหลายเป็นเรื่องซับซ้อนและยาก
  • ลดการแทรกแซงของผู้ดูแลระบบ: ในระบบคลาวด์สมัยใหม่ จำเป็นต้องมีการจัดการแบบอัตโนมัติมากกว่าการปรับแต่งด้วยมือ ระบบส่วนใหญ่แทบไม่มีการแทรกแซงจากผู้ดูแลหลังการตั้งค่าเริ่มต้น
  • ข้อจำกัดของการตั้งค่าแบบคงที่: เนื่องจากสภาพแวดล้อมของระบบเปลี่ยนแปลงอยู่ตลอดเวลา การปรับแต่งด้วยค่าคงที่จึงอาจไม่มีประสิทธิภาพ

หลักการออกแบบสำคัญ

  • โอเวอร์เฮดต่ำที่สุด: หลีกเลี่ยงการติดตามเหตุการณ์ความถี่สูง และใช้ความสามารถด้านการสังเกตการณ์เฉพาะเมื่อจำเป็นจริง ๆ
  • ทำให้คำอธิบายนโยบายชัดเจน: บันทึกลงใน syslog ว่าเปลี่ยน "อะไร" และ "ทำไม"
  • ผู้ดูแลระบบมาก่อน: หากผู้ดูแลระบบตั้งค่าเอง จะปิดการทำงานของการปรับแต่งอัตโนมัติ
  • หลักการไม่ต้องตั้งค่า: ปรับแต่งอัตโนมัติโดยไม่ต้องมีการตั้งค่าเพิ่มเติม และหลีกเลี่ยง magic number ให้มากที่สุด
  • การปรับแบบไดนามิก: หากการใช้หน่วยความจำของ TCP เพิ่มขึ้น จะลดขนาดบัฟเฟอร์เพื่อรักษาสมดุลของระบบ

แนวคิดหลัก

  • tuner: tuner แต่ละตัวจะประมวลผลเหตุการณ์ที่เกิดจากโปรแกรม BPF และจัดการรายการที่เกี่ยวข้องซึ่งสามารถปรับแต่งได้
  • strategy: tuner สามารถมีได้หลาย strategy และแต่ละ strategy จะเลือกแนวทางที่มีประสิทธิภาพผ่านฟังก์ชันการประเมินผล
  • event: ประกอบด้วย ID ของ tuner, สถานการณ์, ข้อมูล network namespace เป็นต้น และ tuner จะดำเนินการที่เหมาะสมโดยอิงจากข้อมูลนี้

สถาปัตยกรรม

  • bpftune เป็นเดมอนที่โหลดและจัดการปลั๊กอิน tuner หลายตัวในรูปแบบ .so
  • tuner แต่ละตัวมี ID เฉพาะของตนเอง และประมวลผลเหตุการณ์ทั้งในฝั่ง BPF และ user space
  • องค์ประกอบ BPF รวม bpftune.bpf.h และใช้ตัวแปรที่ใช้ร่วมกันกับการกำหนด map

รายการ tuner ที่รองรับ

  • TCP connection tuner: ปรับแต่งอัลกอริทึมควบคุมความแออัดโดยอัตโนมัติ
  • neighbour table tuner: ขยายขนาดตารางเพื่อนบ้านโดยอัตโนมัติ
  • route table tuner: ขยายขนาดตารางเส้นทางโดยอัตโนมัติ
  • sysctl tuner: ปิดการทำงานของ tuner หากค่า sysctl ที่ปรับแต่งชนกับการตั้งค่าด้วยตนเอง
  • TCP buffer tuner: ปรับขนาดบัฟเฟอร์ TCP โดยอัตโนมัติ
  • net buffer tuner: ปรับแต่งค่าที่เกี่ยวข้องกับเครือข่ายระดับแกนกลางโดยอัตโนมัติ
  • netns tuner: ตรวจจับการเพิ่มและการลบ network namespace

2 ความคิดเห็น

 
xguru 2024-11-19

ความเห็นจาก Hacker News

  • มีความกังวลว่าอาจทำให้การวินิจฉัยและแก้ปัญหาระบบยากขึ้น
  • แนวคิดเรื่อง "วงจรป้อนกลับ" มีความสำคัญต่อการอธิบายความเป็นไปได้ที่จะเกิดปัญหา
    • ไม่ใช่ปัญหาของ Linux kernel, BPF หรือตัวโปรแกรมเอง แต่เป็นเรื่องของลักษณะการทำงาน
    • อาจไม่มีความเสี่ยงเลยก็ได้ อาจมีกลไกควบคุมอยู่ หรือแม้จะเกิดปัญหาก็อาจกลับเข้าสู่สถานะที่เสถียรได้
  • ทฤษฎีการควบคุมดูเหมือนจะถูกนำมาใช้ในงานวิศวกรรมซอฟต์แวร์น้อยเกินไป
  • อยากฟังความเห็นจากคนที่ใช้เครื่องมือนี้
    • สงสัยว่ามันมีประสิทธิภาพหรือไม่ และเวลาที่ใช้ในการตั้งค่าคุ้มค่าหรือเปล่า
  • bpftune ถูกออกแบบให้เป็นเครื่องมือที่ไม่ต้องตั้งค่า
    • จึงไม่ต้องเรียนรู้การตั้งค่าจำนวนมาก และยินดีต้อนรับความช่วยเหลือแบบอัตโนมัติ
  • ใช้งานได้ทันทีบน CachyOS
    • หลังติดตั้งแล้วสามารถเข้าได้ผ่าน CachyOS Hello -> Apps/Tweaks
  • อยากรู้ว่ามันจะมีประสิทธิภาพแค่ไหนในสภาพแวดล้อมแบบหลายผู้เช่า เช่น shared k8s cluster
    • แต่ละแอปพลิเคชันมีเป้าหมายต่างกันและย้ายระหว่างโหนดเมื่อเวลาผ่านไป
    • อย่างไรก็ตาม มีแนวโน้มสูงว่าจะมีความคล้ายคลึงกันระหว่างแอปพลิเคชันส่วนใหญ่
  • สงสัยว่าการปรับขนาด TCP buffer คุ้มค่าหรือไม่
  • มีข้อสงสัยว่า ถ้าการปรับพารามิเตอร์ให้เป็นค่าที่เหมาะสมที่สุดทำได้ง่าย เคอร์เนลก็น่าจะตั้งค่าแบบนั้นมาตั้งแต่แรกหรือไม่
  • เป็นเรื่องยอดเยี่ยมที่พัฒนาจากการกรองแพ็กเก็ตแบบง่าย ๆ ไปสู่การติดตามและมอนิเตอร์
    • เป็นเครื่องมือที่ยอดเยี่ยมซึ่งคนส่วนใหญ่ควรรู้จัก
    • ใช้มาหลายปีแล้ว