BPF, eBPF เดŽเดจเตเดจเดฟเดตเดฏเดฟเดฒเต‡เด•เตเด•เตเดณเตเดณ เด’เดฐเต เดนเตเดฐเดธเตเดต เด†เดฎเตเด–เด‚

เดนเดฒเต‹, เดนเดฌเตเตผ! เดžเด™เตเด™เตพ เด’เดฐเต เดชเตเดธเตเดคเด•เด‚ เดชเตเดฐเด•เดพเดถเดจเดคเตเดคเดฟเดจเดพเดฏเดฟ เดคเดฏเตเดฏเดพเดฑเดพเด•เตเด•เดฟเด•เตเด•เตŠเดฃเตเดŸเดฟเดฐเดฟเด•เตเด•เตเด•เดฏเดพเดฃเต†เดจเตเดจเต เดจเดฟเด™เตเด™เดณเต† เด…เดฑเดฟเดฏเดฟเด•เตเด•เดพเตป เดžเด™เตเด™เตพ เด†เด—เตเดฐเดนเดฟเด•เตเด•เตเดจเตเดจเต."BPF เด‰เดณเตเดณ Linux เดจเดฟเดฐเต€เด•เตเดทเดฃเด•เตเดทเดฎเดค".

BPF, eBPF เดŽเดจเตเดจเดฟเดตเดฏเดฟเดฒเต‡เด•เตเด•เตเดณเตเดณ เด’เดฐเต เดนเตเดฐเดธเตเดต เด†เดฎเตเด–เด‚
เดฌเดฟเดชเดฟเดŽเดซเต เดตเต†เตผเดšเตเดตเตฝ เดฎเต†เดทเต€เตป เดตเดฟเด•เดธเดฟเด•เตเด•เตเดจเตเดจเดคเต เดคเตเดŸเดฐเตเด•เดฏเตเด‚ เดชเตเดฐเดพเดฏเต‹เด—เดฟเด•เดฎเดพเดฏเดฟ เดธเดœเต€เดตเดฎเดพเดฏเดฟ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเดพเตฝ, เด…เดคเดฟเดจเตเดฑเต† เดชเตเดฐเดงเดพเดจ เด•เดดเดฟเดตเตเด•เดณเตเด‚ เดจเดฟเดฒเดตเดฟเดฒเต† เด…เดตเดธเตเดฅเดฏเตเด‚ เดตเดฟเดตเดฐเดฟเด•เตเด•เตเดจเตเดจ เด’เดฐเต เดฒเต‡เด–เดจเด‚ เดžเด™เตเด™เตพ เดจเดฟเด™เตเด™เตพเด•เตเด•เดพเดฏเดฟ เดตเดฟเดตเตผเดคเตเดคเดจเด‚ เดšเต†เดฏเตเดคเดฟเดŸเตเดŸเตเดฃเตเดŸเต.

เดธเดฎเต€เดช เดตเตผเดทเด™เตเด™เดณเดฟเตฝ, เด‰เดฏเตผเดจเตเดจ เดชเต†เตผเดซเต‹เดฎเตปเดธเต เดชเดพเด•เตเด•เดฑเตเดฑเต เดชเตเดฐเต‹เดธเดธเตเดธเดฟเด‚เด—เต เด†เดตเดถเตเดฏเดฎเตเดณเตเดณ เดธเดจเตเดฆเตผเดญเด™เตเด™เดณเดฟเตฝ เดฒเดฟเดจเด•เตเดธเต เด•เต‡เตผเดฃเดฒเดฟเดจเตเดฑเต† เดชเดฐเดฟเดฎเดฟเดคเดฟเด•เตพ เดจเดฟเด•เดคเตเดคเดพเตป เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเดฟเด‚เด—เต เดŸเต‚เดณเตเด•เดณเตเด‚ เดŸเต†เด•เตเดจเดฟเด•เตเด•เตเด•เดณเตเด‚ เด•เต‚เดŸเตเดคเตฝ เดชเตเดฐเดšเดพเดฐเดคเตเดคเดฟเดฒเตเดฃเตเดŸเต. เด‡เดคเตเดคเดฐเดคเตเดคเดฟเดฒเตเดณเตเดณ เดเดฑเตเดฑเดตเตเด‚ เดœเดจเดชเตเดฐเดฟเดฏเดฎเดพเดฏ เดธเดพเด™เตเด•เต‡เดคเดฟเด•เดคเด•เดณเดฟเดฒเตŠเดจเตเดจเต เดตเดฟเดณเดฟเด•เตเด•เดชเตเดชเต†เดŸเตเดจเตเดจเต เด•เต‡เตผเดฃเตฝ เดฌเตˆเดชเดพเดธเต (เด•เต‡เตผเดฃเตฝ เดฌเตˆเดชเดพเดธเต) เด•เต‚เดŸเดพเดคเต†, เด•เต‡เตผเดฃเตฝ เดจเต†เดฑเตเดฑเตโ€Œเดตเตผเด•เตเด•เต เดฒเต†เดฏเดฑเดฟเดจเต† เดฎเดฑเดฟเด•เดŸเดจเตเดจเต, เดฏเต‚เดธเตผ เดธเตโ€Œเดชเต†เดฏเตโ€Œเดธเดฟเตฝ เดจเดฟเดจเตเดจเต เดŽเดฒเตเดฒเดพ เดชเดพเด•เตเด•เดฑเตเดฑเต เดชเตเดฐเต‹เดธเดธเตเดธเดฟเด‚เด—เตเด‚ เดจเดŸเดคเตเดคเดพเตป เด…เดจเตเดตเดฆเดฟเด•เตเด•เตเดจเตเดจเต. เด•เต†เตผเดฃเตฝ เดฌเตˆเดชเดพเดธเต เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเตฝ เดจเต†เดฑเตเดฑเตโ€Œเดตเตผเด•เตเด•เต เด•เดพเตผเดกเต เดจเดฟเดฏเดจเตเดคเตเดฐเดฟเด•เตเด•เตเดจเตเดจเดคเตเด‚ เด‰เตพเดชเตเดชเต†เดŸเตเดจเตเดจเต เด‰เดชเดฏเต‹เด•เตเดคเตƒ เด‡เดŸเด‚. เดฎเดฑเตเดฑเตŠเดฐเต เดตเดฟเดงเดคเตเดคเดฟเตฝ เดชเดฑเดžเตเดžเดพเตฝ, เด’เดฐเต เดจเต†เดฑเตเดฑเตโ€Œเดตเตผเด•เตเด•เต เด•เดพเตผเดกเตเดฎเดพเดฏเดฟ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดฎเตเดชเต‹เตพ, เดžเด™เตเด™เตพ เดกเตเดฐเตˆเดตเดฑเต† เด†เดถเตเดฐเดฏเดฟเด•เตเด•เตเดจเตเดจเต เด‰เดชเดฏเต‹เด•เตเดคเตƒ เด‡เดŸเด‚.

