Oracle ตั้งใจที่จะปรับปรุง DTrace สำหรับ Linux โดยใช้ eBPF

บริษัทออราเคิล รายงาน เกี่ยวกับงานในการถ่ายโอนการเปลี่ยนแปลงที่เกี่ยวข้องกับ DTrace ไปยังอัปสตรีม และวางแผนที่จะใช้เทคโนโลยีการดีบักไดนามิก DTrace บนโครงสร้างพื้นฐานเคอร์เนล Linux มาตรฐาน ได้แก่ การใช้ระบบย่อย เช่น eBPF ในตอนแรก ปัญหาหลักของการใช้ DTrace บน Linux คือความเข้ากันไม่ได้ในระดับลิขสิทธิ์ แต่ในปี 2018 Oracle ได้รับใบอนุญาตแล้ว รหัส DTrace ภายใต้ GPLv2

ดีเทรซแล้ว เวลานาน ได้รับการเสนอให้เป็นส่วนหนึ่งของเคอร์เนลขยายสำหรับการแจกจ่าย Oracle Linux แต่สำหรับการใช้ในการกระจายอื่น ๆ นั้นจำเป็นต้องใช้แพตช์เคอร์เนลเพิ่มเติม ซึ่งจำกัดการใช้เทคโนโลยีนี้ ตัวอย่างเช่น ออราเคิล เตรียมไว้ คำแนะนำโดยละเอียดสำหรับการติดตั้งและใช้งาน DTrace บน Fedora Linux การประกอบที่จำเป็นสำหรับการติดตั้ง เครื่องมือ และการใช้เคอร์เนล Linux ที่สร้างขึ้นใหม่ แพทช์. ขอเสนอให้ดำเนินการสร้างเคอร์เนลโดยอัตโนมัติด้วยแพตช์ Oracle และ Fedora สคริปต์.

eBPF เป็นล่ามโค้ดไบต์ที่สร้างไว้ในเคอร์เนล Linux ซึ่งช่วยให้คุณสามารถสร้างตัวจัดการการทำงานของเครือข่าย ตรวจสอบการทำงานของระบบ สกัดกั้นการเรียกของระบบ ควบคุมการเข้าถึง ประมวลผลเหตุการณ์ด้วยการจับเวลา (perf_event_open) นับความถี่และเวลาดำเนินการของการดำเนินการ ทำการติดตามโดยใช้ kprobes /uprobes /จุดติดตาม ด้วยการใช้การคอมไพล์ JIT รหัสไบต์จึงถูกแปลทันทีเป็นคำสั่งของเครื่องและดำเนินการด้วยประสิทธิภาพของโค้ดเนทีฟ DTrace สามารถนำไปใช้บน eBPF ได้ เช่นเดียวกับวิธีการนำไปใช้กับ eBPF работают เครื่องมือติดตามที่มีอยู่

เทคโนโลยี DTrace ได้รับการพัฒนาสำหรับระบบปฏิบัติการ Solaris เพื่อแก้ปัญหาการติดตามเคอร์เนลของระบบและแอปพลิเคชันปลายทางแบบไดนามิก ทำให้ผู้ใช้สามารถตรวจสอบพฤติกรรมของระบบโดยละเอียดและวินิจฉัยปัญหาแบบเรียลไทม์ ในระหว่างกระบวนการแก้ไขข้อบกพร่อง DTrace จะไม่ส่งผลกระทบต่อการทำงานของแอปพลิเคชันที่กำลังศึกษาอยู่ และไม่ส่งผลกระทบต่อประสิทธิภาพในทางใดทางหนึ่ง ซึ่งช่วยให้คุณสามารถจัดระเบียบการวิเคราะห์ระบบที่ทำงานอยู่ได้ทันที จุดแข็งประการหนึ่งของ DTrace คือภาษา D ระดับสูง ซึ่งคล้ายกับ AWK ซึ่งสร้างสคริปต์การติดตามได้ง่ายกว่าการใช้เครื่องมือที่มีให้สำหรับการเขียนตัวจัดการ eBPF ใน C, Python และ Lua ด้วยไลบรารีภายนอก

วิศวกรจาก Oracle กำลังทำงานเพื่อสร้างแบ็กเอนด์ eBPF สำหรับ GCC และได้เผยแพร่แล้ว ชุดแพทช์ เพื่อรวมการสนับสนุน eBPF เข้ากับ GCC และ ประสบความสำเร็จ รวมถึงรหัสเพื่อรองรับ eBPF ใน GNU binutils ในขั้นต้น แบ็กเอนด์สำหรับการสนับสนุน eBPF ขึ้นอยู่กับเทคโนโลยี LLVM แต่ Oracle สนใจที่จะปรากฏตัวใน GCC ของความสามารถมาตรฐานในการสร้างโปรแกรมสำหรับ eBPF ซึ่งจะช่วยให้สามารถใช้ชุดเครื่องมือเดียวทั้งสำหรับการสร้างเคอร์เนล Linux และสำหรับการสร้างโปรแกรม สำหรับ eBPF

นอกเหนือจากแบ็กเอนด์การสร้างโค้ดไบต์แล้ว แพตช์ที่เสนอสำหรับ GCC ยังรวมพอร์ต libgcc สำหรับ eBPF และเครื่องมือสำหรับการสร้างไฟล์ ELF ทำให้สามารถรันโค้ดในเครื่องเสมือน eBPF โดยใช้ตัวโหลดที่เคอร์เนลจัดเตรียมไว้ให้ สำหรับตอนนี้ โค้ดในภาษา C สามารถแปลเป็น bytecode ได้ (ฟีเจอร์ภาษาบางอันอาจไม่พร้อมใช้งาน) แต่ในอนาคต คาดว่าจะขยายขีดความสามารถของภาษา C ที่พร้อมใช้งาน เพิ่มการรองรับสำหรับภาษาอื่น สร้างเครื่องจำลอง และ เพิ่มการสนับสนุน GCC สำหรับการดีบักโปรแกรม eBPF โดยไม่ต้องโหลดลงในเคอร์เนล

ที่มา: opennet.ru

เพิ่มความคิดเห็น