zfslower (bcc 版本) 处理不正确 zpl iter read, write )
作者: taoky创建于 2026年6月16日更新于 2026年6月16日
在工具/zfslower.py中:
页:1 // zpl read (), zpl write (): (中文(简体) ). int track rw enter (struct pt regs *ctx, struct 文件 *filp, char user *buf,), 互联网档案馆的存檔,存档日期2013-12-21. 大小 t len, loff t *pos)
[Python]
如果 BPF.get kprobe 函数( b'zpl iter.*') :
b.attach kprobe (event="zpl iter read", fn name="trace rw entry") (中文(简体) ).
b.attach kprobe(事件="zpl iter write",fn name="trace rw entry") 互联网档案馆的存檔,存档日期2013-12-21.然而,在zfs代码中:
https://GitHub.com/openzfs/zfs/blob/0a4b5976542e794c3231b0c5c3d504903e392250/module/os/linux/zfs/zpl files.c#L215 互联网档案馆的存檔,存档日期2013-12-29.
页:1 静态大小( T) zpl iter read(struct kiocb *kiocb, struct iov iter *to) 互联网档案馆的存檔,存档日期2013-12-02.
函数签名不匹配,使zfslower打印误导输出. libbpf版本的fslower没有这个问题.
可能的固定办法:
页:1
// zpl iter read (), zpl iter write ():
int track zpl iter rw entry(struct pt regs *ctx, ), (中文(简体) ).
结扎克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克
结构 iov iter * ter)
{
u64 id = bpf get current pid tgid (); ; (中文(简体) ).
u32 tgid = id = >> 32; i.
如果( FILTER PID )
返回 0;
如果(! kiocb) 的话
返回 0;
结构 val t val = {};
val.ts = bpf ktime get ns(); ; 2.
bpf probe read 内核( & val.fp, sixof (val.fp), &kiocb- >ki filp; ).
bpf probe read 内核( & val.offset, sizeof( val.offset)), & kiocb- > ki pos;
如果(val.fp)则
条目info.update( &id, & val); 存档副本
返回 0;
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?用这个做探测器.
内容来源: iovisor/bcc