เด’เดฐเต เดฏเต‚เดธเตผ-เดธเตเดชเต‡เดธเต เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเดฟเดฒเต‡เด•เตเด•เต เดจเต†เดฑเตเดฑเตโ€Œเดตเตผเด•เตเด•เต เด•เดพเตผเดกเดฟเดจเตเดฑเต† เดชเต‚เตผเดฃเตเดฃ เดจเดฟเดฏเดจเตเดคเตเดฐเดฃเด‚ เด•เตˆเดฎเดพเดฑเตเดจเตเดจเดคเดฟเดฒเต‚เดŸเต†, เดžเด™เตเด™เตพ เด•เต‡เตผเดฃเตฝ เด“เดตเตผเดนเต†เดกเต (เดธเดจเตเดฆเตผเดญ เดธเตเดตเดฟเดšเตเดšเดฟเด‚เด—เต, เดจเต†เดฑเตเดฑเตโ€Œเดตเตผเด•เตเด•เต เดฒเต†เดฏเตผ เดชเตเดฐเต‹เดธเดธเตเดธเดฟเด‚เด—เต, เดคเดŸเดธเตเดธเด™เตเด™เตพ เดฎเตเดคเดฒเดพเดฏเดต) เด•เตเดฑเดฏเตเด•เตเด•เตเดจเตเดจเต, เด‡เดคเต 10Gb/s เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เด‰เดฏเตผเดจเตเดจ เดตเต‡เด—เดคเดฏเดฟเตฝ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดฎเตเดชเต‹เตพ เดตเดณเดฐเต† เดชเตเดฐเดงเดพเดจเดฎเดพเดฃเต. เด•เต‡เตผเดฃเตฝ เดฌเตˆเดชเดพเดธเตเด‚ เดฎเดฑเตเดฑเต เดซเต€เดšเตเดšเดฑเตเด•เดณเตเดŸเต† เดธเด‚เดฏเต‹เดœเดจเดตเตเด‚ (เดฌเดพเดšเตเดšเต เดชเตเดฐเต‹เดธเดธเตเดธเดฟเด‚เด—เต) เด•เต‚เดŸเดพเดคเต† เดถเตเดฐเดฆเตเดงเดพเดชเต‚เตผเดตเตเดตเดฎเดพเดฏ เดชเตเดฐเด•เดŸเดจ เดŸเตเดฏเต‚เดฃเดฟเด‚เด—เต (NUMA เด…เด•เตเด•เต—เดฃเตเดŸเดฟเด‚เด—เต, เดธเดฟเดชเดฟเดฏเต เด’เดฑเตเดฑเดชเตเดชเต†เดŸเตฝ, เดฎเตเดคเดฒเดพเดฏเดต) เด‰เดชเดฏเต‹เด•เตเดคเตƒ เดธเตเดฅเดฒเดคเตเดคเต เด‰เดฏเตผเดจเตเดจ เดชเตเดฐเดตเตผเดคเตเดคเดจเด•เตเดทเดฎเดคเดฏเตเดณเตเดณ เดจเต†เดฑเตเดฑเตโ€Œเดตเตผเด•เตเด•เต เดชเตเดฐเต‹เดธเดธเตเดธเดฟเด‚เด—เดฟเดจเตเดฑเต† เด…เดŸเดฟเดธเตเดฅเดพเดจเด•เดพเดฐเตเดฏเด™เตเด™เดณเตเดฎเดพเดฏเดฟ เดชเตŠเดฐเตเดคเตเดคเดชเตเดชเต†เดŸเตเดจเตเดจเต. เดชเดพเด•เตเด•เดฑเตเดฑเต เดชเตเดฐเต‹เดธเดธเตเดธเดฟเด‚เด—เดฟเดฒเต† เดˆ เดชเตเดคเดฟเดฏ เดธเดฎเต€เดชเดจเดคเตเดคเดฟเดจเตเดฑเต† เดฎเดพเดคเตƒเด•เดพเดชเดฐเดฎเดพเดฏ เด‰เดฆเดพเดนเดฐเดฃเด‚ เดกเดฟเดชเดฟเดกเดฟเด•เต† เด‡เดจเตเดฑเดฒเดฟเตฝ เดจเดฟเดจเตเดจเต (เดกเดพเดฑเตเดฑเดพ เดชเตเดฒเต†เดฏเดฟเตป เดตเดฟเด•เดธเดจ เด•เดฟเดฑเตเดฑเต), เดธเดฟเดธเตโ€Œเด•เต‹เดฏเตเดŸเต† VPP (เดตเต†เด•เตโ€Œเดฑเตเดฑเตผ เดชเดพเด•เตเด•เดฑเตเดฑเต เดชเตเดฐเต‹เดธเดธเตเดธเดฟเด‚เด—เต), เดจเต†เดฑเตเดฑเตโ€Œเดฎเดพเดชเตเดชเต เดŽเดจเตเดจเดฟเดตเดฏเตเตพเดชเตเดชเต†เดŸเต† เดฎเดฑเตเดฑเต เด…เดฑเดฟเดฏเดชเตเดชเต†เดŸเตเดจเตเดจ เด‰เดชเด•เดฐเดฃเด™เตเด™เดณเตเด‚ เดธเดพเด™เตเด•เต‡เดคเดฟเด• เดตเดฟเดฆเตเดฏเด•เดณเตเด‚ เด‰เดฃเตเดŸเต†เด™เตเด•เดฟเดฒเตเด‚, เดคเต€เตผเดšเตเดšเดฏเดพเดฏเตเด‚, เดธเตเดจเดพเดฌเต.

