Linux เชชเชพเชธเซ เชเชฐเซเชจเชฒ เช
เชจเซ เชเชชเซเชฒเซเชเซเชถเชจเชจเซ เชกเซเชฌเช เชเชฐเชตเชพ เชฎเชพเชเซ เชฎเซเชเซ เชธเชเชเซเชฏเชพเชฎเชพเช เชธเชพเชงเชจเซ เชเซ. เชคเซเชฎเชพเชเชจเชพ เชฎเซเชเชพ เชญเชพเชเชจเชพ เชเชชเซเชฒเชฟเชเซเชถเชจเชจเซ เชเชพเชฎเชเซเชฐเซ เชชเชฐ เชจเชเชพเชฐเชพเชคเซเชฎเช เช
เชธเชฐ เชเชฐเซ เชเซ เช
เชจเซ เชเชคเซเชชเชพเชฆเชจเชฎเชพเช เชคเซเชจเซ เชเชชเชฏเซเช เชเชฐเซ เชถเชเชพเชคเซ เชจเชฅเซ.
เชตเชฐเซเชทเซ เชชเชนเซเชฒเชพ เชคเซเชฏเชพเช เชนเชคเซ
เชคเซเชฏเชพเช เชชเชนเซเชฒเซเชฅเซ เช เชเชฃเซ เชเชชเซเชฒเชฟเชเซเชถเชจ เชฏเซเชเชฟเชฒเชฟเชเซ เชเซ เชเซ eBPF เชจเซ เชเชชเชฏเซเช เชเชฐเซ เชเซ, เช
เชจเซ เช เชฒเซเชเชฎเชพเช เช
เชฎเซ เชฒเชพเชเชฌเซเชฐเซเชฐเซเชจเชพ เชเชงเชพเชฐเซ เชคเชฎเชพเชฐเซ เชชเซเชคเชพเชจเซ เชชเซเชฐเซเชซเชพเชเชฒเชฟเชเช เชฏเซเชเชฟเชฒเชฟเชเซ เชเซเชตเซ เชฐเซเชคเซ เชฒเชเชตเซ เชคเซ เชเซเชเชถเซเช.
เชธเซเชซ เชงเซเชฎเซเช เชเซ
Ceph เชเซเชฒเชธเซเชเชฐเชฎเชพเช เชเช เชจเชตเซเช เชนเซเชธเซเช เชเชฎเซเชฐเชตเชพเชฎเชพเช เชเชตเซเชฏเซเช เชเซ. เชเซเชเชฒเชพเช เชกเซเชเชพเชจเซ เชคเซเชฎเชพเช เชธเซเชฅเชพเชจเชพเชเชคเชฐเชฟเชค เชเชฐเซเชฏเชพ เชชเชเซ, เช เชฎเซ เชจเซเชเชงเซเชฏเซเช เชเซ เชคเซเชจเชพ เชฆเซเชตเชพเชฐเชพ เชฒเชเชตเชพเชจเซ เชตเชฟเชจเชเชคเซเช เชชเชฐ เชชเซเชฐเชเซเชฐเชฟเชฏเชพ เชเชฐเชตเชพเชจเซ เชเชกเชช เช เชจเซเชฏ เชธเชฐเซเชตเชฐเซเชธ เชเชฐเชคเชพเช เชเชฃเซ เชเชเซ เชนเชคเซ.
เช
เชจเซเชฏ เชชเซเชฒเซเชเชซเซเชฐเซเชฎเชฅเซ เชตเชฟเชชเชฐเซเชค, เช เชนเซเชธเซเช bcache เช
เชจเซ เชจเชตเชพ linux 4.15 เชเชฐเซเชจเชฒเชจเซ เชเชชเชฏเซเช เชเชฐเซ เชเซ. เช เชฐเซเชชเชฐเซเชเชพเชเชเชจเชจเชพ เชฏเชเชฎเชพเชจเชจเซ เช
เชนเซเช เชเชชเชฏเซเช เชชเซเชฐเชฅเชฎ เชตเชเชค เชฅเชฏเซ เชนเชคเซ. เช
เชจเซ เชคเซ เชเซเชทเชฃเซ เชคเซ เชธเซเชชเชทเซเช เชนเชคเซเช เชเซ เชธเชฎเชธเซเชฏเชพเชจเซเช เชฎเซเชณ เชธเซเชฆเซเชงเชพเชเชคเชฟเช เชฐเซเชคเซ เชเชเชเชชเชฃ เชนเซเช เชถเชเซ เชเซ.
เชฏเชเชฎเชพเชจเชจเซ เชคเชชเชพเชธ
เชเชพเชฒเซ ceph-osd เชชเซเชฐเชเซเชฐเชฟเชฏเชพเชจเซ เช
เชเชฆเชฐ เชถเซเช เชฅเชพเชฏ เชเซ เชคเซ เชเซเชเชจเซ เชถเชฐเซ เชเชฐเซเช. เช เชฎเชพเชเซ เชเชชเชฃเซ เชเชชเชฏเซเช เชเชฐเซเชถเซเช
เชเชฟเชคเซเชฐ เช
เชฎเชจเซ เชเชนเซ เชเซ เชเซ เชเชพเชฐเซเชฏ fdatasync() เชเชพเชฐเซเชฏเซเชจเซ เชตเชฟเชจเชเชคเซ เชฎเซเชเชฒเชตเชพเชฎเชพเช เชเชฃเซ เชธเชฎเชฏ เชชเชธเชพเชฐ เชเชฐเซเชฏเซ generic_make_request(). เชเชจเซ เช
เชฐเซเชฅ เช เชเซ เชเซ เชฎเซเชเชพเชญเชพเชเซ เชธเชฎเชธเซเชฏเชพเชเชจเซเช เชเชพเชฐเชฃ osd เชกเชฟเชฎเชจเชจเซ เชฌเชนเชพเชฐ เชเซเชฏเชพเชเช เชเซ. เช เชเชฐเซเชจเชฒ เช
เชฅเชตเชพ เชกเชฟเชธเซเช เชนเซเช เชถเชเซ เชเซ. iostat เชเชเชเชชเซเช bcache เชกเชฟเชธเซเช เชฆเซเชตเชพเชฐเชพ เชตเชฟเชจเชเชคเซเชเชจเซ เชชเซเชฐเชเซเชฐเชฟเชฏเชพเชฎเชพเช เชเชเซเช เชตเชฟเชฒเชเชฌ เชฆเชฐเซเชถเชพเชตเซ เชเซ.
เชฏเชเชฎเชพเชจเชจเซ เชคเชชเชพเชธเชคเซ เชตเชเชคเซ, เช เชฎเซ เชเซเชฏเซเช เชเซ systemd-udevd เชกเชฟเชฎเชจ เชฎเซเชเชพ เชชเซเชฐเชฎเชพเชฃเชฎเชพเช CPU เชธเชฎเชฏ เชตเชพเชชเชฐเซ เชเซ - เชเซเชเชฒเชพเช เชเซเชฐเซ เชชเชฐ เชฒเชเชญเช 20%. เช เชตเชฟเชเชฟเชคเซเชฐ เชตเชฐเซเชคเชจ เชเซ, เชคเซเชฅเซ เชคเชฎเชพเชฐเซ เชคเซเชจเซเช เชเชพเชฐเชฃ เชถเซเชงเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ. Systemd-udevd เชฏเซเชเชตเซเชจเซเชเซเชธ เชธเชพเชฅเซ เชเชพเชฎ เชเชฐเชคเซเช เชนเซเชตเชพเชฅเซ, เช เชฎเซ เชคเซเชฎเชจเซ เชเซเชตเชพเชจเซเช เชจเชเซเชเซ เชเชฐเซเชฏเซเช udevadm เชฎเซเชจเชฟเชเชฐ. เชคเซ เชคเชพเชฐเชฃ เชเชชเซ เชเซ เชเซ เชธเชฟเชธเซเชเชฎเชฎเชพเช เชฆเชฐเซเช เชฌเซเชฒเซเช เชเชชเชเชฐเชฃ เชฎเชพเชเซ เชฎเซเชเซ เชธเชเชเซเชฏเชพเชฎเชพเช เชซเซเชฐเชซเชพเชฐเชจเซ เชเชเชจเชพเช เชเชจเชฐเซเช เชเชฐเชตเชพเชฎเชพเช เชเชตเซ เชนเชคเซ. เช เชคเชฆเซเชฆเชจ เช เชธเชพเชฎเชพเชจเซเชฏ เชเซ, เชคเซเชฅเซ เชเชชเชฃเซ เช เชฌเชงเซ เชเชเชจเชพเช เชถเซเช เชชเซเชฆเชพ เชเชฐเซ เชเซ เชคเซ เชเซเชตเชพเชจเซเช เชฐเชนเซเชถเซ.
BCC เชเซเชฒเชเซเชเชจเซ เชเชชเชฏเซเช เชเชฐเชตเซ
เชเซเชฎ เชเชชเชฃเซ เชชเชนเซเชฒเซเชฅเซ เช เชถเซเชงเซ เชเชพเชขเซเชฏเซเช เชเซ, เชเชฐเซเชจเชฒ (เช
เชจเซ เชธเชฟเชธเซเชเชฎ เชเซเชฒเชฎเชพเช เชธเซเชซ เชกเชฟเชฎเชจ) เชเชฃเซ เชธเชฎเชฏ เชตเชฟเชคเชพเชตเซ เชเซ. generic_make_request(). เชเชพเชฒเซ เช เชเชพเชฐเซเชฏเชจเซ เชเชกเชชเชจเซ เชฎเชพเชชเชตเชพเชจเซ เชชเซเชฐเชฏเชพเชธ เชเชฐเซเช. IN
เช เชธเซเชตเชฟเชงเชพ เชธเชพเชฎเชพเชจเซเชฏ เชฐเซเชคเซ เชเชกเชชเชฅเซ เชเชพเชฎ เชเชฐเซ เชเซ. เชคเซ เชซเชเซเชค เชเชชเชเชฐเชฃ เชกเซเชฐเชพเชเชตเชฐ เชเชคเชพเชฐเชฎเชพเช เชตเชฟเชจเชเชคเซ เชชเชธเชพเชฐ เชเชฐเซ เชเซ.
Bcache เชเช เชเชเชฟเชฒ เชเชชเชเชฐเชฃ เชเซ เชเซ เชตเชพเชธเซเชคเชตเชฎเชพเช เชคเซเชฐเชฃ เชกเชฟเชธเซเช เชงเชฐเชพเชตเซ เชเซ:
- เชฌเซเชเชฟเชเช เชกเชฟเชตเชพเชเชธ (เชเซเชถเซเชก เชกเชฟเชธเซเช), เช เชเชฟเชธเซเชธเชพเชฎเชพเช เชคเซ เชงเซเชฎเซ HDD เชเซ;
- เชเซเชถเซเชเช เชเชชเชเชฐเชฃ (เชเซเชถเซเชเช เชกเชฟเชธเซเช), เช เชนเซเช เช NVMe เชเชชเชเชฐเชฃเชจเซเช เชเช เชชเชพเชฐเซเชเซเชถเชจ เชเซ;
- bcache เชตเชฐเซเชเซเชฏเซเช เชฒ เชเชชเชเชฐเชฃ เชเซ เชเซเชจเซ เชธเชพเชฅเซ เชเชชเซเชฒเชฟเชเซเชถเชจ เชเชพเชฒเซ เชเซ.
เช เชฎเซ เชเชพเชฃเซเช เชเซเช เชเซ เชตเชฟเชจเชเชคเซ เชเซเชฐเชพเชจเซเชธเชฎเชฟเชถเชจ เชงเซเชฎเซเช เชเซ, เชชเชฐเชเชคเซ เชเชฎเชพเชเชฅเซ เชเชฏเชพ เชเชชเชเชฐเชฃเซ เชฎเชพเชเซ? เช เชฎเซ เชฅเซเชกเชพ เชธเชฎเชฏ เชชเชเซ เช เชธเชพเชฅเซ เชตเซเชฏเชตเชนเชพเชฐ เชเชฐเซเชถเซเช.
เช
เชฎเซ เชนเชตเซ เชเชพเชฃเซเช เชเซเช เชเซ uevents เชธเชฎเชธเซเชฏเชพเชเชจเซเช เชเชพเชฐเชฃ เชฌเชจเซ เชถเชเซ เชเซ. เชคเซเชฎเชจเซ เชชเซเชขเซเชจเซเช เชเซเชเซเชเชธ เชเชพเชฐเชฃ เชถเซเช เชเซ เชคเซ เชถเซเชงเชตเซเช เชเชเชฒเซเช เชธเชฐเชณ เชจเชฅเซ. เชเชพเชฒเซ เชฎเชพเชจเซ เชฒเชเช เชเซ เช เช
เชฎเซเช เชชเซเชฐเชเชพเชฐเชจเซเช เชธเซเชซเซเชเชตเซเชฐ เชเซ เชเซ เชธเชฎเชฏเชพเชเชคเชฐเซ เชฒเซเชจเซเช เชฅเชพเชฏ เชเซ. เชเชพเชฒเซ เชเซเชเช เชเซ เชธเซเชเซเชฐเชฟเชชเซเชเชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เชธเชฟเชธเซเชเชฎ เชชเชฐ เชเชฏเชพ เชชเซเชฐเชเชพเชฐเชจเซเช เชธเซเชซเซเชเชตเซเชฐ เชเชพเชฒเซ เชเซ execsnoop เช เช เชฅเซ
เชเชจเชพ เชเซเชตเชพ เชเชฆเชพเชนเชฐเชฃ เชคเชฐเซเชเซ:
/usr/share/bcc/tools/execsnoop | tee ./execdump
เช เชฎเซ เช เชนเซเช execsnoop เชจเซเช เชธเชเชชเซเชฐเซเชฃ เชเชเชเชชเซเช เชฌเชคเชพเชตเซเชถเซเช เชจเชนเซเช, เชชเชฐเชเชคเซ เช เชฎเชจเซ เชฐเชธเชจเซ เชเช เชฒเชพเชเชจ เชเชจเชพ เชเซเชตเซ เชฆเซเชเชพเชคเซ เชนเชคเซ:
sh 1764905 5802 0 sudo arcconf getconfig 1 AD | grep Temperature | awk -F '[:/]' '{print $2}' | sed 's/^ ([0-9]*) C.*/1/'
เชคเซเชฐเซเชเซ เชเซเชฒเชฎ เชชเซเชฐเชเซเชฐเชฟเชฏเชพเชจเซ PPID (เชชเซเชฐเซเชจเซเช PID) เชเซ. PID 5802 เชธเชพเชฅเซเชจเซ เชชเซเชฐเชเซเชฐเชฟเชฏเชพ เช เชฎเชพเชฐเซ เชฎเซเชจเชฟเชเชฐเชฟเชเช เชธเชฟเชธเซเชเชฎเชจเชพ เชฅเซเชฐเซเชกเชฎเชพเชเชฅเซ เชเช เชนเซเชตเชพเชจเซเช เชฌเชนเชพเชฐ เชเชตเซเชฏเซเช เชเซ. เชฎเซเชจเชฟเชเชฐเชฟเชเช เชธเชฟเชธเซเชเชฎเชจเซ เชเซเช เชตเชฃเซเชจเซ เชคเชชเชพเชธ เชเชฐเชคเซ เชตเชเชคเซ, เชญเซเชฒเชญเชฐเซเชฒเชพ เชชเชฐเชฟเชฎเชพเชฃเซ เชฎเชณเซ เชเชตเซเชฏเชพ เชนเชคเชพ. HBA เชเชกเซเชชเซเชเชฐเชจเซเช เชคเชพเชชเชฎเชพเชจ เชฆเชฐ 30 เชธเซเชเชจเซเชกเซ เชฒเซเชตเชพเชฎเชพเช เชเชตเชคเซเช เชนเชคเซเช, เชเซ เชเชฐเซเชฐเซ เชเชฐเชคเชพเช เชเชฃเซ เชตเชพเชฐ เชตเชงเชพเชฐเซ เชเซ. เชเซเช เช เชเชคเชฐเชพเชฒเชจเซ เชฒเชพเชเชฌเชพ เชธเชฎเชฏ เชธเซเชงเซ เชฌเชฆเชฒเซเชฏเชพ เชชเชเซ, เช เชฎเชจเซ เชเชพเชฃเชตเชพ เชฎเชณเซเชฏเซเช เชเซ เช เชนเซเชธเซเช เชชเชฐ เชตเชฟเชจเชเชคเซ เชชเซเชฐเชเซเชฐเชฟเชฏเชพ เชตเชฟเชฒเชเชฌเชฟเชคเชคเชพ เชนเชตเซ เช เชจเซเชฏ เชฏเชเชฎเชพเชจเซเชจเซ เชคเซเชฒเชจเชพเชฎเชพเช เช เชฒเช เชจเชฅเซ.
เชชเชฐเชเชคเซ เชคเซ เชนเชเซ เชชเชฃ เช เชธเซเชชเชทเซเช เชเซ เชเซ เชเซเชฎ bcache เชเชชเชเชฐเชฃ เชเชเชฒเซเช เชงเซเชฎเซเช เชนเชคเซเช. เช เชฎเซ เชเช เชธเชฎเชพเชจ เชฐเซเชชเชฐเซเชเชพเชเชเชจ เชธเชพเชฅเซ เชเช เชชเชฐเซเชเซเชทเชฃ เชชเซเชฒเซเชเชซเซเชฐเซเชฎ เชคเซเชฏเชพเชฐ เชเชฐเซเชฏเซเช เชเซ เช เชจเซ bcache เชชเชฐ fio เชเชฒเชพเชตเซเชจเซ, uevents เชเชจเชฐเซเช เชเชฐเชตเชพ เชฎเชพเชเซ เชธเชฎเชฏเชพเชเชคเชฐเซ udevadm เชเซเชฐเชฟเชเชฐ เชเชฒเชพเชตเซเชจเซ เชธเชฎเชธเซเชฏเชพเชจเซเช เชชเซเชจเชเชเชคเซเชชเชพเชฆเชจ เชเชฐเชตเชพเชจเซ เชชเซเชฐเชฏเชพเชธ เชเชฐเซเชฏเซ เชเซ.
BCC-เชเชงเชพเชฐเชฟเชค เชธเชพเชงเชจเซ เชฒเซเชเชจ
เชเชพเชฒเซ เชธเซเชฅเซ เชงเซเชฎเชพ เชเซเชฒเซเชธเชจเซ เชเซเชฐเซเชธ เชเชฐเชตเชพ เช เชจเซ เชชเซเชฐเชฆเชฐเซเชถเชฟเชค เชเชฐเชตเชพ เชฎเชพเชเซ เชเช เชธเชฐเชณ เชเชชเชฏเซเชเชฟเชคเชพ เชฒเชเชตเชพเชจเซ เชชเซเชฐเชฏเชพเชธ เชเชฐเซเช generic_make_request(). เช เชฎเซ เชกเซเชฐเชพเชเชตเชจเชพ เชจเชพเชฎเชฎเชพเช เชชเชฃ เชฐเชธ เชงเชฐเชพเชตเซเช เชเซเช เชเซเชจเชพ เชฎเชพเชเซ เช เชซเชเชเซเชถเชจ เชเชนเซเชตเชพเชฎเชพเช เชเชตเซเชฏเซเช เชนเชคเซเช.
เชฏเซเชเชจเชพ เชธเชฐเชณ เชเซ:
- เชจเซเชเชงเชฃเซ เชเชฐเซ kprobe เชชเชฐ generic_make_request():
- เช เชฎเซ เชกเชฟเชธเซเช เชจเชพเชฎเชจเซ เชฎเซเชฎเชฐเซเชฎเชพเช เชธเชพเชเชตเซเช เชเซเช, เชซเชเชเซเชถเชจ เชฆเชฒเซเชฒ เชฆเซเชตเชพเชฐเชพ เชธเซเชฒเชญ;
- เช เชฎเซ เชเชพเชเชฎเชธเซเชเซเชฎเซเชช เชธเชพเชเชตเซเช เชเซเช.
- เชจเซเชเชงเชฃเซ เชเชฐเซ kretprobe เชฅเซ เชชเชฐเชค เชเชฐเชตเชพ เชฎเชพเชเซ generic_make_request():
- เช เชฎเชจเซ เชตเชฐเซเชคเชฎเชพเชจ เชเชพเชเชฎเชธเซเชเซเชฎเซเชช เชฎเชณเซ เชเซ;
- เช เชฎเซ เชธเชพเชเชตเซเชฒ เชเชพเชเชฎเชธเซเชเซเชฎเซเชช เชถเซเชงเซเช เชเซเช เช เชจเซ เชคเซเชจเซ เชตเชฐเซเชคเชฎเชพเชจ เชธเชพเชฅเซ เชธเชฐเชเชพเชฎเชฃเซ เชเชฐเซเช เชเซเช;
- เชเซ เชชเชฐเชฟเชฃเชพเชฎ เชเชฒเซเชฒเซเชเชฟเชค เชเชฐเชคเชพ เชตเชงเชพเชฐเซ เชนเซเชฏ, เชคเซ เช เชฎเซ เชธเชพเชเชตเซเชฒ เชกเชฟเชธเซเช เชจเชพเชฎ เชถเซเชงเซเช เชเซเช เช เชจเซ เชคเซเชจเซ เชเชฐเซเชฎเชฟเชจเชฒ เชชเชฐ เชชเซเชฐเชฆเชฐเซเชถเชฟเชค เชเชฐเซเช เชเซเช.
Kprobes ะธ kretprobes เชซเซเชฒเชพเชฏ เชชเชฐ เชซเชเชเซเชถเชจ เชเซเชก เชฌเชฆเชฒเชตเชพ เชฎเชพเชเซ เชฌเซเชฐเซเชเชชเซเชเชจเซเช เชฎเชฟเชเซเชจเชฟเชเชฎเชจเซ เชเชชเชฏเซเช เชเชฐเซ. เชคเชฎเซ เชตเชพเชเชเซ เชถเชเซ เชเซ
เชชเชพเชฏเชฅเซเชจ เชธเซเชเซเชฐเชฟเชชเซเชเชจเซ เช เชเชฆเชฐ eBPF เชเซเชเซเชธเซเช เชเชจเชพ เชเซเชตเซ เชฆเซเชเชพเชฏ เชเซ:
bpf_text = โโโ # Here will be the bpf program code โโโ
เชเชพเชฐเซเชฏเซ เชตเชเซเชเซ เชกเซเชเชพเชจเซ เชเชช-เชฒเซ เชเชฐเชตเชพ เชฎเชพเชเซ, eBPF เชชเซเชฐเซเชเซเชฐเชพเชฎเซเชธเชจเซ เชเชชเชฏเซเช เชเชฐเซ เชเซ
struct data_t {
u64 pid;
u64 ts;
char comm[TASK_COMM_LEN];
u64 lat;
char disk[DISK_NAME_LEN];
};
BPF_HASH(p, u64, struct data_t);
BPF_PERF_OUTPUT(events);
เช
เชนเซเช เชเชชเชฃเซ เชนเซเชถ เชเซเชฌเชฒ เชจเชพเชฎเชจเซ เชจเซเชเชงเชฃเซ เชเชฐเซเช เชเซเช p, เชเซ เชชเซเชฐเชเชพเชฐ เชธเชพเชฅเซ u64 เช
เชจเซ เชชเซเชฐเชเชพเชฐเชจเซเช เชฎเซเชฒเซเชฏ เชธเซเชเซเชฐเชเซเชเชฐ เชกเซเชเชพ_เชเซ. เชเซเชฌเชฒ เช
เชฎเชพเชฐเชพ BPF เชชเซเชฐเซเชเซเชฐเชพเชฎเชจเชพ เชธเชเชฆเชฐเซเชญเชฎเชพเช เชเชชเชฒเชฌเซเชง เชนเชถเซ. BPF_PERF_OUTPUT เชฎเซเชเซเชฐเซ เชจเชพเชฎเชจเซเช เชฌเซเชเซเช เชเซเชฌเชฒ เชฐเชเซเชธเซเชเชฐ เชเชฐเซ เชเซ เชเชเชจเชพเช, เชเซ เชฎเชพเชเซ เชตเชชเชฐเชพเชฏ เชเซ
เชเซเชฏเชพเชฐเซ เชเซเช เชซเชเชเซเชถเชจเชจเซ เชเซเชฒ เชเชฐเชตเชพ เช
เชจเซ เชคเซเชฎเชพเชเชฅเซ เชชเชพเชเชพ เชซเชฐเชตเชพ เชตเชเซเชเซเชจเชพ เชตเชฟเชฒเชเชฌเชจเซ เชฎเชพเชชเชคเซ เชตเชเชคเซ, เช
เชฅเชตเชพ เชตเชฟเชตเชฟเชง เชเชพเชฐเซเชฏเซเชจเชพ เชเซเชฒเซเชธ เชตเชเซเชเซ, เชคเชฎเชพเชฐเซ เชงเซเชฏเชพเชจเชฎเชพเช เชฒเซเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ เชเซ เชชเซเชฐเชพเชชเซเชค เชกเซเชเชพ เชธเชฎเชพเชจ เชธเชเชฆเชฐเซเชญเชจเซ เชนเซเชตเซ เชเซเชเช. เชฌเซเชเชพ เชถเชฌเซเชฆเซเชฎเชพเช เชเชนเซเช เชคเซ, เชคเชฎเชพเชฐเซ เชเชพเชฐเซเชฏเซเชจเชพ เชธเชเชญเชตเชฟเชค เชธเชฎเชพเชเชคเชฐ เชฒเซเชเช เชตเชฟเชถเซ เชฏเชพเชฆ เชฐเชพเชเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ. เช
เชฎเชพเชฐเซ เชชเชพเชธเซ เชเช เชชเซเชฐเชเซเชฐเชฟเชฏเชพเชจเชพ เชธเชเชฆเชฐเซเชญเชฎเชพเช เชซเชเชเซเชถเชจเชจเซ เชเซเชฒ เชเชฐเชตเชพ เช
เชจเซ เชฌเซเชเซ เชชเซเชฐเชเซเชฐเชฟเชฏเชพเชจเชพ เชธเชเชฆเชฐเซเชญเชฎเชพเช เชคเซ เชซเชเชเซเชถเชจเชฎเชพเชเชฅเซ เชชเชพเชเชพ เชซเชฐเชตเชพ เชตเชเซเชเซเชจเซ เชตเชฟเชฒเชเชฌเชคเชพเชจเซ เชฎเชพเชชเชตเชพเชจเซ เชเซเชทเชฎเชคเชพ เชเซ, เชชเชฐเชเชคเซ เช เชเชฆเชพเช เชจเชเชพเชฎเซเช เชเซ. เช
เชนเซเช เชเช เชธเชพเชฐเซเช เชเชฆเชพเชนเชฐเชฃ เชนเชถเซ
เชเชเชณ, เชเชชเชฃเซ เชเซเชก เชฒเชเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ เชเซ เชเซเชฏเชพเชฐเซ เช เชญเซเชฏเชพเชธ เชนเซเช เชณเชจเชพ เชซเชเชเซเชถเชจเชจเซ เชเซเชฒ เชเชฐเชตเชพเชฎเชพเช เชเชตเซ เชคเซเชฏเชพเชฐเซ เชเชพเชฒเชถเซ:
void start(struct pt_regs *ctx, struct bio *bio) {
u64 pid = bpf_get_current_pid_tgid();
struct data_t data = {};
u64 ts = bpf_ktime_get_ns();
data.pid = pid;
data.ts = ts;
bpf_probe_read_str(&data.disk, sizeof(data.disk), (void*)bio->bi_disk->disk_name);
p.update(&pid, &data);
}
เช
เชนเซเช เชเชนเซเชตเชพเชฏ เชซเชเชเซเชถเชจเชจเซ เชชเซเชฐเชฅเชฎ เชฆเชฒเซเชฒ เชฌเซเชเซ เชฆเชฒเซเชฒ เชคเชฐเซเชเซ เชฌเชฆเชฒเชตเชพเชฎเชพเช เชเชตเชถเซ
เชฅเซ เชชเชฐเชค เชซเชฐเชตเชพ เชชเชฐ เชจเซเชเซเชจเชพ เชซเชเชเซเชถเชจเชจเซ เชฌเซเชฒเชพเชตเชตเชพเชฎเชพเช เชเชตเชถเซ generic_make_request():
void stop(struct pt_regs *ctx) {
u64 pid = bpf_get_current_pid_tgid();
u64 ts = bpf_ktime_get_ns();
struct data_t* data = p.lookup(&pid);
if (data != 0 && data->ts > 0) {
bpf_get_current_comm(&data->comm, sizeof(data->comm));
data->lat = (ts - data->ts)/1000;
if (data->lat > MIN_US) {
FACTOR
data->pid >>= 32;
events.perf_submit(ctx, data, sizeof(struct data_t));
}
p.delete(&pid);
}
}
เช เชซเชเชเซเชถเชจ เชชเชพเชเชฒเชพ เชเช เชเซเชตเซเช เช เชเซ: เช เชฎเซ เชชเซเชฐเชเซเชฐเชฟเชฏเชพเชจเซ PID เช เชจเซ เชเชพเชเชฎเชธเซเชเซเชฎเซเชช เชถเซเชงเซเช เชเซเช, เชชเชฐเชเชคเซ เชจเชตเชพ เชกเซเชเชพ เชธเซเชเซเชฐเชเซเชเชฐ เชฎเชพเชเซ เชฎเซเชฎเชฐเซ เชซเชพเชณเชตเชคเชพ เชจเชฅเซ. เชคเซเชจเชพ เชฌเชฆเชฒเซ, เช เชฎเซ เชเซ == เชตเชฐเซเชคเชฎเชพเชจ PID เชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เชชเชนเซเชฒเชพเชฅเซ เช เชธเซเชคเชฟเชคเซเชตเชฎเชพเช เชเซ เชคเซ เชฌเชเชงเชพเชฐเชฃ เชฎเชพเชเซ เชนเซเชถ เชเซเชฌเชฒ เชถเซเชงเซเช เชเซเช. เชเซ เชฎเชพเชณเชเซเช เชฎเชณเซ, เชคเซ เชเชชเชฃเซ เชเชพเชฒเซ เชฐเชนเซเชฒ เชชเซเชฐเชเซเชฐเชฟเชฏเชพเชจเซเช เชจเชพเชฎ เชถเซเชงเซ เชเชพเชขเซเช เชเซเช เช เชจเซ เชคเซเชจเซ เชคเซเชฎเชพเช เชเชฎเซเชฐเซเช เชเซเช.
เชฅเซเชฐเซเชก GID เชฎเซเชณเชตเชตเชพ เชฎเชพเชเซ เชเชชเชฃเซ เช
เชนเซเช เชเซ เชฌเชพเชเชจเชฐเซ เชถเชฟเชซเซเชเชจเซ เชเชชเชฏเซเช เชเชฐเซเช เชเซเช เชคเซ เชเชฐเซเชฐเซ เชเซ. เชคเซ เช
เชฎเซ เชเซ เชธเชเชฆเชฐเซเชญเชฎเชพเช เชเชพเชฎ เชเชฐเซ เชฐเชนเซเชฏเชพ เชเซเช เชคเซ เชธเชเชฆเชฐเซเชญเชฎเชพเช เชฅเซเชฐเซเชก เชถเชฐเซ เชเชฐเชจเชพเชฐ เชฎเซเชเซเชฏ เชชเซเชฐเชเซเชฐเชฟเชฏเชพเชจเซ PID. เชซเชเชเซเชถเชจ เชเซเชจเซ เชเชชเชฃเซ เชเซเชฒ เชเชฐเซเช เชเซเช
เชเชฐเซเชฎเชฟเชจเชฒ เชชเชฐ เชเชเชเชชเซเช เชเชฐเชคเซ เชตเชเชคเซ, เช เชฎเชจเซ เชนเชพเชฒเชฎเชพเช เชฅเซเชฐเซเชกเชฎเชพเช เชฐเชธ เชจเชฅเซ, เชชเชฐเชเชคเซ เช เชฎเชจเซ เชฎเซเชเซเชฏ เชชเซเชฐเชเซเชฐเชฟเชฏเชพเชฎเชพเช เชฐเชธ เชเซ. เชเชชเซเชฒ เชฅเซเชฐเซเชถเซเชฒเซเชก เชธเชพเชฅเซ เชชเชฐเชฟเชฃเชพเชฎเซ เชตเชฟเชฒเชเชฌเชจเซ เชคเซเชฒเชจเชพ เชเชฐเซเชฏเชพ เชชเชเซ, เช เชฎเซ เช เชฎเชพเชฐเซ เชฐเชเชจเชพ เชชเชธเชพเชฐ เชเชฐเซเช เชเซเช เชฎเชพเชนเชฟเชคเซ เชเซเชฌเชฒ เชฆเซเชตเชพเชฐเชพ เชตเชชเชฐเชพเชถเชเชฐเซเชคเชพ เชเชเซเชฏเชพเชฎเชพเช เชเชเชจเชพเช, เชเซ เชชเชเซ เช เชฎเซ เชเชจเซเชเซเชฐเซ เชเชพเชขเซ เชจเชพเชเซเช เชเซเช p.
เชชเชพเชฏเชฅเซเชจ เชธเซเชเซเชฐเชฟเชชเซเชเชฎเชพเช เชเซ เช เชเซเชกเชจเซ เชฒเซเชก เชเชฐเชถเซ, เช เชฎเชพเชฐเซ MIN_US เช เชจเซ FACTOR เชจเซ เชตเชฟเชฒเชเชฌ เชฅเซเชฐเซเชถเซเชฒเซเชก เช เชจเซ เชธเชฎเชฏ เชเชเชฎเซ เชธเชพเชฅเซ เชฌเชฆเชฒเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ, เชเซ เช เชฎเซ เชฆเชฒเซเชฒเซเชฎเชพเชเชฅเซ เชชเชธเชพเชฐ เชเชฐเซเชถเซเช:
bpf_text = bpf_text.replace('MIN_US',str(min_usec))
if args.milliseconds:
bpf_text = bpf_text.replace('FACTOR','data->lat /= 1000;')
label = "msec"
else:
bpf_text = bpf_text.replace('FACTOR','')
label = "usec"
เชนเชตเซ เชเชชเชฃเซ BPF เชชเซเชฐเซเชเซเชฐเชพเชฎ เชฎเชพเชฐเชซเชคเซ เชคเซเชฏเชพเชฐ เชเชฐเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ
b = BPF(text=bpf_text)
b.attach_kprobe(event="generic_make_request",fn_name="start")
b.attach_kretprobe(event="generic_make_request",fn_name="stop")
เชเชชเชฃเซ เชชเชฃ เชจเชเซเชเซ เชเชฐเชตเซเช เชชเชกเชถเซ เชธเซเชเซเชฐเชเซเชเชฐ เชกเซเชเชพ_เชเซ เช เชฎเชพเชฐเซ เชธเซเชเซเชฐเชฟเชชเซเชเชฎเชพเช, เช เชจเซเชฏเชฅเชพ เช เชฎเซ เชเชเชเชชเชฃ เชตเชพเชเชเซ เชถเชเซเชถเซเช เชจเชนเซเช:
TASK_COMM_LEN = 16 # linux/sched.h
DISK_NAME_LEN = 32 # linux/genhd.h
class Data(ct.Structure):
_fields_ = [("pid", ct.c_ulonglong),
("ts", ct.c_ulonglong),
("comm", ct.c_char * TASK_COMM_LEN),
("lat", ct.c_ulonglong),
("disk",ct.c_char * DISK_NAME_LEN)]
เชเซเชฒเซเชฒเซเช เชชเชเชฒเซเช เช เชเชฐเซเชฎเชฟเชจเชฒ เชชเชฐ เชกเซเชเชพ เชเชเชเชชเซเช เชเชฐเชตเชพเชจเซเช เชเซ:
def print_event(cpu, data, size):
global start
event = ct.cast(data, ct.POINTER(Data)).contents
if start == 0:
start = event.ts
time_s = (float(event.ts - start)) / 1000000000
print("%-18.9f %-16s %-6d %-1s %s %s" % (time_s, event.comm, event.pid, event.lat, label, event.disk))
b["events"].open_perf_buffer(print_event)
# format output
start = 0
while 1:
try:
b.perf_buffer_poll()
except KeyboardInterrupt:
exit()
เชธเซเชเซเชฐเชฟเชชเซเช เชชเซเชคเซ เช
เชนเซเช เชเชชเชฒเชฌเซเชง เชเซ
เชเซเชฒเซเชฒเซ! เชนเชตเซ เชเชชเชฃเซ เชเซเชเช เชเซเช เชเซ เชเซ เชธเซเชเซเชฒเชฟเชเช bcache เชเชชเชเชฐเชฃ เชเซเชตเซเช เชฆเซเชเชพเชคเซเช เชนเชคเซเช เชคเซ เชตเชพเชธเซเชคเชตเชฎเชพเช เชธเซเชเซเชฒเชฟเชเช เชเซเชฒ เชเซ generic_make_request() เชเซเชถเซเชก เชกเชฟเชธเซเช เชฎเชพเชเซ.
เชเชฐเซเชจเชฒ เชฎเชพเช เชเซเชฆเชตเซเช
เชตเชฟเชจเชเชคเซ เชเซเชฐเชพเชจเซเชธเชฎเชฟเชถเชจ เชฆเชฐเชฎเชฟเชฏเชพเชจ เชฌเชฐเชพเชฌเชฐ เชถเซเช เชงเซเชฎเซเช เชฅเช เชฐเชนเซเชฏเซเช เชเซ? เช
เชฎเซ เชเซเชเช เชเซเช เชเซ เชตเชฟเชฒเชเชฌ เชเชเชพเชเชจเซเชเชฟเชเชเชจเซ เชตเชฟเชจเชเชคเซเชจเซ เชถเชฐเซเชเชค เชชเชนเซเชฒเชพเช เช เชฅเชพเชฏ เชเซ, เชเชเชฒเซ เชเซ. เชคเซเชจเชพ (/proc/diskstats เช
เชฅเชตเชพ iostat) เชชเชฐเชจเชพ เชเชเชเชกเชพเชเชจเชพ เชตเชงเซ เชเชเชเชชเซเช เชฎเชพเชเซ เชเซเชเซเชเชธ เชตเชฟเชจเชเชคเซเชจเซเช เชเชเชพเชเชจเซเชเชฟเชเช เชนเชเซ เชถเชฐเซ เชฅเชฏเซเช เชจเชฅเซ. เชธเชฎเชธเซเชฏเชพเชจเซเช เชชเซเชจเชเชเชคเซเชชเชพเชฆเชจ เชเชฐเชคเซ เชตเชเชคเซ iostat เชเชฒเชพเชตเซเชจเซ เช เชธเชฐเชณเชคเชพเชฅเซ เชเชเชพเชธเซ เชถเชเชพเชฏ เชเซ, เช
เชฅเชตเชพ
เชเซ เชเชชเชฃเซ เชเชพเชฐเซเชฏ เชเซเชเช generic_make_request(), เชคเซ เชชเชเซ เชเชชเชฃเซ เชเซเชเชถเซเช เชเซ เชตเชฟเชจเชเชคเซ เชเชเชพเชเชจเซเชเชฟเชเช เชถเชฐเซ เชเชฐเซ เชคเซ เชชเชนเซเชฒเชพเช, เชตเชงเซ เชฌเซ เชเชพเชฐเซเชฏเซเชจเซ เชฌเซเชฒเชพเชตเชตเชพเชฎเชพเช เชเชตเซ เชเซ. เชชเซเชฐเชฅเชฎ - generic_make_request_checks(), เชกเชฟเชธเซเช เชธเซเชเชฟเชเชเซเชธ เชธเชเชฌเชเชงเชฟเชค เชตเชฟเชจเชเชคเซเชจเซ เชเชพเชฏเชฆเซเชธเชฐเชคเชพ เชชเชฐ เชคเชชเชพเชธ เชเชฐเซ เชเซ. เชฌเซเชเซเช -
ret = wait_event_interruptible(q->mq_freeze_wq,
(atomic_read(&q->mq_freeze_depth) == 0 &&
(preempt || !blk_queue_preempt_only(q))) ||
blk_queue_dying(q));
เชคเซเชฎเชพเช, เชเชฐเซเชจเชฒ เชเชคเชพเชฐเชจเซ เช เชจเชซเซเชฐเซเช เชเชฐเชตเชพ เชฎเชพเชเซ เชฐเชพเชน เชเซเช เชเซ. เชเชพเชฒเซ เชตเชฟเชฒเชเชฌเชจเซ เชฎเชพเชชเซเช blk_queue_enter():
~# /usr/share/bcc/tools/funclatency blk_queue_enter -i 1 -m
Tracing 1 functions for "blk_queue_enter"... Hit Ctrl-C to end.
msecs : count distribution
0 -> 1 : 341 |****************************************|
msecs : count distribution
0 -> 1 : 316 |****************************************|
msecs : count distribution
0 -> 1 : 255 |****************************************|
2 -> 3 : 0 | |
4 -> 7 : 0 | |
8 -> 15 : 1 | |
เชเชตเซเช เชฒเชพเชเซ เชเซ เชเซ เช
เชฎเซ เชเชเซเชฒเชจเซ เชจเชเซเช เชเซเช. เชเชคเชพเชฐเชจเซ เชซเซเชฐเซเช/เช
เชจเชซเซเชฐเซเช เชเชฐเชตเชพ เชฎเชพเชเซ เชเชชเชฏเซเชเชฎเชพเช เชฒเซเชตเชพเชคเชพ เชเชพเชฐเซเชฏเซ เชเซ
เช เชเชคเชพเชฐเชจเซ เชธเชพเชซ เชเชฐเชตเชพเชฎเชพเช เชเซ เชธเชฎเชฏ เชฒเชพเชเซ เชเซ เชคเซ เชกเชฟเชธเซเช เชฒเซเชเชจเซเชธเซเชจเซ เชธเชฎเชเชเซเชท เชเซ เชเชพเชฐเชฃ เชเซ เชเชฐเซเชจเชฒ เชคเชฎเชพเชฎ เชเชคเชพเชฐเชฌเชฆเซเชง เชเชพเชฎเชเซเชฐเซ เชชเซเชฐเซเชฃ เชฅเชตเชพเชจเซ เชฐเชพเชน เชเซเช เชเซ. เชเชเชตเชพเชฐ เชเชคเชพเชฐ เชเชพเชฒเซ เชฅเช เชเชพเชฏ, เชชเชเซ เชธเซเชเชฟเชเชเซเชธ เชซเซเชฐเชซเชพเชฐเซ เชฒเชพเชเซ เชฅเชพเชฏ เชเซ. เชเซ เชชเชเซ เชคเซเชจเซ เชฌเซเชฒเชพเชตเชตเชพเชฎเชพเช เชเชตเซ เชเซ
เชนเชตเซ เชเชชเชฃเซ เชชเชฐเชฟเชธเซเชฅเชฟเชคเชฟเชจเซ เชธเซเชงเชพเชฐเชตเชพ เชฎเชพเชเซ เชชเซเชฐเชคเซ เชเชพเชฃเซเช เชเซเช. udevadm เชเซเชฐเชฟเชเชฐ เชเชฆเซเชถ เชฌเซเชฒเซเช เชเชชเชเชฐเชฃ เชฎเชพเชเซ เชธเซเชฏเซเชเชจเซเชจเซ เชฒเชพเชเซ เชเชฐเชตเชพ เชฎเชพเชเซเชจเซเช เชเชพเชฐเชฃ เชฌเชจเซ เชเซ. เช เชธเซเชเชฟเชเชเซเชธ udev เชจเชฟเชฏเชฎเซเชฎเชพเช เชตเชฐเซเชฃเชตเซเชฒ เชเซ. เช
เชฎเซ sysfs เชฆเซเชตเชพเชฐเชพ เช
เชฅเชตเชพ เชเชฐเซเชจเชฒ เชธเซเชฐเซเชธ เชเซเชก เชเซเชเชจเซ เชเชคเชพเชฐเชจเซ เชเช เชธเซเชเชฟเชเชเซเชธ เชธเซเชฅเชฟเชฐ เชเชฐเซ เชฐเชนเซ เชเซ เชคเซ เชถเซเชงเซ เชถเชเซเช เชเซเช. เช
เชฎเซ BCC เชเชชเชฏเซเชเชฟเชคเชพ เชชเชฃ เช
เชเชฎเชพเชตเซ เชถเชเซเช เชเซเช
~# /usr/share/bcc/tools/trace blk_freeze_queue -K -U
PID TID COMM FUNC
3809642 3809642 systemd-udevd blk_freeze_queue
blk_freeze_queue+0x1 [kernel]
elevator_switch+0x29 [kernel]
elv_iosched_store+0x197 [kernel]
queue_attr_store+0x5c [kernel]
sysfs_kf_write+0x3c [kernel]
kernfs_fop_write+0x125 [kernel]
__vfs_write+0x1b [kernel]
vfs_write+0xb8 [kernel]
sys_write+0x55 [kernel]
do_syscall_64+0x73 [kernel]
entry_SYSCALL_64_after_hwframe+0x3d [kernel]
__write_nocancel+0x7 [libc-2.23.so]
[unknown]
3809631 3809631 systemd-udevd blk_freeze_queue
blk_freeze_queue+0x1 [kernel]
queue_requests_store+0xb6 [kernel]
queue_attr_store+0x5c [kernel]
sysfs_kf_write+0x3c [kernel]
kernfs_fop_write+0x125 [kernel]
__vfs_write+0x1b [kernel]
vfs_write+0xb8 [kernel]
sys_write+0x55 [kernel]
do_syscall_64+0x73 [kernel]
entry_SYSCALL_64_after_hwframe+0x3d [kernel]
__write_nocancel+0x7 [libc-2.23.so]
[unknown]
Udev เชจเชฟเชฏเชฎเซ เชเซเชฌ เช เชญเชพเชเซเชฏเซ เช เชฌเชฆเชฒเชพเชฏ เชเซ เช
เชจเซ เชธเชพเชฎเชพเชจเซเชฏ เชฐเซเชคเซ เช เชจเชฟเชฏเชเชคเซเชฐเชฟเชค เชฐเซเชคเซ เชฅเชพเชฏ เชเซ. เชคเซเชฅเซ เชเชชเชฃเซ เชเซเชเช เชเซเช เชเซ เชชเชนเซเชฒเซเชฅเซ เช เชธเซเช เชเชฐเซเชฒ เชฎเซเชฒเซเชฏเซ เชฒเชพเชเซ เชเชฐเชตเชพเชฅเซ เชชเชฃ เชเชชเซเชฒเชฟเชเซเชถเชจเชฎเชพเชเชฅเซ เชกเชฟเชธเซเช เชชเชฐ เชตเชฟเชจเชเชคเซเชจเซ เชธเซเชฅเชพเชจเชพเชเชคเชฐเชฟเชค เชเชฐเชตเชพเชฎเชพเช เชตเชฟเชฒเชเชฌ เชฅเชพเชฏ เชเซ. เช
เชฒเชฌเชคเซเชค, เชเซเชฏเชพเชฐเซ เชกเชฟเชธเซเช เชฐเซเชชเชฐเซเชเชพเชเชเชจเชฎเชพเช เชเซเช เชซเซเชฐเชซเชพเชฐ เชจ เชนเซเชฏ เชคเซเชฏเชพเชฐเซ udev เชเชเชจเชพเชเชจเซเช เชจเชฟเชฐเซเชฎเชพเชฃ เชเชฐเชตเซเช (เชเชฆเชพเชนเชฐเชฃ เชคเชฐเซเชเซ, เชเชชเชเชฐเชฃ เชฎเชพเชเชจเซเช เชฅเชฏเซเชฒ/เชกเชฟเชธเซเชเชจเซเชเซเช เชฅเชฏเซเชฒ เชจเชฅเซ) เช เชธเชพเชฐเซ เชชเซเชฐเชฅเชพ เชจเชฅเซ. เชเซ เชเซ, เช
เชฎเซ เชเชฐเซเชจเชฒเชจเซ เชฌเชฟเชจเชเชฐเซเชฐเซ เชเชพเชฎ เชจ เชเชฐเชตเชพเชฎเชพเช เชฎเชฆเชฆ เชเชฐเซ เชถเชเซเช เชเซเช เช
เชจเซ เชเซ เชเชฐเซเชฐเซ เชจ เชนเซเชฏ เชคเซ เชตเชฟเชจเชเชคเซ เชเชคเชพเชฐ เชธเซเชฅเชฟเชฐ เชเชฐเซ เชถเชเซเช เชเซเช.
เชเชชเชธเชเชนเชพเชฐ
eBPF เช เชเซเชฌ เช เชฒเชตเชเซเช เช
เชจเซ เชถเชเซเชคเชฟเชถเชพเชณเซ เชธเชพเชงเชจ เชเซ. เชฒเซเชเชฎเชพเช เชเชชเชฃเซ เชเช เชตเซเชฏเชตเชนเชพเชฐเซ เชเซเชธ เชเซเชฏเซ เช
เชจเซ เชถเซเช เชเชฐเซ เชถเชเชพเชฏ เชคเซเชจเซ เชเช เชจเชพเชจเซ เชญเชพเช เชฆเชฐเซเชถเชพเชตเซเชฏเซ. เชเซ เชคเชฎเซ BCC เชเชชเชฏเซเชเชฟเชคเชพเช เชตเชฟเชเชธเชพเชตเชตเชพเชฎเชพเช เชฐเชธ เชงเชฐเชพเชตเซ เชเซ, เชคเซ เชคเซ เชเซเชตเชพ เชฏเซเชเซเชฏ เชเซ
eBPF เชชเชฐ เชเชงเชพเชฐเชฟเชค เช
เชจเซเชฏ เชฐเชธเชชเซเชฐเชฆ เชกเชฟเชฌเชเซเชเช เช
เชจเซ เชชเซเชฐเซเชซเชพเชเชฒเชฟเชเช เชธเชพเชงเชจเซ เชเซ. เชคเซเชฎเชจเซ เชเช -
เชธเซเชฐเซเชธ: www.habr.com