แƒ›แƒแƒฆแƒแƒšแƒ˜ แƒชแƒ”แƒคแƒ˜แƒก แƒจแƒ”แƒงแƒแƒ•แƒœแƒ”แƒ‘แƒ˜แƒ“แƒแƒœ แƒ‘แƒ˜แƒ แƒ—แƒ•แƒ˜แƒก แƒžแƒแƒฉแƒแƒ›แƒ“แƒ” eBPF/BCC แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—

แƒ›แƒแƒฆแƒแƒšแƒ˜ แƒชแƒ”แƒคแƒ˜แƒก แƒจแƒ”แƒงแƒแƒ•แƒœแƒ”แƒ‘แƒ˜แƒ“แƒแƒœ แƒ‘แƒ˜แƒ แƒ—แƒ•แƒ˜แƒก แƒžแƒแƒฉแƒแƒ›แƒ“แƒ” eBPF/BCC แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—

Linux-แƒก แƒแƒฅแƒ•แƒก แƒฃแƒแƒ›แƒ แƒแƒ•แƒ˜ แƒ˜แƒœแƒกแƒขแƒ แƒฃแƒ›แƒ”แƒœแƒขแƒ˜ แƒ‘แƒ˜แƒ แƒ—แƒ•แƒ˜แƒกแƒ แƒ“แƒ แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ›แƒแƒ แƒ—แƒ•แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก. แƒ›แƒแƒ—แƒ˜ แƒฃแƒ›แƒ”แƒขแƒ”แƒกแƒแƒ‘แƒ แƒฃแƒแƒ แƒงแƒแƒคแƒ˜แƒ—แƒแƒ“ แƒแƒ˜แƒกแƒแƒฎแƒ”แƒ‘แƒ แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ˜แƒก แƒจแƒ”แƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒแƒ–แƒ” แƒ“แƒ แƒแƒ  แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒฃแƒš แƒ˜แƒฅแƒœแƒแƒก แƒฌแƒแƒ แƒ›แƒแƒ”แƒ‘แƒแƒจแƒ˜.

แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒ›แƒ” แƒฌแƒšแƒ˜แƒก แƒฌแƒ˜แƒœ แƒ˜แƒงแƒ แƒจแƒ”แƒ›แƒฃแƒจแƒแƒ•แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒ™แƒ˜แƒ“แƒ”แƒ• แƒ”แƒ แƒ—แƒ˜ แƒ˜แƒœแƒกแƒขแƒ แƒฃแƒ›แƒ”แƒœแƒขแƒ˜ - eBPF. แƒ”แƒก แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒ”แƒšแƒก แƒฎแƒ“แƒ˜แƒก แƒ‘แƒ˜แƒ แƒ—แƒ•แƒ˜แƒกแƒ แƒ“แƒ แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒšแƒ˜แƒก แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒ›แƒ˜แƒ™แƒ•แƒšแƒ”แƒ•แƒแƒก แƒ“แƒแƒ‘แƒแƒšแƒ˜ แƒ–แƒ”แƒ“แƒœแƒแƒ“แƒ”แƒ‘แƒ˜แƒ— แƒ“แƒ แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ”แƒ‘แƒ˜แƒก แƒแƒฆแƒ“แƒ’แƒ”แƒœแƒ˜แƒกแƒ แƒ“แƒ แƒ›แƒ”แƒกแƒแƒ›แƒ” แƒ›แƒฎแƒแƒ แƒ˜แƒก แƒ›แƒแƒ“แƒฃแƒšแƒ”แƒ‘แƒ˜แƒก แƒ‘แƒ˜แƒ แƒ—แƒ•แƒจแƒ˜ แƒฉแƒแƒขแƒ•แƒ˜แƒ แƒ—แƒ•แƒ˜แƒก แƒ’แƒแƒ แƒ”แƒจแƒ”.

แƒฃแƒ™แƒ•แƒ” แƒแƒ แƒกแƒ”แƒ‘แƒแƒ‘แƒก แƒ›แƒ แƒแƒ•แƒแƒšแƒ˜ แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ˜แƒก แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒก eBPF-แƒก แƒ“แƒ แƒแƒ› แƒกแƒขแƒแƒขแƒ˜แƒแƒจแƒ˜ แƒ’แƒแƒœแƒ•แƒ˜แƒฎแƒ˜แƒšแƒแƒ•แƒ—, แƒ—แƒฃ แƒ แƒแƒ’แƒแƒ  แƒฃแƒœแƒ“แƒ แƒ“แƒแƒฌแƒ”แƒ แƒแƒ— แƒ—แƒฅแƒ•แƒ”แƒœแƒ˜ แƒกแƒแƒ™แƒฃแƒ—แƒแƒ แƒ˜ แƒžแƒ แƒแƒคแƒ˜แƒšแƒ˜แƒ แƒ”แƒ‘แƒ˜แƒก แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ แƒ‘แƒ˜แƒ‘แƒšแƒ˜แƒแƒ—แƒ”แƒ™แƒ˜แƒก แƒกแƒแƒคแƒฃแƒซแƒ•แƒ”แƒšแƒ–แƒ”. PythonBCC. แƒกแƒขแƒแƒขแƒ˜แƒ แƒ”แƒคแƒฃแƒซแƒœแƒ”แƒ‘แƒ แƒ แƒ”แƒแƒšแƒฃแƒ  แƒ›แƒแƒ•แƒšแƒ”แƒœแƒ”แƒ‘แƒก. แƒฉแƒ•แƒ”แƒœ แƒ’แƒแƒ“แƒแƒ•แƒแƒšแƒ— แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒ˜แƒก แƒ’แƒแƒ“แƒแƒกแƒแƒญแƒ แƒ”แƒšแƒแƒ“, แƒ แƒแƒ—แƒ แƒ•แƒแƒฉแƒ•แƒ”แƒœแƒแƒ—, แƒ—แƒฃ แƒ แƒแƒ’แƒแƒ  แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒแƒ แƒกแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ™แƒแƒ›แƒฃแƒœแƒแƒšแƒฃแƒ แƒ˜ แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ แƒ™แƒแƒœแƒ™แƒ แƒ”แƒขแƒฃแƒš แƒกแƒ˜แƒขแƒฃแƒแƒชแƒ˜แƒ”แƒ‘แƒจแƒ˜.

Ceph แƒแƒ แƒ˜แƒก แƒœแƒ”แƒšแƒ˜

Ceph แƒ™แƒšแƒแƒกแƒขแƒ”แƒ แƒก แƒ“แƒแƒ”แƒ›แƒแƒขแƒ แƒแƒฎแƒแƒšแƒ˜ แƒ›แƒแƒกแƒžแƒ˜แƒœแƒซแƒ”แƒšแƒ˜. แƒ–แƒแƒ’แƒ˜แƒ”แƒ แƒ—แƒ˜ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ˜แƒก แƒ›แƒแƒกแƒ–แƒ” แƒ’แƒแƒ“แƒแƒขแƒแƒœแƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’, แƒฉแƒ•แƒ”แƒœ แƒจแƒ”แƒ•แƒแƒ›แƒฉแƒœแƒ˜แƒ”แƒ—, แƒ แƒแƒ› แƒ›แƒ˜แƒก แƒ›แƒ˜แƒ”แƒ  แƒฉแƒแƒฌแƒ”แƒ แƒ˜แƒก แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ”แƒ‘แƒ˜แƒก แƒ“แƒแƒ›แƒฃแƒจแƒแƒ•แƒ”แƒ‘แƒ˜แƒก แƒกแƒ˜แƒฉแƒฅแƒแƒ แƒ” แƒ’แƒแƒชแƒ˜แƒšแƒ”แƒ‘แƒ˜แƒ— แƒ“แƒแƒ‘แƒแƒšแƒ˜ แƒ˜แƒงแƒ, แƒ•แƒ˜แƒ“แƒ แƒ” แƒกแƒฎแƒ•แƒ แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ”แƒ‘แƒ–แƒ”.

