เจนเฉเจฒเฉ, เจนเฉเจฌเจฐ! เจ
เจธเฉเจ เจคเฉเจนเจพเจจเฉเฉฐ เจฆเฉฑเจธเจฃเจพ เจเจพเจนเฉเฉฐเจฆเฉ เจนเจพเจ เจเจฟ เจ
เจธเฉเจ เจฐเจฟเจฒเฉเจเจผ เจฒเจ เจเฉฑเจ เจเจฟเจคเจพเจฌ เจคเจฟเจเจฐ เจเจฐ เจฐเจนเฉ เจนเจพเจเฅค"
เจเจฟเจเจเจเจฟ BPF เจตเจฐเจเฉเจ
เจฒ เจฎเจธเจผเฉเจจ เจฆเจพ เจตเจฟเจเจพเจธ เจเจฐเจจเจพ เจเจพเจฐเฉ เจนเฉ เจ
เจคเฉ เจ
เจญเจฟเจเจธ เจตเจฟเฉฑเจ เจธเจฐเจเจฐเจฎเฉ เจจเจพเจฒ เจตเจฐเจคเฉ เจเจพเจเจฆเฉ เจนเฉ, เจ
เจธเฉเจ เจคเฉเจนเจพเจกเฉ เจฒเจ เจเจธ เจฆเฉเจเจ เจฎเฉเฉฑเจ เจธเจฎเจฐเฉฑเจฅเจพเจตเจพเจ เจ
เจคเฉ เจฎเฉเจเฉเจฆเจพ เจธเจฅเจฟเจคเฉ เจฆเจพ เจตเจฐเจฃเจจ เจเจฐเจจ เจตเจพเจฒเฉ เจเฉฑเจ เจฒเฉเจ เจฆเจพ เจ
เจจเฉเจตเจพเจฆ เจเฉเจคเจพ เจนเฉเฅค
เจนเจพเจฒ เจนเฉ เจฆเฉ เจธเจพเจฒเจพเจ เจตเจฟเฉฑเจ, เจฒเฉเจจเจเจธ เจเจฐเจจเจฒ เจฆเฉเจเจ เจเจฎเฉเจเจ เจจเฉเฉฐ เจชเฉเจฐเจพ เจเจฐเจจ เจฒเจ เจชเฉเจฐเฉเจเจฐเจพเจฎเจฟเฉฐเจ เจเฉเจฒ เจ
เจคเฉ เจคเจเจจเฉเจเจพเจ เจฌเจนเฉเจค เจเจผเจฟเจเจฆเจพ เจชเฉเจฐเจธเจฟเฉฑเจง เจนเฉ เจเจเจเจ เจนเจจ เจเจฟเฉฑเจฅเฉ เจเฉฑเจ-เจเจพเจฐเจเฉเจเจผเจพเจฐเฉ เจตเจพเจฒเฉ เจชเฉเจเฉเจ เจชเฉเจฐเฉเจธเฉเจธเจฟเฉฐเจ เจฆเฉ เจฒเฉเฉ เจนเฉเฉฐเจฆเฉ เจนเฉเฅค เจเจธ เจเจฟเจธเจฎ เจฆเฉ เจธเจญ เจคเฉเจ เจชเฉเจฐเจธเจฟเฉฑเจง เจคเจเจจเฉเจเจพเจ เจตเจฟเฉฑเจเฉเจ เจเฉฑเจ เจจเฉเฉฐ เจเจฟเจนเจพ เจเจพเจเจฆเจพ เจนเฉ เจเจฐเจจเจฒ เจฌเจพเจเจชเจพเจธ (เจเจฐเจจเจฒ เจฌเจพเจเจชเจพเจธ) เจ
เจคเฉ เจเจฐเจจเจฒ เจจเฉเฉฑเจเจตเจฐเจ เจฒเฉเจ
เจฐ เจจเฉเฉฐ เจฌเจพเจเจชเจพเจธ เจเจฐเจเฉ, เจฏเฉเจเจผเจฐ เจธเจชเฉเจธ เจคเฉเจ เจธเจพเจฐเฉ เจชเฉเจเฉเจ เจชเฉเจฐเฉเจธเฉเจธเจฟเฉฐเจ เจเจฐเจจ เจฆเฉ เจเจเจพเจเจผเจค เจฆเจฟเฉฐเจฆเจพ เจนเฉเฅค เจเจฐเจจเจฒ เจจเฉเฉฐ เจฌเจพเจเจชเจพเจธ เจเจฐเจจ เจตเจฟเฉฑเจ เจจเฉเฉฑเจเจตเจฐเจ เจเจพเจฐเจก เจจเฉเฉฐ เจเฉฐเจเจฐเฉเจฒ เจเจฐเจจเจพ เจตเฉ เจธเจผเจพเจฎเจฒ เจนเฉ เจเจชเจญเฉเจเจคเจพ เจธเจชเฉเจธ. เจฆเฉเจเฉ เจธเจผเจฌเจฆเจพเจ เจตเจฟเจ, เจเจฆเฉเจ เจจเฉเจเจตเจฐเจ เจเจพเจฐเจก เจจเจพเจฒ เจเฉฐเจฎ เจเจฐเจฆเฉ เจนเจพเจ, เจ
เจธเฉเจ เจกเจฐเจพเจเจตเจฐ 'เจคเฉ เจญเจฐเฉเจธเจพ เจเจฐเจฆเฉ เจนเจพเจ เจเจชเจญเฉเจเจคเจพ เจธเจชเฉเจธ.
เจเฉฑเจ เจเจชเจญเฉเจเจคเจพ-เจธเจชเฉเจธ เจชเฉเจฐเฉเจเจฐเจพเจฎ เจตเจฟเฉฑเจ เจจเฉเจเจตเจฐเจ เจเจพเจฐเจก เจฆเฉ เจชเฉเจฐเฉ เจจเจฟเจฏเฉฐเจคเจฐเจฃ เจจเฉเฉฐ เจเฉเจฐเจพเจเจธเจซเจฐ เจเจฐเจเฉ, เจ
เจธเฉเจ เจเจฐเจจเจฒ เจเจตเจฐเจนเฉเฉฑเจก (เจธเฉฐเจฆเจฐเจญ เจธเจตเจฟเจเจฟเฉฐเจ, เจจเฉเจเจตเจฐเจ เจฒเฉเจ
เจฐ เจชเฉเจฐเฉเจธเฉเจธเจฟเฉฐเจ, เจเฉฐเจเจฐเฉฑเจชเจเจธ, เจเจฆเจฟ) เจจเฉเฉฐ เจเจเจพเจเจเจฆเฉ เจนเจพเจ, เจเฉ เจเจฟ 10Gb/s เจเจพเจ เจตเฉฑเจง เจฆเฉ เจธเจชเฉเจก 'เจคเฉ เจเฉฑเจฒเจฃ เจตเฉเจฒเฉ เจเจพเจซเจผเฉ เจฎเจนเฉฑเจคเจตเจชเฉเจฐเจจ เจนเฉเฉฐเจฆเจพ เจนเฉเฅค เจเจฐเจจเจฒ เจฌเจพเจเจชเจพเจธ เจ
เจคเฉ เจนเฉเจฐ เจตเจฟเจธเจผเฉเจธเจผเจคเจพเจตเจพเจ เจฆเจพ เจธเฉเจฎเฉเจฒ (เจฌเฉเจ เจชเฉเจฐเฉเจธเฉเจธเจฟเฉฐเจ) เจ
เจคเฉ เจงเจฟเจเจจ เจจเจพเจฒ เจชเฉเจฐเจฆเจฐเจธเจผเจจ เจเจฟเจเจจเจฟเฉฐเจ (NUMA เจฒเฉเจเจพเจเจพเจฐเฉ, CPU เจเจเจธเฉเจฒเฉเจธเจผเจจ, เจเจฆเจฟ) เจเจชเจญเฉเจเจคเจพ เจธเจชเฉเจธ เจตเจฟเฉฑเจ เจเฉฑเจ-เจชเฉเจฐเจฆเจฐเจธเจผเจจ เจตเจพเจฒเฉ เจจเฉเจเจตเจฐเจ เจชเฉเจฐเฉเจธเฉเจธเจฟเฉฐเจ เจฆเฉ เจฌเฉเจจเจฟเจเจฆเฉ เจธเจฟเจงเจพเจเจคเจพเจ เจจเจพเจฒ เจฎเฉเจฒ เจเจพเจเจฆเจพ เจนเฉเฅค เจธเจผเจพเจเจฆ เจชเฉเจเฉเจ เจชเฉเจฐเฉเจธเฉเจธเจฟเฉฐเจ เจฒเจ เจเจธ เจจเจตเฉเจ เจชเจนเฉเฉฐเจ เจฆเฉ เจเฉฑเจ เจฎเจฟเจธเจพเจฒเฉ เจเจฆเจพเจนเจฐเจฃ เจนเฉ
เจเจชเจญเฉเจเจคเจพ เจธเจชเฉเจธ เจตเจฟเฉฑเจ เจจเฉเจเจตเจฐเจ เจเฉฐเจเจฐเฉเจเจธเจผเจจเจพเจ เจจเฉเฉฐ เจธเฉฐเจเจ เจฟเจค เจเจฐเจจ เจฆเฉ เจเจ เจจเฉเจเจธเจพเจจ เจนเจจ:
- OS เจเจฐเจจเจฒ เจนเจพเจฐเจกเจตเฉเจ เจฐ เจธเจฐเฉเจคเจพเจ เจฒเจ เจเฉฑเจ เจเจฌเจธเจเจฐเฉเจเจธเจผเจจ เจฒเฉเจ เจฐ เจนเฉเฅค เจเจฟเจเจเจเจฟ เจเจชเจญเฉเจเจคเจพ เจธเจชเฉเจธ เจชเฉเจฐเฉเจเจฐเจพเจฎเจพเจ เจจเฉเฉฐ เจเจชเจฃเฉ เจธเจฐเฉเจคเจพเจ เจฆเจพ เจธเจฟเฉฑเจงเจพ เจชเฉเจฐเจฌเฉฐเจงเจจ เจเจฐเจจเจพ เจชเฉเจเจฆเจพ เจนเฉ, เจเจนเจจเจพเจ เจจเฉเฉฐ เจเจชเจฃเฉ เจนเจพเจฐเจกเจตเฉเจ เจฐ เจฆเจพ เจชเฉเจฐเจฌเฉฐเจงเจจ เจตเฉ เจเจฐเจจเจพ เจชเฉเจเจฆเจพ เจนเฉเฅค เจเจธเจฆเจพ เจ เจเจธเจฐ เจฎเจคเจฒเจฌ เจนเฉเฉฐเจฆเจพ เจนเฉ เจเจฟ เจคเฉเจนเจพเจกเฉ เจเจชเจฃเฉ เจกเจฐเจพเจเจตเจฐเจพเจ เจจเฉเฉฐ เจชเฉเจฐเฉเจเจฐเจพเจฎ เจเจฐเจจเจพ เจนเฉเฅค
- เจเจฟเจเจเจเจฟ เจ เจธเฉเจ เจเจฐเจจเจฒ เจธเจชเฉเจธ เจจเฉเฉฐ เจชเฉเจฐเฉ เจคเจฐเฉเจนเจพเจ เจเฉฑเจก เจฐเจนเฉ เจนเจพเจ, เจ เจธเฉเจ เจเจฐเจจเจฒ เจฆเฉเจเจฐเจพ เจชเฉเจฐเจฆเจพเจจ เจเฉเจคเฉ เจธเจพเจฐเฉ เจจเฉเฉฑเจเจตเจฐเจเจฟเฉฐเจ เจเจพเจฐเจเจธเจผเฉเจฒเจคเจพ เจจเฉเฉฐ เจตเฉ เจเฉฑเจก เจฐเจนเฉ เจนเจพเจเฅค เจฏเฉเจเจผเจฐ เจธเจชเฉเจธ เจชเฉเจฐเฉเจเจฐเจพเจฎเจพเจ เจจเฉเฉฐ เจเจน เจตเจฟเจธเจผเฉเจธเจผเจคเจพเจตเจพเจ เจฆเฉเจฌเจพเจฐเจพ เจฒเจพเจเฉ เจเจฐเจจเฉเจเจ เจเจพเจนเฉเจฆเฉเจเจ เจนเจจ เจเฉ เจชเจนเจฟเจฒเจพเจ เจนเฉ เจเจฐเจจเจฒ เจเจพเจ เจเจชเจฐเฉเจเจฟเฉฐเจ เจธเจฟเจธเจเจฎ เจฆเฉเจเจฐเจพ เจชเฉเจฐเจฆเจพเจจ เจเฉเจคเฉเจเจ เจเจพ เจธเจเจฆเฉเจเจ เจนเจจเฅค
- เจชเฉเจฐเฉเจเจฐเจพเจฎ เจธเฉเจเจกเจฌเฉเจเจธ เจฎเฉเจก เจตเจฟเฉฑเจ เจเฉฐเจฎ เจเจฐเจฆเฉ เจนเจจ, เจเฉ เจเจนเจจเจพเจ เจฆเฉ เจเจชเจธเฉ เจคเจพเจฒเจฎเฉเจฒ เจจเฉเฉฐ เจเฉฐเจญเฉเจฐเจคเจพ เจจเจพเจฒ เจธเฉเจฎเจค เจเจฐเจฆเจพ เจนเฉ เจ เจคเฉ เจเจนเจจเจพเจ เจจเฉเฉฐ เจเจชเจฐเฉเจเจฟเฉฐเจ เจธเจฟเจธเจเจฎ เจฆเฉ เจฆเฉเจเฉ เจนเจฟเฉฑเจธเจฟเจเจ เจจเจพเจฒ เจเจเฉเจเฉเจฐเจฟเจค เจเจฐเจจ เจคเฉเจ เจฐเฉเจเจฆเจพ เจนเฉเฅค
เจธเฉฐเจเฉเจช เจฐเฉเจช เจตเจฟเฉฑเจ, เจเจฆเฉเจ เจเจชเจญเฉเจเจคเจพ เจธเจชเฉเจธ เจตเจฟเฉฑเจ เจจเฉเฉฑเจเจตเจฐเจเจฟเฉฐเจ เจเฉเจคเฉ เจเจพเจเจฆเฉ เจนเฉ, เจคเจพเจ เจเจฐเจจเจฒ เจคเฉเจ เจเจชเจญเฉเจเจคเจพ เจธเจชเฉเจธ เจตเจฟเฉฑเจ เจชเฉเจเฉเจ เจชเฉเจฐเฉเจธเฉเจธเจฟเฉฐเจ เจจเฉเฉฐ เจฎเฉเจต เจเจฐเจเฉ เจเจพเจฐเจเฉเจเจผเจพเจฐเฉ เจฒเจพเจญ เจชเฉเจฐเจพเจชเจค เจเฉเจคเฉ เจเจพเจเจฆเฉ เจนเจจเฅค XDP เจฌเจฟเจฒเจเฉเจฒ เจเจฒเจ เจเจฐเจฆเจพ เจนเฉ: เจเจน เจจเฉเฉฑเจเจตเจฐเจเจฟเฉฐเจ เจชเฉเจฐเฉเจเจฐเจพเจฎเจพเจ เจจเฉเฉฐ เจเจชเจญเฉเจเจคเจพ เจธเจชเฉเจธ (เจซเจฟเจฒเจเจฐ, เจฐเฉเจเจผเฉเจฒเจตเจฐ, เจฐเฉเจเจฟเฉฐเจ, เจเจฆเจฟ) เจคเฉเจ เจเจฐเจจเจฒ เจธเจชเฉเจธ เจตเจฟเฉฑเจ เจญเฉเจเจฆเจพ เจนเฉเฅค XDP เจธเจพเจจเฉเฉฐ เจเฉฑเจ เจจเฉเฉฑเจเจตเจฐเจ เจซเฉฐเจเจธเจผเจจ เจเจฐเจจ เจฆเฉ เจเจเจพเจเจผเจค เจฆเจฟเฉฐเจฆเจพ เจนเฉ เจเจฟเจตเฉเจ เจนเฉ เจเฉฑเจ เจชเฉเจเฉเจ เจเฉฑเจ เจจเฉเฉฑเจเจตเจฐเจ เจเฉฐเจเจฐเจซเฉเจธ เจจเฉเฉฐ เจนเจฟเฉฑเจ เจเจฐเจฆเจพ เจนเฉ เจ เจคเฉ เจเจธ เจคเฉเจ เจชเจนเจฟเจฒเจพเจ เจเจฟ เจเจน เจเจฐเจจเจฒ เจจเฉเฉฑเจเจตเจฐเจ เจธเจฌ-เจธเจฟเจธเจเจฎ เจตเจฟเฉฑเจ เจเจพเจฃเจพ เจธเจผเฉเจฐเฉ เจเจฐเจฆเจพ เจนเฉเฅค เจจเจคเฉเจเฉ เจตเจเฉเจ, เจชเฉเจเฉเจ เจชเฉเจฐเฉเจธเฉเจธเจฟเฉฐเจ เจฆเฉ เจเจคเฉ เจเจพเจซเจผเฉ เจตเฉฑเจง เจเจพเจเจฆเฉ เจนเฉเฅค เจนเจพเจฒเจพเจเจเจฟ, เจเจฐเจจเจฒ เจเจชเจญเฉเจเจคเจพ เจจเฉเฉฐ เจเจฐเจจเจฒ เจธเจชเฉเจธ เจตเจฟเฉฑเจ เจเจชเจฃเฉ เจชเฉเจฐเฉเจเจฐเจพเจฎเจพเจ เจจเฉเฉฐ เจเจฒเจพเจเจฃ เจฆเฉ เจเจเจฟเจ เจเจฟเจตเฉเจ เจฆเจฟเฉฐเจฆเจพ เจนเฉ? เจเจธ เจธเจตเจพเจฒ เจฆเจพ เจเจตเจพเจฌ เจฆเฉเจฃ เจคเฉเจ เจชเจนเจฟเจฒเจพเจ, เจเจ เจฆเฉเจเฉเจ เจเจฟ เจฌเฉเจชเฉเจเจซ เจเฉ เจนเฉเฅค
BPF เจ เจคเฉ eBPF
เจญเฉฐเจฌเจฒเจญเฉเจธเฉ เจตเจพเจฒเฉ เจจเจพเจฎ เจฆเฉ เจฌเจพเจตเจเฉเจฆ, 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)) เจตเจพเจชเจธ เจเจฐเจจ เจฆเจพ เจฎเจคเจฒเจฌ เจนเฉ เจเจฟ เจชเฉเจเฉเจ เจจเฉเฉฐ เจธเจตเฉเจเจพเจฐ เจจเจนเฉเจ เจเฉเจคเจพ เจเจฟเจ เจธเฉเฅค
เจฌเฉเจชเฉเจเจซ เจตเจฐเจเฉเจ
เจฒ เจฎเจธเจผเฉเจจ เจ
เจคเฉ เจเจธเจฆเจพ เจฌเจพเจเจเจเฉเจก 1992 เจฆเฉ เจ
เจเฉเจฐ เจตเจฟเฉฑเจ เจธเจเฉเจต เจฎเฉเจเจเฉเจจ เจ
เจคเฉ เจตเฉเจจ เจเฉเจเจฌเจธเจจ เจฆเฉเจเจฐเจพ เจชเฉเจฐเจธเจคเจพเจตเจฟเจค เจเฉเจคเจพ เจเจฟเจ เจธเฉ เจเจฆเฉเจ เจเจนเจจเจพเจ เจฆเจพ เจชเฉเจชเจฐ เจชเฉเจฐเจเจพเจธเจผเจฟเจค เจเฉเจคเจพ เจเจฟเจ เจธเฉเฅค
เจเจฟเจเจเจเจฟ BPF เจเฉฑเจ เจตเจฐเจเฉเจ
เจฒ เจฎเจธเจผเฉเจจ เจนเฉ, เจเจน เจตเจพเจคเจพเจตเจฐเจฃ เจจเฉเฉฐ เจชเจฐเจฟเจญเจพเจธเจผเจฟเจค เจเจฐเจฆเฉ เจนเฉ เจเจฟเจธ เจตเจฟเฉฑเจ เจชเฉเจฐเฉเจเจฐเจพเจฎ เจเฉฑเจฒเจฆเฉ เจนเจจเฅค เจฌเจพเจเจเจเฉเจก เจคเฉเจ เจเจฒเจพเจตเจพ, เจเจน เจฌเฉเจ เจฎเฉเจฎเฉเจฐเฉ เจฎเจพเจกเจฒ เจจเฉเฉฐ เจตเฉ เจชเจฐเจฟเจญเจพเจธเจผเจฟเจค เจเจฐเจฆเจพ เจนเฉ (เจฒเฉเจก เจจเจฟเจฐเจฆเฉเจธเจผเจพเจ เจจเฉเฉฐ เจฌเฉเจ 'เจคเฉ เจธเจชเฉฑเจธเจผเจ เจคเฉเจฐ 'เจคเฉ เจฒเจพเจเฉ เจเฉเจคเจพ เจเจพเจเจฆเจพ เจนเฉ), เจฐเจเจฟเจธเจเจฐ (เจ เจ
เจคเฉ เจเจเจธ; เจเจเจฏเฉเจฎเฉเจฒเฉเจเจฐ เจ
เจคเฉ เจเฉฐเจกเฉเจเจธ เจฐเจเจฟเจธเจเจฐ), เจธเจเฉเจฐเฉเจ เจฎเฉเจฎเฉเจฐเฉ เจธเจเฉเจฐเฉเจ, เจ
เจคเฉ เจเฉฑเจ เจชเจฐเจฟเจญเจพเจธเจผเจฟเจค เจชเฉเจฐเฉเจเจฐเจพเจฎ เจเจพเจเจเจเจฐเฅค เจฆเจฟเจฒเจเจธเจช เจเฉฑเจฒ เจเจน เจนเฉ เจเจฟ, BPF เจฌเจพเจเจเจเฉเจก เจจเฉเฉฐ Motorola 6502 ISA เจคเฉเจ เจฌเจพเจ
เจฆ เจฎเจพเจกเจฒ เจฌเจฃเจพเจเจ เจเจฟเจ เจธเฉเฅค เจเจฟเจตเฉเจ เจเจฟ เจธเจเฉเจต เจฎเฉเจเจเฉเจจ เจจเฉ เจเจชเจฃเฉ เจตเจฟเฉฑเจ เจฏเจพเจฆ เจเฉเจคเจพ
BPF เจธเจนเจพเจเจคเจพ เจจเฉเฉฐ เจฒเฉเจจเจเจธ เจเจฐเจจเจฒ เจตเจฟเฉฑเจ v2.5 เจ
เจคเฉ เจเจธ เจคเฉเจ เจเฉฑเจเฉ เจธเฉฐเจธเจเจฐเจฃเจพเจ เจตเจฟเฉฑเจ เจฒเจพเจเฉ เจเฉเจคเจพ เจเจฟเจ เจนเฉ, เจฎเฉเฉฑเจ เจคเฉเจฐ 'เจคเฉ เจเฉ เจธเจผเฉเจฒเจฟเจธเจ เจฆเฉ เจฏเจคเจจเจพเจ เจฆเฉเจเจฐเจพ เจเฉเฉเจฟเจ เจเจฟเจ เจนเฉเฅค เจฌเฉเจชเฉเจเจซ เจเฉเจก 2011 เจคเฉฑเจ เจฌเจฆเจฒเจฟเจ เจจเจนเฉเจ เจฐเจฟเจนเจพ, เจเจฆเฉเจ เจเจฐเจฟเจ เจกเฉเจฎเจพเจธเฉเจ เจจเฉ เจเฉเจเจเจเฉ เจฎเฉเจก เจตเจฟเฉฑเจ เจเจฒเจพเจเจฃ เจฒเจ เจฌเฉเจชเฉเจเจซ เจฆเฉเจญเจพเจธเจผเฉเจ เจจเฉเฉฐ เจฎเฉเฉ เจกเจฟเจเจผเจพเจเจจ เจเฉเจคเจพ (เจธเจฐเฉเจค:
เจฌเจพเจ เจฆ เจตเจฟเฉฑเจ, 2014 เจตเจฟเฉฑเจ, เจ เจฒเฉเจเจธเฉ เจธเจเจพเจฐเฉเจตเฉเจเจเฉเจต เจจเฉ เจฌเฉเจชเฉเจเจซ เจฒเจ เจเฉฑเจ เจจเจตเฉเจ เจเฉเจเจเจเฉ เจตเจฟเจงเฉ เจฆเจพ เจชเฉเจฐเจธเจคเจพเจต เจเฉเจคเจพเฅค เจตเจพเจธเจคเจต เจตเจฟเฉฑเจ, เจเจน เจจเจตเฉเจ JIT เจเฉฑเจ เจจเจตเฉเจ BPF- เจ เจงเจพเจฐเจค เจเจฐเจเฉเจเฉเจเจเจฐ เจฌเจฃ เจเจ เจ เจคเฉ เจเจธเจจเฉเฉฐ eBPF เจเจฟเจนเจพ เจเจฟเจเฅค เจฎเฉเจจเฉเฉฐ เจฒเจเจฆเจพ เจนเฉ เจเจฟ เจฆเฉเจตเฉเจ VM เจเฉเจ เจธเจฎเฉเจ เจฒเจ เจเจเฉฑเจ เฉ เจธเจจ, เจชเจฐ เจตเจฐเจคเจฎเจพเจจ เจตเจฟเฉฑเจ เจชเฉเจเฉเจ เจซเจฟเจฒเจเจฐเจฟเฉฐเจ eBPF เจฆเฉ เจ เจงเจพเจฐ เจคเฉ เจฒเจพเจเฉ เจเฉเจคเฉ เจเจ เจนเฉเฅค เจ เจธเจฒ เจตเจฟเฉฑเจ, เจเจงเฉเจจเจฟเจ เจฆเจธเจคเจพเจตเฉเจเจผเจพเจ เจฆเฉเจเจ เจฌเจนเฉเจค เจธเจพเจฐเฉเจเจ เจเจฆเจพเจนเจฐเจฃเจพเจ เจตเจฟเฉฑเจ, เจฌเฉเจชเฉเจเจซ เจจเฉเฉฐ เจเจฌเฉเจชเฉเจเจซ เจธเจฎเจเจฟเจ เจเจพเจเจฆเจพ เจนเฉ, เจ เจคเฉ เจเจฒเจพเจธเฉเจเจฒ เจฌเฉเจชเฉเจเจซ เจจเฉเฉฐ เจ เฉฑเจ เจธเฉเจฌเฉเจชเฉเจเจซ เจตเจเฉเจ เจเจพเจฃเจฟเจ เจเจพเจเจฆเจพ เจนเฉเฅค
eBPF เจเจฒเจพเจธเจฟเจ BPF เจตเจฐเจเฉเจ เจฒ เจฎเจธเจผเฉเจจ เจจเฉเฉฐ เจเจ เจคเจฐเฉเจเจฟเจเจ เจจเจพเจฒ เจตเจงเจพเจเจเจฆเจพ เจนเฉ:
- เจเจงเฉเจจเจฟเจ 64-เจฌเจฟเฉฑเจ เจเจฐเจเฉเจเฉเจเจเจฐ 'เจคเฉ เจเจงเจพเจฐเจฟเจคเฅค eBPF 64-เจฌเจฟเฉฑเจ เจฐเจเจฟเจธเจเจฐเจพเจ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจฆเจพ เจนเฉ เจ เจคเฉ เจเจชเจฒเจฌเจง เจฐเจเจฟเจธเจเจฐเจพเจ เจฆเฉ เจเจฟเจฃเจคเฉ เจจเฉเฉฐ 2 (เจเจเจฏเฉเจฎเฉเจฒเฉเจเจฐ เจ เจคเฉ X) เจคเฉเจ เจตเจงเจพ เจเฉ 10 เจเจฐ เจฆเจฟเฉฐเจฆเจพ เจนเฉเฅค eBPF เจตเจพเจงเฉ เจเจชเจเฉเจก เจตเฉ เจชเฉเจฐเจฆเจพเจจ เจเจฐเจฆเจพ เจนเฉ (BPF_MOV, BPF_JNE, BPF_CALL...)เฅค
- เจจเฉเฉฑเจเจตเจฐเจ เจฒเฉเจ เจฐ เจธเจฌ-เจธเจฟเจธเจเจฎ เจคเฉเจ เจตเฉฑเจ เจเฉเจคเจพ เจเจฟเจเฅค BPF เจจเฉเฉฐ เจฌเฉเจ เจกเฉเจเจพ เจฎเจพเจกเจฒ เจจเจพเจฒ เจเฉเฉเจฟเจ เจเจฟเจ เจธเฉเฅค เจเจฟเจเจเจเจฟ เจเจธเจฆเฉ เจตเจฐเจคเฉเจ เจชเฉเจเฉเจ เจซเจฟเจฒเจเจฐเจฟเฉฐเจ เจฒเจ เจเฉเจคเฉ เจเจ เจธเฉ, เจเจธเจฆเจพ เจเฉเจก เจเจธ เจธเจฌเจธเจฟเจธเจเจฎ เจตเจฟเฉฑเจ เจธเจฅเจฟเจค เจธเฉ เจเฉ เจจเฉเฉฑเจเจตเจฐเจ เจธเฉฐเจเจพเจฐ เจชเฉเจฐเจฆเจพเจจ เจเจฐเจฆเจพ เจนเฉเฅค เจนเจพเจฒเจพเจเจเจฟ, eBPF เจตเจฐเจเฉเจ เจฒ เจฎเจธเจผเฉเจจ เจนเฉเจฃ เจกเฉเจเจพ เจฎเจพเจกเจฒ เจจเจพเจฒ เจเฉเฉเฉ เจจเจนเฉเจ เจนเฉ เจ เจคเฉ เจเจฟเจธเฉ เจตเฉ เจเจฆเฉเจธเจผ เจฒเจ เจตเจฐเจคเฉ เจเจพ เจธเจเจฆเฉ เจนเฉเฅค เจเจธ เจฒเจ, เจนเฉเจฃ eBPF เจชเฉเจฐเฉเจเจฐเจพเจฎ เจจเฉเฉฐ เจเจฐเฉเจธเจชเฉเจเจเฉฐเจ เจเจพเจ kprobe เจจเจพเจฒ เจเจจเฉเจเจ เจเฉเจคเจพ เจเจพ เจธเจเจฆเจพ เจนเฉเฅค เจเจน เจนเฉเจฐ เจเจฐเจจเจฒ เจธเจฌ-เจธเจฟเจธเจเจฎ เจฆเฉ เจธเฉฐเจฆเจฐเจญ เจตเจฟเฉฑเจ eBPF เจเฉฐเจธเจเจฐเฉเจฎเฉเจเจเฉเจธเจผเจจ, เจเจพเจฐเจเฉเจเจผเจพเจฐเฉ เจตเจฟเจธเจผเจฒเฉเจธเจผเจฃ, เจ เจคเฉ เจนเฉเจฐ เจฌเจนเฉเจค เจธเจพเจฐเฉ เจตเจฐเจคเฉเจ เจฆเฉ เจฎเจพเจฎเจฒเจฟเจเจ เจฒเจ เจฐเจพเจน เจเฉเจฒเฉเจนเจฆเจพ เจนเฉเฅค เจนเฉเจฃ eBPF เจเฉเจก เจเจธเจฆเฉ เจเจชเจฃเฉ เจฎเจพเจฐเจ เจตเจฟเฉฑเจ เจธเจฅเจฟเจค เจนเฉ: kernel/bpf.
- เจเจฒเฉเจฌเจฒ เจกเจพเจเจพ เจธเจเฉเจฐเจพเจ เจจเฉเฉฐ เจจเจเจธเจผเฉ เจเจนเจฟเฉฐเจฆเฉ เจนเจจเฅค เจจเจเจธเจผเฉ เจฎเฉเฉฑเจ-เจฎเฉเฉฑเจฒ เจตเจพเจฒเฉ เจธเจเฉเจฐ เจนเจจ เจเฉ เจเจชเจญเฉเจเจคเจพ เจธเจชเฉเจธ เจ เจคเฉ เจเจฐเจจเจฒ เจธเจชเฉเจธ เจตเจฟเจเจเจพเจฐ เจกเฉเจเจพ เจเจเจธเจเฉเจเจ เจจเฉเฉฐ เจธเจฎเจฐเฉฑเจฅ เจเจฐเจฆเฉ เจนเจจเฅค eBPF เจเจ เจเจฟเจธเจฎ เจฆเฉ เจจเจเจธเจผเฉ เจชเฉเจฐเจฆเจพเจจ เจเจฐเจฆเจพ เจนเฉเฅค
- เจธเฉเจเฉฐเจกเจฐเฉ เจซเฉฐเจเจธเจผเจจ. เจเจพเจธ เจคเฉเจฐ 'เจคเฉ, เจเฉฑเจ เจชเฉเจเฉเจ เจจเฉเฉฐ เจฎเฉเฉ เจฒเจฟเจเจฃ เจฒเจ, เจเฉฑเจ เจเฉเฉฑเจเจธเจฎ เจฆเฉ เจเจฃเจจเจพ เจเจฐเฉ, เจเจพเจ เจเฉฑเจ เจชเฉเจเฉเจ เจจเฉเฉฐ เจเจฒเฉเจจ เจเจฐเฉเฅค เจเจน เจซเฉฐเจเจธเจผเจจ เจเจฐเจจเจฒ เจฆเฉ เจ เฉฐเจฆเจฐ เจเฉฑเจฒเจฆเฉ เจนเจจ เจ เจคเฉ เจเจชเจญเฉเจเจคเจพ-เจธเจชเฉเจธ เจชเฉเจฐเฉเจเจฐเจพเจฎ เจจเจนเฉเจ เจนเจจเฅค เจคเฉเจธเฉเจ eBPF เจชเฉเจฐเฉเจเจฐเจพเจฎเจพเจ เจคเฉเจ เจธเจฟเจธเจเจฎ เจเจพเจฒเจพเจ เจตเฉ เจเจฐ เจธเจเจฆเฉ เจนเฉเฅค
- เจเจพเจฒเจพเจ เจธเจฎเจพเจชเจค เจเจฐเฉเฅค eBPF เจตเจฟเฉฑเจ เจชเฉเจฐเฉเจเจฐเจพเจฎ เจฆเจพ เจเจเจพเจฐ 4096 เจฌเจพเจเจเจธ เจคเฉฑเจ เจธเฉเจฎเจฟเจค เจนเฉเฅค เจเฉเจฒ เจเจพเจฒ เจตเจฟเจธเจผเฉเจธเจผเจคเจพ เจเฉฑเจ eBPF เจชเฉเจฐเฉเจเจฐเจพเจฎ เจจเฉเฉฐ เจเฉฑเจ เจจเจตเฉเจ eBPF เจชเฉเจฐเฉเจเจฐเจพเจฎ เจตเจฟเฉฑเจ เจจเจฟเจฏเฉฐเจคเจฐเจฃ เจเฉเจฐเจพเจเจธเจซเจฐ เจเจฐเจจ เจฆเฉ เจเจเจฟเจ เจฆเจฟเฉฐเจฆเฉ เจนเฉ เจ เจคเฉ เจเจธ เจคเจฐเฉเจนเจพเจ เจเจธ เจธเฉเจฎเจพ เจจเฉเฉฐ เจฌเจพเจเจชเจพเจธ เจเจฐเจฆเฉ เจนเฉ (32 เจชเฉเจฐเฉเจเจฐเจพเจฎเจพเจ เจจเฉเฉฐ เจเจธ เจคเจฐเฉเจเฉ เจจเจพเจฒ เจฒเจฟเฉฐเจ เจเฉเจคเจพ เจเจพ เจธเจเจฆเจพ เจนเฉ)เฅค
eBPF: เจเจฆเจพเจนเจฐเจจ
เจฒเฉเจจเจเจธ เจเจฐเจจเจฒ เจธเจฐเฉเจคเจพเจ เจตเจฟเฉฑเจ 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