-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Song Liu says: ==================== run_time_ns is a useful stats for BPF programs. However, it is gated by sysctl kernel.bpf_stats_enabled. When multiple user space tools are toggling kernl.bpf_stats_enabled at the same time, they may confuse each other. Solve this problem with a new BPF command BPF_ENABLE_STATS. Changes v8 => v9: 1. Clean up in selftest (Andrii). 2. Not using static variable in test program (Andrii). Changes v7 => v8: 1. Change name BPF_STATS_RUNTIME_CNT => BPF_STATS_RUN_TIME (Alexei). 2. Add CHECK_ATTR to bpf_enable_stats() (Alexei). 3. Rebase (Andrii). 4. Simplfy the selftest (Alexei). Changes v6 => v7: 1. Add test to verify run_cnt matches count measured by the program. Changes v5 => v6: 1. Simplify test program (Yonghong). 2. Rebase (with some conflicts). Changes v4 => v5: 1. Use memset to zero bpf_attr in bpf_enable_stats() (Andrii). Changes v3 => v4: 1. Add libbpf support and selftest; 2. Avoid cleaning trailing space. Changes v2 => v3: 1. Rename the command to BPF_ENABLE_STATS, and make it extendible. 2. fix commit log; 3. remove unnecessary headers. ==================== Signed-off-by: Alexei Starovoitov <ast@kernel.org>
- Loading branch information
Showing
10 changed files
with
190 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,45 @@ | ||
// SPDX-License-Identifier: GPL-2.0 | ||
#include <test_progs.h> | ||
#include "test_enable_stats.skel.h" | ||
|
||
void test_enable_stats(void) | ||
{ | ||
struct test_enable_stats *skel; | ||
int stats_fd, err, prog_fd; | ||
struct bpf_prog_info info; | ||
__u32 info_len = sizeof(info); | ||
int duration = 0; | ||
|
||
skel = test_enable_stats__open_and_load(); | ||
if (CHECK(!skel, "skel_open_and_load", "skeleton open/load failed\n")) | ||
return; | ||
|
||
stats_fd = bpf_enable_stats(BPF_STATS_RUN_TIME); | ||
if (CHECK(stats_fd < 0, "get_stats_fd", "failed %d\n", errno)) { | ||
test_enable_stats__destroy(skel); | ||
return; | ||
} | ||
|
||
err = test_enable_stats__attach(skel); | ||
if (CHECK(err, "attach_raw_tp", "err %d\n", err)) | ||
goto cleanup; | ||
|
||
test_enable_stats__detach(skel); | ||
|
||
prog_fd = bpf_program__fd(skel->progs.test_enable_stats); | ||
memset(&info, 0, info_len); | ||
err = bpf_obj_get_info_by_fd(prog_fd, &info, &info_len); | ||
if (CHECK(err, "get_prog_info", | ||
"failed to get bpf_prog_info for fd %d\n", prog_fd)) | ||
goto cleanup; | ||
if (CHECK(info.run_time_ns == 0, "check_stats_enabled", | ||
"failed to enable run_time_ns stats\n")) | ||
goto cleanup; | ||
|
||
CHECK(info.run_cnt != skel->bss->count, "check_run_cnt_valid", | ||
"invalid run_cnt stats\n"); | ||
|
||
cleanup: | ||
test_enable_stats__destroy(skel); | ||
close(stats_fd); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
// SPDX-License-Identifier: GPL-2.0 | ||
// Copyright (c) 2020 Facebook | ||
|
||
#include <linux/bpf.h> | ||
#include <stdint.h> | ||
#include <linux/types.h> | ||
#include <bpf/bpf_helpers.h> | ||
|
||
char _license[] SEC("license") = "GPL"; | ||
|
||
__u64 count = 0; | ||
|
||
SEC("raw_tracepoint/sys_enter") | ||
int test_enable_stats(void *ctx) | ||
{ | ||
count += 1; | ||
return 0; | ||
} |