แƒ›แƒแƒฆแƒแƒšแƒ˜ แƒชแƒ”แƒคแƒ˜แƒก แƒจแƒ”แƒงแƒแƒ•แƒœแƒ”แƒ‘แƒ˜แƒ“แƒแƒœ แƒ‘แƒ˜แƒ แƒ—แƒ•แƒ˜แƒก แƒžแƒแƒฉแƒแƒ›แƒ“แƒ” eBPF/BCC แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—
แƒกแƒฎแƒ•แƒ แƒžแƒšแƒแƒขแƒคแƒแƒ แƒ›แƒ”แƒ‘แƒ˜แƒกแƒ’แƒแƒœ แƒ’แƒแƒœแƒกแƒฎแƒ•แƒแƒ•แƒ”แƒ‘แƒ˜แƒ—, แƒแƒ› แƒฐแƒแƒกแƒขแƒ›แƒ แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ bcache แƒ“แƒ แƒแƒฎแƒแƒšแƒ˜ Linux 4.15 แƒ‘แƒ˜แƒ แƒ—แƒ•แƒ˜. แƒ”แƒก แƒ˜แƒงแƒ แƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒ˜ แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒ, แƒ แƒแƒ“แƒ”แƒกแƒแƒช แƒแƒ› แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒ˜แƒก แƒ›แƒแƒกแƒžแƒ˜แƒœแƒซแƒ”แƒšแƒ˜ แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒแƒ“แƒ แƒแƒฅ. แƒ“แƒ แƒ˜แƒ› แƒ›แƒแƒ›แƒ”แƒœแƒขแƒจแƒ˜ แƒชแƒฎแƒแƒ“แƒ˜ แƒ˜แƒงแƒ, แƒ แƒแƒ› แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒ˜แƒก แƒกแƒแƒคแƒฃแƒซแƒ•แƒ”แƒšแƒ˜ แƒ—แƒ”แƒแƒ แƒ˜แƒฃแƒšแƒแƒ“ แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ˜แƒงแƒแƒก แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜.

แƒ›แƒแƒกแƒžแƒ˜แƒœแƒซแƒšแƒ˜แƒก แƒ’แƒแƒ›แƒแƒ™แƒ•แƒšแƒ”แƒ•แƒ

แƒ“แƒแƒ•แƒ˜แƒฌแƒงแƒแƒ— แƒ˜แƒ›แƒ˜แƒ—, แƒ—แƒฃ แƒ แƒ แƒฎแƒ“แƒ”แƒ‘แƒ ceph-osd แƒžแƒ แƒแƒชแƒ”แƒกแƒ˜แƒก แƒจแƒ˜แƒ’แƒœแƒ˜แƒ—. แƒแƒ›แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒ’แƒแƒ›แƒแƒ•แƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ— perf ะธ แƒคแƒšแƒ”แƒกแƒ™แƒแƒžแƒ˜ (แƒ“แƒแƒฌแƒ•แƒ แƒ˜แƒšแƒ”แƒ‘แƒ˜แƒ—, แƒ แƒแƒ›แƒšแƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘แƒแƒช แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒฌแƒแƒ˜แƒ™แƒ˜แƒ—แƒฎแƒแƒ— แƒแƒฅ):

แƒ›แƒแƒฆแƒแƒšแƒ˜ แƒชแƒ”แƒคแƒ˜แƒก แƒจแƒ”แƒงแƒแƒ•แƒœแƒ”แƒ‘แƒ˜แƒ“แƒแƒœ แƒ‘แƒ˜แƒ แƒ—แƒ•แƒ˜แƒก แƒžแƒแƒฉแƒแƒ›แƒ“แƒ” eBPF/BCC แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—
แƒกแƒฃแƒ แƒแƒ—แƒ˜ แƒ’แƒ•แƒ”แƒฃแƒ‘แƒœแƒ”แƒ‘แƒ, แƒ แƒแƒ› แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ fdatasync () แƒ“แƒ˜แƒ“แƒ˜ แƒ“แƒ แƒ แƒ“แƒแƒฎแƒแƒ แƒฏแƒ แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ˜แƒก แƒ’แƒแƒ’แƒ–แƒแƒ•แƒœแƒแƒจแƒ˜ generic_make_request(). แƒ”แƒก แƒœแƒ˜แƒจแƒœแƒแƒ•แƒก, แƒ แƒแƒ›, แƒกแƒแƒ•แƒแƒ แƒแƒฃแƒ“แƒแƒ“, แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒ”แƒ‘แƒ˜แƒก แƒ›แƒ˜แƒ–แƒ”แƒ–แƒ˜ แƒแƒ แƒ˜แƒก osd แƒ“แƒ”แƒ›แƒแƒœแƒ˜แƒก แƒ›แƒ˜แƒฆแƒ›แƒ. แƒ”แƒก แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ˜แƒงแƒแƒก แƒ‘แƒ˜แƒ แƒ—แƒ•แƒ˜ แƒแƒœ แƒ“แƒ˜แƒกแƒ™แƒ˜. iostat แƒ’แƒแƒ›แƒแƒ›แƒแƒ•แƒแƒšแƒ›แƒ แƒแƒฉแƒ•แƒ”แƒœแƒ แƒ›แƒแƒฆแƒแƒšแƒ˜ แƒจแƒ”แƒงแƒแƒ•แƒœแƒ”แƒ‘แƒ bcache แƒ“แƒ˜แƒกแƒ™แƒ”แƒ‘แƒ˜แƒก แƒ›แƒ˜แƒ”แƒ  แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ”แƒ‘แƒ˜แƒก แƒ“แƒแƒ›แƒฃแƒจแƒแƒ•แƒ”แƒ‘แƒ˜แƒกแƒแƒก.

แƒฐแƒแƒกแƒขแƒ˜แƒก แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒ˜แƒกแƒแƒก แƒแƒฆแƒ›แƒแƒ•แƒแƒฉแƒ˜แƒœแƒ”แƒ—, แƒ แƒแƒ› systemd-udevd แƒ“แƒ”แƒ›แƒแƒœแƒ˜ แƒ›แƒแƒ˜แƒฎแƒ›แƒแƒ แƒก แƒ“แƒ˜แƒ“แƒ˜ แƒ แƒแƒแƒ“แƒ”แƒœแƒแƒ‘แƒ˜แƒ— CPU แƒ“แƒ แƒแƒก - แƒ“แƒแƒแƒฎแƒšแƒแƒ”แƒ‘แƒ˜แƒ— 20% แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒ›แƒ” แƒ‘แƒ˜แƒ แƒ—แƒ•แƒ–แƒ”. แƒ”แƒก แƒฃแƒชแƒœแƒแƒฃแƒ แƒ˜ แƒกแƒแƒฅแƒชแƒ˜แƒ”แƒšแƒ˜แƒ, แƒแƒ›แƒ˜แƒขแƒแƒ› แƒฃแƒœแƒ“แƒ แƒ’แƒแƒแƒ แƒ™แƒ•แƒ˜แƒแƒ— แƒ แƒแƒขแƒแƒ›. แƒ˜แƒ›แƒ˜แƒก แƒ’แƒแƒ›แƒ, แƒ แƒแƒ› Systemd-udevd แƒ›แƒฃแƒจแƒแƒแƒ‘แƒก uevents-แƒ—แƒแƒœ, แƒ’แƒแƒ“แƒแƒ•แƒฌแƒงแƒ•แƒ˜แƒขแƒ”แƒ— แƒ’แƒแƒ“แƒแƒ•แƒฎแƒ”แƒ“แƒแƒ— แƒ›แƒแƒ— udevadm แƒ›แƒแƒœแƒ˜แƒขแƒแƒ แƒ˜. แƒ’แƒแƒ›แƒแƒ“แƒ˜แƒก, แƒ แƒแƒ› แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒแƒจแƒ˜ แƒ—แƒ˜แƒ—แƒแƒ”แƒฃแƒšแƒ˜ แƒ‘แƒšแƒแƒ™แƒ˜แƒก แƒ›แƒแƒฌแƒงแƒแƒ‘แƒ˜แƒšแƒแƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒ’แƒ”แƒœแƒ”แƒ แƒ˜แƒ แƒ“แƒ”แƒ‘แƒ แƒชแƒ•แƒšแƒ˜แƒšแƒ”แƒ‘แƒ˜แƒก แƒ›แƒแƒ•แƒšแƒ”แƒœแƒ”แƒ‘แƒ˜แƒก แƒ“แƒ˜แƒ“แƒ˜ แƒ แƒแƒแƒ“แƒ”แƒœแƒแƒ‘แƒ. แƒ”แƒก แƒกแƒแƒ™แƒ›แƒแƒแƒ“ แƒฃแƒฉแƒ•แƒ”แƒฃแƒšแƒแƒ, แƒแƒ›แƒ˜แƒขแƒแƒ› แƒฉแƒ•แƒ”แƒœ แƒ›แƒแƒ’แƒ•แƒ˜แƒฌแƒ”แƒ•แƒก แƒจแƒ”แƒ•แƒฎแƒ”แƒ“แƒแƒ— แƒ แƒ แƒ˜แƒฌแƒ•แƒ”แƒ•แƒก แƒงแƒ•แƒ”แƒšแƒ แƒแƒ› แƒ›แƒแƒ•แƒšแƒ”แƒœแƒแƒก.

BCC แƒ˜แƒœแƒกแƒขแƒ แƒฃแƒ›แƒ”แƒœแƒขแƒแƒ แƒ˜แƒฃแƒ›แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—

