อ่าน 7 นาที
DTrace
DTrace เป็น เฟรมเวิร์ก การติดตามการทำงาน แบบไดนามิกที่ครอบคลุม ซึ่งเดิมทีสร้างขึ้นโดย Sun Microsystems เพื่อใช้ใน การแก้ไข ปัญหา เคอร์เนล...
DTrace
| DTrace | |
|---|---|
คำ DTraceสั่ง | |
| ผู้เขียนต้นฉบับ | ไบรอัน แคนทริล , อดัม เลเวนธัล , ไมค์ ชาปิโร ( ซัน ไมโครซิสเต็มส์ ) |
| นักพัฒนา | ซัน ไมโครซิสเต็มส์ , ออราเคิล , ไมโครซอฟต์ |
| ปล่อย | มกราคม พ.ศ. 2548 |
| เขียนเป็น | ซี |
| ระบบปฏิบัติการ | Solaris , illumos , macOS , FreeBSD , NetBSD , Linux , [ 1 ] Windows [ 2 ] |
| พิมพ์ | การติดตาม |
| ใบอนุญาต | CDDL , GPLv2 , UPL |
| เว็บไซต์ | dtrace.org |
| ที่เก็บข้อมูล | github.com/opendtrace |
DTraceเป็น เฟรมเวิร์ก การติดตามการทำงาน แบบไดนามิกที่ครอบคลุม ซึ่งเดิมทีสร้างขึ้นโดยSun Microsystemsเพื่อใช้ในการแก้ไข ปัญหา เคอร์เนลและแอปพลิเคชันบนระบบที่ใช้งานจริงแบบเรียลไทม์ เดิมทีพัฒนาขึ้นสำหรับSolaris แต่ต่อมาได้เผยแพร่ภายใต้ ใบอนุญาตการพัฒนาและการแจกจ่ายทั่วไป (CDDL) ฟรีในOpenSolarisและillumos ซึ่งเป็นรุ่นต่อยอด และได้รับการพอร์ตไปยัง ระบบ ที่คล้าย Unix อื่นๆ อีกหลาย ระบบ ระบบ Windows Server ตั้งแต่Windows Server 2025 เป็นต้นไป จะมี DTrace เป็นส่วนหนึ่งของระบบ
DTrace สามารถใช้เพื่อดูภาพรวมของระบบที่กำลังทำงานอยู่ เช่น ปริมาณหน่วยความจำ เวลา CPU ทรัพยากรระบบไฟล์และเครือข่ายที่ใช้โดยกระบวนการที่กำลังทำงานอยู่ นอกจากนี้ยังสามารถให้ข้อมูลที่ละเอียดกว่านั้นได้ เช่น บันทึกอาร์กิวเมนต์ที่ใช้ในการเรียกฟังก์ชันเฉพาะ หรือรายการกระบวนการที่เข้าถึงไฟล์เฉพาะ
ในปี 2010 Oracle Corporation ได้เข้าซื้อกิจการ Sun Microsystemsและประกาศยุติการใช้งาน OpenSolaris เพื่อเป็นความพยายามร่วมกันของวิศวกร Solaris หลักบางส่วนในการสร้าง Solaris ที่เป็นโอเพนซอร์สอย่างแท้จริงระบบปฏิบัติการillumos จึงถูกประกาศผ่านทางเว็บินาร์ในวันพฤหัสบดีที่ 3 สิงหาคม 2010 [ 3 ]โดยเป็นการแตกแขนงมาจากการรวม OpenSolaris OS/Net รวมถึงเทคโนโลยี DTrace ด้วย
ในเดือนตุลาคม พ.ศ. 2554 Oracle ประกาศการพอร์ต DTrace ไปยังLinux [ 4 ]และในปี พ.ศ. 2562 DTrace อย่างเป็นทางการสำหรับ Fedora ก็มีให้บริการบนGitHubเป็นเวลาหลายปีที่พอร์ต DTrace อย่างไม่เป็นทางการไปยัง Linux มีให้บริการโดยไม่มีการเปลี่ยนแปลงเงื่อนไขการอนุญาต[ 5 ]
ในเดือนสิงหาคม พ.ศ. 2560 Oracle ได้เผยแพร่โค้ดเคอร์เนล DTrace ภายใต้ ใบอนุญาต GPLv2+และโค้ดพื้นที่ผู้ใช้ ภายใต้ ใบอนุญาต GPLv2 และ UPL [ 6 ]ในเดือนกันยายน พ.ศ. 2561 Microsoftประกาศว่าได้พอร์ต DTrace จากFreeBSDไปยัง Windows แล้ว[ 2 ]
ในเดือนกันยายน 2016 โครงการ OpenDTrace เริ่มต้นขึ้นบนGitHubโดยมีทั้งโค้ดและเอกสาร ประกอบที่ครอบคลุมเกี่ยวกับกลไก การทำงานภายในของระบบ โครงการ OpenDTrace ยังคงใช้ใบอนุญาต CDDL เดิมสำหรับโค้ดจาก OpenSolaris โดยส่วนเพิ่มเติมของโค้ดจะอยู่ภายใต้ ใบอนุญาต BSD 2 Clauseเป้าหมายของ OpenDTrace คือการจัดหาการใช้งาน DTrace ที่เป็นอิสระจากระบบปฏิบัติการ พกพาได้ และเป็นที่ยอมรับสำหรับผู้ใช้งานทุกระบบ รวมถึง macOS, FreeBSD, OpenBSD, NetBSD และ Linux ตลอดจนระบบฝังตัว
คำอธิบาย
Sun Microsystems ออกแบบ DTrace เพื่อให้ข้อมูลเชิงลึกด้านการดำเนินงาน ซึ่งช่วยให้ผู้ใช้สามารถปรับแต่งและแก้ไขปัญหาแอปพลิเคชันและระบบปฏิบัติการได้
ผู้ทดสอบเขียนโปรแกรมติดตาม (หรือเรียกว่าสคริปต์) โดยใช้ภาษาโปรแกรม D (อย่าสับสนกับภาษาโปรแกรมอื่นๆ ที่ชื่อ "D" เหมือนกัน ) ภาษาดังกล่าวได้รับแรงบันดาลใจจากภาษา Cและมีฟังก์ชันและตัวแปรเพิ่มเติมเฉพาะสำหรับการติดตาม โปรแกรม D มีโครงสร้างคล้ายกับ โปรแกรม AWKโดยประกอบด้วยรายการของโพรบ (จุดตรวจสอบ) อย่างน้อยหนึ่งรายการ และแต่ละโพรบจะเชื่อมโยงกับการกระทำ โพรบเหล่านี้เปรียบได้กับpointcutในการเขียนโปรแกรมเชิงแง่มุมเมื่อใดก็ตามที่ตรงตามเงื่อนไขของโพรบ การกระทำที่เกี่ยวข้องจะถูกดำเนินการ (โพรบ "ทำงาน") โพรบทั่วไปอาจทำงานเมื่อเปิดไฟล์บางไฟล์ หรือเริ่มกระบวนการ หรือเรียกใช้โค้ดบรรทัดใดบรรทัดหนึ่ง โพรบที่ทำงานอาจวิเคราะห์สถานการณ์ขณะรันไทม์โดยการเข้าถึงสแต็กการเรียกและตัวแปรบริบท และประเมินนิพจน์ จากนั้นอาจพิมพ์หรือบันทึกข้อมูลบางอย่าง บันทึกไว้ในฐานข้อมูล หรือแก้ไขตัวแปรบริบท การอ่านและการเขียนตัวแปรบริบทช่วยให้โพรบสามารถส่งข้อมูลถึงกันได้ ทำให้พวกมันสามารถวิเคราะห์ความสัมพันธ์ของเหตุการณ์ต่างๆ ร่วมกันได้
มีการพิจารณาเป็นพิเศษเพื่อให้ DTrace ปลอดภัยต่อการใช้งานในสภาพแวดล้อมการผลิต ตัวอย่างเช่นผลกระทบจากโพรบ จะน้อยมาก เมื่อทำการติดตาม และไม่มีผลกระทบต่อประสิทธิภาพการทำงานใดๆ ที่เกี่ยวข้องกับโพรบที่ปิดใช้งาน ซึ่งเป็นสิ่งสำคัญเนื่องจากมีโพรบ DTrace หลายหมื่นรายการที่สามารถเปิดใช้งานได้ นอกจากนี้ยังสามารถสร้างโพรบใหม่ได้แบบไดนามิก
ตัวอย่างคำสั่งบรรทัดคำสั่ง
สคริปต์ DTrace สามารถเรียกใช้งานได้โดยตรงจากบรรทัดคำสั่ง โดยระบุโพรบและแอ็กชันอย่างน้อยหนึ่งรายการเป็นอาร์กิวเมนต์ ตัวอย่างเช่น:
# กระบวนการใหม่ที่มีอาร์กิวเมนต์ dtrace -n 'proc:::exec-success { trace(curpsinfo->pr_psargs); }'# ไฟล์ที่เปิดโดยกระบวนการ dtrace -n 'syscall::open*:entry { printf("%s %s",execname,copyinstr(arg0)); }'# จำนวนการเรียกใช้ระบบตามโปรแกรม dtrace -n 'syscall:::entry { @num[execname] = count(); }'# นับจำนวนการเรียกใช้ระบบโดยใช้คำสั่ง `syscall dtrace -n 'syscall:::entry { @num[probefunc] = count(); }'`# จำนวนการเรียกใช้ระบบตามกระบวนการ dtrace -n 'syscall:::entry { @num[pid,execname] = count(); }'# ขนาดดิสก์ตามกระบวนการ dtrace -n 'io:::start { printf("%d %s %d",pid,execname,args[0]->b_bcount); }'# จำนวนหน้าที่ถูกเรียกเข้าโดยกระบวนการ dtrace -n 'vminfo:::pgpgin { @pg[execname] = sum(arg0); }'สามารถเขียนสคริปต์ที่มีความยาวได้หลายร้อยบรรทัด แม้ว่าโดยทั่วไปแล้วจะต้องการเพียงไม่กี่สิบบรรทัดสำหรับการแก้ไขปัญหาและการวิเคราะห์ขั้นสูงก็ตาม ตัวอย่างสคริปต์ DTrace แบบโอเพนซอร์สมากกว่า 200 ตัวอย่างสามารถพบได้ใน DTraceToolkit [ 7 ]ซึ่งสร้างโดยBrendan Gregg (ผู้เขียนหนังสือ DTrace [ 8 ] ) ซึ่งยังมีเอกสารประกอบและการสาธิตของแต่ละสคริปต์อีกด้วย
แพลตฟอร์มที่รองรับ
DTrace เริ่มเปิดให้ใช้งานครั้งแรกในเดือนพฤศจิกายน 2546 และได้รับการเปิดตัวอย่างเป็นทางการในฐานะส่วนหนึ่งของSolaris 10 ของ Sun ในเดือนมกราคม 2548 DTrace เป็นส่วนประกอบแรกของ โครงการ OpenSolarisที่มีการเผยแพร่ซอร์สโค้ดภายใต้สัญญาอนุญาตการพัฒนาและการแจกจ่ายทั่วไป (CDDL)
DTrace เป็นส่วนสำคัญของillumosและระบบปฏิบัติการที่เกี่ยวข้อง
DTrace เป็นส่วนประกอบมาตรฐานของFreeBSD [ 9 ]และNetBSD [ 10 ]
Apple เพิ่มการสนับสนุน DTrace ในMac OS X 10.5 "Leopard" รวมถึง GUI ที่เรียกว่าInstruments [ 11 ] สคริปต์ DTrace มากกว่า 40 รายการจาก DTraceToolkit รวมอยู่ใน /usr/bin [ 12 ]รวมถึงเครื่องมือสำหรับตรวจสอบการรับส่งข้อมูลดิสก์ (iosnoop) และการดำเนินการของกระบวนการ (execsnoop) แตกต่างจากแพลตฟอร์มอื่นๆ ที่รองรับ DTrace Mac OS X มีแฟล็ก (P_LNOATTACH) ที่โปรแกรมอาจตั้งค่าเพื่อไม่อนุญาตให้ติดตามกระบวนการนั้นโดยยูทิลิตี้การดีบัก เช่น DTrace และgdbในการใช้งาน DTrace ดั้งเดิมของ Mac OS X สิ่งนี้อาจส่งผลต่อการติดตามข้อมูลระบบอื่นๆ เนื่องจากโพรบที่ไม่เกี่ยวข้องซึ่งควรทำงานในขณะที่โปรแกรมที่มีแฟล็กนี้กำลังทำงานอยู่จะไม่สามารถทำงานได้[ 13 ]การอัปเดต OS X 10.5.3 ได้แก้ไขปัญหานี้ในอีกไม่กี่เดือนต่อมา[ 14 ]อย่างไรก็ตาม ตั้งแต่ El Capitan เป็นต้นมาการป้องกันความสมบูรณ์ของระบบจะป้องกันไม่ให้ผู้ใช้ทำการติดตามไบนารีที่ได้รับการป้องกันโดยค่าเริ่มต้น
DTrace เวอร์ชัน Linux มีให้บริการมาตั้งแต่ปี 2008 [ 15 ]และยังคงมีการพัฒนาและแก้ไขปัญหาอย่างต่อเนื่อง นอกจากนี้ยังมีการใช้งานจริงบน GitHubด้วย มีผู้ให้บริการหลักมาตรฐาน (fbt, syscall, profile) รวมถึงผู้ให้บริการ "instr" พิเศษ (ผู้ให้บริการ Solaris บางส่วนยังไม่พร้อมใช้งาน ณ ปี 2013) การใช้งาน DTrace บน Linux เป็นโมดูลเคอร์เนล ที่สามารถโหลดได้ ซึ่งหมายความว่าเคอร์เนลเองไม่จำเป็นต้องมีการแก้ไขใดๆ และทำให้ DTrace สามารถหลีกเลี่ยงความขัดแย้งด้านลิขสิทธิ์ CDDL กับ GPL ได้ (อย่างน้อยก็ในรูปแบบซอร์สโค้ด) อย่างไรก็ตาม เมื่อโหลด DTrace แล้ว อินสแตนซ์เคอร์เนลจะถูกทำเครื่องหมายว่า ป น เปื้อน
ในปี พ.ศ. 2550 นักพัฒนาซอฟต์แวร์ที่ QNX Software Systems ประกาศในบล็อกของเขาว่าเขาและเพื่อนร่วมงานกำลังทำงานเพื่อรวม DTrace เข้ากับระบบปฏิบัติการQNX [ 16 ]
Oracle Corporation ได้เพิ่มการสนับสนุน DTrace เบต้าสำหรับOracle Linuxในปี 2554 [ 1 ]เป็นการทดลองใช้งานเทคโนโลยีในUnbreakable Enterprise Kernelรุ่น 2 ซึ่งอยู่ภายใต้ GPLv2 (โมดูลเคอร์เนล DTrace Linux เดิมทีเผยแพร่ภายใต้ CDDL) [ 17 ]มีการประกาศเปิดให้ใช้งานทั่วไปในเดือนธันวาคม 2555 [ 18 ] [ 19 ]
เมื่อวันที่ 11 มีนาคม 2019 ไมโครซอฟต์ได้ปล่อยเวอร์ชันของ DTrace สำหรับ Windows 10 insider builds [ 20 ]ไมโครซอฟต์ได้รวม DTrace เป็นเครื่องมือในตัวในWindows Server 2025 [ 21 ] [ 22 ]
ผู้ให้บริการภาษาและแอปพลิเคชัน
ด้วยผู้ให้บริการภาษา ที่รองรับ DTrace สามารถดึงบริบทของโค้ดได้ รวมถึงฟังก์ชัน ไฟล์ต้นฉบับ และตำแหน่งหมายเลขบรรทัด นอกจากนี้ การจัดสรรหน่วยความจำแบบไดนามิกและการเก็บขยะก็สามารถใช้งานได้หากภาษานั้นรองรับ[ 23 ] ผู้ให้บริการภาษาที่รองรับ ได้แก่ภาษาแอสเซมบ ลีC C ++ Java Erlang JavaScript Perl PHP Python Rubyสคริปต์เชลล์และTcl
ผู้ให้บริการแอปพลิเคชันอนุญาตให้ DTrace ติดตามการทำงานของแอปพลิเคชันผ่านการเรียกใช้ระบบและเข้าไปในเคอร์เนล แอปพลิเคชันที่ให้บริการผู้ให้บริการแอปพลิเคชัน DTrace ได้แก่MySQL , PostgreSQL , Oracle Database , Oracle Grid EngineและFirefox [ 23 ] [ 24 ] [ 25 ]
นักเขียนและรางวัล
DTrace ได้รับการออกแบบและพัฒนาโดยBryan Cantrill , Mike ShapiroและAdam Leventhal
ผู้เขียนได้รับการยอมรับในปี 2548 สำหรับนวัตกรรมใน DTrace จากInfoWorld และ Technology Review [ 26 ] [ 27 ] DTrace ได้รับรางวัลสูงสุดในการแข่งขัน Technology Innovation Awards ประจำปี 2549 ของThe Wall Street Journal [ 28 ]ผู้เขียนได้รับการยอมรับจากUSENIXด้วยรางวัล Software Tools User Group (STUG) ในปี 2551 [ 29 ]
ดูเพิ่มเติม
- eBPF – แบ็กเอนด์การติดตามเคอร์เนล Linux ที่มีชุดคุณสมบัติคล้ายกับ DTrace [ 30 ]ตั้งแต่เคอร์เนลเวอร์ชัน 4.9 แม้ว่าจะคล้ายกัน แต่การใช้งานแตกต่างกัน และประสิทธิภาพก็แตกต่างกันด้วย[ 31 ]
- ftrace – เฟรมเวิร์กสำหรับการติดตามการทำงานของเคอร์เนล Linux ซึ่งสามารถติดตามเหตุการณ์การจัดตารางเวลา การขัดจังหวะ การรับส่งข้อมูลแบบแมปหน่วยความจำ การเปลี่ยนสถานะพลังงานของ CPU เป็นต้น
- ktrace – ยูทิลิตี้สำหรับ BSD Unix และ macOS ที่ใช้ติดตามการทำงานร่วมกันระหว่างเคอร์เนลและโปรแกรม
- ltrace – ยูทิลิตี้สำหรับการดีบักใน Linux จะแสดงการเรียกใช้ไลบรารีที่ใช้ร่วมกันโดยแอปพลิเคชันในระดับผู้ใช้
- strace – ยูทิลิตี้สำหรับการดีบักใน Linux ทำหน้าที่ตรวจสอบการเรียกใช้ระบบของโปรแกรมและสัญญาณที่ได้รับทั้งหมด
- SystemTap – ภาษาสคริปต์และยูทิลิตี้ที่ใช้ในการตรวจสอบการทำงานของระบบปฏิบัติการ Linux
- แอลทีทีเอ็นจี
- ไอบีเอ็มโพรบวิว
ลิงก์ภายนอก
- เครื่องมือ DTrace – ตัวอย่าง DTrace ของ Brendan Gregg (2004)
- DTraceToolkit – ชุดสคริปต์ DTrace
- สคริปต์สำหรับเขียนหนังสือ DTrace – สคริปต์สำหรับเขียนหนังสือ DTrace บน GitHub
- หน้าเว็บ DTrace ของ FreeBSD – หน้าแรกของ DTrace สำหรับ FreeBSD ซึ่งรวมถึงบทแนะนำและคำสั่งแบบบรรทัดเดียว
- หนังสือ DTrace
- คู่มือ DTrace – หนังสือ Illumos DTrace
- การติดตามการทำงานแบบไดนามิกด้วย DTrace และ SystemTap – หนังสือฟรีพร้อมตัวอย่างและแบบฝึกหัด
- DTrace Hands On Lab – หลักสูตรเรียนรู้ DTrace แบบทีละขั้นตอน
- คู่มือการใช้งาน DLight – ยูทิลิตี้ GUI แบบโต้ตอบสำหรับนักพัฒนา C/C++ ที่ใช้เทคโนโลยี DTrace; เป็นส่วนหนึ่งของOracle Solaris Studioก่อนเวอร์ชัน 12.4
- สำรวจ Leopard ด้วย DTrace – DTrace สำหรับการดีบักและการสำรวจ
- ไบรอัน แคนทริล บรรยายทางเทคนิคเกี่ยวกับ DTrace
- ซ่อนเร้นอยู่ในสายตาคนทั่วไป บริษัทซัน ไมโครซิสเต็มส์ โดย ไบรอัน แคนทริล
- โปรแกรม Oracle DTrace เวอร์ชันอย่างเป็นทางการสำหรับ Linux:
- แพทช์ DTrace ถูกรวมเข้ากับเคอร์เนล Linux เวอร์ชันล่าสุดแล้ว
- ส่วนของผู้ใช้ในพอร์ต DTrace สำหรับ Linux
- ไลบรารี Compact Type Format ที่ DTrace ใช้บน Linux
- DTrace บน Fedora
สรุปเนื้อหา
ข้อมูลสำคัญจากบทความ
ข้อมูลสำคัญเกี่ยวกับ DTrace
DTrace เป็น เฟรมเวิร์ก การติดตามการทำงาน แบบไดนามิกที่ครอบคลุม ซึ่งเดิมทีสร้างขึ้นโดย Sun Microsystems เพื่อใช้ใน การแก้ไข ปัญหา เคอร์เนล...
คำอธิบาย
Sun Microsystems ออกแบบ DTrace เพื่อให้ข้อมูลเชิงลึกด้านการดำเนินงาน ซึ่งช่วยให้ผู้ใช้สามารถปรับแต่งและแก้ไขปัญหาแอปพลิเคชันและระบบปฏิบัติการได้
ตัวอย่างคำสั่งบรรทัดคำสั่ง
สคริปต์ DTrace สามารถเรียกใช้งานได้โดยตรงจากบรรทัดคำสั่ง โดยระบุโพรบและแอ็กชันอย่างน้อยหนึ่งรายการเป็นอาร์กิวเมนต์ ตัวอย่างเช่น:
แพลตฟอร์มที่รองรับ
DTrace เริ่มเปิดให้ใช้งานครั้งแรกในเดือนพฤศจิกายน 2546 และได้รับการเปิดตัวอย่างเป็นทางการในฐานะส่วนหนึ่งของ Solaris 10 ของ Sun ในเดือนมกราคม 2548 DTrace เป็นส่วนประกอบแรกของ โครงการ OpenSolaris ที่มีการเผยแพร่ซอร์สโค้ดภายใต้...