เด‰เดชเดฏเต‹เด•เตเดคเตƒ เดธเตเดฅเดฒเดคเตเดคเต เดจเต†เดฑเตเดฑเตโ€Œเดตเตผเด•เตเด•เต เด‡เดŸเดชเต†เดŸเดฒเตเด•เตพ เดธเด‚เด˜เดŸเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เดจเดฟเดฐเดตเดงเดฟ เดฆเต‹เดทเด™เตเด™เดณเตเดฃเตเดŸเต:

  • เดนเดพเตผเดกเตโ€Œเดตเต†เดฏเตผ เด‰เดฑเดตเดฟเดŸเด™เตเด™เตพเด•เตเด•เดพเดฏเตเดณเตเดณ เด’เดฐเต เด…เดฎเต‚เตผเดคเตเดค เดชเดพเดณเดฟเดฏเดพเดฃเต OS เด•เต‡เตผเดฃเตฝ. เด‰เดชเดฏเต‹เด•เตเดคเตƒ เดฌเดนเดฟเดฐเดพเด•เดพเดถ เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเตเด•เตพเด•เตเด•เต เด…เดตเดฐเตเดŸเต† เด‰เดฑเดตเดฟเดŸเด™เตเด™เตพ เดจเต‡เดฐเดฟเดŸเตเดŸเต เด•เตˆเด•เดพเดฐเตเดฏเด‚ เดšเต†เดฏเตเดฏเต‡เดฃเตเดŸเดคเดฟเดจเดพเตฝ, เด…เดตเตผเด•เตเด•เต เด…เดตเดฐเตเดŸเต† เดธเตเดตเดจเตเดคเด‚ เดนเดพเตผเดกเตโ€Œเดตเต†เดฏเดฑเตเด‚ เด•เตˆเด•เดพเดฐเตเดฏเด‚ เดšเต†เดฏเตเดฏเต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต. เด‡เดคเต เดชเดฒเดชเตเดชเต‹เดดเตเด‚ เดจเดฟเด™เตเด™เดณเตเดŸเต† เดธเตเดตเดจเตเดคเด‚ เดกเตเดฐเตˆเดตเดฑเตเด•เตพ เดชเตเดฐเต‹เด—เตเดฐเดพเด‚ เดšเต†เดฏเตเดฏเดฃเด‚ เดŽเดจเตเดจเดพเดฃเต.
  • เดžเด™เตเด™เตพ เด•เต‡เตผเดฃเตฝ เดธเตเดชเต‡เดธเต เดชเต‚เตผเดฃเตเดฃเดฎเดพเดฏเตเด‚ เด‰เดชเต‡เด•เตเดทเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเดพเตฝ, เด•เต‡เตผเดฃเตฝ เดจเตฝเด•เตเดจเตเดจ เดŽเดฒเตเดฒเดพ เดจเต†เดฑเตเดฑเตโ€Œเดตเตผเด•เตเด•เดฟเด‚เด—เต เดชเตเดฐเดตเตผเดคเตเดคเดจเด™เตเด™เดณเตเด‚ เดžเด™เตเด™เตพ เด‰เดชเต‡เด•เตเดทเดฟเด•เตเด•เตเด•เดฏเดพเดฃเต. เด•เต‡เตผเดฃเดฒเต‹ เด“เดชเตเดชเดฑเต‡เดฑเตเดฑเดฟเด‚เด—เต เดธเดฟเดธเตเดฑเตเดฑเดฎเต‹ เด‡เดคเดฟเดจเด•เด‚ เดจเตฝเด•เดฟเดฏเต‡เด•เตเด•เดพเดตเตเดจเตเดจ เดธเดตเดฟเดถเต‡เดทเดคเด•เตพ เดฏเต‚เดธเตผ เดธเตเดชเต‡เดธเต เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเตเด•เตพ เดชเตเดจเดƒเดธเตเดฅเดพเดชเดฟเด•เตเด•เต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต.
  • เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเตเด•เตพ เดธเดพเตปเดกเตโ€Œเดฌเต‹เด•เตโ€Œเดธเต เดฎเต‹เดกเดฟเตฝ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเต, เด‡เดคเต เด…เดตเดฏเตเดŸเต† เด‡เดŸเดชเต†เดŸเตฝ เด—เต—เดฐเดตเดฎเดพเดฏเดฟ เดชเดฐเดฟเดฎเดฟเดคเดชเตเดชเต†เดŸเตเดคเตเดคเตเด•เดฏเตเด‚ เด“เดชเตเดชเดฑเต‡เดฑเตเดฑเดฟเด‚เด—เต เดธเดฟเดธเตเดฑเตเดฑเดคเตเดคเดฟเดจเตเดฑเต† เดฎเดฑเตเดฑเต เดญเดพเด—เด™เตเด™เดณเตเดฎเดพเดฏเดฟ เดธเด‚เดฏเต‹เดœเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเตฝ เดจเดฟเดจเตเดจเต เด…เดตเดฐเต† เดคเดŸเดฏเตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต.