แƒ แƒแƒ’แƒแƒ แƒช แƒฃแƒ™แƒ•แƒ” แƒ’แƒแƒ•แƒแƒ แƒ™แƒ•แƒ˜แƒ”แƒ—, แƒ‘แƒ˜แƒ แƒ—แƒ•แƒ˜ (แƒ“แƒ แƒชแƒ”แƒคแƒ˜แƒก แƒ“แƒ”แƒ›แƒแƒœแƒ˜ แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒ˜แƒก แƒ–แƒแƒ แƒจแƒ˜) แƒ“แƒ˜แƒ“ แƒ“แƒ แƒแƒก แƒแƒขแƒแƒ แƒ”แƒ‘แƒก generic_make_request(). แƒจแƒ”แƒ•แƒ”แƒชแƒแƒ“แƒแƒ— แƒ’แƒแƒ•แƒ–แƒแƒ›แƒแƒ— แƒแƒ› แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ˜แƒก แƒกแƒ˜แƒฉแƒฅแƒแƒ แƒ”. IN BCC แƒฃแƒ™แƒ•แƒ” แƒแƒ แƒ˜แƒก แƒ›แƒจแƒ•แƒ”แƒœแƒ˜แƒ”แƒ แƒ˜ แƒฃแƒขแƒ˜แƒšแƒ˜แƒขแƒ - funclatency. แƒฉแƒ•แƒ”แƒœ แƒ›แƒ˜แƒ•แƒงแƒ•แƒ”แƒ‘แƒ˜แƒ— แƒ“แƒ”แƒ›แƒแƒœแƒก แƒ›แƒ˜แƒกแƒ˜ PID-แƒ˜แƒ— 1 แƒฌแƒแƒ›แƒ˜แƒก แƒ˜แƒœแƒขแƒ”แƒ แƒ•แƒแƒšแƒ˜แƒ— แƒ’แƒแƒ›แƒแƒกแƒแƒ•แƒแƒšแƒก แƒจแƒแƒ แƒ˜แƒก แƒ“แƒ แƒ’แƒแƒ›แƒแƒ•แƒแƒขแƒแƒœแƒ— แƒจแƒ”แƒ“แƒ”แƒ’แƒก แƒ›แƒ˜แƒšแƒ˜แƒฌแƒแƒ›แƒ”แƒ‘แƒจแƒ˜.

แƒ›แƒแƒฆแƒแƒšแƒ˜ แƒชแƒ”แƒคแƒ˜แƒก แƒจแƒ”แƒงแƒแƒ•แƒœแƒ”แƒ‘แƒ˜แƒ“แƒแƒœ แƒ‘แƒ˜แƒ แƒ—แƒ•แƒ˜แƒก แƒžแƒแƒฉแƒแƒ›แƒ“แƒ” eBPF/BCC แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—
แƒ”แƒก แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ แƒฉแƒ•แƒ”แƒฃแƒšแƒ”แƒ‘แƒ แƒ˜แƒ• แƒกแƒฌแƒ แƒแƒคแƒแƒ“ แƒ›แƒฃแƒจแƒแƒแƒ‘แƒก. แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜ แƒ แƒแƒช แƒแƒ™แƒ”แƒ—แƒ”แƒ‘แƒก แƒแƒ แƒ˜แƒก แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ˜แƒก แƒ’แƒแƒ“แƒแƒชแƒ”แƒ›แƒ แƒ›แƒแƒฌแƒงแƒแƒ‘แƒ˜แƒšแƒแƒ‘แƒ˜แƒก แƒ“แƒ แƒแƒ˜แƒ•แƒ”แƒ แƒ˜แƒก แƒ แƒ˜แƒ’แƒจแƒ˜.

Bcache แƒแƒ แƒ˜แƒก แƒ แƒ—แƒฃแƒšแƒ˜ แƒ›แƒแƒฌแƒงแƒแƒ‘แƒ˜แƒšแƒแƒ‘แƒ, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ แƒ”แƒแƒšแƒฃแƒ แƒแƒ“ แƒจแƒ”แƒ“แƒ’แƒ”แƒ‘แƒ แƒกแƒแƒ›แƒ˜ แƒ“แƒ˜แƒกแƒ™แƒ˜แƒกแƒแƒ’แƒแƒœ:

  • แƒ“แƒแƒ›แƒฎแƒ›แƒแƒ แƒ” แƒ›แƒแƒฌแƒงแƒแƒ‘แƒ˜แƒšแƒแƒ‘แƒ (แƒฅแƒ”แƒจแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ“แƒ˜แƒกแƒ™แƒ˜), แƒแƒ› แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜ แƒ”แƒก แƒแƒ แƒ˜แƒก แƒœแƒ”แƒšแƒ˜ HDD;
  • แƒฅแƒ”แƒจแƒ˜แƒ แƒ”แƒ‘แƒ˜แƒก แƒ›แƒแƒฌแƒงแƒแƒ‘แƒ˜แƒšแƒแƒ‘แƒ (แƒฅแƒ”แƒจแƒ˜แƒ แƒ”แƒ‘แƒ˜แƒก แƒ“แƒ˜แƒกแƒ™แƒ˜), แƒแƒฅ แƒ”แƒก แƒแƒ แƒ˜แƒก NVMe แƒ›แƒแƒฌแƒงแƒแƒ‘แƒ˜แƒšแƒแƒ‘แƒ˜แƒก แƒ”แƒ แƒ—แƒ˜ แƒ“แƒแƒœแƒแƒงแƒแƒคแƒ˜;
  • bcache แƒ•แƒ˜แƒ แƒขแƒฃแƒแƒšแƒฃแƒ แƒ˜ แƒ›แƒแƒฌแƒงแƒแƒ‘แƒ˜แƒšแƒแƒ‘แƒ, แƒ แƒแƒ›แƒšแƒ˜แƒ—แƒแƒช แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ แƒ›แƒฃแƒจแƒแƒแƒ‘แƒก.

แƒฉแƒ•แƒ”แƒœ แƒ•แƒ˜แƒชแƒ˜แƒ—, แƒ แƒแƒ› แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ˜แƒก แƒ’แƒแƒ“แƒแƒชแƒ”แƒ›แƒ แƒœแƒ”แƒšแƒ˜แƒ, แƒ›แƒแƒ’แƒ แƒแƒ› แƒ แƒแƒ›แƒ”แƒšแƒ˜ แƒ›แƒแƒฌแƒงแƒแƒ‘แƒ˜แƒšแƒแƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก? แƒแƒ›แƒแƒก แƒชแƒแƒขแƒ แƒ›แƒแƒ’แƒ•แƒ˜แƒแƒœแƒ”แƒ‘แƒ˜แƒ— แƒจแƒ”แƒ•แƒ”แƒฎแƒ”แƒ‘แƒ˜แƒ—.

แƒฉแƒ•แƒ”แƒœ แƒแƒฎแƒšแƒ แƒ•แƒ˜แƒชแƒ˜แƒ—, แƒ แƒแƒ› แƒ›แƒแƒ•แƒšแƒ”แƒœแƒ”แƒ‘แƒ›แƒ แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ’แƒแƒ›แƒแƒ˜แƒฌแƒ•แƒ˜แƒแƒก แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒ”แƒ‘แƒ˜. แƒ˜แƒ›แƒ˜แƒก แƒ“แƒแƒ“แƒ’แƒ”แƒœแƒ, แƒ—แƒฃ แƒ แƒ แƒ˜แƒฌแƒ•แƒ”แƒ•แƒก แƒ›แƒแƒ— แƒ—แƒแƒแƒ‘แƒแƒก, แƒแƒ แƒช แƒ˜แƒกแƒ” แƒแƒ“แƒ•แƒ˜แƒšแƒ˜แƒ. แƒ“แƒแƒ•แƒฃแƒจแƒ•แƒแƒ—, แƒ แƒแƒ› แƒ”แƒก แƒแƒ แƒ˜แƒก แƒ’แƒแƒ แƒ™แƒ•แƒ”แƒฃแƒšแƒ˜ แƒกแƒแƒฎแƒ˜แƒก แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒฃแƒšแƒ˜ แƒฃแƒ–แƒ แƒฃแƒœแƒ•แƒ”แƒšแƒงแƒแƒคแƒ, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ’แƒแƒจแƒ•แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒžแƒ”แƒ แƒ˜แƒแƒ“แƒฃแƒšแƒแƒ“. แƒ•แƒœแƒแƒฎแƒแƒ—, แƒ แƒ แƒกแƒแƒฎแƒ˜แƒก แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒฃแƒšแƒ˜ แƒฃแƒ–แƒ แƒฃแƒœแƒ•แƒ”แƒšแƒงแƒแƒคแƒ แƒ›แƒฃแƒจแƒแƒแƒ‘แƒก แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒแƒจแƒ˜ แƒกแƒ™แƒ แƒ˜แƒžแƒขแƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ— execsnoop แƒ˜แƒ›แƒแƒ•แƒ”แƒ“แƒแƒœ BCC แƒ™แƒแƒ›แƒฃแƒœแƒแƒšแƒฃแƒ แƒ˜ แƒœแƒแƒ™แƒ แƒ”แƒ‘แƒ˜. แƒ›แƒแƒ“แƒ˜แƒ— แƒ’แƒแƒ•แƒฃแƒจแƒ•แƒแƒ— แƒ“แƒ แƒ’แƒแƒ›แƒแƒ•แƒ˜แƒขแƒแƒœแƒแƒ— แƒคแƒแƒ˜แƒšแƒ˜.

แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒแƒ“ แƒแƒกแƒ”:

/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-แƒก แƒ’แƒแƒจแƒ•แƒ”แƒ‘แƒ˜แƒ—, แƒžแƒ”แƒ แƒ˜แƒแƒ“แƒฃแƒšแƒแƒ“ แƒ’แƒแƒจแƒ•แƒ”แƒ‘แƒ˜แƒ— udevadm แƒขแƒ แƒ˜แƒ’แƒ”แƒ แƒ˜แƒ— uevents แƒ’แƒ”แƒœแƒ”แƒ แƒ˜แƒ แƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก.

BCC-แƒ–แƒ” แƒ“แƒแƒคแƒฃแƒซแƒœแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ˜แƒœแƒกแƒขแƒ แƒฃแƒ›แƒ”แƒœแƒขแƒ”แƒ‘แƒ˜แƒก แƒฌแƒ”แƒ แƒ

แƒจแƒ”แƒ•แƒ”แƒชแƒแƒ“แƒแƒ— แƒ“แƒแƒ•แƒฌแƒ”แƒ แƒแƒ— แƒ›แƒแƒ แƒขแƒ˜แƒ•แƒ˜ แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ แƒงแƒ•แƒ”แƒšแƒแƒ–แƒ” แƒœแƒ”แƒšแƒ˜ แƒ–แƒแƒ แƒ”แƒ‘แƒ˜แƒก แƒ—แƒ•แƒแƒšแƒกแƒแƒฉแƒ˜แƒœแƒแƒ”แƒ‘แƒ˜แƒกแƒ แƒ“แƒ แƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก generic_make_request(). แƒฉแƒ•แƒ”แƒœ แƒแƒกแƒ”แƒ•แƒ” แƒ’แƒ•แƒแƒ˜แƒœแƒขแƒ”แƒ แƒ”แƒกแƒ”แƒ‘แƒก แƒ“แƒ˜แƒกแƒ™แƒ˜แƒก แƒกแƒแƒฎแƒ”แƒšแƒ˜, แƒ แƒแƒ›แƒšแƒ˜แƒกแƒ—แƒ•แƒ˜แƒกแƒแƒช แƒ’แƒแƒ›แƒแƒ˜แƒซแƒแƒฎแƒ”แƒก แƒ”แƒก แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ.

แƒ’แƒ”แƒ’แƒ›แƒ แƒ›แƒแƒ แƒขแƒ˜แƒ•แƒ˜แƒ:

  • แƒ แƒ”แƒ’แƒ˜แƒกแƒขแƒ แƒแƒชแƒ˜แƒ kprobe on generic_make_request():
    • แƒฉแƒ•แƒ”แƒœ แƒ•แƒ˜แƒœแƒแƒฎแƒแƒ•แƒ— แƒ“แƒ˜แƒกแƒ™แƒ˜แƒก แƒกแƒแƒฎแƒ”แƒšแƒก แƒ›แƒ”แƒฎแƒกแƒ˜แƒ”แƒ แƒ”แƒ‘แƒแƒจแƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒฎแƒ”แƒšแƒ›แƒ˜แƒกแƒแƒฌแƒ•แƒ“แƒแƒ›แƒ˜แƒ แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ˜แƒก แƒแƒ แƒ’แƒฃแƒ›แƒ”แƒœแƒขแƒ˜แƒก แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒ˜แƒ—;
    • แƒฉแƒ•แƒ”แƒœ แƒ•แƒ˜แƒœแƒแƒฎแƒแƒ•แƒ— แƒ“แƒ แƒแƒ˜แƒก แƒœแƒ˜แƒจแƒแƒœแƒก.

  • แƒ แƒ”แƒ’แƒ˜แƒกแƒขแƒ แƒแƒชแƒ˜แƒ แƒ™แƒ แƒ”แƒขแƒžแƒ แƒแƒ‘แƒ˜ แƒ“แƒแƒ‘แƒ แƒฃแƒœแƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก generic_make_request():
    • แƒฉแƒ•แƒ”แƒœ แƒ•แƒ˜แƒฆแƒ”แƒ‘แƒ— แƒ›แƒ˜แƒ›แƒ“แƒ˜แƒœแƒแƒ แƒ” แƒ“แƒ แƒแƒ˜แƒก แƒœแƒ˜แƒจแƒแƒœแƒก;
    • แƒฉแƒ•แƒ”แƒœ แƒ•แƒ”แƒซแƒ”แƒ‘แƒ— แƒจแƒ”แƒœแƒแƒฎแƒฃแƒš แƒ“แƒ แƒแƒ˜แƒก แƒœแƒ˜แƒจแƒแƒœแƒก แƒ“แƒ แƒ•แƒแƒ“แƒแƒ แƒ”แƒ‘แƒ— แƒ›แƒแƒก แƒ›แƒ˜แƒ›แƒ“แƒ˜แƒœแƒแƒ แƒ” แƒœแƒ˜แƒจแƒแƒœแƒก;
    • แƒ—แƒฃ แƒจแƒ”แƒ“แƒ”แƒ’แƒ˜ แƒแƒฆแƒ”แƒ›แƒแƒขแƒ”แƒ‘แƒ แƒ›แƒ˜แƒ—แƒ˜แƒ—แƒ”แƒ‘แƒฃแƒšแƒก, แƒ›แƒแƒจแƒ˜แƒœ แƒ•แƒžแƒแƒฃแƒšแƒแƒ‘แƒ— แƒจแƒ”แƒœแƒแƒฎแƒฃแƒš แƒ“แƒ˜แƒกแƒ™แƒ˜แƒก แƒกแƒแƒฎแƒ”แƒšแƒก แƒ“แƒ แƒ•แƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒ— แƒ›แƒแƒก แƒขแƒ”แƒ แƒ›แƒ˜แƒœแƒแƒšแƒ–แƒ”.

Kprobes ะธ แƒ™แƒ แƒ”แƒขแƒžแƒ แƒแƒ‘แƒ”แƒ‘แƒ˜ แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ— breakpoint แƒ›แƒ”แƒฅแƒแƒœแƒ˜แƒ–แƒ›แƒ˜ แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ˜แƒก แƒ™แƒแƒ“แƒ˜แƒก แƒจแƒ”แƒกแƒแƒชแƒ•แƒšแƒ”แƒšแƒแƒ“ แƒคแƒ แƒ”แƒœแƒ˜แƒก แƒ“แƒ แƒแƒก. แฒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒ แƒฌแƒแƒ˜แƒ™แƒ˜แƒ—แƒฎแƒ แƒ“แƒแƒ™แƒฃแƒ›แƒ”แƒœแƒขแƒแƒชแƒ˜แƒ ะธ แƒ™แƒแƒ แƒ’แƒ˜ แƒกแƒขแƒแƒขแƒ˜แƒ แƒแƒ› แƒ—แƒ”แƒ›แƒแƒ–แƒ”. แƒ—แƒฃ แƒ’แƒแƒ“แƒแƒฎแƒ”แƒ“แƒแƒ•แƒ— แƒกแƒฎแƒ•แƒแƒ“แƒแƒกแƒฎแƒ•แƒ แƒ™แƒแƒ›แƒฃแƒœแƒแƒšแƒฃแƒ แƒ˜ แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ˜แƒก แƒ™แƒแƒ“แƒก BCC, แƒ›แƒแƒจแƒ˜แƒœ แƒฎแƒ”แƒ“แƒแƒ•แƒ—, แƒ แƒแƒ› แƒ›แƒแƒ— แƒแƒฅแƒ•แƒ— แƒ˜แƒ“แƒ”แƒœแƒขแƒฃแƒ แƒ˜ แƒกแƒขแƒ แƒฃแƒฅแƒขแƒฃแƒ แƒ. แƒแƒกแƒ” แƒ แƒแƒ›, แƒแƒ› แƒกแƒขแƒแƒขแƒ˜แƒแƒจแƒ˜ แƒฉแƒ•แƒ”แƒœ แƒ’แƒแƒ›แƒแƒ•แƒขแƒแƒ•แƒ”แƒ‘แƒ— แƒกแƒ™แƒ แƒ˜แƒžแƒขแƒ˜แƒก แƒแƒ แƒ’แƒฃแƒ›แƒ”แƒœแƒขแƒ”แƒ‘แƒ˜แƒก แƒแƒœแƒแƒšแƒ˜แƒ–แƒก แƒ“แƒ แƒ’แƒแƒ“แƒแƒ•แƒแƒšแƒ— แƒ—แƒแƒ•แƒแƒ“ BPF แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒแƒ–แƒ”.

