рд▓рд┐рдирдХреНрд╕рд╕рдБрдЧ рдХрд░реНрдиреЗрд▓ рд░ рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╣рд░реВ рдбрд┐рдмрдЧ рдЧрд░реНрдирдХрд╛ рд▓рд╛рдЧрд┐ рдареВрд▓реЛ рд╕рдВрдЦреНрдпрд╛рдорд╛ рдЙрдкрдХрд░рдгрд╣рд░реВ рдЫрдиреНред рддрд┐рдиреАрд╣рд░реВрдордзреНрдпреЗ рдзреЗрд░реИрд▓реЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдкреНрд░рджрд░реНрд╢рдирдорд╛ рдирдХрд╛рд░рд╛рддреНрдордХ рдкреНрд░рднрд╛рд╡ рдкрд╛рд░реНрдЫ рд░ рдЙрддреНрдкрд╛рджрдирдорд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХрд┐рдБрджреИрдиред
рдХреЗрд╣реА рд╡рд░реНрд╖ рдкрд╣рд┐рд▓реЗ рддреНрдпрд╣рд╛рдБ рдерд┐рдпреЛ
рддреНрдпрд╣рд╛рдБ рдкрд╣рд┐рд▓реЗ рдиреИ рдзреЗрд░реИ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдЙрдкрдпреЛрдЧрд┐рддрд╛рд╣рд░реВ рдЫрдиреН рдЬреБрди eBPF рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджрдЫ, рд░ рдпрд╕ рд▓реЗрдЦрдорд╛ рд╣рд╛рдореА рдкреБрд╕реНрддрдХрд╛рд▓рдпрдорд╛ рдЖрдзрд╛рд░рд┐рдд рддрдкрд╛рдЗрдБрдХреЛ рдЖрдлреНрдиреИ рдкреНрд░реЛрдлрд╛рдЗрд▓рд┐рдЩ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХрд╕рд░реА рд▓реЗрдЦреНрдиреЗ рднрдиреЗрд░ рд╣реЗрд░реНрдиреЗрдЫреМрдВред
Ceph рдврд┐рд▓реЛ рдЫ
Ceph рдХреНрд▓рд╕реНрдЯрд░рдорд╛ рдирдпрд╛рдБ рд╣реЛрд╕реНрдЯ рдердкрд┐рдПрдХреЛ рдЫред рдпрд╕рдорд╛ рдХреЗрд╣реА рдбрд╛рдЯрд╛ рдорд╛рдЗрдЧреНрд░реЗрдЯ рдЧрд░реЗрдкрдЫрд┐, рд╣рд╛рдореАрд▓реЗ рдпреЛ рджреНрд╡рд╛рд░рд╛ рд▓реЗрдЦрд┐рдПрдХрд╛ рдЕрдиреБрд░реЛрдзрд╣рд░реВ рдкреНрд░рд╢реЛрдзрди рдЧрд░реНрдиреЗ рдЧрддрд┐ рдЕрдиреНрдп рд╕рд░реНрднрд░рд╣рд░реВрдХреЛ рддреБрд▓рдирд╛рдорд╛ рдзреЗрд░реИ рдХрдо рднрдПрдХреЛ рджреЗрдЦреНрдпреМрдВред
рдЕрдиреНрдп рдкреНрд▓реЗрдЯрдлрд░реНрдорд╣рд░реВрдХреЛ рд╡рд┐рдкрд░реАрдд, рдпреЛ рд╣реЛрд╕реНрдЯрд▓реЗ bcache рд░ рдирдпрд╛рдБ рд▓рд┐рдирдХреНрд╕ 4.15 рдХрд░реНрдиреЗрд▓ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдпреЛред рдпреЛ рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рдирдХреЛ рд╣реЛрд╕реНрдЯ рдпрд╣рд╛рдБ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдПрдХреЛ рдпреЛ рдкрд╣рд┐рд▓реЛ рдкрдЯрдХ рдерд┐рдпреЛред рд░ рддреНрдпрд╕ рдХреНрд╖рдгрдорд╛ рдпреЛ рд╕реНрдкрд╖реНрдЯ рдерд┐рдпреЛ рдХрд┐ рд╕рдорд╕реНрдпрд╛рдХреЛ рдЬрд░рд╛ рд╕реИрджреНрдзрд╛рдиреНрддрд┐рдХ рд░реВрдкрдорд╛ рдХреЗрд╣рд┐ рдкрдирд┐ рд╣реБрди рд╕рдХреНрдЫред
рдЖрдпреЛрдЬрдХрдХреЛ рдЦреЛрдЬреА рдЧрд░реНрджреИ
ceph-osd рдкреНрд░рдХреНрд░рд┐рдпрд╛ рднрд┐рддреНрд░ рдХреЗ рд╣реБрдиреНрдЫ рд╣реЗрд░реЗрд░ рд╕реБрд░реБ рдЧрд░реМрдВред рдпрд╕рдХрд╛ рд▓рд╛рдЧрд┐ рд╣рд╛рдореА рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗрдЫреМрдВ
рддрд╕реНрд╡рд┐рд░рд▓реЗ рд╣рд╛рдореАрд▓рд╛рдИ рдмрддрд╛рдЙрдБрдЫ рдХрд┐ рдХрд╛рд░реНрдп fdatasync() рдХрд╛рд░реНрдпрд╣рд░реВрдорд╛ рдЕрдиреБрд░реЛрдз рдкрдард╛рдЙрди рдзреЗрд░реИ рд╕рдордп рдЦрд░реНрдЪ рднрдпреЛ generic_make_request()ред рдпрд╕рдХреЛ рдорддрд▓рдм рдпреЛ рд╣реЛ рдХрд┐ рд╕рдореНрднрд╡рддрдГ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдХрд╛рд░рдг рдХрддреИ osd рдбреЗрдорди рдмрд╛рд╣рд┐рд░ рдиреИ рдЫред рдпреЛ рдпрд╛ рдд рдХрд░реНрдиреЗрд▓ рд╡рд╛ рдбрд┐рд╕реНрдХ рд╣реБрди рд╕рдХреНрдЫред iostat рдЖрдЙрдЯрдкреБрдЯрд▓реЗ bcache рдбрд┐рд╕реНрдХрд╣рд░реВ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╢реЛрдзрди рдЕрдиреБрд░реЛрдзрд╣рд░реВрдорд╛ рдЙрдЪреНрдЪ рд╡рд┐рд▓рдореНрдмрддрд╛ рджреЗрдЦрд╛рдпреЛред
рд╣реЛрд╕реНрдЯ рдЬрд╛рдБрдЪ рдЧрд░реНрджрд╛, рд╣рд╛рдореАрд▓реЗ рдкрддреНрддрд╛ рд▓рдЧрд╛рдпреМрдВ рдХрд┐ systemd-udevd рдбреЗрдордирд▓реЗ CPU рд╕рдордпрдХреЛ рдареВрд▓реЛ рдорд╛рддреНрд░рд╛ рдЦрдкрдд рдЧрд░реНрдЫ - рдзреЗрд░реИ рдХреЛрд░рд╣рд░реВрдорд╛ рд▓рдЧрднрдЧ 20%ред рдпреЛ рдЕрдиреМрдареЛ рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реЛ, рддреНрдпрд╕реИрд▓реЗ рддрдкрд╛рдИрдВрд▓реЗ рдХрд┐рди рдкрддреНрддрд╛ рд▓рдЧрд╛рдЙрди рдЖрд╡рд╢реНрдпрдХ рдЫред Systemd-udevd рд▓реЗ uevents рд╕рдВрдЧ рдХрд╛рдо рдЧрд░реЗрдХреЛ рд╣реБрдирд╛рд▓реЗ, рд╣рд╛рдореАрд▓реЗ рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ рд╣реЗрд░реНрдиреЗ рдирд┐рд░реНрдгрдп рдЧрд░реНрдпреМрдВ udevadm рдордирд┐рдЯрд░ред рдпреЛ рдмрд╛рд╣рд┐рд░ рдЬрд╛рдиреНрдЫ рдХрд┐ рдкреНрд░рдгрд╛рд▓реАрдорд╛ рдкреНрд░рддреНрдпреЗрдХ рдмреНрд▓рдХ рдЙрдкрдХрд░рдгрдХреЛ рд▓рд╛рдЧрд┐ рдкрд░рд┐рд╡рд░реНрддрди рдШрдЯрдирд╛рд╣рд░реВрдХреЛ рдареВрд▓реЛ рд╕рдВрдЦреНрдпрд╛ рдЙрддреНрдкрдиреНрди рднрдПрдХреЛ рдерд┐рдпреЛред рдпреЛ рдПрдХрджрдо рдЕрд╕рд╛рдорд╛рдиреНрдп рдЫ, рддреНрдпрд╕реИрд▓реЗ рд╣рд╛рдореАрд▓реЗ рдпреА рд╕рдмреИ рдШрдЯрдирд╛рд╣рд░реВ рдХреЗ рдЙрддреНрдкрдиреНрди рдЧрд░реНрдЫ рднрдиреЗрд░ рд╣реЗрд░реНрдиреБ рдкрд░реНрдЫред
BCC Toolkit рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджреИ
рд╣рд╛рдореАрд▓реЗ рдкрд╣рд┐рд▓реЗ рдиреИ рдкрддреНрддрд╛ рд▓рдЧрд╛рдПрдХрд╛ рдЫреМрдВ, рдХрд░реНрдиреЗрд▓ (рд░ рдкреНрд░рдгрд╛рд▓реА рдХрд▓рдорд╛ рд╕реЗрдл рдбреЗрдорди) рдзреЗрд░реИ рд╕рдордп рдЦрд░реНрдЪ рдЧрд░реНрджрдЫред generic_make_request()ред рдпрд╕ рдкреНрд░рдХрд╛рд░реНрдпрдХреЛ рдЧрддрд┐ рдирд╛рдкреНрдиреЗ рдкреНрд░рдпрд╛рд╕ рдЧрд░реМрдВред IN
рдпреЛ рд╕реБрд╡рд┐рдзрд╛ рд╕рд╛рдорд╛рдиреНрдпрддрдпрд╛ рдЫрд┐рдЯреЛ рдХрд╛рдо рдЧрд░реНрджрдЫред рд╕рдмреИ рдпреЛ рдЧрд░реНрдЫ рдХрд┐ рдпрдиреНрддреНрд░ рдЪрд╛рд▓рдХ рд▓рд╛рдордорд╛ рдЕрдиреБрд░реЛрдз рдкрд╛рд╕ рдЧрд░реНрджрдЫред
Bcache рдПрдХ рдЬрдЯрд┐рд▓ рдЙрдкрдХрд░рдг рд╣реЛ рдЬреБрди рд╡рд╛рд╕реНрддрд╡рдорд╛ рддреАрди рдбрд┐рд╕реНрдХрд╣рд░реВ рд╕рдорд╛рд╡реЗрд╢ рдЧрд░реНрджрдЫ:
- рдмреНрдпрд╛рдХрд┐рдЩ рдЙрдкрдХрд░рдг (рдХреНрдпрд╛рд╕ рдбрд┐рд╕реНрдХ), рдпрд╕ рдЕрд╡рд╕реНрдерд╛рдорд╛ рдпреЛ рдПрдХ рдврд┐рд▓реЛ HDD рд╣реЛ;
- рдХреНрдпрд╛рд╕рд┐рдЩ рдпрдиреНрддреНрд░ (рдХреНрдпрд╛рд╕рд┐рдЩ рдбрд┐рд╕реНрдХ), рдпрд╣рд╛рдБ рдпреЛ NVMe рдпрдиреНрддреНрд░рдХреЛ рдПрдЙрдЯрд╛ рд╡рд┐рднрд╛рдЬрди рд╣реЛ;
- bcache рднрд░реНрдЪреБрдЕрд▓ рдЙрдкрдХрд░рдг рдЬрд╕рдХреЛ рд╕рд╛рде рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдЪрд▓реНрдЫред
рд╣рд╛рдореАрд▓рд╛рдИ рдерд╛рд╣рд╛ рдЫ рдХрд┐ рдЕрдиреБрд░реЛрдз рдкреНрд░рд╕рд╛рд░рдг рдврд┐рд▓реЛ рдЫ, рддрд░ рдпреА рдордзреНрдпреЗ рдХреБрди рдЙрдкрдХрд░рдгрдХреЛ рд▓рд╛рдЧрд┐? рд╣рд╛рдореА рдпреЛ рдХреЗрд╣рд┐ рдкрдЫрд┐ рд╡реНрдпрд╡рд╣рд╛рд░ рдЧрд░реНрдиреЗрдЫреМрдВред
рд╣рд╛рдореАрд▓рд╛рдИ рдЕрдм рдерд╛рд╣рд╛ рдЫ рдХрд┐ uevents рд▓реЗ рд╕рдорд╕реНрдпрд╛ рдирд┐рдореНрддреНрдпрд╛рдЙрди рд╕рдХреНрдЫред рддрд┐рдиреАрд╣рд░реВрдХреЛ рдкреБрд╕реНрддрд╛рдХреЛ рдХрд╛рд░рдг рдХреЗ рд╣реЛ рднрдиреЗрд░ рдкрддреНрддрд╛ рд▓рдЧрд╛рдЙрди рддреНрдпрддрд┐ рд╕рдЬрд┐рд▓реЛ рдЫреИрдиред рдорд╛рдиреМрдВ рдХрд┐ рдпреЛ рдХреЗрд╣рд┐ рдкреНрд░рдХрд╛рд░рдХреЛ рд╕рдлреНрдЯрд╡реЗрдпрд░ рд╣реЛ рдЬреБрди рдЖрд╡рдзрд┐рдХ рд░реВрдкрдорд╛ рд╕реБрд░реБ рд╣реБрдиреНрдЫред рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдкреНрд░рдгрд╛рд▓реАрдорд╛ рдХрд╕реНрддреЛ рдкреНрд░рдХрд╛рд░рдХреЛ рд╕рдлреНрдЯрд╡реЗрдпрд░ рдЪрд▓реНрдЫ рд╣реЗрд░реМрдВ execsnoop рдЙрд╣реА рдмрд╛рдЯ
рдЙрджрд╛рд╣рд░рдг рдХреЛ рд▓рд╛рдЧреА рдпреЛ рдЬрд╕реНрддреИ:
/usr/share/bcc/tools/execsnoop | tee ./execdump
рд╣рд╛рдореА рдпрд╣рд╛рдБ execsnoop рдХреЛ рдкреВрд░реНрдг рдЖрдЙрдЯрдкреБрдЯ рджреЗрдЦрд╛рдЙрдиреЗ рдЫреИрдиреМрдВ, рддрд░ рд╣рд╛рдореАрд▓рд╛рдИ рдЪрд╛рд╕реЛрдХреЛ рдПрдХ рд▓рд╛рдЗрди рдпрд╕реНрддреЛ рджреЗрдЦрд┐рдиреНрдереНрдпреЛ:
sh 1764905 5802 0 sudo arcconf getconfig 1 AD | grep Temperature | awk -F '[:/]' '{print $2}' | sed 's/^ ([0-9]*) C.*/1/'
рддреЗрд╕реНрд░реЛ рд╕реНрддрдореНрдн рдкреНрд░рдХреНрд░рд┐рдпрд╛рдХреЛ PPID (рдЕрднрд┐рднрд╛рд╡рдХ PID) рд╣реЛред PID 5802 рдХреЛ рд╕рд╛рде рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣рд╛рдореНрд░реЛ рдЕрдиреБрдЧрдорди рдкреНрд░рдгрд╛рд▓реАрдХреЛ рдереНрд░реЗрдб рдордзреНрдпреЗ рдПрдХ рд╣реЛред рдЕрдиреБрдЧрдорди рдкреНрд░рдгрд╛рд▓реАрдХреЛ рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди рдЬрд╛рдБрдЪ рдЧрд░реНрджрд╛, рддреНрд░реБрдЯрд┐рдкреВрд░реНрдг рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рд╣рд░реВ рдлреЗрд▓рд╛ рдкрд░реЗред HBA рдПрдбрд╛рдкреНрдЯрд░рдХреЛ рддрд╛рдкрдХреНрд░рдо рд╣рд░реЗрдХ 30 рд╕реЗрдХреЗрдиреНрдбрдорд╛ рд▓рд┐рдЗрдпреЛ, рдЬреБрди рдЖрд╡рд╢реНрдпрдХ рднрдиреНрджрд╛ рдзреЗрд░реИ рдкрдЯрдХ рд╣реЛред рдЪреЗрдХ рдЕрдиреНрддрд░рд╛рд▓рд▓рд╛рдИ рд▓рд╛рдореЛрдорд╛ рдкрд░рд┐рд╡рд░реНрддрди рдЧрд░реЗрдкрдЫрд┐, рд╣рд╛рдореАрд▓реЗ рдлреЗрд▓рд╛ рдкрд╛рд░реНрдпреМрдВ рдХрд┐ рдпрд╕ рд╣реЛрд╕реНрдЯрдорд╛ рдЕрдиреБрд░реЛрдз рдкреНрд░рд╢реЛрдзрди рд╡рд┐рд▓рдореНрдмрддрд╛ рдЕрдиреНрдп рд╣реЛрд╕реНрдЯрд╣рд░реВрдХреЛ рддреБрд▓рдирд╛рдорд╛ рдЙрдкреНрд░рд╛рдиреНрдд рдЙрднрд┐рдПрдХреЛ рдЫреИрдиред
рддрд░ рдпреЛ рдЕрдЭреИ рд╕реНрдкрд╖реНрдЯ рдЫреИрди рдХрд┐рди bcache рдЙрдкрдХрд░рдг рдпрддрд┐ рдврд┐рд▓реЛ рдерд┐рдпреЛред рд╣рд╛рдореАрд▓реЗ рдПрдЙрдЯреИ рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рдирдХреЛ рд╕рд╛рде рдкрд░реАрдХреНрд╖рдг рдкреНрд▓реЗрдЯрдлрд░реНрдо рддрдпрд╛рд░ рдЧрд░реНрдпреМрдВ рд░ bcache рдорд╛ fio рдЪрд▓рд╛рдПрд░ рд╕рдорд╕реНрдпрд╛ рдкреБрди: рдЙрддреНрдкрд╛рджрди рдЧрд░реНрдиреЗ рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрдпреМрдВ, рдЖрд╡рдзрд┐рдХ рд░реВрдкрдорд╛ uevadm рдЯреНрд░рд┐рдЧрд░ рдЪрд▓рд╛рдПрд░ uevents рдЙрддреНрдкрдиреНрди рдЧрд░реНрдиред
BCC-рдЖрдзрд╛рд░рд┐рдд рдЙрдкрдХрд░рдгрд╣рд░реВ рд▓реЗрдЦрди
рд╕рдмреИрднрдиреНрджрд╛ рдврд┐рд▓реЛ рдХрд▓рд╣рд░реВ рдЯреНрд░реЗрд╕ рдЧрд░реНрди рд░ рдкреНрд░рджрд░реНрд╢рди рдЧрд░реНрди рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЙрдкрдпреЛрдЧрд┐рддрд╛ рд▓реЗрдЦреНрдиреЗ рдкреНрд░рдпрд╛рд╕ рдЧрд░реМрдВ generic_make_request()ред рд╣рд╛рдореА рдбреНрд░рд╛рдЗрднрдХреЛ рдирд╛рдордорд╛ рдкрдирд┐ рд░реБрдЪрд┐ рд░рд╛рдЦреНрдЫреМрдВ рдЬрд╕рдХреЛ рд▓рд╛рдЧрд┐ рдпреЛ рдкреНрд░рдХрд╛рд░реНрдп рдмреЛрд▓рд╛рдЗрдПрдХреЛ рдерд┐рдпреЛред
рдпреЛрдЬрдирд╛ рд╕рд░рд▓ рдЫ:
- рджрд░реНрддрд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реН kprobe рдорд╛ generic_make_request():
- рд╣рд╛рдореА рдбрд┐рд╕реНрдХ рдирд╛рдо рдореЗрдореЛрд░реАрдорд╛ рдмрдЪрдд рдЧрд░реНрдЫреМрдВ, рдкреНрд░рдХрд╛рд░реНрдп рддрд░реНрдХ рдорд╛рд░реНрдлрдд рдкрд╣реБрдБрдЪрдпреЛрдЧреНрдп;
- рд╣рд╛рдореА рдЯрд╛рдЗрдорд╕реНрдЯреНрдпрд╛рдореНрдк рдмрдЪрдд рдЧрд░реНрдЫреМрдВред
- рджрд░реНрддрд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реН kretprobe рдмрд╛рдЯ рдлрд┐рд░реНрддрд╛рдХреЛ рд▓рд╛рдЧрд┐ generic_make_request():
- рд╣рд╛рдореАрд▓реЗ рд╣рд╛рд▓рдХреЛ рдЯрд╛рдЗрдорд╕реНрдЯреНрдпрд╛рдореНрдк рдкрд╛рдЙрдБрдЫреМрдВ;
- рд╣рд╛рдореА рдмрдЪрдд рдЧрд░рд┐рдПрдХреЛ рдЯрд╛рдЗрдорд╕реНрдЯреНрдпрд╛рдореНрдк рдЦреЛрдЬреНрдЫреМрдВ рд░ рдпрд╕рд▓рд╛рдИ рд╣рд╛рд▓рдХреЛрд╕рдБрдЧ рддреБрд▓рдирд╛ рдЧрд░реНрдЫреМрдВ;
- рдпрджрд┐ рдирддрд┐рдЬрд╛ рддреЛрдХрд┐рдПрдХреЛ рднрдиреНрджрд╛ рдареВрд▓реЛ рдЫ рднрдиреЗ, рд╣рд╛рдореА рд╕реБрд░рдХреНрд╖рд┐рдд рдбрд┐рд╕реНрдХ рдирд╛рдо рдлреЗрд▓рд╛ рдкрд╛рд░реНрдЫреМрдВ рд░ рдпрд╕рд▓рд╛рдИ рдЯрд░реНрдорд┐рдирд▓рдорд╛ рдкреНрд░рджрд░реНрд╢рди рдЧрд░реНрдЫреМрдВред
Kprobes ╨╕ kretprobes рдлреНрд▓рд╛рдИрдорд╛ рдкреНрд░рдХрд╛рд░реНрдп рдХреЛрдб рдкрд░рд┐рд╡рд░реНрддрди рдЧрд░реНрди рдмреНрд░реЗрдХрдкреЛрдЗрдиреНрдЯ рдореЗрдХрд╛рдирд┐рдЬрдо рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреБрд╣реЛрд╕реНред рдкрдвреНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ
рдкрд╛рдЗрдерди рд▓рд┐рдкрд┐ рднрд┐рддреНрд░рдХреЛ eBPF рдкрд╛рда рдпрд╕реНрддреЛ рджреЗрдЦрд┐рдиреНрдЫ:
bpf_text = тАЬтАЭтАЭ # Here will be the bpf program code тАЬтАЭтАЭ
рдкреНрд░рдХрд╛рд░реНрдпрд╣рд░реВ рдмреАрдЪ рдбрд╛рдЯрд╛ рдЖрджрд╛рди рдкреНрд░рджрд╛рди рдЧрд░реНрди, eBPF рдХрд╛рд░реНрдпрдХреНрд░рдорд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджрдЫ
struct data_t {
u64 pid;
u64 ts;
char comm[TASK_COMM_LEN];
u64 lat;
char disk[DISK_NAME_LEN];
};
BPF_HASH(p, u64, struct data_t);
BPF_PERF_OUTPUT(events);
рдпрд╣рд╛рдБ рд╣рд╛рдореА рдирд╛рдордХ рд╣реНрдпрд╛рд╕ рддрд╛рд▓рд┐рдХрд╛ рджрд░реНрддрд╛ рдЧрд░реНрдЫреМрдВ p, рдХреБрдЮреНрдЬреА рдкреНрд░рдХрд╛рд░рдХреЛ рд╕рд╛рде u64 рд░ рдкреНрд░рдХрд╛рд░рдХреЛ рдореВрд▓реНрдп рд╕рдВрд░рдЪрдирд╛ рдбреЗрдЯрд╛_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():
void stop(struct pt_regs *ctx) {
u64 pid = bpf_get_current_pid_tgid();
u64 ts = bpf_ktime_get_ns();
struct data_t* data = p.lookup(&pid);
if (data != 0 && data->ts > 0) {
bpf_get_current_comm(&data->comm, sizeof(data->comm));
data->lat = (ts - data->ts)/1000;
if (data->lat > MIN_US) {
FACTOR
data->pid >>= 32;
events.perf_submit(ctx, data, sizeof(struct data_t));
}
p.delete(&pid);
}
}
рдпреЛ рдкреНрд░рдХрд╛рд░реНрдп рдЕрдШрд┐рд▓реНрд▓реЛ рдПрдХ рдЬрд╕реНрддреИ рдЫ: рд╣рд╛рдореА рдкреНрд░рдХреНрд░рд┐рдпрд╛рдХреЛ PID рд░ рдЯрд╛рдЗрдорд╕реНрдЯреНрдпрд╛рдореНрдк рдкрддреНрддрд╛ рд▓рдЧрд╛рдЙрдБрджрдЫреМрдВ, рддрд░ рдирдпрд╛рдБ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдХреЛ рд▓рд╛рдЧрд┐ рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрд┐рдд рдЧрд░реНрджреИрдиреМрдВред рдпрд╕рдХреЛ рд╕рдЯреНрдЯрд╛, рд╣рд╛рдореА рдХреБрдЮреНрдЬреА == рд╣рд╛рд▓рдХреЛ PID рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдкрд╣рд┐рд▓реЗ рдиреИ рдЕрд╡рд╕реНрдерд┐рдд рд╕рдВрд░рдЪрдирд╛рдХреЛ рд▓рд╛рдЧрд┐ рд╣реНрдпрд╛рд╕ рддрд╛рд▓рд┐рдХрд╛ рдЦреЛрдЬреНрдЫреМрдВред рдпрджрд┐ рд╕рдВрд░рдЪрдирд╛ рдлреЗрд▓рд╛ рдкрд░реНрдпреЛ рднрдиреЗ, рд╣рд╛рдореА рдЪрд▓рд┐рд░рд╣реЗрдХреЛ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдХреЛ рдирд╛рдо рдлреЗрд▓рд╛ рдкрд╛рд░реНрдЫреМрдВ рд░ рдпрд╕рд▓рд╛рдИ рдердкреНрдЫреМрдВред
рд╣рд╛рдореАрд▓реЗ рдпрд╣рд╛рдБ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗ рдмрд╛рдЗрдирд░реА рд╢рд┐рдлреНрдЯ рдереНрд░реЗрдб GID рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫред рддреАред рдореБрдЦреНрдп рдкреНрд░рдХреНрд░рд┐рдпрд╛рдХреЛ PID рдЬреБрди рдереНрд░реЗрдбрдХреЛ рд╕рдиреНрджрд░реНрднрдорд╛ рд╣рд╛рдореАрд▓реЗ рдХрд╛рдо рдЧрд░рд┐рд░рд╣реЗрдХрд╛ рдЫреМрдВред рд╣рд╛рдореАрд▓реЗ рдХрд▓ рдЧрд░реНрдиреЗ рдкреНрд░рдХрд╛рд░реНрдп
рдЯрд░реНрдорд┐рдирд▓рдорд╛ рдЖрдЙрдЯрдкреБрдЯ рдЧрд░реНрджрд╛, рд╣рд╛рдореА рд╣рд╛рд▓ рдереНрд░реЗрдбрдорд╛ рд░реБрдЪрд┐ рд░рд╛рдЦреНрджреИрдиреМрдВ, рддрд░ рд╣рд╛рдореА рдореБрдЦреНрдп рдкреНрд░рдХреНрд░рд┐рдпрд╛рдорд╛ рд░реБрдЪрд┐ рд░рд╛рдЦреНрдЫреМрдВред рджрд┐рдЗрдПрдХреЛ рдереНрд░реЗрд╕рд╣реЛрд▓реНрдбрд╕рдБрдЧ рдирддрд┐рдЬрд╛ рдврд┐рд▓рд╛рдЗ рддреБрд▓рдирд╛ рдЧрд░реЗрдкрдЫрд┐, рд╣рд╛рдореА рд╣рд╛рдореНрд░реЛ рд╕рдВрд░рдЪрдирд╛ рдкрд╛рд╕ рдЧрд░реНрдЫреМрдВ рдбрд╛рдЯрд╛ рддрд╛рд▓рд┐рдХрд╛ рдорд╛рд░реНрдлрдд рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛ рдард╛рдЙрдБрдорд╛ рдШрдЯрдирд╛рд╣рд░реВ, рдЬрд╕ рдкрдЫрд┐ рд╣рд╛рдореА рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдореЗрдЯрд╛рдЙрдБрдЫреМрдВ p.
рдпреЛ рдХреЛрдб рд▓реЛрдб рдЧрд░реНрдиреЗ рдкрд╛рдЗрдерди рд╕реНрдХреНрд░рд┐рдкреНрдЯрдорд╛, рд╣рд╛рдореАрд▓реЗ MIN_US рд░ FACTOR рд▓рд╛рдИ рдврд┐рд▓рд╛рдЗ рдереНрд░реЗрд╕рд╣реЛрд▓реНрдб рд░ рд╕рдордп рдПрдХрд╛рдЗрд╣рд░реВрд╕рдБрдЧ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ, рдЬреБрди рд╣рд╛рдореАрд▓реЗ рддрд░реНрдХрд╣рд░реВ рдкрд╛рд░ рдЧрд░реНрдиреЗрдЫреМрдВ:
bpf_text = bpf_text.replace('MIN_US',str(min_usec))
if args.milliseconds:
bpf_text = bpf_text.replace('FACTOR','data->lat /= 1000;')
label = "msec"
else:
bpf_text = bpf_text.replace('FACTOR','')
label = "usec"
рдЕрдм рд╣рд╛рдореАрд▓реЗ BPF рдХрд╛рд░реНрдпрдХреНрд░рдо рдорд╛рд░реНрдлрдд рддрдпрд╛рд░ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ
b = BPF(text=bpf_text)
b.attach_kprobe(event="generic_make_request",fn_name="start")
b.attach_kretprobe(event="generic_make_request",fn_name="stop")
рд╣рд╛рдореАрд▓реЗ рдкрдирд┐ рдирд┐рд░реНрдзрд╛рд░рдг рдЧрд░реНрдиреБрдкрд░реНрдЫ рд╕рдВрд░рдЪрдирд╛ рдбреЗрдЯрд╛_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()
рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЖрдлреИ рдЙрдкрд▓рдмреНрдз рдЫ
рдЕрдиреНрддрдорд╛! рдЕрдм рд╣рд╛рдореА рджреЗрдЦреНрдЫреМрдВ рдХрд┐ рд╕реНрдЯрд▓рд┐рдЩ bcache рдпрдиреНрддреНрд░ рдЬрд╕реНрддреЛ рджреЗрдЦрд┐рдиреЗ рдХреБрд░рд╛ рд╡рд╛рд╕реНрддрд╡рдорд╛ рд╕реНрдЯрд▓рд┐рдЩ рдХрд▓ рд╣реЛ generic_make_request() рдХреНрдпрд╛рд╕ рдбрд┐рд╕реНрдХ рдХреЛ рд▓рд╛рдЧреАред
рдХрд░реНрдиреЗрд▓рдорд╛ рдЦрдиреНрдиреБрд╣реЛрд╕реН
рдЕрдиреБрд░реЛрдз рдкреНрд░рд╕рд╛рд░рдгрдХреЛ рд╕рдордпрдорд╛ рд╡рд╛рд╕реНрддрд╡рдорд╛ рдХреЗ рдврд┐рд▓реЛ рднрдЗрд░рд╣реЗрдХреЛ рдЫ? рд╣рд╛рдореА рджреЗрдЦреНрдЫреМрдВ рдХрд┐ рдЕрдиреБрд░реЛрдз рд▓реЗрдЦрд╛ рд╕реБрд░реБ рд╣реБрдиреБ рдЕрдШрд┐ рдиреИ рдврд┐рд▓рд╛рдЗ рд╣реБрдиреНрдЫ, рдЕрд░реНрдерд╛рддреНред рдпрд╕рдорд╛ (/proc/diskstats рд╡рд╛ iostat) рддрдереНрдпрд╛рдЩреНрдХрдХреЛ рдердк рдЖрдЙрдЯрдкреБрдЯрдХреЛ рд▓рд╛рдЧрд┐ рд╡рд┐рд╢реЗрд╖ рдЕрдиреБрд░реЛрдзрдХреЛ рд▓реЗрдЦрд╛рдЩреНрдХрди рдЕрдЭреИ рд╕реБрд░реБ рднрдПрдХреЛ рдЫреИрдиред рдпреЛ рд╕рдорд╕реНрдпрд╛ рдкреБрди: рдЙрддреНрдкрд╛рджрди рдЧрд░реНрджрд╛ iostat рдЪрд▓рд╛рдПрд░ рд╕рдЬрд┐рд▓реИ рдкреНрд░рдорд╛рдгрд┐рдд рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫ, рд╡рд╛
рдпрджрд┐ рд╣рд╛рдореАрд▓реЗ рдХрд╛рд░реНрдпрд▓рд╛рдИ рд╣реЗрд░реНрдЫреМрдВ generic_make_request(), рддреНрдпрд╕рдкрдЫрд┐ рд╣рд╛рдореА рджреЗрдЦреНрдиреЗрдЫреМрдВ рдХрд┐ рдЕрдиреБрд░реЛрдз рд▓реЗрдЦрд╛ рд╕реБрд░реБ рд╣реБрдиреБ рдЕрдШрд┐, рджреБрдИ рдердк рдкреНрд░рдХрд╛рд░реНрдпрд╣рд░реВ рдмреЛрд▓рд╛рдЗрдиреНрдЫред рдкрд╣рд┐рд▓реЛ - generic_make_request_checks(), рдбрд┐рд╕реНрдХ рд╕реЗрдЯрд┐рдЩрд╣рд░реВрдХреЛ рд╕рдиреНрджрд░реНрднрдорд╛ рдЕрдиреБрд░реЛрдзрдХреЛ рд╡реИрдзрддрд╛рдорд╛ рдЬрд╛рдБрдЪ рдЧрд░реНрджрдЫред рджреЛрд╕реНрд░реЛ -
ret = wait_event_interruptible(q->mq_freeze_wq,
(atomic_read(&q->mq_freeze_depth) == 0 &&
(preempt || !blk_queue_preempt_only(q))) ||
blk_queue_dying(q));
рдпрд╕рдорд╛, рдХрд░реНрдиреЗрд▓рд▓реЗ рд▓рд╛рдо рдЕрдирдлреНрд░рд┐рдЬ рд╣реБрдирдХреЛ рд▓рд╛рдЧрд┐ рдкрд░реНрдЦрдиреНрдЫред рдврд┐рд▓рд╛рдЗ рдирд╛рдкреМрдВ blk_queue_enter():
~# /usr/share/bcc/tools/funclatency blk_queue_enter -i 1 -m
Tracing 1 functions for "blk_queue_enter"... Hit Ctrl-C to end.
msecs : count distribution
0 -> 1 : 341 |****************************************|
msecs : count distribution
0 -> 1 : 316 |****************************************|
msecs : count distribution
0 -> 1 : 255 |****************************************|
2 -> 3 : 0 | |
4 -> 7 : 0 | |
8 -> 15 : 1 | |
рдпрд╕реНрддреЛ рджреЗрдЦрд┐рдиреНрдЫ рдХрд┐ рд╣рд╛рдореА рд╕рдорд╛рдзрд╛рдирдХреЛ рдирдЬрд┐рдХ рдЫреМрдВред рд▓рд╛рдо рдлреНрд░рд┐рдЬ/рдЕрдирдлреНрд░рд┐рдЬ рдЧрд░реНрди рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреЗ рдХрд╛рд░реНрдпрд╣рд░реВ рд╣реБрдиреН
рдпреЛ рд▓рд╛рдо рдЦрд╛рд▓реА рдЧрд░реНрди рд▓рд╛рдЧреНрдиреЗ рд╕рдордп рдбрд┐рд╕реНрдХ рд╡рд┐рд▓рдореНрдмрддрд╛рдХреЛ рдмрд░рд╛рдмрд░ рдЫ рдХрд┐рдирдХрд┐ рдХрд░реНрдиреЗрд▓рд▓реЗ рд╕рдмреИ рд▓рд╛рдордмрджреНрдз рдХрд╛рд░реНрдпрд╣рд░реВ рдкреВрд░рд╛ рд╣реБрдирдХреЛ рд▓рд╛рдЧрд┐ рдкрд░реНрдЦрдиреНрдЫред рдПрдХ рдкрдЯрдХ рд▓рд╛рдо рдЦрд╛рд▓реА рднрдПрдкрдЫрд┐, рд╕реЗрдЯрд┐рдЩ рдкрд░рд┐рд╡рд░реНрддрдирд╣рд░реВ рд▓рд╛рдЧреВ рд╣реБрдиреНрдЫрдиреНред рдЬрд╕ рдкрдЫрд┐ рдпреЛ рднрдирд┐рдиреНрдЫ
рдЕрдм рд╣рд╛рдореА рд╕реНрдерд┐рддрд┐ рд╕рдЪреНрдпрд╛рдЙрди рдкрд░реНрдпрд╛рдкреНрдд рдерд╛рд╣рд╛ рдЫред udevadm рдЯреНрд░рд┐рдЧрд░ рдЖрджреЗрд╢рд▓реЗ рдмреНрд▓рдХ рдпрдиреНрддреНрд░ рд▓рд╛рдЧреВ рдЧрд░реНрди рд╕реЗрдЯрд┐рдЩрд╣рд░реВ рдирд┐рдореНрддреНрдпрд╛рдЙрдБрдЫред рдпреА рд╕реЗрдЯрд┐рдЩрд╣рд░реВ udev рдирд┐рдпрдорд╣рд░реВрдорд╛ рд╡рд░реНрдгрди рдЧрд░рд┐рдПрдХреЛ рдЫред рд╣рд╛рдореАрд▓реЗ sysfs рдорд╛рд░реНрдлрдд рдкрд░рд┐рд╡рд░реНрддрди рдЧрд░реНрдиреЗ рдкреНрд░рдпрд╛рд╕ рдЧрд░реЗрд░ рд╡рд╛ рдХрд░реНрдиреЗрд▓ рд╕реНрд░реЛрдд рдХреЛрдб рд╣реЗрд░реЗрд░ рдХреБрди рд╕реЗрдЯрд┐рдЩрд╣рд░реВ рд▓рд╛рдо рдЬрдореНрдорд╛ рдЧрд░реНрджреИрдЫ рднрдиреЗрд░ рдкрддреНрддрд╛ рд▓рдЧрд╛рдЙрди рд╕рдХреНрдЫреМрдВред рд╣рд╛рдореА BCC рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдкрдирд┐ рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрди рд╕рдХреНрдЫреМрдВ
~# /usr/share/bcc/tools/trace blk_freeze_queue -K -U
PID TID COMM FUNC
3809642 3809642 systemd-udevd blk_freeze_queue
blk_freeze_queue+0x1 [kernel]
elevator_switch+0x29 [kernel]
elv_iosched_store+0x197 [kernel]
queue_attr_store+0x5c [kernel]
sysfs_kf_write+0x3c [kernel]
kernfs_fop_write+0x125 [kernel]
__vfs_write+0x1b [kernel]
vfs_write+0xb8 [kernel]
sys_write+0x55 [kernel]
do_syscall_64+0x73 [kernel]
entry_SYSCALL_64_after_hwframe+0x3d [kernel]
__write_nocancel+0x7 [libc-2.23.so]
[unknown]
3809631 3809631 systemd-udevd blk_freeze_queue
blk_freeze_queue+0x1 [kernel]
queue_requests_store+0xb6 [kernel]
queue_attr_store+0x5c [kernel]
sysfs_kf_write+0x3c [kernel]
kernfs_fop_write+0x125 [kernel]
__vfs_write+0x1b [kernel]
vfs_write+0xb8 [kernel]
sys_write+0x55 [kernel]
do_syscall_64+0x73 [kernel]
entry_SYSCALL_64_after_hwframe+0x3d [kernel]
__write_nocancel+0x7 [libc-2.23.so]
[unknown]
Udev рдирд┐рдпрдорд╣рд░реВ рд╡рд┐рд░рд▓реИ рдкрд░рд┐рд╡рд░реНрддрди рд╣реБрдиреНрдЫрдиреН рд░ рд╕рд╛рдорд╛рдиреНрдпрддрдпрд╛ рдпреЛ рдирд┐рдпрдиреНрддреНрд░рд┐рдд рддрд░рд┐рдХрд╛рдорд╛ рд╣реБрдиреНрдЫред рддреНрдпрд╕реЛрднрдП рд╣рд╛рдореА рджреЗрдЦреНрдЫреМрдВ рдХрд┐ рдкрд╣рд┐рд▓реЗ рдиреИ рд╕реЗрдЯ рдорд╛рдирд╣рд░реВ рд▓рд╛рдЧреВ рдЧрд░реНрджрд╛ рдкрдирд┐ рдЕрдиреБрдкреНрд░рдпреЛрдЧрдмрд╛рдЯ рдбрд┐рд╕реНрдХрдорд╛ рдЕрдиреБрд░реЛрдз рд╕реНрдерд╛рдирд╛рдиреНрддрд░рдгрдорд╛ рдврд┐рд▓рд╛рдЗрдорд╛ рд╕реНрдкрд╛рдЗрдХ рд╣реБрдиреНрдЫред рдирд┐рд╕реНрд╕рдиреНрджреЗрд╣, рдбрд┐рд╕реНрдХ рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рдирдорд╛ рдХреБрдиреИ рдкрд░рд┐рд╡рд░реНрддрди рдирднрдПрдХреЛ рдмреЗрд▓рд╛ udev рдШрдЯрдирд╛рд╣рд░реВ рдЙрддреНрдкрдиреНрди рдЧрд░реНрдиреБ (рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, рдпрдиреНрддреНрд░ рдорд╛рдЙрдиреНрдЯ/рд╡рд┐рдЪреНрдЫреЗрджрди рдЧрд░рд┐рдПрдХреЛ рдЫреИрди) рд░рд╛рдореНрд░реЛ рдЕрднреНрдпрд╛рд╕ рд╣реЛрдЗрдиред рдпрджреНрдпрдкрд┐, рд╣рд╛рдореА рдХрд░реНрдиреЗрд▓рд▓рд╛рдИ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдХрд╛рдо рдирдЧрд░реНрди рдорджреНрджрдд рдЧрд░реНрди рд╕рдХреНрдЫреМрдВ рд░ рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рдЫреИрди рднрдиреЗ рдЕрдиреБрд░реЛрдз рд▓рд╛рдЗрди рдлреНрд░рд┐рдЬ рдЧрд░реНрди рд╕рдХреНрдЫреМрдВред
рдирд┐рд╖реНрдХрд░реНрд╖
eBPF рдПрдХ рдзреЗрд░реИ рд▓рдЪрд┐рд▓реЛ рд░ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдЙрдкрдХрд░рдг рд╣реЛред рд▓реЗрдЦрдорд╛ рд╣рд╛рдореАрд▓реЗ рдПрдЙрдЯрд╛ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдХреЗрд╕ рд╣реЗрд░реНрдпреМрдВ рд░ рдХреЗ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫ рднрдиреНрдиреЗ рд╕рд╛рдиреЛ рдЕрдВрд╢ рджреЗрдЦреНрдпреМрдВред рдпрджрд┐ рддрдкрд╛рдЗрдБ BCC рдЙрдкрдпреЛрдЧрд┐рддрд╛рд╣рд░реВ рд╡рд┐рдХрд╛рд╕ рдЧрд░реНрди рд░реБрдЪрд┐ рд░рд╛рдЦреНрдиреБрд╣реБрдиреНрдЫ рднрдиреЗ, рдпреЛ рд╣реЗрд░реНрди рд▓рд╛рдпрдХ рдЫ
eBPF рдорд╛ рдЖрдзрд╛рд░рд┐рдд рдЕрдиреНрдп рд░реЛрдЪрдХ рдбрд┐рдмрдЧрд┐рдЩ рд░ рдкреНрд░реЛрдлрд╛рдЗрд▓рд┐рдЩ рдЙрдкрдХрд░рдгрд╣рд░реВ рдЫрдиреНред рддрд┐рдиреАрд╣рд░реБ рдордзреНрдпреЗ рдПрдЙрдЯрд╛ -
рд╕реНрд░реЛрдд: www.habr.com