เชนเซ เชนเชฌเชฐ! เช
เชฎเซ เชคเชฎเชจเซ เชเชพเชฃ เชเชฐเซเช เชเซเช เชเซ เช
เชฎเซ เชเช เชชเซเชธเซเชคเช เชฌเชนเชพเชฐ เชชเชพเชกเชตเชพเชจเซ เชคเซเชฏเชพเชฐเซ เชเชฐเซ เชฐเชนเซเชฏเชพ เชเซเช"
เชเซเชฎ เชเซเชฎ BPF เชตเชฐเซเชเซเชฏเซเช
เชฒ เชฎเชถเซเชจ เชธเชคเชค เชตเชฟเชเชธเชฟเชค เชฅเช เชฐเชนเซเชฏเซเช เชเซ เช
เชจเซ เชตเซเชฏเชตเชนเชพเชฐเชฎเชพเช เชคเซเชจเซ เชธเชเซเชฐเชฟเชฏเชชเชฃเซ เชเชชเชฏเซเช เชฅเชพเชฏ เชเซ, เช
เชฎเซ เชคเชฎเชพเชฐเชพ เชฎเชพเชเซ เชคเซเชจเชพ เชฎเซเชเซเชฏ เชฒเชเซเชทเชฃเซ เช
เชจเซ เชตเชฐเซเชคเชฎเชพเชจ เชธเซเชฅเชฟเชคเชฟเชจเซเช เชตเชฐเซเชฃเชจ เชเชฐเชคเชพ เชฒเซเชเชจเซ เช
เชจเซเชตเชพเชฆ เชเชฐเซเชฏเซ เชเซ.
เชคเชพเชเซเชคเชฐเชจเชพ เชตเชฐเซเชทเซเชฎเชพเช, เชเชเซเช-เชชเซเชฐเชฆเชฐเซเชถเชจ เชชเซเชเซเช เชชเซเชฐเซเชธเซเชธเชฟเชเชเชจเซ เชเชตเชถเซเชฏเชเชคเชพ เชนเซเชฏ เชคเซเชตเชพ เชเชฟเชธเซเชธเชพเชฎเชพเช Linux เชเชฐเซเชจเชฒเชจเซ เชฎเชฐเซเชฏเชพเชฆเชพเชเชจเซ เชตเชณเชคเชฐ เชเชชเชตเชพ เชฎเชพเชเซ เชชเซเชฐเซเชเซเชฐเชพเชฎเชฟเชเช เชธเชพเชงเชจเซ เช
เชจเซ เชคเชเชจเซเชเซเช เชฒเซเชเชชเซเชฐเชฟเชฏเชคเชพ เชฎเซเชณเชตเซ เชเซ. เช เชชเซเชฐเชเชพเชฐเชจเซ เชธเซเชฅเซ เชฒเซเชเชชเซเชฐเชฟเชฏ เชชเชฆเซเชงเชคเชฟเชเชฎเชพเชเชจเซ เชเช เชเชนเซเชตเชพเชฎเชพเช เชเชตเซ เชเซ เชเซเชฐ เชฌเชพเชฏเชชเชพเชธ (เชเชฐเซเชจเชฒ เชฌเชพเชฏเชชเชพเชธ) เช
เชจเซ เชฏเซเชเชฐ เชธเซเชชเซเชธเชฎเชพเชเชฅเซ เชคเชฎเชพเชฎ เชชเซเชเซเช เชชเซเชฐเซเชธเซเชธเชฟเชเช เชเชฐเชตเชพ เชฎเชพเชเซ, เชเชฐเซเชจเชฒเชจเชพ เชจเซเชเชตเชฐเซเช เชฒเซเชฏเชฐเชจเซ เชเซเชกเซ เชฆเซเชตเชพเชจเซ เชฎเชเชเซเชฐเซ เชเชชเซ เชเซ. เชเชฐเซเชจเชฒเชจเซ เชฌเชพเชฏเชชเชพเชธ เชเชฐเชตเชพเชฅเซ เชจเซเชเชตเชฐเซเช เชเชพเชฐเซเชกเชจเซเช เชธเชเชเชพเชฒเชจ เชชเชฃ เชฅเชพเชฏ เชเซ เชตเชชเชฐเชพเชถเชเชฐเซเชคเชพ เชเชเซเชฏเชพ. เชฌเซเชเชพ เชถเชฌเซเชฆเซเชฎเชพเช เชเชนเซเช เชคเซ, เชจเซเชเชตเชฐเซเช เชเชพเชฐเซเชก เชธเชพเชฅเซ เชเชพเชฎ เชเชฐเชคเซ เชตเชเชคเซ, เช
เชฎเซ เชกเซเชฐเชพเชเชตเชฐ เชชเชฐ เชเชงเชพเชฐ เชฐเชพเชเซเช เชเซเช เชตเชชเชฐเชพเชถเชเชฐเซเชคเชพ เชเชเซเชฏเชพ.
เชจเซเชเชตเชฐเซเช เชเชพเชฐเซเชกเชจเชพ เชธเชเชชเซเชฐเซเชฃ เชจเชฟเชฏเชเชคเซเชฐเชฃเชจเซ เชตเชชเชฐเชพเชถเชเชฐเซเชคเชพ-เชธเซเชชเซเชธ เชชเซเชฐเซเชเซเชฐเชพเชฎเชฎเชพเช เชธเซเชฅเชพเชจเชพเชเชคเชฐเชฟเชค เชเชฐเซเชจเซ, เช
เชฎเซ เชเชฐเซเชจเชฒเชจเชพ เชเชตเชฐเชนเซเชก (เชธเชเชฆเชฐเซเชญ เชธเซเชตเซเชเซ, เชจเซเชเชตเชฐเซเช เชฒเซเชฏเชฐ เชชเซเชฐเซเชธเซเชธเชฟเชเช, เชเชจเซเชเชฐเชชเซเชเซเชธ, เชตเชเซเชฐเซ) เชจเซ เชเชเชพเชกเซเช เชเซเช, เชเซ 10 Gb/s เชจเซ เชเชกเชชเซ เชเชพเชฒเชคเซ เชตเชเชคเซ เชเซเชฌ เช เชฎเชนเชคเซเชตเชชเซเชฐเซเชฃ เชเซ เช
เชฅเชตเชพ เชเชเซเช เชเชฐเซเชจเชฒเชจเซ เชฌเชพเชฏเชชเชพเชธ เชเชฐเซเชจเซ เชตเชคเซเชคเชพ เช
เชจเซเชฏ เชฒเชเซเชทเชฃเซเชจเซเช เชธเชเชฏเซเชเชจ (เชฌเซเช เชชเซเชฐเชเซเชฐเชฟเชฏเชพ) เช
เชจเซ เชธเชพเชตเชเซเชค เชชเซเชฐเชฆเชฐเซเชถเชจ เชเซเชฏเซเชจเชฟเชเช (NUMA เชเชเชพเชเชจเซเชเชฟเชเช, CPU เช
เชฒเชเชคเชพ, เชตเชเซเชฐเซ) เชเชเซเช-เชชเซเชฐเชฆเชฐเซเชถเชจ เชฏเซเชเชฐ-เชธเซเชชเซเชธ เชจเซเชเชตเชฐเซเชเชฟเชเชเชจเซ เชฎเซเชณเชญเซเชค เชฌเชพเชฌเชคเซเชฎเชพเช เชซเชฟเช เชเซ. เชเชฆเชพเช เชชเซเชเซเช เชชเซเชฐเซเชธเซเชธเชฟเชเช เชฎเชพเชเซเชจเชพ เช เชจเชตเชพ เช
เชญเชฟเชเชฎเชจเซเช เช
เชจเซเชเชฐเชฃเซเชฏ เชเชฆเชพเชนเชฐเชฃ เชเซ
เชตเชชเชฐเชพเชถเชเชฐเซเชคเชพ เชเชเซเชฏเชพเชฎเชพเช เชจเซเชเชตเชฐเซเช เชเซเชฐเชฟเชฏเชพเชชเซเชฐเชคเชฟเชเซเชฐเชฟเชฏเชพเชเชจเชพ เชธเชเชเช เชจเชฎเชพเช เชธเชเชเซเชฏเชพเชฌเชเชง เชเซเชฐเชซเชพเชฏเชฆเชพ เชเซ:
- OS เชเชฐเซเชจเชฒ เช เชนเชพเชฐเซเชกเชตเซเชฐ เชธเชเชธเชพเชงเชจเซ เชฎเชพเชเซ เชเชฌเซเชธเซเชเซเชฐเซเชเซเชถเชจ เชฒเซเชฏเชฐ เชเซ. เชเชพเชฐเชฃ เชเซ เชฏเซเชเชฐ-เชธเซเชชเซเชธ เชชเซเชฐเซเชเซเชฐเชพเชฎเซเชธเซ เชคเซเชฎเชจเชพ เชธเชเชธเชพเชงเชจเซเชจเซเช เชธเซเชงเซเช เชธเชเชเชพเชฒเชจ เชเชฐเชตเซเช เชชเชกเซ เชเซ, เชคเซเชเช เชคเซเชฎเชจเชพ เชชเซเชคเชพเชจเชพ เชนเชพเชฐเซเชกเชตเซเชฐเชจเซเช เชชเชฃ เชธเชเชเชพเชฒเชจ เชเชฐเชตเซเช เชชเชกเชถเซ. เชเชจเซ เช เชฐเซเชฅ เชเชฃเซเชตเชพเชฐ เชคเชฎเชพเชฐเชพ เชชเซเชคเชพเชจเชพ เชกเซเชฐเชพเชเชตเชฐเซเชจเซ เชชเซเชฐเซเชเซเชฐเชพเชฎ เชเชฐเชตเซ.
- เช เชฎเซ เชเชฐเซเชจเชฒ เชธเซเชชเซเชธ เชธเชเชชเซเชฐเซเชฃเชชเชฃเซ เชเซเชกเซ เชฐเชนเซเชฏเชพ เชนเซเชตเชพเชฅเซ, เช เชฎเซ เชเชฐเซเชจเชฒ เชฆเซเชตเชพเชฐเชพ เชชเซเชฐเซ เชชเชพเชกเชตเชพเชฎเชพเช เชเชตเชคเซ เชคเชฎเชพเชฎ เชจเซเชเชตเชฐเซเชเชฟเชเช เชเชพเชฐเซเชฏเชเซเชทเชฎเชคเชพ เชชเชฃ เชเซเชกเซ เชฆเชเช เชเซเช. เชฏเซเชเชฐ-เชธเซเชชเซเชธ เชชเซเชฐเซเชเซเชฐเชพเชฎเซ เชเชตเซ เชธเซเชตเชฟเชงเชพเชเชจเซ เชซเชฐเซเชฅเซ เช เชฎเชฒเชฎเชพเช เชฎเซเชเชตเชพเชจเซ เชนเซเชฏ เชเซ เชเซ เชเชฐเซเชจเชฒ เช เชฅเชตเชพ เชเชชเชฐเซเชเชฟเชเช เชธเชฟเชธเซเชเชฎ เชฆเซเชตเชพเชฐเชพ เชชเชนเซเชฒเชพเชฅเซ เช เชชเซเชฐเชฆเชพเชจ เชเชฐเชตเชพเชฎเชพเช เชเชตเซ เชนเซเชฏ.
- เชชเซเชฐเซเชเซเชฐเชพเชฎเซเชธ เชธเซเชจเซเชกเชฌเซเชเซเชธ เชฎเซเชกเชฎเชพเช เชเชพเชฐเซเชฏ เชเชฐเซ เชเซ, เชเซ เชคเซเชฎเชจเซ เชเซเชฐเชฟเชฏเชพเชชเซเชฐเชคเชฟเชเซเชฐเชฟเชฏเชพเชจเซ เชเชเชญเซเชฐเชคเชพเชฅเซ เชฎเชฐเซเชฏเชพเชฆเชฟเชค เชเชฐเซ เชเซ เช เชจเซ เชคเซเชฎเชจเซ เชเชชเชฐเซเชเชฟเชเช เชธเชฟเชธเซเชเชฎเชจเชพ เช เชจเซเชฏ เชญเชพเชเซ เชธเชพเชฅเซ เชเชเซเชเซเชค เชฅเชตเชพเชฅเซ เช เชเชเชพเชตเซ เชเซ.
เชธเชพเชฐเชฎเชพเช, เชเซเชฏเชพเชฐเซ เชฏเซเชเชฐ เชธเซเชชเซเชธเชฎเชพเช เชจเซเชเชตเชฐเซเชเชฟเชเช เชเชฐเชตเชพเชฎเชพเช เชเชตเซ เชเซ, เชคเซเชฏเชพเชฐเซ เชชเซเชเซเช เชชเซเชฐเซเชธเซเชธเชฟเชเชเชจเซ เชเชฐเซเชจเชฒเชฎเชพเชเชฅเซ เชฏเซเชเชฐ เชธเซเชชเซเชธเชฎเชพเช เชเชธเซเชกเซเชจเซ เชชเชฐเชซเซเชฐเซเชฎเชจเซเชธ เชเซเชเชจเซเชธ เชชเซเชฐเชพเชชเซเชค เชฅเชพเชฏ เชเซ. XDP เชฌเชฐเชพเชฌเชฐ เชตเชฟเชฐเซเชฆเซเชง เชเชฐเซ เชเซ: เชคเซ เชจเซเชเชตเชฐเซเช เชชเซเชฐเซเชเซเชฐเชพเชฎเซเชธเชจเซ เชฏเซเชเชฐ เชธเซเชชเซเชธ (เชซเชฟเชฒเซเชเชฐเซเชธ, เชเชจเซเชตเชฐเซเชเชฐ, เชฐเซเชเซเชเช เชตเชเซเชฐเซ)เชฎเชพเชเชฅเซ เชเชฐเซเชจเชฒ เชตเชฟเชธเซเชคเชพเชฐเชฎเชพเช เชเชธเซเชกเซ เชเซ. XDP เช เชฎเชจเซ เชชเซเชเซเช เชจเซเชเชตเชฐเซเช เชเชจเซเชเชฐเชซเซเชธ เชธเชพเชฅเซ เชนเชฟเช เชฅเชคเชพเช เช เช เชจเซ เชคเซ เชเชฐเซเชจเชฒเชจเชพ เชจเซเชเชตเชฐเซเช เชธเชฌเชธเชฟเชธเซเชเชฎ เชธเซเชงเซ เชฎเซเชธเชพเชซเชฐเซ เชเชฐเชตเชพเชจเซเช เชถเชฐเซ เชเชฐเซ เชคเซ เชชเชนเซเชฒเชพเช เชจเซเชเชตเชฐเซเช เชซเชเชเซเชถเชจเชจเซ เชเชเซเชเชฟเชเซเชฏเซเช เชเชฐเชตเชพเชจเซ เชชเชฐเชตเชพเชจเชเซ เชเชชเซ เชเซ. เชชเชฐเชฟเชฃเชพเชฎเซ, เชชเซเชเซเช เชชเซเชฐเซเชธเซเชธเชฟเชเช เชเชกเชช เชจเซเชเชงเชชเชพเชคเซเชฐ เชฐเซเชคเซ เชตเชงเซ เชเซ. เชเซ เชเซ, เชเชฐเซเชจเชฒ เชเซเชตเซ เชฐเซเชคเซ เชตเชชเชฐเชพเชถเชเชฐเซเชคเชพเชจเซ เชเชฐเซเชจเชฒ เชธเซเชชเซเชธเชฎเชพเช เชคเซเชฎเชจเชพ เชชเซเชฐเซเชเซเชฐเชพเชฎเซเชธ เชเชฒเชพเชตเชตเชพเชจเซ เชฎเชเชเซเชฐเซ เชเชชเซ เชเซ? เช เชชเซเชฐเชถเซเชจเชจเซ เชเชตเชพเชฌ เชเชชเชคเชพ เชชเชนเซเชฒเชพ, เชเชพเชฒเซ เชเซเชเช เชเซ BPF เชถเซเช เชเซ.
BPF เช เชจเซ eBPF
เชธเชเชชเซเชฐเซเชฃเชชเชฃเซ เชธเซเชชเชทเซเช เชจเชพเชฎ เชจ เชนเซเชตเชพ เชเชคเชพเช, BPF (เชชเซเชเซเช เชซเชฟเชฒเซเชเชฐเชฟเชเช, เชฌเชฐเซเชเชฒเซ) เช เชนเชเซเชเชคเชฎเชพเช เชตเชฐเซเชเซเชฏเซเช เชฒ เชฎเชถเซเชจ เชฎเซเชกเชฒ เชเซ. เช เชตเชฐเซเชเซเชฏเซเช เชฒ เชฎเชถเซเชจ เชฎเซเชณเชฐเซเชชเซ เชชเซเชเซเช เชซเชฟเชฒเซเชเชฐเชฟเชเชเชจเซ เชนเซเชจเซเชกเชฒ เชเชฐเชตเชพ เชฎเชพเชเซ เชฌเชจเชพเชตเชตเชพเชฎเชพเช เชเชตเซเชฏเซเช เชนเชคเซเช, เชคเซเชฅเซ เชคเซเชจเซเช เชจเชพเชฎ.
BPF เชจเซ เชเชชเชฏเซเช เชเชฐเชคเชพ เชตเชงเซ เชเชพเชฃเซเชคเชพ เชธเชพเชงเชจเซ เชชเซเชเซ เชเช เชเซ tcpdump
. เชธเชพเชฅเซ เชชเซเชเซเชเซ เชเชฌเชเซ เชเชฐเชคเซ เชตเชเชคเซ tcpdump
เชตเชชเชฐเชพเชถเชเชฐเซเชคเชพ เชชเซเชเซเช เชซเชฟเชฒเซเชเชฐเชฟเชเช เชฎเชพเชเซ เช
เชญเชฟเชตเซเชฏเชเซเชคเชฟเชจเซ เชเชฒเซเชฒเซเช เชเชฐเซ เชถเชเซ เชเซ. เช เช
เชญเชฟเชตเซเชฏเชเซเชคเชฟ เชธเชพเชฅเซ เชฎเซเชณ เชเชพเชคเชพ เชชเซเชเซเชเซ เช เชเซเชชเซเชเชฐ เชเชฐเชตเชพเชฎเชพเช เชเชตเชถเซ. เชเชฆเชพเชนเชฐเชฃ เชคเชฐเซเชเซ, เช
เชญเชฟเชตเซเชฏเชเซเชคเชฟ "tcp dst port 80
โ เชชเซเชฐเซเช 80 เชชเชฐ เชเชตเชคเชพ เชคเชฎเชพเชฎ TCP เชชเซเชเซเชเซเชจเซ เชฒเชพเชเซ เชชเชกเซ เชเซ. เชเชฎเซเชชเชพเชเชฒเชฐ เช เช
เชญเชฟเชตเซเชฏเชเซเชคเชฟเชจเซ BPF เชฌเชพเชเชเชเซเชกเชฎเชพเช เชเชจเซเชตเชฐเซเช เชเชฐเซเชจเซ เชเซเชเชเซ เชเชฐเซ เชถเชเซ เชเซ.
$ sudo tcpdump -d "tcp dst port 80"
(000) ldh [12]
(001) jeq #0x86dd jt 2 jf 6
(002) ldb [20]
(003) jeq #0x6 jt 4 jf 15
(004) ldh [56]
(005) jeq #0x50 jt 14 jf 15
(006) jeq #0x800 jt 7 jf 15
(007) ldb [23]
(008) jeq #0x6 jt 9 jf 15
(009) ldh [20]
(010) jset #0x1fff jt 15 jf 11
(011) ldxb 4*([14]&0xf)
(012) ldh [x + 16]
(013) jeq #0x50 jt 14 jf 15
(014) ret #262144
(015) ret #0
เช เชฎเซเชณเชญเซเชค เชฐเซเชคเซ เชเชชเชฐเซเชเซเชค เชชเซเชฐเซเชเซเชฐเชพเชฎ เชถเซเช เชเชฐเซ เชเซ เชคเซ เชเซ:
- เชธเซเชเชจเชพ (000): เชเชซเชธเซเช 12 เชชเชฐ เชชเซเชเซเชเชจเซ 16-เชฌเซเช เชถเชฌเซเชฆ เชคเชฐเซเชเซ, เชเชเซเชฏเซเชฎเซเชฏเซเชฒเซเชเชฐเชฎเชพเช เชฒเซเชก เชเชฐเซ. เชเชซเชธเซเช 12 เชชเซเชเซเชเชจเชพ เชเชฅเชฐเชเชพเชเชชเชจเซ เช เชจเซเชฐเซเชช เชเซ.
- เชธเซเชเชจเชพ (001): 0x86dd เชธเชพเชฅเซ เชธเชเชเชฏเชเชฎเชพเช เชฎเซเชฒเซเชฏเชจเซ เชคเซเชฒเชจเชพ เชเชฐเซ เชเซ, เชเชเชฒเซ เชเซ, IPv6 เชฎเชพเชเซ เชเชฅเชฐเชเชพเชเชช เชฎเซเชฒเซเชฏ เชธเชพเชฅเซ. เชเซ เชชเชฐเชฟเชฃเชพเชฎ เชธเชพเชเซเช เชนเซเชฏ, เชคเซ เชชเซเชฐเซเชเซเชฐเชพเชฎ เชเชพเชเชจเซเชเชฐ เชธเซเชเชจเชพ (002) เชชเชฐ เชเชพเชฏ เชเซ, เช เชจเซ เชเซ เชจเชนเซเช, เชคเซ เชชเชเซ (006) เชชเชฐ เชเชพเชฏ เชเซ.
- เชธเซเชเชจเชพ (006): 0x800 (IPv4 เชฎเชพเชเซ เชเชฅเชฐเชเชพเชเชช เชฎเซเชฒเซเชฏ) เชธเชพเชฅเซ เชฎเซเชฒเซเชฏเชจเซ เชคเซเชฒเชจเชพ เชเชฐเซ เชเซ. เชเซ เชเชตเชพเชฌ เชธเชพเชเซ เชนเซเชฏ, เชคเซ เชชเซเชฐเซเชเซเชฐเชพเชฎ (007) เชชเชฐ เชเชพเชฏ เชเซ, เชเซ เชจเชนเซเช, เชคเซ เชชเชเซ (015) เชชเชฐ เชเชพเชฏ เชเซ.
เช เชจเซ เชคเซเชฅเซ, เชเซเชฏเชพเช เชธเซเชงเซ เชชเซเชเซเช เชซเชฟเชฒเซเชเชฐเชฟเชเช เชชเซเชฐเซเชเซเชฐเชพเชฎ เชชเชฐเชฟเชฃเชพเชฎ เชเชชเซ เชคเซเชฏเชพเช เชธเซเชงเซ. เชธเชพเชฎเชพเชจเซเชฏ เชฐเซเชคเซ เชคเซ เชฌเซเชฒเชฟเชฏเชจ เชนเซเชฏ เชเซ. เชฌเชฟเชจ-เชถเซเชจเซเชฏ เชฎเซเชฒเซเชฏ (เชธเซเชเชจเชพ (014)) เชชเชฐเชค เชเชฐเชตเชพเชจเซ เช เชฐเซเชฅ เช เชเซ เชเซ เชชเซเชเซเช เชฎเซเชณ เชเชพเชฏ เชเซ, เช เชจเซ เชถเซเชจเซเชฏ (เชธเซเชเชจเชพ (015)) เชชเชฐเชค เชเชฐเชตเชพเชจเซ เช เชฐเซเชฅ เชเซ เชเซ เชชเซเชเซเช เชฎเซเชณ เชเชพเชคเซเช เชจเชฅเซ.
BPF เชตเชฐเซเชเซเชฏเซเช
เชฒ เชฎเชถเซเชจ เช
เชจเซ เชคเซเชจเชพ เชฌเชพเชเชเชเซเชกเชจเซ เชธเซเชเซเชต เชฎเซเชเชเซเชจ เช
เชจเซ เชตเซเชจ เชเซเชเซเชฌเชธเชจ เชฆเซเชตเชพเชฐเชพ 1992เชจเชพ เช
เชเชคเชฎเชพเช เชเซเชฏเชพเชฐเซ เชคเซเชฎเชจเชพ เชชเซเชชเชฐ เชฌเชนเชพเชฐ เชเชตเซเชฏเชพ เชคเซเชฏเชพเชฐเซ เชชเซเชฐเชธเซเชคเชพเชตเชฟเชค เชเชฐเชตเชพเชฎเชพเช เชเชตเซเชฏเชพ เชนเชคเชพ.
เชเชพเชฐเชฃ เชเซ BPF เช เชตเชฐเซเชเซเชฏเซเช
เชฒ เชฎเชถเซเชจ เชเซ, เชคเซ เชชเชฐเซเชฏเชพเชตเชฐเชฃเชจเซ เชตเซเชฏเชพเชเซเชฏเชพเชฏเชฟเชค เชเชฐเซ เชเซ เชเซเชฎเชพเช เชชเซเชฐเซเชเซเชฐเชพเชฎ เชเชพเชฒเซ เชเซ. เชฌเชพเชเชเชเซเชก เชเชชเชฐเชพเชเชค, เชคเซ เชชเซเชเซเช เชฎเซเชฎเชฐเซ เชฎเซเชกเชฒ (เชฒเซเชก เชธเซเชเชจเชพเช เชธเซเชชเชทเซเชเชชเชฃเซ เชชเซเชเซเช เชชเชฐ เชฒเชพเชเซ เชเชฐเชตเชพเชฎเชพเช เชเชตเซ เชเซ), เชฐเชเชฟเชธเซเชเชฐ (A เช
เชจเซ X; เชธเชเชเชฏเช เช
เชจเซ เช
เชจเซเชเซเชฐเชฎเชฃเชฟเชเชพ เชฐเชเชฟเชธเซเชเชฐ), เชธเซเชเซเชฐเซเช เชฎเซเชฎเชฐเซ เชธเซเชเซเชฐเซเช เช
เชจเซ เชเชฐเซเชญเชฟเชค เชชเซเชฐเซเชเซเชฐเชพเชฎ เชเชพเชเชจเซเชเชฐ เชชเชฃ เชตเซเชฏเชพเชเซเชฏเชพเชฏเชฟเชค เชเชฐเซ เชเซ. เชฐเชธเชชเซเชฐเชฆ เชตเชพเชค เช เชเซ เชเซ, BPF เชฌเชพเชเชเชเซเชกเชจเซ Motorola 6502 ISA เชชเชเซ เชฎเซเชกเชฒ เชเชฐเชตเชพเชฎเชพเช เชเชตเซเชฏเซเช เชนเชคเซเช. เชเซเชฎ เชเซ เชธเซเชเซเชต เชฎเซเชเชเซเชจเซ เชคเซเชจเชพเชฎเชพเช เชฏเชพเชฆ เชเชฐเซเชฏเซเช
BPF เชธเชชเซเชฐเซเช Linux เชเชฐเซเชจเชฒเชฎเชพเช v2.5 เช
เชจเซ เชชเชเซเชจเชพ เชธเชเชธเซเชเชฐเชฃเชฎเชพเช เชฒเชพเชเซ เชเชฐเชตเชพเชฎเชพเช เชเชตเซเชฏเซ เชเซ, เชเซ เชฎเซเชเซเชฏเชคเซเชตเซ เชเชฏ เชถเซเชฒเชฟเชธเซเช เชฆเซเชตเชพเชฐเชพ เชเชฎเซเชฐเชตเชพเชฎเชพเช เชเชตเซเชฏเซ เชเซ. BPF เชเซเชก 2011 เชธเซเชงเซ เชฏเชฅเชพเชตเชค เชฐเชนเซเชฏเซ, เชเซเชฏเชพเชฐเซ เชเชฐเชฟเช เชกเซเชฎเชพเชธเซเชเซ BPF เชฆเซเชญเชพเชทเชฟเชฏเชพเชจเซ JIT เชฎเซเชกเชฎเชพเช เชเชพเชฎ เชเชฐเชตเชพ เชฎเชพเชเซ เชซเชฐเซเชฅเซ เชกเชฟเชเชพเชเชจ เชเชฐเซเชฏเซ (เชธเซเชฐเซเชค:
เชชเชพเชเชณเชฅเซ, 2014 เชฎเชพเช, เชเชฒเซเชเซเชธเซ เชธเซเชเชพเชฐเซเชตเซเชเชเซเชตเซ BPF เชฎเชพเชเซ เชจเชตเซ JIT เชฎเชฟเชเซเชจเชฟเชเชฎเชจเซ เชชเซเชฐเชธเซเชคเชพเชต เชฎเซเชเซเชฏเซ. เชตเชพเชธเซเชคเชตเชฎเชพเช, เช เชจเชตเซ JIT BPF เชชเชฐ เชเชงเชพเชฐเชฟเชค เชจเชตเซ เชเชฐเซเชเชฟเชเซเชเซเชเชฐ เชฌเชจเซ เชนเชคเซ เช เชจเซ เชคเซเชจเซ eBPF เชเชนเซเชตเชพเชฎเชพเช เชเชตเชคเซเช เชนเชคเซเช. เชฎเชจเซ เชฒเชพเชเซ เชเซ เชเซ เชฌเชเชจเซ VM เชฅเซเชกเชพ เชธเชฎเชฏ เชฎเชพเชเซ เชธเชนเช เชธเซเชคเชฟเชคเซเชต เชงเชฐเชพเชตเซ เชเซ, เชชเชฐเชเชคเซ เชชเซเชเซเช เชซเชฟเชฒเซเชเชฐเชฟเชเช เชนเชพเชฒเชฎเชพเช eBPF เชจเซ เชเซเช เชชเชฐ เช เชฎเชฒเชฎเชพเช เชเซ. เชนเชเซเชเชคเชฎเชพเช, เชเชฃเชพ เชเชงเซเชจเชฟเช เชฆเชธเซเชคเชพเชตเซเชเซเชเชฐเชฃ เชเชฆเชพเชนเชฐเชฃเซเชฎเชพเช, BPF เชจเซ eBPF เชคเชฐเซเชเซ เชเชณเชเชตเชพเชฎเชพเช เชเชตเซ เชเซ, เช เชจเซ เชเซเชฒเชพเชธเชฟเชเชฒ BPF เชเชเซ cBPF เชคเชฐเซเชเซ เชเชณเชเชพเชฏ เชเซ.
eBPF เชเซเชฒเชพเชธเชฟเช BPF เชตเชฐเซเชเซเชฏเซเช เชฒ เชฎเชถเซเชจเชจเซ เชเชฃเซ เชฐเซเชคเซ เชตเชฟเชธเซเชคเซเชค เชเชฐเซ เชเซ:
- เชเชงเซเชจเชฟเช 64-เชฌเซเช เชเชฐเซเชเชฟเชเซเชเซเชเชฐ เชชเชฐ เชเชงเชพเชฐ เชฐเชพเชเซ เชเซ. eBPF 64-เชฌเซเช เชฐเชเชฟเชธเซเชเชฐเชจเซ เชเชชเชฏเซเช เชเชฐเซ เชเซ เช เชจเซ เชเชชเชฒเชฌเซเชง เชฐเชเชฟเชธเซเชเชฐเชจเซ เชธเชเชเซเชฏเชพ 2 (เชเชเซเชฏเซเชฎเซเชฏเซเชฒเซเชเชฐ เช เชจเซ X) เชฅเซ เชตเชงเชพเชฐเซเชจเซ 10 เชเชฐเซ เชเซ. eBPF เชตเชงเชพเชฐเชพเชจเชพ opcodes (BPF_MOV, BPF_JNE, BPF_CALLโฆ) เชชเชฃ เชชเซเชฐเชฆเชพเชจ เชเชฐเซ เชเซ.
- เชจเซเชเชตเชฐเซเช เชฒเซเชฏเชฐ เชธเชฌเชธเชฟเชธเซเชเชฎเชฅเซ เช เชฒเช. BPF เชฌเซเช เชกเซเชเชพ เชฎเซเชกเซเชฒ เชธเชพเชฅเซ เชเซเชกเชพเชฏเซเชฒเซเช เชนเชคเซเช. เชคเซเชจเซ เชเชชเชฏเซเช เชชเซเชเซเชเซเชจเซ เชซเชฟเชฒเซเชเชฐ เชเชฐเชตเชพ เชฎเชพเชเซ เชฅเชคเซ เชนเซเชตเชพเชฅเซ, เชคเซเชจเซ เชเซเชก เชธเชฌเชธเชฟเชธเซเชเชฎเชฎเชพเช เชนเชคเซ เชเซ เชจเซเชเชตเชฐเซเช เชเซเชฐเชฟเชฏเชพเชชเซเชฐเชคเชฟเชเซเชฐเชฟเชฏเชพเช เชชเซเชฐเชฆเชพเชจ เชเชฐเซ เชเซ. เชเซ เชเซ, eBPF เชตเชฐเซเชเซเชฏเซเช เชฒ เชฎเชถเซเชจ เชนเชตเซ เชกเซเชเชพ เชฎเซเชกเซเชฒ เชธเชพเชฅเซ เชฌเชเชงเชพเชฏเซเชฒ เชจเชฅเซ เช เชจเซ เชคเซเชจเซ เชเชชเชฏเซเช เชเซเชเชชเชฃ เชนเซเชคเซ เชฎเชพเชเซ เชฅเช เชถเชเซ เชเซ. เชคเซเชฅเซ, เชนเชตเซ eBPF เชชเซเชฐเซเชเซเชฐเชพเชฎเชจเซ เชเซเชฐเซเชธเชชเซเชเชจเซเช เช เชฅเชตเชพ kprobe เชธเชพเชฅเซ เชเชจเซเชเซเช เชเชฐเซ เชถเชเชพเชฏ เชเซ. เช เช เชจเซเชฏ เชเชฐเซเชจเชฒ เชธเชฌเชธเชฟเชธเซเชเชฎเชจเชพ เชธเชเชฆเชฐเซเชญเชฎเชพเช eBPF เชเชจเซเชธเซเชเซเชฐเซเชฎเซเชจเซเชเซเชถเชจ, เชชเชฐเซเชซเซเชฐเซเชฎเชจเซเชธ เชเชจเชพเชฒเชฟเชธเชฟเชธ เช เชจเซ เช เชจเซเชฏ เชเชฃเชพ เชเชชเชฏเซเชเชจเชพ เชเซเชธเซเชจเชพ เชฆเชฐเชตเชพเชเชพ เชเซเชฒเซ เชเซ. เชนเชตเซ eBPF เชเซเชก เชคเซเชจเชพ เชชเซเชคเชพเชจเชพ เชชเชพเชฅเชฎเชพเช เชธเซเชฅเชฟเชค เชเซ: kernel/bpf.
- เชจเชเชถเชพ เชคเชฐเซเชเซ เชเชณเชเชพเชคเชพ เชตเซเชถเซเชตเชฟเช เชกเซเชเชพ เชธเซเชเซเชฐเซเชธ. เชจเชเชถเชพ เช เชเซ-เชตเซเชฒเซเชฏเซ เชธเซเชเซเชฐเซเชธ เชเซ เชเซ เชฏเซเชเชฐ เชธเซเชชเซเชธ เช เชจเซ เชเชฐเซเชจเชฒ เชธเซเชชเซเชธ เชตเชเซเชเซ เชกเซเชเชพ เชเชเซเชธเชเซเชจเซเช เชชเซเชฐเชฆเชพเชจ เชเชฐเซ เชเซ. eBPF เช เชจเซเช เชชเซเชฐเชเชพเชฐเชจเชพ เชเชพเชฐเซเชก เชชเซเชฐเชฆเชพเชจ เชเชฐเซ เชเซ.
- เชเซเชฃ เชเชพเชฐเซเชฏเซ. เชเชพเชธ เชเชฐเซเชจเซ, เชชเซเชเซเช เชชเชฐ เชซเชฐเซเชฅเซ เชฒเชเชตเชพ เชฎเชพเชเซ, เชเซเชเชธเชฎเชจเซ เชเชฃเชคเชฐเซ เชเชฐเซ, เช เชฅเชตเชพ เชชเซเชเซเชเชจเซ เชเซเชฒเซเชจ เชเชฐเซ. เช เชซเชเชเซเชถเชจ เชเชฐเซเชจเชฒเชจเซ เช เชเชฆเชฐ เชเชพเชฒเซ เชเซ เช เชจเซ เชคเซ เชฏเซเชเชฐ-เชธเซเชชเซเชธ เชชเซเชฐเซเชเซเชฐเชพเชฎ เชธเชพเชฅเซ เชธเชเชฌเชเชงเชฟเชค เชจเชฅเซ. เชตเชงเซเชฎเชพเช, eBPF เชชเซเชฐเซเชเซเชฐเชพเชฎเซเชธเชฎเชพเชเชฅเซ เชธเชฟเชธเซเชเชฎ เชเซเชฒเซเชธ เชเชฐเซ เชถเชเชพเชฏ เชเซ.
- เชเซเชฒเซเชธ เชธเชฎเชพเชชเซเชค เชเชฐเซ. eBPF เชฎเชพเช เชชเซเชฐเซเชเซเชฐเชพเชฎเชจเซเช เชเชฆ 4096 เชฌเชพเชเชเซเชธ เชธเซเชงเซ เชฎเชฐเซเชฏเชพเชฆเชฟเชค เชเซ. เชเชจเซเชก เชเซเชฒ เชซเซเชเชฐ eBPF เชชเซเชฐเซเชเซเชฐเชพเชฎเชจเซ เชจเชตเชพ eBPF เชชเซเชฐเซเชเซเชฐเชพเชฎเชฎเชพเช เชเชเชเซเชฐเซเชฒ เชเซเชฐเชพเชจเซเชธเชซเชฐ เชเชฐเชตเชพเชจเซ เชชเชฐเชตเชพเชจเชเซ เชเชชเซ เชเซ เช เชจเซ เช เชฐเซเชคเซ เช เชฎเชฐเซเชฏเชพเชฆเชพเชจเซ เชฌเชพเชฏเชชเชพเชธ เชเชฐเซ เชถเชเซ เชเซ (32 เชชเซเชฐเซเชเซเชฐเชพเชฎเซเชธ เชธเซเชงเซ เช เชฐเซเชคเซ เชธเชพเชเชเชณเซ เชถเชเชพเชฏ เชเซ).
eBPF เชเชฆเชพเชนเชฐเชฃ
Linux เชเชฐเซเชจเชฒ เชธเซเชคเซเชฐเซเชคเซเชฎเชพเช eBPF เชฎเชพเชเซ เชเชฃเชพ เชเชฆเชพเชนเชฐเชฃเซ เชเซ. เชคเซเช เชจเชฎเซเชจเชพเช/bpf/ เชชเชฐ เชเชชเชฒเชฌเซเชง เชเซ. เช เชเชฆเชพเชนเชฐเชฃเซเชจเซเช เชธเชเชเชฒเชจ เชเชฐเชตเชพ เชฎเชพเชเซ, เชซเชเซเชค เชเชพเชเชช เชเชฐเซ:
$ sudo make samples/bpf/
เชนเซเช เชฎเชพเชฐเซ เชเชพเชคเซ eBPF เชฎเชพเชเซ เชจเชตเซเช เชเชฆเชพเชนเชฐเชฃ เชฒเชเซเชถ เชจเชนเซเช, เชชเชฐเชเชคเซ เชจเชฎเซเชจเชพเช/bpf/เชฎเชพเช เชเชชเชฒเชฌเซเชง เชจเชฎเซเชจเชพเชเชฎเชพเชเชฅเซ เชเชเชจเซ เชเชชเชฏเซเช เชเชฐเซเชถ. เชนเซเช เชเซเชกเชจเชพ เชเซเชเชฒเชพเช เชญเชพเชเซ เชเซเชเชถ เช
เชจเซ เชคเซ เชเซเชตเซ เชฐเซเชคเซ เชเชพเชฐเซเชฏ เชเชฐเซ เชเซ เชคเซ เชธเชฎเชเชพเชตเซเชถ. เชเชฆเชพเชนเชฐเชฃ เชคเชฐเซเชเซ, เชฎเซเช เชชเซเชฐเซเชเซเชฐเชพเชฎ เชชเชธเชเชฆ เชเชฐเซเชฏเซ tracex4
.
เชธเชพเชฎเชพเชจเซเชฏ เชฐเซเชคเซ, เชจเชฎเซเชจเชพเช/bpf/เชฎเชพเชเชจเชพ เชฆเชฐเซเช เชเชฆเชพเชนเชฐเชฃเซเชฎเชพเช เชฌเซ เชซเชพเชเชฒเซ เชนเซเชฏ เชเซ. เช เชฌเชพเชฌเชคเซ:
tracex4_kern.c
, เชเชฐเซเชจเชฒเชฎเชพเช eBPF เชฌเชพเชเชเชเซเชก เชคเชฐเซเชเซ เชเชเซเชเชฟเชเซเชฏเซเช เชเชฐเชตเชพ เชฎเชพเชเซเชจเซ เชธเซเชฐเซเชค เชเซเชก เชงเชฐเชพเชตเซ เชเซ.tracex4_user.c
, เชตเชชเชฐเชพเชถเชเชฐเซเชคเชพ เชธเซเชชเซเชธเชฎเชพเชเชฅเซ เชชเซเชฐเซเชเซเชฐเชพเชฎ เชงเชฐเชพเชตเซ เชเซ.
เช เชเชฟเชธเซเชธเชพเชฎเชพเช, เชเชชเชฃเซ เชเชฎเซเชชเชพเชเชฒ เชเชฐเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ tracex4_kern.c
eBPF เชฌเชพเชเชเชเซเชก เชชเชฐ. เช เชเซเชทเชฃเซ เชฎเชพเช gcc
eBPF เชฎเชพเชเซ เชเซเช เชธเชฐเซเชตเชฐ เชญเชพเช เชจเชฅเซ. เชธเชฆเชจเชธเซเชฌเซ, clang
eBPF เชฌเชพเชเชเชเซเชก เชชเซเชฆเชพ เชเชฐเซ เชถเชเซ เชเซ.
เชเชชเชฏเซเช เชเชฐเซ เชเซ clang
เชธเชเชเชฒเชจ เชเชฐเชตเซเช tracex4_kern.c
เชเชฌเซเชเซเชเซเช เชซเชพเชเชฒเชฎเชพเช.
เชฎเซเช เชเชชเชฐ เชเชฒเซเชฒเซเช เชเชฐเซเชฏเซ เชเซ เชเซ eBPF เชจเซ เชธเซเชฅเซ เชฐเชธเชชเซเชฐเชฆ เชตเชฟเชถเซเชทเชคเชพเชเชฎเชพเชเชจเซ เชเช เชจเชเชถเชพ เชเซ. tracex4_kern เชเช เชจเชเชถเซ เชตเซเชฏเชพเชเซเชฏเชพเชฏเชฟเชค เชเชฐเซ เชเซ:
struct pair {
u64 val;
u64 ip;
};
struct bpf_map_def SEC("maps") my_map = {
.type = BPF_MAP_TYPE_HASH,
.key_size = sizeof(long),
.value_size = sizeof(struct pair),
.max_entries = 1000000,
};
BPF_MAP_TYPE_HASH
eBPF เชฆเซเชตเชพเชฐเชพ เชเชซเชฐ เชเชฐเชพเชฏเซเชฒเชพ เชเชฃเชพ เชเชพเชฐเซเชก เชชเซเชฐเชเชพเชฐเซเชฎเชพเชเชฅเซ เชเช เชเซ. เช เชเชฟเชธเซเชธเชพเชฎเชพเช, เชคเซ เชฎเชพเชคเซเชฐ เชเช เชนเซเชถ เชเซ. เชคเชฎเซ เชเชพเชนเซเชฐเชพเชค เชชเชฃ เชเซเช เชนเชถเซ SEC("maps")
. SEC เช เชเช เชฎเซเชเซเชฐเซ เชเซ เชเซเชจเซ เชเชชเชฏเซเช เชฌเชพเชเชจเชฐเซ เชซเชพเชเชฒเชจเซ เชจเชตเซ เชตเชฟเชญเชพเช เชฌเชจเชพเชตเชตเชพ เชฎเชพเชเซ เชฅเชพเชฏ เชเซ. เชเชฐเซเชเชฐ, เชเชฆเชพเชนเชฐเชฃเชฎเชพเช tracex4_kern
เชฌเซ เชตเชงเซ เชตเชฟเชญเชพเชเซ เชตเซเชฏเชพเชเซเชฏเชพเชฏเชฟเชค เชฅเชฏเซเชฒ เชเซ:
SEC("kprobe/kmem_cache_free")
int bpf_prog1(struct pt_regs *ctx)
{
long ptr = PT_REGS_PARM2(ctx);
bpf_map_delete_elem(&my_map, &ptr);
return 0;
}
SEC("kretprobe/kmem_cache_alloc_node")
int bpf_prog2(struct pt_regs *ctx)
{
long ptr = PT_REGS_RC(ctx);
long ip = 0;
// ะฟะพะปััะฐะตะผ ip-ะฐะดัะตั ะฒัะทัะฒะฐััะตะน ััะพัะพะฝั kmem_cache_alloc_node()
BPF_KRETPROBE_READ_RET_IP(ip, ctx);
struct pair v = {
.val = bpf_ktime_get_ns(),
.ip = ip,
};
bpf_map_update_elem(&my_map, &ptr, &v, BPF_ANY);
return 0;
}
เช เชฌเซ เชเชพเชฐเซเชฏเซ เชคเชฎเชจเซ เชจเชเชถเชพเชฎเชพเชเชฅเซ เชเชจเซเชเซเชฐเซ เชฆเซเชฐ เชเชฐเชตเชพเชจเซ เชชเชฐเชตเชพเชจเชเซ เชเชชเซ เชเซ (kprobe/kmem_cache_free
) เช
เชจเซ เชจเชเชถเชพเชฎเชพเช เชจเชตเซ เชเชจเซเชเซเชฐเซ เชเชฎเซเชฐเซ (kretprobe/kmem_cache_alloc_node
). เชฎเซเชเชพ เช
เชเซเชทเชฐเซเชฎเชพเช เชฒเชเซเชฒเชพ เชฌเชงเชพ เชซเชเชเซเชถเชจ เชจเชพเชฎเซ เชฎเชพเช เชตเซเชฏเชพเชเซเชฏเชพเชฏเชฟเชค เชฎเซเชเซเชฐเซเชจเซ เช
เชจเซเชฐเซเชช เชเซ
.
เชเซ เชนเซเช เชเชฌเซเชเซเชเซเช เชซเชพเชเชฒเชจเชพ เชตเชฟเชญเชพเชเซเชจเซ เชกเชฎเซเชช เชเชฐเซเช, เชคเซ เชฎเชพเชฐเซ เชเซเชตเซเช เชเซเชเช เชเซ เช เชจเชตเชพ เชตเชฟเชญเชพเชเซ เชชเชนเซเชฒเซเชฅเซ เช เชตเซเชฏเชพเชเซเชฏเชพเชฏเชฟเชค เชเซ:
$ objdump -h tracex4_kern.o
tracex4_kern.o: file format elf64-little
Sections:
Idx Name Size VMA LMA File off Algn
0 .text 00000000 0000000000000000 0000000000000000 00000040 2**2
CONTENTS, ALLOC, LOAD, READONLY, CODE
1 kprobe/kmem_cache_free 00000048 0000000000000000 0000000000000000 00000040 2**3
CONTENTS, ALLOC, LOAD, RELOC, READONLY, CODE
2 kretprobe/kmem_cache_alloc_node 000000c0 0000000000000000 0000000000000000 00000088 2**3
CONTENTS, ALLOC, LOAD, RELOC, READONLY, CODE
3 maps 0000001c 0000000000000000 0000000000000000 00000148 2**2
CONTENTS, ALLOC, LOAD, DATA
4 license 00000004 0000000000000000 0000000000000000 00000164 2**0
CONTENTS, ALLOC, LOAD, DATA
5 version 00000004 0000000000000000 0000000000000000 00000168 2**2
CONTENTS, ALLOC, LOAD, DATA
6 .eh_frame 00000050 0000000000000000 0000000000000000 00000170 2**3
CONTENTS, ALLOC, LOAD, RELOC, READONLY, DATA
เชคเซเชฏเชพเช เชชเชฃ เชเซ
, เชฎเซเชเซเชฏ เชเชพเชฐเซเชฏเชเซเชฐเชฎ. เชฎเซเชณเชญเซเชค เชฐเซเชคเซ, เช เชชเซเชฐเซเชเซเชฐเชพเชฎ เชเชตเซเชจเซเชเซเชธ เชฎเชพเชเซ เชธเชพเชเชญเชณเซ เชเซ kmem_cache_alloc_node
. เชเซเชฏเชพเชฐเซ เชเชตเซ เชเชเชจเชพ เชฌเชจเซ เชเซ, เชคเซเชฏเชพเชฐเซ เชธเชเชฌเชเชงเชฟเชค eBPF เชเซเชก เชเชเซเชเชฟเชเซเชฏเซเช เชฅเชพเชฏ เชเซ. เชเซเชก เชเชฌเซเชเซเชเซเชเชจเชพ IP เชเชเซเชฐเชฟเชฌเซเชฏเซเชเชจเซ เชจเชเชถเชพเชฎเชพเช เชธเชพเชเชตเซ เชเซ, เช
เชจเซ เชชเชเซ เชเชฌเซเชเซเชเซเชเชจเซ เชฎเซเชเซเชฏ เชชเซเชฐเซเชเซเชฐเชพเชฎ เชฆเซเชตเชพเชฐเชพ เชฒเซเชช เชเชฐเชตเชพเชฎเชพเช เชเชตเซ เชเซ. เชเชฆเชพเชนเชฐเชฃ:
$ sudo ./tracex4
obj 0xffff8d6430f60a00 is 2sec old was allocated at ip ffffffff9891ad90
obj 0xffff8d6062ca5e00 is 23sec old was allocated at ip ffffffff98090e8f
obj 0xffff8d5f80161780 is 6sec old was allocated at ip ffffffff98090e8f
เชฏเซเชเชฐ เชธเซเชชเซเชธ เชชเซเชฐเซเชเซเชฐเชพเชฎ เช
เชจเซ eBPF เชชเซเชฐเซเชเซเชฐเชพเชฎ เชเซเชตเซ เชฐเซเชคเซ เชธเชเชฌเชเชงเชฟเชค เชเซ? เชเชฐเชเชญ เชธเชฎเชฏเซ tracex4_user.c
เชเชฌเซเชเซเชเซเช เชซเชพเชเชฒ เชฒเซเชก เชเชฐเซ เชเซ tracex4_kern.o
เชซเชเชเซเชถเชจเชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ load_bpf_file
.
int main(int ac, char **argv)
{
struct rlimit r = {RLIM_INFINITY, RLIM_INFINITY};
char filename[256];
int i;
snprintf(filename, sizeof(filename), "%s_kern.o", argv[0]);
if (setrlimit(RLIMIT_MEMLOCK, &r)) {
perror("setrlimit(RLIMIT_MEMLOCK, RLIM_INFINITY)");
return 1;
}
if (load_bpf_file(filename)) {
printf("%s", bpf_log_buf);
return 1;
}
for (i = 0; ; i++) {
print_old_objects(map_fd[1]);
sleep(1);
}
return 0;
}
เชเชฐเชคเซ เชตเชเชคเซ
eBPF เชซเชพเชเชฒเชฎเชพเช เชตเซเชฏเชพเชเซเชฏเชพเชฏเชฟเชค เชฅเชฏเซเชฒ เชเชเชพเชธเชฃเซเช เชเชฎเซเชฐเชตเชพเชฎเชพเช เชเชตเซ เชเซ /sys/kernel/debug/tracing/kprobe_events
. เชนเชตเซ เช
เชฎเซ เช เชเชเชจเชพเช เชธเชพเชเชญเชณเซเช เชเซเช เช
เชจเซ เชเซเชฏเชพเชฐเซ เชคเซ เชฅเชพเชฏ เชเซ เชคเซเชฏเชพเชฐเซ เช
เชฎเชพเชฐเซ เชชเซเชฐเซเชเซเชฐเชพเชฎ เชเชเชเช เชเชฐเซ เชถเชเซ เชเซ.
$ sudo cat /sys/kernel/debug/tracing/kprobe_events
p:kprobes/kmem_cache_free kmem_cache_free
r:kprobes/kmem_cache_alloc_node kmem_cache_alloc_node
เชจเชฎเซเชจเชพ/bpf/ เชฎเชพเช เช เชจเซเชฏ เชคเชฎเชพเชฎ เชเชพเชฐเซเชฏเชเซเชฐเชฎเซ เชธเชฎเชพเชจ เชฐเซเชคเซ เชฐเชเชพเชฏเซเชฒ เชเซ. เชคเซเช เชนเชเชฎเซเชถเชพ เชฌเซ เชซเชพเชเชฒเซ เชงเชฐเชพเชตเซ เชเซ:
XXX_kern.c
: eBPF เชเชพเชฐเซเชฏเชเซเชฐเชฎ.XXX_user.c
: เชฎเซเชเซเชฏ เชเชพเชฐเซเชฏเชเซเชฐเชฎ.
eBPF เชชเซเชฐเซเชเซเชฐเชพเชฎ เชตเชฟเชญเชพเช เชธเชพเชฅเซ เชธเชเชเชณเชพเชฏเซเชฒเชพ เชจเชเชถเชพ เช
เชจเซ เชเชพเชฐเซเชฏเซเชจเซ เชตเซเชฏเชพเชเซเชฏเชพเชฏเชฟเชค เชเชฐเซ เชเซ. เชเซเชฏเชพเชฐเซ เชเชฐเซเชจเชฒ เชเซเชเซเชเชธ เชชเซเชฐเชเชพเชฐเชจเซ เชเชเชจเชพ เชฌเชนเชพเชฐ เชเชพเชขเซ เชเซ (เชเชฆเชพเชนเชฐเชฃ เชคเชฐเซเชเซ, tracepoint
), เชฌเชเชงเชพเชฏเซเชฒ เชเชพเชฐเซเชฏเซ เชเชฒเชพเชตเชตเชพเชฎเชพเช เชเชตเซ เชเซ. เชจเชเชถเชพ เชเชฐเซเชจเชฒ เชชเซเชฐเซเชเซเชฐเชพเชฎ เช
เชจเซ เชฏเซเชเชฐ-เชธเซเชชเซเชธ เชชเซเชฐเซเชเซเชฐเชพเชฎ เชตเชเซเชเซ เชธเชเชเชพเชฐ เชชเซเชฐเซ เชชเชพเชกเซ เชเซ.
เชจเชฟเชทเซเชเชฐเซเชท
เช เชฒเซเชเชฎเชพเช, BPF เช เชจเซ eBPF เชธเชพเชฎเชพเชจเซเชฏ เชถเชฌเซเชฆเซเชฎเชพเช เชเชฐเซเชเชพ เชเชฐเชตเชพเชฎเชพเช เชเชตเซ เชนเชคเซ. เชนเซเช เชเชพเชฃเซเช เชเซเช เชเซ เชเชเซ eBPF เชตเชฟเชถเซ เชเชฃเซ เชฌเชงเซ เชฎเชพเชนเชฟเชคเซ เช เชจเซ เชธเชเชธเชพเชงเชจเซ เชเซ, เชคเซเชฅเซ เชนเซเช เชตเชงเซ เช เชญเซเชฏเชพเชธ เชฎเชพเชเซ เชฅเซเชกเซ เชตเชงเซ เชธเชพเชฎเชเซเชฐเซเชจเซ เชญเชฒเชพเชฎเชฃ เชเชฐเซเชถ.
เชนเซเช เชตเชพเชเชเชตเชพเชจเซ เชญเชฒเชพเชฎเชฃ เชเชฐเซเช เชเซเช:
BPF: เชธเชพเชฐเซเชตเชคเซเชฐเชฟเช เชเชจ-เชเชฐเซเชจเชฒ เชตเชฐเซเชเซเชฏเซเช เชฒ เชฎเชถเซเชจ เชเซเชจเชพเชฅเชจ เชเซเชฐเซเชฌเซเช. BPF เชจเซ เชชเชฐเชฟเชเชฏ เช เชจเซ เชคเซ eBPF เชฎเชพเช เชเซเชตเซ เชฐเซเชคเซ เชตเชฟเชเชธเชฟเชค เชฅเชฏเซเช เชเซ.eBPF เชจเซ เชธเชเชชเซเชฐเซเชฃ เชชเชฐเชฟเชเชฏ เชฌเซเชฐเซเชจเซเชกเชจ เชเซเชฐเซเช. LWN.net เชคเชฐเชซเชฅเซ เชฒเซเช. เชฌเซเชฐเซเชจเซเชกเชจ เชตเชพเชฐเชเชตเชพเชฐ eBPF เชตเชฟเชถเซ เชเซเชตเซเช เชเชฐเซ เชเซ เช เชจเซ เชคเซเชจเซ เชตเซเชฌเชธเชพเชเช เชชเชฐ เชตเชฟเชทเชฏ เชชเชฐเชจเชพ เชธเชเชธเชพเชงเชจเซเชจเซ เชธเซเชเชฟ เชเชพเชณเชตเซ เชฐเชพเชเซ เชเซ.เชฌเซเชฒเซเช เชชเซเชธเซเช .BPF เช เชจเซ eBPF เชชเชฐ เชจเซเชเชงเซ เชเซเชฒเชฟเชฏเชพ เชเชตเชพเชจเซเชธ. เชธเซเชเชเซเชฐ เชถเชฐเซเชฎเชพเชจเซ เชชเซเชฐเชธเซเชคเซเชคเชฟ โเชง BSD เชชเซเชเซเช เชซเชฟเชฒเซเชเชฐ: เช เชจเซเชฏเซ เชเชฐเซเชเชฟเชเซเชเซเชเชฐ เชซเซเชฐ เชฏเซเชเชฐ-เชฒเซเชตเชฒ เชชเซเชเซเช เชเซเชชเซเชเชฐโ เชชเชฐเชจเซ เชเชฟเชชเซเชชเชฃเซเช. เชเชฟเชชเซเชชเชฃเซเช เชธเชพเชฐเซ เชเซ เช เชจเซ เชเชฐเซเชเชฐ เชธเซเชฒเชพเชเชกเซเชธ เชธเชฎเชเชตเชพเชฎเชพเช เชฎเชฆเชฆ เชเชฐเซ เชเซ.eBPF, เชญเชพเช 1: เชญเซเชคเชเชพเชณ, เชตเชฐเซเชคเชฎเชพเชจ เช เชจเซ เชญเชตเชฟเชทเซเชฏ เชซเซเชฐเชฟเชธ เชเชฒเชฟเชธ. เชธเชพเชฅเซ เชฒเซเชจเซเชเชฐเซเชกเชเชพเชฒเซ เชชเชฐเชเชคเซ เชตเชพเชเชเชตเชพ เชฏเซเชเซเชฏ. เชถเซเชฐเซเชทเซเช eBPF เชฒเซเชเซเชฎเชพเชเชฅเซ เชเช เชเซ เชฎเซเช เชเชเซเชฏเซ เชเซ.
เชธเซเชฐเซเชธ: www.habr.com