bcc
原理
biolatency_bpf__attach(struct biolatency_bpf *obj) {return bpf_object__attach_skeleton(obj->skeleton); }static inline void biolatency_bpf__detach(struct biolatency_bpf *obj) {bpf_object__detach_skeleton(obj->skeleton); }static inline const void *biolatency_bpf__elf_bytes(size_t *sz);static inline int biolatency_bpf__create_skeleton(struct biolatency_bpf *obj) {struct bpf_object_skeleton *s;int err;s = (struct bpf_object_skeleton *)calloc(1, sizeof(*s));if (!s) {err = -ENOMEM;goto err;}s->sz = sizeof(*s);s->name = "biolatency_bpf";s->obj = &obj->obj;/* maps */s->map_cnt = 5;s->map_skel_sz = sizeof(*s->maps);s->maps = (struct bpf_map_skeleton *)calloc(s->map_cnt, s->map_skel_sz);if (!s->maps) {err = -ENOMEM;goto err;}s->maps[0].name = "cgroup_map";s->maps[0].map = &obj->maps.cgroup_map;s->maps[1].name = "start";s->maps[1].map = &obj->maps.start;s->maps[2].name = "hists";s->maps[2].map = &obj->maps.hists;s->maps[3].name = "biolaten.rodata";s->maps[3].map = &obj->maps.rodata;s->maps[3].mmaped = (void **)&obj->rodata;s->maps[4].name = "biolaten.bss";s->maps[4].map = &obj->maps.bss;s->maps[4].mmaped = (void **)&obj->bss;/* programs */s->prog_cnt = 6;s->prog_skel_sz = sizeof(*s->progs);s->progs = (struct bpf_prog_skeleton *)calloc(s->prog_cnt, s->prog_skel_sz);if (!s->progs) {err = -ENOMEM;goto err;}s->progs[0].name = "block_rq_insert_btf";s->progs[0].prog = &obj->progs.block_rq_insert_btf;s->progs[0].link = &obj->links.block_rq_insert_btf;s->progs[1].name = "block_rq_issue_btf";s->progs[1].prog = &obj->progs.block_rq_issue_btf;s->progs[1].link = &obj->links.block_rq_issue_btf;s->progs[2].name = "block_rq_complete_btf";s->progs[2].prog = &obj->progs.block_rq_complete_btf;s->progs[2].link = &obj->links.block_rq_complete_btf;s->progs[3].name = "block_rq_insert";s->progs[3].prog = &obj->progs.block_rq_insert;s->progs[3].link = &obj->links.block_rq_insert;s->progs[4].name = "block_rq_issue";s->progs[4].prog = &obj->progs.block_rq_issue;s->progs[4].link = &obj->links.block_rq_issue;s->progs[5].name = "block_rq_complete";s->progs[5].prog = &obj->progs.block_rq_complete;s->progs[5].link = &obj->links.block_rq_complete;s->data = (void *)biolatency_bpf__elf_bytes(&s->data_sz);obj->skeleton = s;return 0; err:bpf_object__destroy_skeleton(s);return err; }
Linux探测工具BCC(可观测性) - charlieroro - 博客园
凡操千曲而后晓声,观千剑而后识器。故圆照之象,务先博观。