เดธเดพเดฐเดพเด‚เดถเดคเตเดคเดฟเตฝ, เด‰เดชเดฏเต‹เด•เตเดคเตƒ เดธเตเดฅเดฒเดคเตเดคเต เดจเต†เดฑเตเดฑเตโ€Œเดตเตผเด•เตเด•เดฟเด‚เด—เต เดธเด‚เดญเดตเดฟเด•เตเด•เตเดฎเตเดชเต‹เตพ, เด•เต‡เตผเดฃเดฒเดฟเตฝ เดจเดฟเดจเตเดจเต เด‰เดชเดฏเต‹เด•เตเดคเตƒ เดธเตเดฅเดฒเดคเตเดคเต‡เด•เตเด•เต เดชเดพเด•เตเด•เดฑเตเดฑเต เดชเตเดฐเต‹เดธเดธเตเดธเดฟเด‚เด—เต เดจเต€เด•เตเด•เตเดจเตเดจเดคเดฟเดฒเต‚เดŸเต† เดชเตเดฐเด•เดŸเดจ เดจเต‡เดŸเตเดŸเด™เตเด™เตพ เด•เตˆเดตเดฐเดฟเด•เตเด•เดพเดจเดพเด•เตเด‚. XDP เดคเดฟเด•เดšเตเดšเตเด‚ เดตเดฟเดชเดฐเต€เดคเดฎเดพเดฃเต เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเต: เด‡เดคเต เดจเต†เดฑเตเดฑเตโ€Œเดตเตผเด•เตเด•เดฟเด‚เด—เต เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเตเด•เดณเต† เดฏเต‚เดธเตผ เดธเตโ€Œเดชเต†เดฏเตโ€Œเดธเดฟเตฝ เดจเดฟเดจเตเดจเต (เดซเดฟเตฝเดŸเตเดŸเดฑเตเด•เตพ, เดฑเดฟเดธเต‹เตพเดตเดฑเตเด•เตพ, เดฑเต‚เดŸเตเดŸเดฟเด‚เด—เต เดฎเตเดคเดฒเดพเดฏเดต) เด•เต‡เตผเดฃเตฝ เดธเตโ€Œเดชเต†เดฏเตโ€Œเดธเดฟเดฒเต‡เด•เตเด•เต เดจเต€เด•เตเด•เตเดจเตเดจเต. เด’เดฐเต เดชเดพเด•เตเด•เดฑเตเดฑเต เด’เดฐเต เดจเต†เดฑเตเดฑเตโ€Œเดตเตผเด•เตเด•เต เด‡เดจเตเดฑเตผเดซเต‡เดธเดฟเตฝ เดŽเดคเตเดคเดฟเดฏเดพเดฒเตเดŸเตป เด…เดคเต เด•เต‡เตผเดฃเตฝ เดจเต†เดฑเตเดฑเตโ€Œเดตเตผเด•เตเด•เต เดธเดฌเตเดธเดฟเดธเตเดฑเตเดฑเดคเตเดคเดฟเดฒเต‡เด•เตเด•เต เดจเต€เด™เตเด™เดพเตป เดคเตเดŸเด™เตเด™เตเดจเตเดจเดคเดฟเดจเตเดฎเตเดฎเตเดชเต เด’เดฐเต เดจเต†เดฑเตเดฑเตโ€Œเดตเตผเด•เตเด•เต เดซเด‚เด—เตโ€Œเดทเตป เดจเดŸเดคเตเดคเดพเตป XDP เดžเด™เตเด™เดณเต† เด…เดจเตเดตเดฆเดฟเด•เตเด•เตเดจเตเดจเต. เดคเตฝเดซเดฒเดฎเดพเดฏเดฟ, เดชเดพเด•เตเด•เดฑเตเดฑเต เดชเตเดฐเต‹เดธเดธเตเดธเดฟเด‚เด—เต เดตเต‡เด—เดค เด—เดฃเตเดฏเดฎเดพเดฏเดฟ เดตเตผเดฆเตเดงเดฟเด•เตเด•เตเดจเตเดจเต. เดŽเดจเตเดจเดฟเดฐเตเดจเตเดจเดพเดฒเตเด‚, เด•เต‡เตผเดฃเตฝ เดธเตเดชเต‡เดธเดฟเตฝ เด…เดตเดฐเตเดŸเต† เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเตเด•เตพ เดŽเด•เตเดธเดฟเด•เตเดฏเต‚เดŸเตเดŸเต เดšเต†เดฏเตเดฏเดพเตป เด•เต‡เตผเดฃเตฝ เดŽเด™เตเด™เดจเต†เดฏเดพเดฃเต เด‰เดชเดฏเต‹เด•เตเดคเดพเดตเดฟเดจเต† เด…เดจเตเดตเดฆเดฟเด•เตเด•เตเดจเตเดจเดคเต? เดˆ เดšเต‹เดฆเตเดฏเดคเตเดคเดฟเดจเต เด‰เดคเตเดคเดฐเด‚ เดจเตฝเด•เตเดจเตเดจเดคเดฟเดจเต เดฎเตเดฎเตเดชเต, BPF เดŽเดจเตเดคเดพเดฃเต†เดจเตเดจเต เดจเต‹เด•เตเด•เดพเด‚.

เดฌเดฟเดชเดฟเดŽเดซเต, เด‡เดฌเดฟเดชเดฟเดŽเดซเต