eBPF แƒขแƒ”แƒฅแƒกแƒขแƒ˜ แƒžแƒ˜แƒ—แƒแƒœแƒ˜แƒก แƒกแƒ™แƒ แƒ˜แƒžแƒขแƒ˜แƒก แƒจแƒ˜แƒ’แƒœแƒ˜แƒ— แƒแƒกแƒ” แƒ’แƒแƒ›แƒแƒ˜แƒงแƒฃแƒ แƒ”แƒ‘แƒ:

bpf_text = โ€œโ€โ€ # Here will be the bpf program code โ€œโ€โ€

แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ”แƒ‘แƒก แƒจแƒแƒ แƒ˜แƒก แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒกแƒแƒชแƒ•แƒšแƒ”แƒšแƒแƒ“, eBPF แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ”แƒ‘แƒ˜ แƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ”แƒœ แƒฐแƒ”แƒจแƒ˜แƒก แƒชแƒฎแƒ แƒ˜แƒšแƒ”แƒ‘แƒ˜. แƒฉแƒ•แƒ”แƒœแƒช แƒแƒกแƒ” แƒ›แƒแƒ•แƒ˜แƒฅแƒชแƒ”แƒ•แƒ˜แƒ—. แƒฉแƒ•แƒ”แƒœ แƒ’แƒแƒ›แƒแƒ•แƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ— แƒžแƒ แƒแƒชแƒ”แƒกแƒ˜แƒก PID-แƒก, แƒ แƒแƒ’แƒแƒ แƒช แƒ’แƒแƒกแƒแƒฆแƒ”แƒ‘แƒก แƒ“แƒ แƒ’แƒแƒœแƒ•แƒกแƒแƒ–แƒฆแƒ•แƒ แƒแƒ•แƒ— แƒกแƒขแƒ แƒฃแƒฅแƒขแƒฃแƒ แƒแƒก, แƒ แƒแƒ’แƒแƒ แƒช แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒแƒก:

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 แƒ“แƒ แƒขแƒ˜แƒžแƒ˜แƒก แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ struct data_t. แƒชแƒฎแƒ แƒ˜แƒšแƒ˜ แƒฎแƒ”แƒšแƒ›แƒ˜แƒกแƒแƒฌแƒ•แƒ“แƒแƒ›แƒ˜ แƒ˜แƒฅแƒœแƒ”แƒ‘แƒ แƒฉแƒ•แƒ”แƒœแƒ˜ 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(). แƒแƒ›แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒฉแƒ•แƒ”แƒœ แƒ•แƒ˜แƒฆแƒ”แƒ‘แƒ— แƒ˜แƒ› แƒžแƒ แƒแƒชแƒ”แƒกแƒ˜แƒก PID-แƒก, แƒ แƒแƒ›แƒšแƒ˜แƒก แƒ™แƒแƒœแƒขแƒ”แƒฅแƒกแƒขแƒจแƒ˜แƒช แƒ•แƒ›แƒฃแƒจแƒแƒแƒ‘แƒ— แƒ“แƒ แƒ›แƒ˜แƒ›แƒ“แƒ˜แƒœแƒแƒ แƒ” แƒ“แƒ แƒแƒ˜แƒก แƒœแƒ˜แƒจแƒœแƒฃแƒšแƒก แƒœแƒแƒœแƒแƒฌแƒแƒ›แƒ”แƒ‘แƒจแƒ˜. แƒฉแƒ•แƒ”แƒœ แƒ•แƒฌแƒ”แƒ แƒ— แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒก แƒแƒฎแƒšแƒแƒ“ แƒจแƒ”แƒ แƒฉแƒ”แƒฃแƒšแƒจแƒ˜ struct data_t แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜. แƒฉแƒ•แƒ”แƒœ แƒ•แƒ˜แƒฆแƒ”แƒ‘แƒ— แƒ“แƒ˜แƒกแƒ™แƒ˜แƒก แƒกแƒแƒฎแƒ”แƒšแƒก แƒกแƒขแƒ แƒฃแƒฅแƒขแƒฃแƒ แƒ˜แƒ“แƒแƒœ แƒ‘แƒ˜แƒ, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ’แƒแƒ“แƒ˜แƒก แƒ“แƒแƒ แƒ”แƒ™แƒ•แƒ˜แƒกแƒแƒก generic_make_request()แƒ“แƒ แƒจแƒ”แƒ˜แƒœแƒแƒฎแƒ”แƒ— แƒ˜แƒ’แƒ˜ แƒ˜แƒ›แƒแƒ•แƒ” แƒกแƒขแƒ แƒฃแƒฅแƒขแƒฃแƒ แƒแƒจแƒ˜ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜. แƒ‘แƒแƒšแƒ แƒœแƒแƒ‘แƒ˜แƒฏแƒ˜ แƒแƒ แƒ˜แƒก แƒฉแƒแƒœแƒแƒฌแƒ”แƒ แƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ แƒฐแƒ”แƒจแƒ˜แƒก แƒชแƒฎแƒ แƒ˜แƒšแƒจแƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒแƒ“แƒ แƒ” แƒ˜แƒงแƒ แƒœแƒแƒฎแƒกแƒ”แƒœแƒ”แƒ‘แƒ˜.

แƒ“แƒแƒ‘แƒ แƒฃแƒœแƒ”แƒ‘แƒ˜แƒกแƒแƒก แƒ’แƒแƒ›แƒแƒ˜แƒซแƒแƒฎแƒ”แƒ‘แƒ แƒจแƒ”แƒ›แƒ“แƒ”แƒ’แƒ˜ แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ 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, แƒ แƒแƒ›แƒ”แƒšแƒ›แƒแƒช แƒ“แƒแƒ˜แƒฌแƒงแƒ แƒ—แƒ”แƒ›แƒ, แƒ แƒแƒ›แƒšแƒ˜แƒก แƒ™แƒแƒœแƒขแƒ”แƒฅแƒกแƒขแƒจแƒ˜แƒช แƒฉแƒ•แƒ”แƒœ แƒ•แƒ›แƒฃแƒจแƒแƒแƒ‘แƒ—. แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ, แƒ แƒแƒ›แƒ”แƒšแƒกแƒแƒช แƒฉแƒ•แƒ”แƒœ แƒ•แƒฃแƒฌแƒแƒ“แƒ”แƒ‘แƒ— bpf_get_current_pid_tgid() แƒแƒ‘แƒ แƒฃแƒœแƒ”แƒ‘แƒก แƒ แƒแƒ’แƒแƒ แƒช แƒœแƒแƒ™แƒแƒ“แƒ˜แƒก GID-แƒก, แƒแƒกแƒ”แƒ•แƒ” แƒ›แƒ˜แƒก PID-แƒก แƒ”แƒ แƒ—แƒ˜ 64-แƒ‘แƒ˜แƒขแƒ˜แƒแƒœแƒ˜ แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ˜แƒ—.

แƒขแƒ”แƒ แƒ›แƒ˜แƒœแƒแƒšแƒจแƒ˜ แƒ’แƒแƒ›แƒแƒขแƒแƒœแƒ˜แƒกแƒแƒก แƒฉแƒ•แƒ”แƒœ แƒแƒ›แƒŸแƒแƒ›แƒแƒ“ แƒแƒ  แƒ’แƒ•แƒแƒ˜แƒœแƒขแƒ”แƒ แƒ”แƒกแƒ”แƒ‘แƒก แƒ—แƒ”แƒ›แƒ, แƒ›แƒแƒ’แƒ แƒแƒ› แƒ’แƒ•แƒแƒ˜แƒœแƒขแƒ”แƒ แƒ”แƒกแƒ”แƒ‘แƒก แƒซแƒ˜แƒ แƒ˜แƒ—แƒแƒ“แƒ˜ แƒžแƒ แƒแƒชแƒ”แƒกแƒ˜. แƒ›แƒ˜แƒฆแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ“แƒแƒงแƒแƒ•แƒœแƒ”แƒ‘แƒ˜แƒก แƒ›แƒแƒชแƒ”แƒ›แƒฃแƒš แƒ–แƒฆแƒฃแƒ แƒ‘แƒšแƒ—แƒแƒœ แƒจแƒ”แƒ“แƒแƒ แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’, แƒฉแƒ•แƒ”แƒœ แƒ’แƒแƒ•แƒ“แƒ˜แƒ•แƒแƒ แƒ— แƒฉแƒ•แƒ”แƒœแƒก แƒกแƒขแƒ แƒฃแƒฅแƒขแƒฃแƒ แƒแƒก แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜ แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒšแƒ˜แƒก แƒกแƒ˜แƒ•แƒ แƒชแƒ”แƒจแƒ˜ แƒชแƒฎแƒ แƒ˜แƒšแƒ˜แƒก แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒ˜แƒ— แƒ›แƒแƒ•แƒšแƒ”แƒœแƒ”แƒ‘แƒ˜, แƒ แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’แƒแƒช แƒฉแƒ•แƒ”แƒœ แƒ•แƒจแƒšแƒ˜แƒ— แƒฉแƒแƒœแƒแƒฌแƒ”แƒ แƒก 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 แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ แƒ›แƒ”แƒจแƒ•แƒ”แƒแƒ‘แƒ˜แƒ— 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")

