คอลเลกชันคอมไพเลอร์ BPF (BCC)
BCC เป็นชุดเครื่องมือสำหรับสร้างโปรแกรมติดตามและจัดการเคอร์เนลที่มีประสิทธิภาพ และมีเครื่องมือและตัวอย่างที่เป็นประโยชน์มากมาย มันใช้ BPF แบบขยาย (Berkeley Packet Filters) หรือที่รู้จักอย่างเป็นทางการในชื่อ eBPF ซึ่งเป็นฟีเจอร์ใหม่ที่เพิ่มเข้ามาใน Linux 3.15 เป็นครั้งแรก สิ่งที่ BCC ใช้ส่วนใหญ่ต้องใช้ Linux 4.1 ขึ้นไป
eBPF ได้รับการอธิบายโดย Ingo Molnár ว่า:
คุณสมบัติที่น่าสนใจอย่างหนึ่งในรอบนี้คือความสามารถในการแนบโปรแกรม eBPF (ไบต์โค้ดแบบแซนด์บ็อกซ์ที่ผู้ใช้กำหนดซึ่งดำเนินการโดยเคอร์เนล) เข้ากับ kprobes ซึ่งอนุญาตให้ผู้ใช้กำหนดเครื่องมือบนอิมเมจเคอร์เนลสดซึ่งไม่เคยผิดพลาด ค้าง หรือรบกวนเคอร์เนลในทางลบ
BCC ทำให้โปรแกรม BPF เขียนได้ง่ายขึ้น ด้วยเครื่องมือเคอร์เนลในภาษา C (และรวม C wrapper รอบ ๆ LLVM) และส่วนหน้าใน Python และ lua เหมาะสำหรับงานหลายอย่าง รวมถึงการวิเคราะห์ประสิทธิภาพและการควบคุมการรับส่งข้อมูลเครือข่าย
ภาพหน้าจอ
ตัวอย่างนี้ติดตามฟังก์ชันเคอร์เนล I/O ของดิสก์ และเติมฮิสโตแกรมกำลังของ 2 ในเคอร์เนลของขนาด I/O เพื่อประสิทธิภาพ เฉพาะสรุปฮิสโตแกรมเท่านั้นที่จะถูกส่งกลับไปยังระดับผู้ใช้
# ./bitehist.py
Tracing... Hit Ctrl-C to end.
^C
kbytes : count distribution
0 - > 1 : 3 | |
2 - > 3 : 0 | |
4 - > 7 : 211 | ********** |
8 - > 15 : 0 | |
16 - > 31 : 0 | |
32 - > 63 : 0 | |
64 - > 127 : 1 | |
128 - > 255 : 800 | ************************************** |
เอาต์พุตด้านบนแสดงการกระจายแบบไบโมดัล โดยที่โหมดที่ใหญ่ที่สุดคือ 800 I/O มีขนาดระหว่าง 128 ถึง 255 Kbytes
ดูที่มา: Bithist.py สิ่งที่ติดตาม สิ่งที่จัดเก็บ และวิธีการนำเสนอข้อมูล สามารถปรับแต่งได้ทั้งหมด นี่แสดงความสามารถที่เป็นไปได้บางส่วนเท่านั้น
กำลังติดตั้ง
ดู INSTALL.md สำหรับขั้นตอนการติดตั้งบนแพลตฟอร์มของคุณ
คำถามที่พบบ่อย
ดู FAQ.txt สำหรับคำถามการแก้ปัญหาที่พบบ่อยที่สุด
คู่มืออ้างอิง
ดู docs/reference_guide.md สำหรับคำแนะนำในการอ้างอิงถึง bcc และ bcc/BPF API
สารบัญ
บางไฟล์เป็นไฟล์เดียวที่มีทั้ง C และ Python ส่วนบางไฟล์มีไฟล์ .c และ .py คู่กัน และบางไฟล์เป็นไดเร็กทอรีของไฟล์
การติดตาม
ตัวอย่าง
- examples/tracing/bitehist.py: บล็อกฮิสโตแกรมขนาด I/O ตัวอย่าง.
- examples/tracing/disksnoop.py: ติดตามเวลาแฝง I/O ของอุปกรณ์บล็อกการติดตาม ตัวอย่าง.
- examples/hello_world.py: พิมพ์คำว่า "Hello, World!" สำหรับกระบวนการใหม่ๆ
- examples/tracing/mysqld_query.py: ติดตามการสืบค้นเซิร์ฟเวอร์ MySQL โดยใช้โพรบ USDT ตัวอย่าง.
- examples/tracing/nodejs_http_server.py: ติดตามคำขอเซิร์ฟเวอร์ HTTP ของ Node.js โดยใช้โพรบ USDT ตัวอย่าง.
- examples/tracing/stacksnoop: ติดตามฟังก์ชันเคอร์เนลและพิมพ์การติดตามสแต็กเคอร์เนลทั้งหมด ตัวอย่าง.
- เครื่องมือ/statsnoop: ติดตาม stat() syscalls ตัวอย่าง.
- example/tracing/task_switch.py: นับการสลับงานด้วยจากและไปยัง PID
- examples/tracing/tcpv4connect.py: ติดตามการเชื่อมต่อ TCP IPv4 ที่ใช้งานอยู่ ตัวอย่าง.
- examples/tracing/trace_fields.py: ตัวอย่างง่ายๆ ของการพิมพ์ฟิลด์จากเหตุการณ์ที่ติดตาม
- example/tracing/undump.py: ดัมพ์แพ็กเก็ตซ็อกเก็ต UNIX ตัวอย่าง
- examples/tracing/urandomread.py: ตัวอย่างจุดติดตามเคอร์เนล ซึ่งติดตามแบบสุ่ม:urandom_read ตัวอย่าง.
- example/tracing/vfsreadlat.py examples/tracing/vfsreadlat.c: VFS อ่านการกระจายเวลาแฝง ตัวอย่าง.
- examples/tracing/kvm_hypercall.py: จุดติดตามเคอร์เนลแบบคงที่แบบมีเงื่อนไขสำหรับรายการ KVM ทางออก และตัวอย่างไฮเปอร์คอล
เครื่องมือ
- tools/argdist: แสดงค่าพารามิเตอร์ของฟังก์ชันเป็นฮิสโตแกรมหรือจำนวนความถี่ ตัวอย่าง.
- tools/bashreadline: พิมพ์คำสั่ง bash ที่ป้อนทั้งระบบ ตัวอย่าง.
- tools/bpflist: แสดงกระบวนการด้วยโปรแกรมและแผนที่ BPF ที่ใช้งานอยู่ ตัวอย่าง.
- เครื่องมือ/ความสามารถ: ติดตามการตรวจสอบความสามารถด้านความปลอดภัย ตัวอย่าง.
- tools/compactsnoop: ติดตามเหตุการณ์โซนขนาดกะทัดรัดด้วย PID และเวลาแฝง ตัวอย่าง.
- tools/criticalstat: ติดตามและรายงานส่วนวิกฤตอะตอมขนาดยาวในเคอร์เนล ตัวอย่าง
- เครื่องมือ/การหยุดชะงัก: ตรวจจับการหยุดชะงักที่อาจเกิดขึ้นในกระบวนการที่ทำงานอยู่ ตัวอย่าง.
- tools/drsnoop: ติดตามเหตุการณ์การเรียกคืนโดยตรงด้วย PID และเวลาแฝง ตัวอย่าง.
- tools/funccount: นับการเรียกใช้ฟังก์ชันเคอร์เนล ตัวอย่าง.
- เครื่องมือ/การฉีด: การฉีดข้อผิดพลาดแบบกำหนดเป้าหมายด้วยสายโซ่การโทรและเพรดิเคต ตัวอย่าง
- tools/klockstat: ติดตามเหตุการณ์การล็อกเคอร์เนล mutex และแสดงสถิติการล็อก ตัวอย่าง.
- เครื่องมือ/opensnoop: ติดตาม open() syscalls ตัวอย่าง.
- tools/readahead: แสดงประสิทธิภาพของตัวอย่างแคชแบบอ่านล่วงหน้า
- tools/reset-trace: รีเซ็ตสถานะของการติดตาม เครื่องมือบำรุงรักษาเท่านั้น ตัวอย่าง.
- tools/stackcount: นับการเรียกใช้ฟังก์ชันเคอร์เนลและการติดตามสแต็ก ตัวอย่าง.
- เครื่องมือ/syncsnoop: ติดตามการซิงค์() syscall ตัวอย่าง.
- tools/threadsnoop: แสดงรายการการสร้างเธรดใหม่ ตัวอย่าง.
- tools/tplist: แสดงจุดติดตามเคอร์เนลหรือโพรบ USDT และรูปแบบ ตัวอย่าง.
- เครื่องมือ/การติดตาม: ติดตามฟังก์ชันที่กำหนดเองพร้อมตัวกรอง ตัวอย่าง.
- tools/ttysnoop: ดูเอาต์พุตสดจากอุปกรณ์ tty หรือ pts ตัวอย่าง.
- tools/ucalls: สรุปการเรียกใช้เมธอดหรือ syscalls ของ Linux ในภาษาระดับสูง ตัวอย่าง.
- tools/uflow: พิมพ์กราฟการไหลของวิธีการในภาษาระดับสูง ตัวอย่าง.
- tools/ugc: ติดตามเหตุการณ์การรวบรวมขยะในภาษาระดับสูง ตัวอย่าง.
- tools/uobjnew: สรุปเหตุการณ์การจัดสรรอ็อบเจ็กต์ตามประเภทอ็อบเจ็กต์และจำนวนไบต์ที่จัดสรร ตัวอย่าง.
- tools/ustat: รวบรวมเหตุการณ์ต่างๆ เช่น GCs การสร้างเธรด การจัดสรรอ็อบเจ็กต์ ข้อยกเว้น และอื่นๆ ในภาษาระดับสูง ตัวอย่าง.
- เครื่องมือ/uthreads: ติดตามเหตุการณ์การสร้างเธรดใน Java และ pthreads แบบดิบ ตัวอย่าง.
เครื่องมือหน่วยความจำและกระบวนการ
- tools/execsnoop: ติดตามกระบวนการใหม่ผ่าน exec() syscalls ตัวอย่าง.
- tools/exitsnoop: ติดตามการยุติกระบวนการ (สัญญาณออกและสัญญาณอันตรายถึงชีวิต) ตัวอย่าง.
- tools/killsnoop: ติดตามสัญญาณที่ออกโดย kill() syscall ตัวอย่าง.
- tools/kvmexit: แสดง exit_reason และสถิติของการออก vm แต่ละครั้ง ตัวอย่าง.
- tools/memleak: แสดงการจัดสรรหน่วยความจำที่โดดเด่นเพื่อค้นหาหน่วยความจำรั่ว ตัวอย่าง.
- tools/oomkill: ติดตามนักฆ่าหน่วยความจำไม่เพียงพอ (OOM) ตัวอย่าง.
- tools/pidpersec: นับกระบวนการใหม่ (ผ่านทางแยก) ตัวอย่าง.
- tools/rdmaucma: ติดตามเหตุการณ์การเข้าถึงตัวจัดการการเชื่อมต่อ Userspace RDMA ตัวอย่าง.
- tools/shmsnoop: Trace System V syscalls หน่วยความจำที่ใช้ร่วมกัน ตัวอย่าง.
- เครื่องมือ/แผ่นพื้น: อัตราการจัดสรรแคชหน่วยความจำ Kernel SLAB/SLUB ด้านบน ตัวอย่าง.
เครื่องมือประสิทธิภาพและเวลา
- tools/dbslower: ติดตามการสืบค้น MySQL/PostgreSQL ช้ากว่าเกณฑ์ ตัวอย่าง.
- tools/dbstat: สรุปเวลาแฝงของคิวรี MySQL/PostgreSQL เป็นฮิสโตแกรม ตัวอย่าง.
- tools/funcinterval: ช่วงเวลาระหว่างฟังก์ชันเดียวกันกับฮิสโตแกรม ตัวอย่าง.
- เครื่องมือ/ฟังก์ชันเวลา: ฟังก์ชันเวลาและแสดงการกระจายเวลาแฝง ตัวอย่าง.
- tools/funcslower: ติดตามเคอร์เนลที่ช้าหรือการเรียกใช้ฟังก์ชันผู้ใช้ ตัวอย่าง.
- tools/hardirqs: วัดเวลาเหตุการณ์ IRQ (ขัดจังหวะอย่างหนัก) ตัวอย่าง.
- tools/mysqld_qslower: ติดตามการสืบค้นเซิร์ฟเวอร์ MySQL ช้ากว่าเกณฑ์ ตัวอย่าง.
- tools/ppchcalls: สรุปจำนวน ppc hcall และเวลาแฝง ตัวอย่าง.
- tools/softirqs: วัดเวลาเหตุการณ์ soft IRQ (soft Interrupt) ตัวอย่าง.
- tools/syscount: สรุปจำนวน syscall และเวลาแฝง ตัวอย่าง.
เครื่องมือ CPU และ Scheduler
- tools/cpudist: สรุปเวลาเปิดและปิด CPU ต่องานเป็นฮิสโตแกรม ตัวอย่าง
- tools/cpuunclaimed: ตัวอย่างคิวการรัน CPU และคำนวณ CPU ที่ไม่ได้ใช้งานที่ไม่มีการอ้างสิทธิ์ ตัวอย่าง
- tools/llcstat: สรุปการอ้างอิงแคช CPU และพลาดโดยกระบวนการ ตัวอย่าง.
- tools/offcputime: สรุปเวลานอก CPU ด้วยการติดตามสแต็กเคอร์เนล ตัวอย่าง.
- เครื่องมือ/เวลาหยุดทำงาน: สรุปเวลาที่ถูกบล็อกโดยสแต็กเคอร์เนลนอก CPU และสแต็ก Waker ตัวอย่าง.
- เครื่องมือ/โปรไฟล์: การใช้งาน CPU ของโปรไฟล์โดยการสุ่มตัวอย่างการติดตามสแต็กในช่วงเวลาที่กำหนด ตัวอย่าง.
- tools/runqlat: เรียกใช้คิว (ตัวกำหนดเวลา) เวลาแฝงเป็นฮิสโตแกรม ตัวอย่าง.
- tools/runqlen: เรียกใช้ความยาวคิวเป็นฮิสโตแกรม ตัวอย่าง.
- tools/runqslower: ติดตามความล่าช้าในการกำหนดเวลากระบวนการที่ยาวนาน ตัวอย่าง.
- เครื่องมือ/เวลาปลุก: สรุปเวลาการนอนหลับจนถึงเวลาปลุกโดยสแต็กเคอร์เนลของ Waker ตัวอย่าง.
- tools/wqlat: สรุปเวลาแฝงของการรอคอยบนคิวงาน ตัวอย่าง.
เครื่องมือเครือข่ายและซ็อกเก็ต
- tools/gethostlatency: แสดงเวลาแฝงสำหรับการโทร getaddrinfo/gethostbyname[2] ตัวอย่าง.
- tools/bindsnoop: ติดตามการเรียกของระบบ IPv4 และ IPv6 bind() (bind()) ตัวอย่าง.
- tools/netqtop tools/netqtop.c: ติดตามและแสดงการกระจายแพ็กเก็ตบนคิว NIC ตัวอย่าง.
- tools/sofdsnoop: ติดตาม FD ที่ส่งผ่านซ็อกเก็ตยูนิกซ์ ตัวอย่าง.
- เครื่องมือ/โซลิสเตน: ติดตามการฟังซ็อกเก็ต TCP ตัวอย่าง.
- tools/sslsniff: ดมกลิ่น OpenSSL ข้อมูลที่เขียนและอ่าน ตัวอย่าง.
- tools/tcpaccept: ติดตามการเชื่อมต่อ TCP แบบพาสซีฟ (ยอมรับ ()) ตัวอย่าง.
- tools/tcpconnect: ติดตามการเชื่อมต่อ TCP ที่ใช้งานอยู่ (เชื่อมต่อ()) ตัวอย่าง.
- tools/tcpconnlat: ติดตามเวลาแฝงของการเชื่อมต่อ TCP ที่ใช้งานอยู่ (เชื่อมต่อ ()) ตัวอย่าง.
- tools/tcpdrop: ติดตามแพ็กเก็ต TCP ที่ใช้เคอร์เนลพร้อมรายละเอียด ตัวอย่าง.
- tools/tcplife: ติดตามเซสชัน TCP และสรุปอายุการใช้งาน ตัวอย่าง.
- tools/tcpretrans: ติดตามการส่งสัญญาณ TCP ใหม่และ TLP ตัวอย่าง.
- tools/tcprtt: ติดตามเวลาไปกลับ TCP ตัวอย่าง.
- tools/tcpstates: ติดตามการเปลี่ยนแปลงสถานะเซสชัน TCP ด้วยระยะเวลา ตัวอย่าง.
- tools/tcpsubnet: สรุปและรวม TCP ที่ส่งโดยซับเน็ต ตัวอย่าง.
- tools/tcpsynbl: แสดง TCP SYN backlog ตัวอย่าง.
- tools/tcptop: สรุปปริมาณงานการส่ง/รับ TCP ตามโฮสต์ ด้านบนสำหรับ TCP ตัวอย่าง.
- tools/tcptracer: ติดตามการเชื่อมต่อ TCP ที่สร้างไว้ (เชื่อมต่อ(), ยอมรับ(), ปิด()) ตัวอย่าง.
- tools/tcpcong: ติดตามระยะเวลาสถานะการควบคุมความแออัดของซ็อกเก็ต TCP ตัวอย่าง.
เครื่องมือจัดเก็บข้อมูลและระบบไฟล์
- tools/bitesize: แสดงฮิสโตแกรมขนาด I/O ต่อกระบวนการ ตัวอย่าง.
- tools/cachestat: ติดตามอัตราส่วนการเข้าชม/พลาดแคชของหน้า ตัวอย่าง.
- เครื่องมือ/แคชท็อป: ติดตามอัตราส่วนการเข้าชม/พลาดแคชของเพจตามกระบวนการ ตัวอย่าง.
- tools/dcsnoop: ติดตามการค้นหารายการแคช (dcache) ของไดเรกทอรี ตัวอย่าง.
- tools/dcstat: สถิติรายการแคช (dcache) ของไดเรกทอรี ตัวอย่าง.
- เครื่องมือ/ความหน่วงทางชีวภาพ: สรุปเวลาแฝง I/O ของอุปกรณ์บล็อกเป็นฮิสโตแกรม ตัวอย่าง.
- tools/biotop: ด้านบนสำหรับดิสก์: สรุป I/O ของอุปกรณ์บล็อกตามกระบวนการ ตัวอย่าง.
- เครื่องมือ/รูปแบบทางชีวภาพ: ระบุรูปแบบการเข้าถึงดิสก์แบบสุ่ม/ตามลำดับ ตัวอย่าง.
- เครื่องมือ/biosnoop: ติดตามบล็อกอุปกรณ์ I/O พร้อม PID และเวลาแฝง ตัวอย่าง.
- tools/dirtop: ไฟล์อ่านและเขียนตามไดเร็กทอรี ด้านบนสำหรับไดเรกทอรี ตัวอย่าง.
- tools/filelife: ติดตามอายุการใช้งานของไฟล์อายุสั้น ตัวอย่าง.
- tools/filegone: ติดตามสาเหตุที่ไฟล์หายไป (ถูกลบหรือเปลี่ยนชื่อ) ตัวอย่าง.
- tools/fileslower: ติดตามการอ่านและเขียนไฟล์ซิงโครนัสที่ช้า ตัวอย่าง.
- tools/filetop: ไฟล์อ่านและเขียนตามชื่อไฟล์และกระบวนการ ด้านบนสำหรับไฟล์ ตัวอย่าง.
- tools/mdflush: ติดตามเหตุการณ์ md flush ตัวอย่าง.
- tools/mountsnoop: ติดตาม mount และ umount syscalls ทั้งระบบ ตัวอย่าง.
- tools/virtiostat: แสดงสถิติ IO ของอุปกรณ์ VIRTIO ตัวอย่าง.
เครื่องมือระบบไฟล์
- tools/btrfsdist: สรุปการกระจายเวลาแฝงของการดำเนินการ btrfs เป็นฮิสโตแกรม ตัวอย่าง.
- tools/btrfsslower: ติดตามการดำเนินการ btrfs ที่ช้า ตัวอย่าง.
- tools/ext4dist: สรุปการกระจายเวลาแฝงของการดำเนินการ ext4 เป็นฮิสโตแกรม ตัวอย่าง.
- tools/ext4slower: ติดตามการทำงานของ ext4 ที่ช้า ตัวอย่าง.
- tools/nfsslower: ติดตามการดำเนินการ NFS ที่ช้า ตัวอย่าง.
- tools/nfsdist: สรุปการกระจายเวลาแฝงของการดำเนินการ NFS เป็นฮิสโตแกรม ตัวอย่าง.
- tools/vfscount: นับการโทร VFS ตัวอย่าง.
- tools/vfsstat: นับการเรียก VFS ด้วยเอาต์พุตคอลัมน์ ตัวอย่าง.
- tools/xfsdist: สรุปการกระจายเวลาแฝงของการดำเนินการ XFS เป็นฮิสโตแกรม ตัวอย่าง.
- tools/xfsslower: ติดตามการดำเนินการ XFS ที่ช้า ตัวอย่าง.
- tools/zfsdist: สรุปการกระจายเวลาแฝงของการดำเนินการ ZFS เป็นฮิสโตแกรม ตัวอย่าง.
- tools/zfsslower: ติดตามการทำงานของ ZFS ที่ช้า ตัวอย่าง.
เครือข่าย
ตัวอย่าง:
- examples/networking/distributed_bridge/: ตัวอย่างบริดจ์แบบกระจาย
- examples/networking/http_filter/: ตัวอย่างตัวกรอง HTTP แบบง่าย
- examples/networking/simple_tc.py: ตัวอย่างการควบคุมการรับส่งข้อมูลอย่างง่าย
- examples/networking/simulation.py: ตัวช่วยจำลอง
- example/networking/neighbor_sharing/tc_neighbor_sharing.py examples/networking/neighbor_sharing/tc_neighbor_sharing.c: การจำแนกประเภทต่อ IP และการจำกัดอัตรา
- examples/networking/tunnel_monitor/: ตรวจสอบกระแสการรับส่งข้อมูลอย่างมีประสิทธิภาพ
- examples/networking/vlan_learning/vlan_learning.py examples/vlan_learning.c: Demux Ethernet ทราฟฟิกเข้าสู่ veth+namespaces ของผู้ปฏิบัติงาน
วิปัสสนา BPF
เครื่องมือที่ช่วยในการวิปัสสนาโปรแกรม BPF
- introspection/bps.c: แสดงรายการโปรแกรม BPF ทั้งหมดที่โหลดลงในเคอร์เนล 'ps' สำหรับโปรแกรม BPF ตัวอย่าง.
แรงจูงใจ
BPF รับประกันว่าโปรแกรมที่โหลดลงในเคอร์เนลจะไม่เสียหายและไม่สามารถทำงานได้ตลอดไป แต่ BPF ก็มีจุดประสงค์ทั่วไปเพียงพอที่จะทำการคำนวณหลายประเภทตามอำเภอใจ ในปัจจุบัน เป็นไปได้ที่จะเขียนโปรแกรมในภาษา C ที่จะคอมไพล์เป็นโปรแกรม BPF ที่ถูกต้อง แต่จะง่ายกว่ามากในการเขียนโปรแกรม C ที่จะคอมไพล์เป็น BPF ที่ไม่ถูกต้อง (C เป็นเช่นนั้น) ผู้ใช้จะไม่ทราบจนกว่าจะลองรันโปรแกรมว่าถูกต้องหรือไม่
ด้วยส่วนหน้าเฉพาะของ BPF เราควรจะสามารถเขียนในภาษาและรับคำติชมจากคอมไพเลอร์เกี่ยวกับความถูกต้องที่เกี่ยวข้องกับแบ็กเอนด์ BPF ชุดเครื่องมือนี้มีจุดมุ่งหมายเพื่อให้ส่วนหน้าที่สามารถสร้างโปรแกรม BPF ที่ถูกต้องได้เท่านั้น ในขณะที่ยังคงควบคุมความยืดหยุ่นได้เต็มที่
นอกจากนี้ การบูรณาการในปัจจุบันกับ BPF มีเวิร์กโฟลว์ที่ยุ่งยาก ซึ่งบางครั้งเกี่ยวข้องกับการคอมไพล์โดยตรงในแผนผังซอร์สเคอร์เนลของ Linux ห่วงโซ่เครื่องมือนี้มีจุดมุ่งหมายเพื่อลดเวลาที่นักพัฒนาใช้ในการคอมไพล์ BPF และมุ่งเน้นไปที่แอปพลิเคชันที่สามารถเขียนได้และปัญหาที่สามารถแก้ไขได้ด้วย BPF แทน
คุณสมบัติของชุดเครื่องมือนี้ประกอบด้วย:
- เวิร์กโฟลว์ BPF แบบ end-to-end ในไลบรารีที่ใช้ร่วมกัน
- ภาษา C ที่ได้รับการแก้ไขสำหรับแบ็กเอนด์ BPF
- บูรณาการกับแบ็กเอนด์ llvm-bpf สำหรับ JIT
- การโหลดโปรแกรม JITed แบบไดนามิก (ไม่)
- รองรับตะขอเคอร์เนล BPF: ตัวกรองซ็อกเก็ต, ตัวแยกประเภท tc, การดำเนินการ tc และ kprobes
- การผูกข้อมูลสำหรับ Python
- ตัวอย่างสำหรับตัวกรองซ็อกเก็ต ตัวแยกประเภท tc และ kprobes
- เครื่องมือในตัวเองสำหรับการติดตามระบบที่ทำงานอยู่
ในอนาคต จะมีการรองรับการเชื่อมโยงเพิ่มเติมนอกเหนือจาก python อย่าลังเลที่จะเพิ่มการรองรับสำหรับภาษาที่คุณเลือกและส่งคำขอดึง!
บทช่วยสอน
- docs/tutorial.md: การใช้เครื่องมือ bcc เพื่อแก้ปัญหาด้านประสิทธิภาพ การแก้ไขปัญหา และปัญหาด้านเครือข่าย
- docs/tutorial_bcc_python_developer.md: การพัฒนาโปรแกรม bcc ใหม่โดยใช้อินเทอร์เฟซ Python
เครือข่าย
ที่งาน Red Hat Summit 2015 มีการนำเสนอ BCC โดยเป็นส่วนหนึ่งของเซสชั่นเกี่ยวกับ BPF สภาพแวดล้อม vxlan แบบหลายโฮสต์ถูกจำลองขึ้น และโปรแกรม BPF ใช้ในการมอนิเตอร์หนึ่งในฟิสิคัลอินเทอร์เฟซ โปรแกรม BPF เก็บสถิติเกี่ยวกับที่อยู่ IP ภายในและภายนอกที่เคลื่อนที่ผ่านอินเทอร์เฟซ และส่วนประกอบพื้นที่ผู้ใช้จะเปลี่ยนสถิติเหล่านั้นให้เป็นกราฟที่แสดงการกระจายการรับส่งข้อมูลในหลายรายละเอียด ดูรหัสที่นี่
มีส่วนร่วม
พร้อมที่จะคอมมิตโค้ดแล้วหรือยัง? ต่อไปนี้เป็นแหล่งข้อมูลบางส่วนเพื่อเข้าร่วมการสนทนาในชุมชน IOVisor และดูสิ่งที่คุณต้องการทำงาน
- รายชื่อผู้รับจดหมาย: https://lists.iovisor.org/mailman/listinfo/iovisor-dev
- IRC: #iovisor ที่ irc.oftc.net
- ตัวติดตามปัญหา BCC: ปัญหา Github
- คำแนะนำสำหรับการร่วมเขียนสคริปต์: CONTRIBUTING-SCRIPTS.md
ลิงค์ภายนอก
กำลังมองหาข้อมูลเพิ่มเติมเกี่ยวกับ BCC และวิธีใช้งานหรือไม่ คุณสามารถค้นหาลิงก์ไปยังเนื้อหา BCC อื่นๆ บนเว็บได้ใน LINKS.md