เด†เดถเดฏเด•เตเด•เตเดดเดชเตเดชเดฎเตเดฃเตเดŸเดพเด•เตเด•เตเดจเตเดจ เดชเต‡เดฐเต เด‰เดฃเตเดŸเดพเดฏเดฟเดฐเตเดจเตเดจเดฟเดŸเตเดŸเตเด‚, BPF (Berkeley Packet Filtering) เดตเดพเดธเตเดคเดตเดคเตเดคเดฟเตฝ เด’เดฐเต เดตเต†เตผเดšเตเดตเตฝ เดฎเต†เดทเต€เตป เดฎเต‹เดกเดฒเดพเดฃเต. เดชเดพเด•เตเด•เดฑเตเดฑเต เดซเดฟเตฝเดŸเตเดŸเดฑเดฟเด‚เด—เต เด•เตˆเด•เดพเดฐเตเดฏเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเดพเดฃเต เดˆ เดตเต†เตผเดšเตเดตเตฝ เดฎเต†เดทเต€เตป เด†เดฆเตเดฏเด‚ เดฐเต‚เดชเด•เตฝเดชเตเดชเดจ เดšเต†เดฏเตเดคเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเดคเต, เด…เดคเดฟเดจเดพเตฝ เดˆ เดชเต‡เดฐเต.

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 เด…เดตเดธเดพเดจเด‚ เด…เดตเดฐเตเดŸเต† เดชเต‡เดชเตเดชเตผ เดชเตเดฐเดธเดฟเดฆเตเดงเต€เด•เดฐเดฟเดšเตเดšเดชเตเดชเต‹เตพ เดจเดฟเตผเดฆเตเดฆเต‡เดถเดฟเดšเตเดšเต. BSD เดชเดพเด•เตเด•เดฑเตเดฑเต เดซเดฟเตฝเดŸเตเดŸเตผ: เด‰เดชเดฏเต‹เด•เตเดคเตƒ-เดคเดฒ เดชเดพเด•เตเด•เดฑเตเดฑเต เด•เตเดฏเดพเดชเตเดšเดฑเดฟเดจเตเดณเตเดณ เดชเตเดคเดฟเดฏ เด†เตผเด•เตเด•เดฟเดŸเต†เด•เตเดšเตผ, เดˆ เดธเดพเด™เตเด•เต‡เดคเดฟเด•เดตเดฟเดฆเตเดฏ เด†เดฆเตเดฏเดฎเดพเดฏเดฟ เด…เดตเดคเดฐเดฟเดชเตเดชเดฟเดšเตเดšเดคเต 1993 เดฒเต† เดถเตˆเดคเตเดฏเด•เดพเดฒเดคเตเดคเต เดฏเต‚เดธเต†เดจเดฟเด•เตเดธเต เด•เต‹เตบเดซเดฑเตปเดธเดฟเดฒเดพเดฃเต.

BPF เด’เดฐเต เดตเต†เตผเดšเตเดตเตฝ เดฎเต†เดทเต€เดจเดพเดฏเดคเดฟเดจเดพเตฝ, เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเตเด•เตพ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจ เดชเดฐเดฟเดธเตเดฅเดฟเดคเดฟเดฏเต† เด‡เดคเต เดจเดฟเตผเดตเดšเดฟเด•เตเด•เตเดจเตเดจเต. เดฌเตˆเดฑเตเดฑเตเด•เต‹เดกเดฟเดจเต เดชเตเดฑเดฎเต‡, เดฌเดพเดšเตเดšเต เดฎเต†เดฎเตเดฎเดฑเดฟ เดฎเต‹เดกเตฝ (เดฌเดพเดšเตเดšเดฟเดฒเต‡เด•เตเด•เต เดฒเต‹เดกเต เดจเดฟเตผเดฆเตเดฆเต‡เดถเด™เตเด™เตพ เดชเดฐเต‹เด•เตเดทเดฎเดพเดฏเดฟ เดชเตเดฐเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเต), เดฐเดœเดฟเดธเตเดฑเตเดฑเดฑเตเด•เตพ (A, X; เด…เด•เตเดฏเตเดฎเตเดฒเต‡เดฑเตเดฑเตผ, เด‡เตปเดกเต†เด•เตเดธเต เดฐเดœเดฟเดธเตเดฑเตเดฑเดฑเตเด•เตพ), เดธเตเด•เตเดฐเดพเดšเตเดšเต เดฎเต†เดฎเตเดฎเดฑเดฟ เดธเตเดฑเตเดฑเต‹เดฑเต‡เดœเต, เด’เดฐเต เด‡เตปเดชเตเดฒเดธเดฟเดฑเตเดฑเต เดชเตเดฐเต‹เด—เตเดฐเดพเด‚ เด•เต—เดฃเตเดŸเตผ เดŽเดจเตเดจเดฟเดตเดฏเตเด‚ เด‡เดคเต เดจเดฟเตผเดตเดšเดฟเด•เตเด•เตเดจเตเดจเต. เดฐเดธเด•เดฐเดฎเต†เดจเตเดจเต เดชเดฑเดฏเดŸเตเดŸเต†, เดฎเต‹เดŸเตเดŸเดฑเต‹เดณ 6502 เดเดŽเดธเตเดŽเดฏเตเดŸเต† เดฎเดพเดคเตƒเด•เดฏเดฟเดฒเดพเดฃเต เดฌเดฟเดชเดฟเดŽเดซเต เดฌเตˆเดฑเตเดฑเตเด•เต‹เดกเต เดฐเต‚เดชเดชเตเดชเต†เดŸเตเดคเตเดคเดฟเดฏเดคเต. เดธเตเดฑเตเดฑเต€เดตเต เดฎเด•เตเด•เดพเตป เดคเดจเตเดฑเต† เด•เตƒเดคเดฟเดฏเดฟเตฝ เด…เดจเตเดธเตเดฎเดฐเดฟเดšเตเดšเดคเต เดชเต‹เดฒเต† เดชเตเดฒเต€เดจเดฑเดฟ เดฑเดฟเดชเตเดชเต‹เตผเดŸเตเดŸเต Sharkfest '11-เตฝ, Apple II-เดฒเต† เดนเตˆเดธเตโ€Œเด•เต‚เตพ เดฆเดฟเดตเดธเด™เตเด™เดณเดฟเดฒเต† เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเดฟเด‚เด—เดฟเตฝ เดจเดฟเดจเตเดจเต, เดฌเดฟเตฝเดกเต 6502-เตฝ เด…เดฆเตเดฆเต‡เดนเดคเตเดคเดฟเดจเต เดชเดฐเดฟเดšเดฟเดคเดฎเดพเดฏเดฟเดฐเตเดจเตเดจเต, เดˆ เด…เดฑเดฟเดตเต BPF เดฌเตˆเดฑเตเดฑเตเด•เต‹เดกเต เดฐเต‚เดชเด•เตฝเดชเตเดชเดจ เดšเต†เดฏเตเดฏเตเดจเตเดจ เด…เดฆเตเดฆเต‡เดนเดคเตเดคเดฟเดจเตเดฑเต† เดชเตเดฐเดตเตผเดคเตเดคเดจเดคเตเดคเต† เดธเตเดตเดพเดงเต€เดจเดฟเดšเตเดšเต.