แƒฉแƒ•แƒ”แƒœแƒช แƒ›แƒแƒ’แƒ•แƒ˜แƒฌแƒ”แƒ•แƒก แƒ’แƒแƒœแƒ•แƒกแƒแƒ–แƒฆแƒ•แƒ แƒแƒ— struct data_t แƒฉแƒ•แƒ”แƒœแƒก แƒกแƒ™แƒ แƒ˜แƒžแƒขแƒจแƒ˜, แƒฌแƒ˜แƒœแƒแƒแƒฆแƒ›แƒ“แƒ”แƒ’ แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜ แƒฉแƒ•แƒ”แƒœ แƒ•แƒ”แƒ แƒแƒคแƒ”แƒ แƒก แƒฌแƒแƒ•แƒ˜แƒ™แƒ˜แƒ—แƒฎแƒแƒ•แƒ—:

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()

แƒ—แƒแƒ•แƒแƒ“ แƒกแƒ™แƒ แƒ˜แƒžแƒขแƒ˜ แƒฎแƒ”แƒšแƒ›แƒ˜แƒกแƒแƒฌแƒ•แƒ“แƒแƒ›แƒ˜แƒ แƒ›แƒ˜แƒกแƒแƒ›แƒแƒ แƒ—แƒ–แƒ” GITHub. แƒ›แƒแƒ“แƒ˜แƒ— แƒ•แƒชแƒแƒ“แƒแƒ— แƒ›แƒ˜แƒกแƒ˜ แƒ’แƒแƒจแƒ•แƒ”แƒ‘แƒ แƒกแƒแƒขแƒ”แƒกแƒขแƒ แƒžแƒšแƒแƒขแƒคแƒแƒ แƒ›แƒแƒ–แƒ”, แƒกแƒแƒ“แƒแƒช fio แƒ›แƒฃแƒจแƒแƒแƒ‘แƒก, แƒฌแƒ”แƒ แƒก bcache-แƒจแƒ˜ แƒ“แƒ แƒ›แƒแƒ•แƒฃแƒฌแƒแƒ“แƒ”แƒ‘แƒ— udevadm แƒ›แƒแƒœแƒ˜แƒขแƒแƒ แƒก:

แƒ›แƒแƒฆแƒแƒšแƒ˜ แƒชแƒ”แƒคแƒ˜แƒก แƒจแƒ”แƒงแƒแƒ•แƒœแƒ”แƒ‘แƒ˜แƒ“แƒแƒœ แƒ‘แƒ˜แƒ แƒ—แƒ•แƒ˜แƒก แƒžแƒแƒฉแƒแƒ›แƒ“แƒ” eBPF/BCC แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—
แƒ‘แƒแƒšแƒแƒก แƒ“แƒ แƒ‘แƒแƒšแƒแƒก! แƒแƒฎแƒšแƒ แƒฉแƒ•แƒ”แƒœ แƒ•แƒฎแƒ”แƒ“แƒแƒ•แƒ—, แƒ แƒแƒ› แƒ˜แƒก, แƒ แƒแƒช แƒจแƒ”แƒฉแƒ”แƒ แƒ”แƒ‘แƒฃแƒš bcache แƒ›แƒแƒฌแƒงแƒแƒ‘แƒ˜แƒšแƒแƒ‘แƒแƒก แƒฐแƒ’แƒแƒ•แƒ“แƒ, แƒกแƒ˜แƒœแƒแƒ›แƒ“แƒ•แƒ˜แƒšแƒ”แƒจแƒ˜ แƒจแƒ”แƒฉแƒ”แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ–แƒแƒ แƒ˜แƒ generic_make_request() แƒฅแƒ”แƒจแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ“แƒ˜แƒกแƒ™แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก.

แƒ˜แƒญแƒ แƒ”แƒ‘แƒ แƒ‘แƒ˜แƒ แƒ—แƒ•แƒจแƒ˜

แƒ™แƒแƒœแƒ™แƒ แƒ”แƒขแƒฃแƒšแƒแƒ“ แƒ แƒ แƒแƒ แƒ˜แƒก แƒจแƒ”แƒœแƒ”แƒšแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ˜แƒก แƒ’แƒแƒ“แƒแƒชแƒ”แƒ›แƒ˜แƒก แƒ“แƒ แƒแƒก? แƒฉแƒ•แƒ”แƒœ แƒ•แƒฎแƒ”แƒ“แƒแƒ•แƒ—, แƒ แƒแƒ› แƒ“แƒแƒ’แƒ•แƒ˜แƒแƒœแƒ”แƒ‘แƒ แƒฎแƒ“แƒ”แƒ‘แƒ แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ˜แƒก แƒแƒฆแƒ แƒ˜แƒชแƒฎแƒ•แƒ˜แƒก แƒ“แƒแƒฌแƒงแƒ”แƒ‘แƒแƒ›แƒ“แƒ”แƒช, แƒ”.แƒ˜. แƒ™แƒแƒœแƒ™แƒ แƒ”แƒขแƒฃแƒšแƒ˜ แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ˜แƒก แƒแƒฆแƒ แƒ˜แƒชแƒฎแƒ•แƒ แƒ›แƒแƒกแƒ–แƒ” แƒกแƒขแƒแƒขแƒ˜แƒกแƒขแƒ˜แƒ™แƒ˜แƒก (/proc/diskstats แƒแƒœ iostat) แƒจแƒ”แƒ›แƒ“แƒ’แƒแƒ›แƒ˜ แƒ’แƒแƒ›แƒแƒขแƒแƒœแƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘ แƒฏแƒ”แƒ  แƒแƒ  แƒ“แƒแƒฌแƒงแƒ”แƒ‘แƒฃแƒšแƒ. แƒแƒ›แƒ˜แƒก แƒ›แƒแƒ แƒขแƒ˜แƒ•แƒแƒ“ แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒ แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒ”แƒšแƒ˜แƒ iostat-แƒ˜แƒก แƒ’แƒแƒจแƒ•แƒ”แƒ‘แƒ˜แƒ— แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒ˜แƒก แƒ แƒ”แƒžแƒ แƒแƒ“แƒฃแƒชแƒ˜แƒ แƒ”แƒ‘แƒ˜แƒกแƒแƒก, แƒแƒœ BCC แƒกแƒ™แƒ แƒ˜แƒžแƒขแƒ˜แƒก แƒ‘แƒ˜แƒแƒšแƒแƒขแƒ”แƒœแƒขแƒแƒ‘แƒ, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ”แƒคแƒฃแƒซแƒœแƒ”แƒ‘แƒ แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ˜แƒก แƒแƒฆแƒ แƒ˜แƒชแƒฎแƒ•แƒ˜แƒก แƒ“แƒแƒฌแƒงแƒ”แƒ‘แƒแƒก แƒ“แƒ แƒ“แƒแƒกแƒแƒกแƒ แƒฃแƒšแƒก. แƒแƒ แƒชแƒ”แƒ แƒ—แƒ˜ แƒแƒ› แƒ™แƒแƒ›แƒฃแƒœแƒแƒšแƒฃแƒ แƒ˜ แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ แƒแƒ  แƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒก แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒ”แƒ‘แƒก แƒฅแƒ”แƒจแƒ˜แƒ แƒ”แƒ‘แƒฃแƒš แƒ“แƒ˜แƒกแƒ™แƒ–แƒ” แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ”แƒ‘แƒ—แƒแƒœ แƒ“แƒแƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ”แƒ‘แƒ˜แƒ—.

แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒแƒก แƒ—แƒฃ แƒ’แƒแƒ“แƒแƒ•แƒฎแƒ”แƒ“แƒแƒ•แƒ— generic_make_request(), แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒ•แƒœแƒแƒฎแƒแƒ•แƒ—, แƒ แƒแƒ› แƒกแƒแƒœแƒแƒ› แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ แƒ“แƒแƒ˜แƒฌแƒงแƒ”แƒ‘แƒก แƒแƒฆแƒ แƒ˜แƒชแƒฎแƒ•แƒแƒก, แƒ’แƒแƒ›แƒแƒ˜แƒซแƒแƒฎแƒ”แƒ‘แƒ แƒ™แƒ˜แƒ“แƒ”แƒ• แƒแƒ แƒ˜ โ€‹โ€‹แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ. แฒžแƒ˜แƒ แƒ•แƒ”แƒšแƒ˜ - generic_make_request_checks(), แƒแƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒก แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ˜แƒก แƒšแƒ”แƒ’แƒ˜แƒขแƒ˜แƒ›แƒฃแƒ แƒแƒ‘แƒแƒก แƒ“แƒ˜แƒกแƒ™แƒ˜แƒก แƒžแƒแƒ แƒแƒ›แƒ”แƒขแƒ แƒ”แƒ‘แƒ—แƒแƒœ แƒ“แƒแƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ”แƒ‘แƒ˜แƒ—. แƒ›แƒ”แƒแƒ แƒ” - blk_queue_enter(), แƒ แƒแƒ›แƒ”แƒšแƒกแƒแƒช แƒแƒฅแƒ•แƒก แƒกแƒแƒ˜แƒœแƒขแƒ”แƒ แƒ”แƒกแƒ แƒ’แƒแƒ›แƒแƒฌแƒ•แƒ”แƒ•แƒ Wait_event_interruptible():

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    	|                                    	|

แƒ แƒแƒ’แƒแƒ แƒช แƒฉแƒแƒœแƒก, แƒฉแƒ•แƒ”แƒœ แƒแƒฎแƒšแƒแƒก แƒ•แƒแƒ แƒ— แƒ’แƒแƒ›แƒแƒกแƒแƒ•แƒแƒšแƒ—แƒแƒœ. แƒ แƒ˜แƒ’แƒ˜แƒก แƒ’แƒแƒงแƒ˜แƒœแƒ•แƒ˜แƒก/แƒ’แƒแƒงแƒ˜แƒœแƒ•แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ”แƒ‘แƒ˜แƒ blk_mq_freeze_queue ะธ blk_mq_unfreeze_queue. แƒ˜แƒกแƒ˜แƒœแƒ˜ แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ, แƒ แƒแƒ“แƒ”แƒกแƒแƒช แƒกแƒแƒญแƒ˜แƒ แƒแƒ แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ˜แƒก แƒ แƒ˜แƒ’แƒ˜แƒก แƒžแƒแƒ แƒแƒ›แƒ”แƒขแƒ แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒชแƒ•แƒšแƒ, แƒ แƒแƒช แƒžแƒแƒขแƒ”แƒœแƒชแƒ˜แƒฃแƒ แƒแƒ“ แƒกแƒแƒจแƒ˜แƒจแƒ˜แƒ แƒแƒ› แƒ แƒ˜แƒ’แƒจแƒ˜ แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก. แƒ“แƒแƒ แƒ”แƒ™แƒ•แƒ˜แƒกแƒแƒก blk_mq_freeze_queue() แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ blk_freeze_queue_start() แƒ›แƒ แƒ˜แƒชแƒฎแƒ•แƒ”แƒšแƒ˜ แƒ’แƒแƒ˜แƒ–แƒแƒ แƒ“แƒ q->mq_แƒงแƒ˜แƒœแƒ•แƒ_แƒกแƒ˜แƒฆแƒ แƒ›แƒ”. แƒแƒ›แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’, แƒ‘แƒ˜แƒ แƒ—แƒ•แƒ˜ แƒ”แƒšแƒแƒ“แƒ”แƒ‘แƒ แƒ แƒ˜แƒ’แƒ˜แƒก แƒ“แƒแƒชแƒšแƒแƒก blk_mq_freeze_queue_wait().

แƒแƒ› แƒ แƒ˜แƒ’แƒ˜แƒก แƒ’แƒแƒกแƒแƒกแƒฃแƒคแƒ—แƒแƒ•แƒ”แƒ‘แƒšแƒแƒ“ แƒกแƒแƒญแƒ˜แƒ แƒ แƒ“แƒ แƒ แƒฃแƒ“แƒ แƒ˜แƒก แƒ“แƒ˜แƒกแƒ™แƒ˜แƒก แƒจแƒ”แƒงแƒแƒ•แƒœแƒ”แƒ‘แƒแƒก, แƒ แƒแƒ“แƒ’แƒแƒœ แƒ‘แƒ˜แƒ แƒ—แƒ•แƒ˜ แƒ”แƒšแƒแƒ“แƒ”แƒ‘แƒ แƒ แƒ˜แƒ’แƒจแƒ˜ แƒ›แƒ“แƒ’แƒแƒ›แƒ˜ แƒงแƒ•แƒ”แƒšแƒ แƒแƒžแƒ”แƒ แƒแƒชแƒ˜แƒ˜แƒก แƒ“แƒแƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒแƒก. แƒ แƒแƒ“แƒ”แƒกแƒแƒช แƒ แƒ˜แƒ’แƒ˜ แƒชแƒแƒ แƒ˜แƒ”แƒšแƒ˜แƒ, แƒžแƒแƒ แƒแƒ›แƒ”แƒขแƒ แƒ”แƒ‘แƒ˜แƒก แƒชแƒ•แƒšแƒ˜แƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜ แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ. แƒ แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’แƒแƒช แƒ”.แƒฌ blk_mq_unfreeze_queue(), แƒ›แƒ แƒ˜แƒชแƒฎแƒ•แƒ”แƒšแƒ˜แƒก แƒจแƒ”แƒ›แƒชแƒ˜แƒ แƒ”แƒ‘แƒ แƒ’แƒแƒงแƒ˜แƒœแƒ•แƒ_แƒกแƒ˜แƒฆแƒ แƒ›แƒ”.

แƒแƒฎแƒšแƒ แƒฉแƒ•แƒ”แƒœ แƒกแƒแƒ™แƒ›แƒแƒ แƒ˜แƒกแƒแƒ“ แƒ•แƒ˜แƒชแƒ˜แƒ— แƒกแƒ˜แƒขแƒฃแƒแƒชแƒ˜แƒ˜แƒก แƒ’แƒแƒ›แƒแƒกแƒแƒกแƒฌแƒแƒ แƒ”แƒ‘แƒšแƒแƒ“. udevadm แƒขแƒ แƒ˜แƒ’แƒ”แƒ แƒ˜แƒก แƒ‘แƒ แƒซแƒแƒœแƒ”แƒ‘แƒ แƒ˜แƒฌแƒ•แƒ”แƒ•แƒก แƒ‘แƒšแƒแƒ™แƒ˜แƒก แƒ›แƒแƒฌแƒงแƒแƒ‘แƒ˜แƒšแƒแƒ‘แƒ˜แƒก แƒžแƒแƒ แƒแƒ›แƒ”แƒขแƒ แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒแƒก. แƒ”แƒก แƒžแƒแƒ แƒแƒ›แƒ”แƒขแƒ แƒ”แƒ‘แƒ˜ แƒแƒฆแƒฌแƒ”แƒ แƒ˜แƒšแƒ˜แƒ udev-แƒ˜แƒก แƒฌแƒ”แƒกแƒ”แƒ‘แƒจแƒ˜. แƒฉแƒ•แƒ”แƒœ แƒจแƒ”แƒ’แƒ•แƒ˜แƒซแƒšแƒ˜แƒ แƒ•แƒ˜แƒžแƒแƒ•แƒแƒ— แƒ แƒแƒ›แƒ”แƒšแƒ˜ แƒžแƒแƒ แƒแƒ›แƒ”แƒขแƒ แƒ”แƒ‘แƒ˜ แƒงแƒ˜แƒœแƒแƒ•แƒก แƒ แƒ˜แƒ’แƒก แƒ›แƒแƒ—แƒ˜ แƒจแƒ”แƒชแƒ•แƒšแƒ˜แƒก แƒ›แƒชแƒ“แƒ”แƒšแƒแƒ‘แƒ˜แƒ— sysfs-แƒ˜แƒก แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒ˜แƒ— แƒแƒœ แƒ‘แƒ˜แƒ แƒ—แƒ•แƒ˜แƒก แƒฌแƒงแƒแƒ แƒแƒก แƒ™แƒแƒ“แƒ˜แƒก แƒ“แƒแƒ—แƒ•แƒแƒšแƒ˜แƒ”แƒ แƒ”แƒ‘แƒ˜แƒ—. แƒฉแƒ•แƒ”แƒœ แƒแƒกแƒ”แƒ•แƒ” แƒจแƒ”แƒ’แƒ•แƒ˜แƒซแƒšแƒ˜แƒ แƒ•แƒชแƒแƒ“แƒแƒ— BCC แƒฃแƒขแƒ˜แƒšแƒ˜แƒขแƒ แƒ™แƒ•แƒแƒšแƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ’แƒแƒ›แƒแƒ˜แƒขแƒแƒœแƒก แƒ‘แƒ˜แƒ แƒ—แƒ•แƒ˜แƒกแƒ แƒ“แƒ แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒšแƒ˜แƒก แƒกแƒ˜แƒ•แƒ แƒชแƒ˜แƒก แƒกแƒขแƒ”แƒ™แƒ˜แƒก แƒ™แƒ•แƒแƒšแƒก แƒขแƒ”แƒ แƒ›แƒ˜แƒœแƒแƒšแƒจแƒ˜ แƒ—แƒ˜แƒ—แƒแƒ”แƒฃแƒšแƒ˜ แƒ–แƒแƒ แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก blk_freeze_queue, แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒแƒ“:

