You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

perf采样eBPF函数时bpf_ktime_get_ns返回负值的问题求助

问题原因与解决方法

核心原因

你遇到的负数值问题是类型不匹配导致的:

  • eBPF代码中bpf_ktime_get_ns()返回的是u64(无符号64位整数)类型的系统启动以来纳秒数,当系统运行时间较长时,这个值会超过int64(有符号64位整数)的最大值9223372036854775807。
  • Go代码中定义的bpfSchedEventT结构体里,Ntime字段大概率被声明为int64(有符号类型),用binary.Read读取无符号的u64数据时,会将高位解析为符号位,最终得到负数。

解决方案

修改Go代码中的bpfSchedEventT结构体,将Ntime字段的类型从int64改为uint64:

type bpfSchedEventT struct {
    Pid    uint32 // 对应eBPF中的u32 pid
    Ntime  uint64 // 替换原int64类型
}

修改后重新读取输出,就能得到正确的正数值。

验证说明

以输出中的-4952501534609899520为例,将其转换为uint64后得到13494242539099652096,换算成天数约为156天,符合长期运行系统的时间范围,说明原始时间值本身是正确的,仅因类型解析错误导致显示为负数。

内容的提问来源于stack exchange,提问作者user23980149

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 04:23:30