这似乎是由内核和用户端之间的填充不匹配引起的。该
data_t结构实际上是在编译时填充的,等效于以下内容:
struct data_t { u32 pid; char padding[4]; char comm[TASK_COMM_LEN]; u64 delta; };如果您在Go端明确添加相同的填充,您的问题将消失:
type amebaEvent struct { Pid uint32 Pad [4]byte Comm [16]byte Delta uint64}产生:
PID COMMAND DURATION RAW8258 a 1.000179625s 10001796258260 a 1.000158337s 1000158337
正如您在评论中提到的,另一种解决方案是使用打包C结构以删除填充
__attribute__((packed))。
它与bcc上的这个问题密切相关-尽管不完全相同-https:
//github.com/iovisor/bcc/issues/2017。