BPF เดชเดฟเดจเตเดคเตเดฃ เดฒเดฟเดจเด•เตเดธเต เด•เต‡เตผเดฃเดฒเดฟเตฝ v2.5-เดฒเตเด‚ เด…เดคเดฟเดฒเตเด‚ เด‰เดฏเตผเดจเตเดจ เดชเดคเดฟเดชเตเดชเตเด•เดณเดฟเดฒเตเด‚ เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เตเดจเตเดจเต, เดชเตเดฐเดงเดพเดจเดฎเดพเดฏเตเด‚ เดœเต†เดฏเต เดทเตเดฒเดฟเดธเตเดฑเตเดฑเดฟเดจเตเดฑเต† เดถเตเดฐเดฎเด™เตเด™เดณเดพเตฝ เดšเต‡เตผเดคเตเดคเต. 2011 เดตเดฐเต† BPF เด•เต‹เดกเต เดฎเดพเดฑเตเดฑเดฎเดฟเดฒเตเดฒเดพเดคเต† เดคเตเดŸเตผเดจเตเดจเต, เดŽเดฑเดฟเด•เต เดกเตเดฎเดพเดธเต†เดฑเตเดฑเต JIT เดฎเต‹เดกเดฟเตฝ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเดพเดฏเดฟ BPF เดตเตเดฏเดพเด–เตเดฏเดพเดคเดพเดตเดฟเดจเต† เดชเตเดจเตผเดฐเต‚เดชเด•เตฝเดชเตเดชเดจ เดšเต†เดฏเตเดคเต (เด‰เดฑเดตเดฟเดŸเด‚: เดชเดพเด•เตเด•เดฑเตเดฑเต เดซเดฟเตฝเดŸเตเดŸเดฑเตเด•เตพเด•เตเด•เต JIT). เด‡เดคเดฟเดจเตเดถเต‡เดทเด‚, เด•เต†เตผเดฃเดฒเดฟเดจเต, เดฌเดฟเดชเดฟเดŽเดซเต เดฌเตˆเดฑเตเดฑเตเด•เต‹เดกเต เดตเตเดฏเดพเด–เตเดฏเดพเดจเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดชเด•เดฐเด‚, เดฌเดฟเดชเดฟเดŽเดซเต เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเตเด•เดณเต† เดŸเดพเตผเด—เต†เดฑเตเดฑเต เด†เตผเด•เตเด•เดฟเดŸเต†เด•เตเดšเดฑเดฟเดฒเต‡เด•เตเด•เต เดจเต‡เดฐเดฟเดŸเตเดŸเต เดชเดฐเดฟเดตเตผเดคเตเดคเดจเด‚ เดšเต†เดฏเตเดฏเดพเตป เด•เดดเดฟเดฏเตเด‚: x86, ARM, MIPS เดฎเตเดคเดฒเดพเดฏเดต.