~# /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 แƒ›แƒแƒ•แƒšแƒ”แƒœแƒ”แƒ‘แƒ˜แƒก แƒ’แƒ”แƒœแƒ”แƒ แƒ˜แƒ แƒ”แƒ‘แƒ, แƒ แƒแƒ“แƒ”แƒกแƒแƒช แƒ“แƒ˜แƒกแƒ™แƒ˜แƒก แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒแƒจแƒ˜ แƒชแƒ•แƒšแƒ˜แƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜ แƒแƒ  แƒแƒ แƒ˜แƒก (แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒแƒ“, แƒ›แƒแƒฌแƒงแƒแƒ‘แƒ˜แƒšแƒแƒ‘แƒ แƒแƒ  แƒแƒ แƒ˜แƒก แƒ“แƒแƒ›แƒแƒœแƒขแƒแƒŸแƒ”แƒ‘แƒฃแƒšแƒ˜/แƒ’แƒแƒ›แƒแƒ แƒ—แƒฃแƒšแƒ˜) แƒแƒ  แƒแƒ แƒ˜แƒก แƒ™แƒแƒ แƒ’แƒ˜ แƒžแƒ แƒแƒฅแƒขแƒ˜แƒ™แƒ. แƒ—แƒฃแƒ›แƒชแƒ, แƒฉแƒ•แƒ”แƒœ แƒจแƒ”แƒ’แƒ•แƒ˜แƒซแƒšแƒ˜แƒ แƒ“แƒแƒ•แƒ”แƒฎแƒ›แƒแƒ แƒแƒ— แƒ‘แƒ˜แƒ แƒ—แƒ•แƒก แƒแƒ  แƒ’แƒแƒแƒ™แƒ”แƒ—แƒแƒก แƒ–แƒ”แƒ“แƒ›แƒ”แƒขแƒ˜ แƒกแƒแƒ›แƒฃแƒจแƒแƒ แƒ“แƒ แƒ’แƒแƒงแƒ˜แƒœแƒแƒก แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ˜แƒก แƒ แƒ˜แƒ’แƒ˜, แƒ—แƒฃ แƒ”แƒก แƒแƒ  แƒแƒ แƒ˜แƒก แƒกแƒแƒญแƒ˜แƒ แƒ. แƒกแƒแƒ›แƒ˜ แƒžแƒแƒขแƒแƒ แƒ แƒฉแƒแƒ˜แƒ“แƒ˜แƒœแƒแƒก แƒกแƒ˜แƒขแƒฃแƒแƒชแƒ˜แƒ˜แƒก แƒ’แƒแƒ›แƒแƒกแƒฌแƒแƒ แƒ”แƒ‘แƒ.

แƒ“แƒแƒกแƒ™แƒ•แƒœแƒ

eBPF แƒแƒ แƒ˜แƒก แƒซแƒแƒšแƒ˜แƒแƒœ แƒ›แƒแƒฅแƒœแƒ˜แƒšแƒ˜ แƒ“แƒ แƒซแƒšแƒ˜แƒ”แƒ แƒ˜ แƒ˜แƒœแƒกแƒขแƒ แƒฃแƒ›แƒ”แƒœแƒขแƒ˜. แƒกแƒขแƒแƒขแƒ˜แƒแƒจแƒ˜ แƒฉแƒ•แƒ”แƒœ แƒ’แƒแƒ“แƒแƒ•แƒฎแƒ”แƒ“แƒ”แƒ— แƒ”แƒ แƒ— แƒžแƒ แƒแƒฅแƒขแƒ˜แƒ™แƒฃแƒš แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒก แƒ“แƒ แƒ•แƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ— แƒ›แƒชแƒ˜แƒ แƒ” แƒœแƒแƒฌแƒ˜แƒšแƒ˜ แƒ˜แƒ›แƒ˜แƒกแƒ, แƒ แƒ˜แƒกแƒ˜ แƒ’แƒแƒ™แƒ”แƒ—แƒ”แƒ‘แƒแƒช แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ. แƒ—แƒฃ แƒ—แƒฅแƒ•แƒ”แƒœ แƒ“แƒแƒ˜แƒœแƒขแƒ”แƒ แƒ”แƒกแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒฎแƒแƒ แƒ— BCC แƒ™แƒแƒ›แƒฃแƒœแƒแƒšแƒฃแƒ แƒ˜ แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒ›แƒฃแƒจแƒแƒ•แƒ”แƒ‘แƒ˜แƒ—, แƒฆแƒ˜แƒ แƒก แƒ’แƒแƒ“แƒแƒฎแƒ”แƒ“แƒแƒ— แƒแƒคแƒ˜แƒชแƒ˜แƒแƒšแƒฃแƒ แƒ˜ แƒ’แƒแƒ™แƒ•แƒ”แƒ—แƒ˜แƒšแƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ™แƒแƒ แƒ’แƒแƒ“ แƒแƒฆแƒฌแƒ”แƒ แƒก แƒกแƒแƒคแƒฃแƒซแƒ•แƒšแƒ”แƒ‘แƒก.

แƒแƒ แƒกแƒ”แƒ‘แƒแƒ‘แƒก แƒกแƒฎแƒ•แƒ แƒกแƒแƒ˜แƒœแƒขแƒ”แƒ แƒ”แƒกแƒ แƒ’แƒแƒ›แƒแƒ แƒ—แƒ•แƒ˜แƒกแƒ แƒ“แƒ แƒžแƒ แƒแƒคแƒ˜แƒšแƒ˜แƒ แƒ”แƒ‘แƒ˜แƒก แƒ˜แƒœแƒกแƒขแƒ แƒฃแƒ›แƒ”แƒœแƒขแƒ”แƒ‘แƒ˜, แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒ˜แƒช แƒ“แƒแƒคแƒฃแƒซแƒœแƒ”แƒ‘แƒฃแƒšแƒ˜แƒ eBPF-แƒ–แƒ”. แฒ”แƒ แƒ— - แƒ”แƒ แƒ—แƒ˜ แƒ›แƒแƒ—แƒ’แƒแƒœแƒ˜ - bpftrace, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒแƒก แƒ’แƒแƒซแƒšแƒ”แƒ•แƒ— แƒ“แƒแƒฌแƒ”แƒ แƒแƒ— แƒซแƒšแƒ˜แƒ”แƒ แƒ˜ แƒ”แƒ แƒ—แƒ˜ แƒšแƒแƒ˜แƒœแƒ”แƒ แƒ˜ แƒ“แƒ แƒžแƒแƒขแƒแƒ แƒ แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ”แƒ‘แƒ˜ awk-แƒ˜แƒก แƒ›แƒกแƒ’แƒแƒ•แƒก แƒ”แƒœแƒแƒ–แƒ”. แƒกแƒฎแƒ•แƒ - ebpf_exporter, แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒแƒก แƒ’แƒแƒซแƒšแƒ”แƒ•แƒ— แƒจแƒ”แƒแƒ’แƒ แƒแƒ•แƒแƒ— แƒ“แƒแƒ‘แƒแƒšแƒ˜ แƒ“แƒแƒœแƒ˜แƒก, แƒ›แƒแƒฆแƒแƒšแƒ˜ แƒ’แƒแƒ แƒฉแƒ”แƒ•แƒแƒ“แƒแƒ‘แƒ˜แƒก แƒ›แƒ”แƒขแƒ แƒ˜แƒ™แƒ แƒžแƒ˜แƒ แƒ“แƒแƒžแƒ˜แƒ  แƒ—แƒฅแƒ•แƒ”แƒœแƒก แƒžแƒ แƒแƒ›แƒ”แƒ—แƒ”แƒก แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ–แƒ”, แƒจแƒ”แƒ›แƒ“แƒ’แƒแƒ›แƒจแƒ˜ แƒšแƒแƒ›แƒแƒ–แƒ˜ แƒ•แƒ˜แƒ–แƒฃแƒแƒšแƒ˜แƒ–แƒแƒชแƒ˜แƒ˜แƒกแƒ แƒ“แƒ แƒ’แƒแƒคแƒ แƒ—แƒฎแƒ˜แƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒก แƒ›แƒ˜แƒฆแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒšแƒแƒ‘แƒ˜แƒ—.

แƒฌแƒงแƒแƒ แƒ: www.habr.com

แƒแƒฎแƒแƒšแƒ˜ แƒ™แƒแƒ›แƒ”แƒœแƒขแƒแƒ แƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