เดชเดฟเดจเตเดจเต€เดŸเต, 2014-เตฝ เด…เดฒเด•เตเดธเดฟ เดธเตเดฑเตเดฑเดพเดฐเต‹เดตเต‹เดฏเตเดฑเตเดฑเต‹เดตเต เดฌเดฟเดชเดฟเดŽเดซเดฟเดจเดพเดฏเดฟ เด’เดฐเต เดชเตเดคเดฟเดฏ เดœเต†เดเดŸเดฟ เดธเด‚เดตเดฟเดงเดพเดจเด‚ เดจเดฟเตผเดฆเตเดฆเต‡เดถเดฟเดšเตเดšเต. เดตเดพเดธเตเดคเดตเดคเตเดคเดฟเตฝ, เดˆ เดชเตเดคเดฟเดฏ JIT เด’เดฐเต เดชเตเดคเดฟเดฏ BPF-เด…เดงเดฟเดทเตเด เดฟเดค เดตเดพเดธเตเดคเตเดตเดฟเดฆเตเดฏเดฏเดพเดฏเดฟ เดฎเดพเดฑเดฟ, เด…เดคเดฟเดจเต† eBPF เดŽเดจเตเดจเต เดตเดฟเดณเดฟเด•เตเด•เดชเตเดชเต†เดŸเตเดŸเต. เดฐเดฃเตเดŸเต VM-เด•เดณเตเด‚ เด•เตเดฑเดšเตเดšเต เด•เดพเดฒเดคเตเดคเต‡เด•เตเด•เต เด’เดฐเตเดฎเดฟเดšเตเดšเต เดจเดฟเดฒเดจเดฟเดจเตเดจเดฟเดฐเตเดจเตเดจเดคเดพเดฏเดฟ เดžเดพเตป เด•เดฐเตเดคเตเดจเตเดจเต, เดŽเดจเตเดจเดพเตฝ เดจเดฟเดฒเดตเดฟเตฝ eBPF เด…เดŸเดฟเดธเตเดฅเดพเดจเดฎเดพเด•เตเด•เดฟเดฏเดพเดฃเต เดชเดพเด•เตเด•เดฑเตเดฑเต เดซเดฟเตฝเดŸเตเดŸเดฑเดฟเด‚เด—เต เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เตเดจเตเดจเดคเต. เดตเดพเดธเตเดคเดตเดคเตเดคเดฟเตฝ, เด†เดงเตเดจเดฟเด• เดกเต‹เด•เตเดฏเตเดฎเต†เดจเตเดฑเต‡เดทเดจเตเดฑเต† เดชเดฒ เด‰เดฆเดพเดนเดฐเดฃเด™เตเด™เดณเดฟเดฒเตเด‚, BPF เดŽเดจเตเดจเดคเต eBPF เด†เดฃเต†เดจเตเดจเตเด‚ เด•เตเดฒเดพเดธเดฟเด•เตเด•เตฝ BPF เด†เดฃเต เด‡เดจเตเดจเต cBPF เดŽเดจเตเดจเตเด‚ เด…เดฑเดฟเดฏเดชเตเดชเต†เดŸเตเดจเตเดจเดคเต.

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 เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเตเด•เดณเดฟเตฝ เดจเดฟเดจเตเดจเตเด‚ เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดธเดฟเดธเตเดฑเตเดฑเด‚ เด•เต‹เดณเตเด•เตพ เดšเต†เดฏเตเดฏเดพเดจเตเด‚ เด•เดดเดฟเดฏเตเด‚.
  • เด•เต‹เดณเตเด•เตพ เด…เดตเดธเดพเดจเดฟเดชเตเดชเดฟเด•เตเด•เตเด•. เด‡เดฌเดฟเดชเดฟเดŽเดซเดฟเดฒเต† เดชเตเดฐเต‹เด—เตเดฐเดพเด‚ เดตเดฒเตเดชเตเดชเด‚ 4096 เดฌเตˆเดฑเตเดฑเตเด•เดณเดพเดฏเดฟ เดชเดฐเดฟเดฎเดฟเดคเดชเตเดชเต†เดŸเตเดคเตเดคเดฟเดฏเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต. เดŸเต†เดฏเดฟเตฝ เด•เต‹เตพ เดซเต€เดšเตเดšเตผ เด’เดฐเต eBPF เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเดฟเดจเต† เด’เดฐเต เดชเตเดคเดฟเดฏ eBPF เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเดฟเดฒเต‡เด•เตเด•เต เดจเดฟเดฏเดจเตเดคเตเดฐเดฃเด‚ เด•เตˆเดฎเดพเดฑเตเดฑเด‚ เดšเต†เดฏเตเดฏเดพเดจเตเด‚ เด…เด™เตเด™เดจเต† เดˆ เดชเดฐเดฟเดฎเดฟเดคเดฟ เดฎเดฑเดฟเด•เดŸเด•เตเด•เดพเดจเตเด‚ เด…เดจเตเดตเดฆเดฟเด•เตเด•เตเดจเตเดจเต (32 เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเตเด•เตพ เดตเดฐเต† เดˆ เดฐเต€เดคเดฟเดฏเดฟเตฝ เดฒเดฟเด™เตเด•เต เดšเต†เดฏเตเดฏเดพเด‚).

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 เดฌเตˆเดฑเตเดฑเตเด•เต‹เดกเต เด”เดŸเตเดŸเตเดชเตเดŸเตเดŸเต เดšเต†เดฏเตเดฏเดพเตป เด•เดดเดฟเดฏเตเด‚. Makefile เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเต 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). เดตเดฒเดฟเดฏ เด…เด•เตเดทเดฐเด™เตเด™เดณเดฟเตฝ เดŽเดดเตเดคเดฟเดฏเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจ เดŽเดฒเตเดฒเดพ เดซเด‚เด—เตโ€Œเดทเตป เดชเต‡เดฐเตเด•เดณเตเด‚ เดจเดฟเตผเดตเดšเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจ เดฎเดพเด•เตเดฐเต‹เด•เดณเตเดฎเดพเดฏเดฟ เดชเตŠเดฐเตเดคเตเดคเดชเตเดชเต†เดŸเตเดจเตเดจเต bpf_helpers.h.

เด’เดฌเตโ€Œเดœเด•เตเดฑเตเดฑเต เดซเดฏเดฒเดฟเดจเตเดฑเต† เดตเดฟเดญเดพเด—เด™เตเด™เตพ เดžเดพเตป เด‰เดชเต‡เด•เตเดทเดฟเด•เตเด•เตเด•เดฏเดพเดฃเต†เด™เตเด•เดฟเตฝ, เดˆ เดชเตเดคเดฟเดฏ เดตเดฟเดญเดพเด—เด™เตเด™เตพ เด‡เดคเดฟเดจเด•เด‚ เดคเดจเตเดจเต† เดจเดฟเตผเดตเดšเดฟเด•เตเด•เดชเตเดชเต†เดŸเตเดŸเดฟเดŸเตเดŸเตเดฃเตเดŸเต†เดจเตเดจเต เดžเดพเตป เด•เดพเดฃเตเด‚:

$ 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

เด…เดตเดฟเดŸเต†เดฏเตเด‚ เด‰เดฃเตเดŸเต tracex4_user.c, เดชเตเดฐเดงเดพเดจ เดชเตเดฐเต‹เด—เตเดฐเดพเด‚. เด…เดŸเดฟเดธเตเดฅเดพเดจเดชเดฐเดฎเดพเดฏเดฟ, เดˆ เดชเตเดฐเต‹เด—เตเดฐเดพเด‚ เด‡เดตเดจเตเดฑเตเด•เตพ เดถเตเดฐเดฆเตเดงเดฟเด•เตเด•เตเดจเตเดจเต kmem_cache_alloc_node. เด…เดคเตเดคเดฐเดฎเตŠเดฐเต เดธเด‚เดญเดตเด‚ เดธเด‚เดญเดตเดฟเด•เตเด•เตเดฎเตเดชเต‹เตพ, เด…เดจเตเดฌเดจเตเดง eBPF เด•เต‹เดกเต เดŽเด•เตเดธเดฟเด•เตเดฏเต‚เดŸเตเดŸเต เดšเต†เดฏเตเดฏเดชเตเดชเต†เดŸเตเด‚. เด•เต‹เดกเต เด’เดฌเตโ€Œเดœเด•เตเดฑเตเดฑเดฟเดจเตเดฑเต† เดเดชเดฟ เด†เดŸเตเดฐเดฟเดฌเตเดฏเต‚เดŸเตเดŸเต เด’เดฐเต เดฎเดพเดชเตเดชเดฟเดฒเต‡เด•เตเด•เต เดธเด‚เดฐเด•เตเดทเดฟเด•เตเด•เตเดจเตเดจเต, เดคเตเดŸเตผเดจเตเดจเต เด’เดฌเตโ€Œเดœเด•เตเดฑเตเดฑเต เดชเตเดฐเดงเดพเดจ เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเดฟเดฒเต‚เดŸเต† เดฒเต‚เดชเตเดชเต เดšเต†เดฏเตเดฏเตเดจเตเดจเต. เด‰เดฆเดพเดนเดฐเดฃเด‚:

$ 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

เด’เดฐเต เดฏเต‚เดธเตผ เดธเตเดชเต‡เดธเต เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเตเด‚ เด‡เดฌเดฟเดชเดฟเดŽเดซเต เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเตเด‚ เดŽเด™เตเด™เดจเต† เดฌเดจเตเดงเดชเตเดชเต†เดŸเตเดŸเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต? เดธเดฎเดพเดฐเด‚เดญเดฟเด•เตเด•เตเดฎเตเดชเต‹เตพ 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;
}

เดšเต†เดฏเตเดฏเตเดฎเตเดชเต‹เตพ load_bpf_file 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

เดธเดพเดฎเตเดชเดฟเตพ/เดฌเดฟเดชเดฟเดŽเดซเต/ เดŽเดจเตเดจเดคเดฟเดฒเต† เดฎเดฑเตเดฑเต†เดฒเตเดฒเดพ เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเตเด•เดณเตเด‚ เดธเดฎเดพเดจเดฎเดพเดฏ เดฐเต€เดคเดฟเดฏเดฟเตฝ เด•เตเดฐเดฎเต€เด•เดฐเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต. เด…เดตเดฏเดฟเตฝ เดŽเดฒเตเดฒเดพเดฏเตเดชเตเดชเต‹เดดเตเด‚ เดฐเดฃเตเดŸเต เดซเดฏเดฒเตเด•เตพ เด…เดŸเด™เตเด™เดฟเดฏเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต:

  • XXX_kern.c: eBPF เดชเตเดฐเต‹เด—เตเดฐเดพเด‚.
  • XXX_user.c: เดชเตเดฐเดงเดพเดจ เดชเตเดฐเต‹เด—เตเดฐเดพเด‚.

เด‡เดฌเดฟเดชเดฟเดŽเดซเต เดชเตเดฐเต‹เด—เตเดฐเดพเด‚ เด’เดฐเต เดตเดฟเดญเดพเด—เดตเตเดฎเดพเดฏเดฟ เดฌเดจเตเดงเดชเตเดชเต†เดŸเตเดŸ เดฎเดพเดชเตเดชเตเด•เดณเตเด‚ เดชเตเดฐเดตเตผเดคเตเดคเดจเด™เตเด™เดณเตเด‚ เดคเดฟเดฐเดฟเดšเตเดšเดฑเดฟเดฏเตเดจเตเดจเต. เด•เต‡เตผเดฃเตฝ เด’เดฐเต เดชเตเดฐเดคเตเดฏเต‡เด• เดคเดฐเดคเตเดคเดฟเดฒเตเดณเตเดณ เด‡เดตเดจเตเดฑเต เดจเตฝเด•เตเดฎเตเดชเต‹เตพ (เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, tracepoint), เดฌเดจเตเดงเดฟเดค เดชเตเดฐเดตเตผเดคเตเดคเดจเด™เตเด™เตพ เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เตเดจเตเดจเต. เด•เต‡เตผเดฃเตฝ เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเตเด‚ เดฏเต‚เดธเตผ เดธเตเดชเต‡เดธเต เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเตเด‚ เดคเดฎเตเดฎเดฟเดฒเตเดณเตเดณ เด†เดถเดฏเดตเดฟเดจเดฟเดฎเดฏเด‚ เด•เดพเตผเดกเตเด•เตพ เดจเตฝเด•เตเดจเตเดจเต.

เดคเต€เดฐเตเดฎเดพเดจเด‚

เดˆ เดฒเต‡เด–เดจเด‚ เดฌเดฟเดชเดฟเดŽเดซเดฟเดจเต†เดฏเตเด‚ เด‡เดฌเดฟเดชเดฟเดŽเดซเดฟเดจเต†เดฏเตเด‚ เดชเตŠเดคเตเดตเดพเดฏเดฟ เดšเตผเดšเตเดš เดšเต†เดฏเตเดคเต. eBPF-เดจเต† เด•เตเดฑเดฟเดšเตเดšเต เด‡เดจเตเดจเต เดงเดพเดฐเดพเดณเด‚ เดตเดฟเดตเดฐเด™เตเด™เดณเตเด‚ เด‰เดฑเดตเดฟเดŸเด™เตเด™เดณเตเด‚ เด‰เดฃเตเดŸเต†เดจเตเดจเต เดŽเดจเดฟเด•เตเด•เดฑเดฟเดฏเดพเด‚, เด…เดคเดฟเดจเดพเตฝ เด•เต‚เดŸเตเดคเตฝ เดชเด เดจเดคเตเดคเดฟเดจเดพเดฏเดฟ เดžเดพเตป เด•เตเดฑเดšเตเดšเต เด‰เดฑเดตเดฟเดŸเด™เตเด™เตพ เด•เต‚เดŸเดฟ เดถเตเดชเดพเตผเดถ เดšเต†เดฏเตเดฏเตเด‚

เดžเดพเตป เดตเดพเดฏเดฟเด•เตเด•เดพเตป เดถเตเดชเดพเตผเดถ เดšเต†เดฏเตเดฏเตเดจเตเดจเต:

เด…เดตเดฒเด‚เดฌเด‚: www.habr.com

เด’เดฐเต เด…เดญเดฟเดชเตเดฐเดพเดฏเด‚ เดšเต‡เตผเด•เตเด•เตเด•