Message ID | 20211006203135.2566248-1-songliubraving@fb.com (mailing list archive) |
---|---|
State | Changes Requested |
Delegated to: | BPF |
Headers | show |
Series | selftests/bpf: skip get_branch_snapshot in vm | expand |
Context | Check | Description |
---|---|---|
bpf/vmtest-bpf-PR | fail | merge-conflict |
netdev/tree_selection | success | Not a local patch |
bpf/vmtest-bpf-next | success | VM_Test |
bpf/vmtest-bpf-next-PR | success | PR summary |
On Wed, Oct 6, 2021 at 1:32 PM Song Liu <songliubraving@fb.com> wrote: > > VMs running on latest kernel support LBR. However, bpf_get_branch_snapshot > couldn't stop the LBR before too many entries are flushed. Skip the test > for VMs before we find a proper fix for VMs. > > Read the "flags" line from /proc/cpuinfo, if it contains "hypervisor", > skip test get_branch_snapshot. Forgot to use --subject-prefix. This applies to bpf-next. Thanks, Song > > Fixes: 025bd7c753aa (selftests/bpf: Add test for bpf_get_branch_snapshot) > Signed-off-by: Song Liu <songliubraving@fb.com> > --- > .../bpf/prog_tests/get_branch_snapshot.c | 32 +++++++++++++++++++ > 1 file changed, 32 insertions(+) > > diff --git a/tools/testing/selftests/bpf/prog_tests/get_branch_snapshot.c b/tools/testing/selftests/bpf/prog_tests/get_branch_snapshot.c > index 67e86f8d86775..bf9d47a859449 100644 > --- a/tools/testing/selftests/bpf/prog_tests/get_branch_snapshot.c > +++ b/tools/testing/selftests/bpf/prog_tests/get_branch_snapshot.c > @@ -6,6 +6,30 @@ > static int *pfd_array; > static int cpu_cnt; > > +static bool is_hypervisor(void) > +{ > + char *line = NULL; > + bool ret = false; > + size_t len; > + FILE *fp; > + > + fp = fopen("/proc/cpuinfo", "r"); > + if (!fp) > + return false; > + > + while (getline(&line, &len, fp) != -1) { > + if (strstr(line, "flags") == line) { > + if (strstr(line, "hypervisor") != NULL) > + ret = true; > + break; > + } > + } > + > + free(line); > + fclose(fp); > + return ret; > +} > + > static int create_perf_events(void) > { > struct perf_event_attr attr = {0}; > @@ -54,6 +78,14 @@ void test_get_branch_snapshot(void) > struct get_branch_snapshot *skel = NULL; > int err; > > + if (is_hypervisor()) { > + /* As of today, LBR in hypervisor cannot be stopped before > + * too many entries are flushed. Skip the test for now in > + * hypervisor until we optimize the LBR in hypervisor. > + */ > + test__skip(); > + return; > + } > if (create_perf_events()) { > test__skip(); /* system doesn't support LBR */ > goto cleanup; > -- > 2.30.2 >
On Wed, Oct 6, 2021 at 1:31 PM Song Liu <songliubraving@fb.com> wrote: > > VMs running on latest kernel support LBR. However, bpf_get_branch_snapshot > couldn't stop the LBR before too many entries are flushed. Skip the test > for VMs before we find a proper fix for VMs. > > Read the "flags" line from /proc/cpuinfo, if it contains "hypervisor", > skip test get_branch_snapshot. > > Fixes: 025bd7c753aa (selftests/bpf: Add test for bpf_get_branch_snapshot) missing quotes? > Signed-off-by: Song Liu <songliubraving@fb.com> > --- > .../bpf/prog_tests/get_branch_snapshot.c | 32 +++++++++++++++++++ > 1 file changed, 32 insertions(+) > > diff --git a/tools/testing/selftests/bpf/prog_tests/get_branch_snapshot.c b/tools/testing/selftests/bpf/prog_tests/get_branch_snapshot.c > index 67e86f8d86775..bf9d47a859449 100644 > --- a/tools/testing/selftests/bpf/prog_tests/get_branch_snapshot.c > +++ b/tools/testing/selftests/bpf/prog_tests/get_branch_snapshot.c > @@ -6,6 +6,30 @@ > static int *pfd_array; > static int cpu_cnt; > > +static bool is_hypervisor(void) > +{ > + char *line = NULL; > + bool ret = false; > + size_t len; > + FILE *fp; > + > + fp = fopen("/proc/cpuinfo", "r"); > + if (!fp) > + return false; > + > + while (getline(&line, &len, fp) != -1) { > + if (strstr(line, "flags") == line) { strncmp() would be more explicit. That's what you are trying to do (prefix match), right? > + if (strstr(line, "hypervisor") != NULL) > + ret = true; > + break; > + } > + } > + > + free(line); > + fclose(fp); > + return ret; > +} > + > static int create_perf_events(void) > { > struct perf_event_attr attr = {0}; > @@ -54,6 +78,14 @@ void test_get_branch_snapshot(void) > struct get_branch_snapshot *skel = NULL; > int err; > > + if (is_hypervisor()) { > + /* As of today, LBR in hypervisor cannot be stopped before > + * too many entries are flushed. Skip the test for now in > + * hypervisor until we optimize the LBR in hypervisor. > + */ > + test__skip(); > + return; > + } > if (create_perf_events()) { > test__skip(); /* system doesn't support LBR */ > goto cleanup; > -- > 2.30.2 >
On Wed, Oct 6, 2021 at 2:36 PM Andrii Nakryiko <andrii.nakryiko@gmail.com> wrote: > > On Wed, Oct 6, 2021 at 1:31 PM Song Liu <songliubraving@fb.com> wrote: > > > > VMs running on latest kernel support LBR. However, bpf_get_branch_snapshot > > couldn't stop the LBR before too many entries are flushed. Skip the test > > for VMs before we find a proper fix for VMs. > > > > Read the "flags" line from /proc/cpuinfo, if it contains "hypervisor", > > skip test get_branch_snapshot. > > > > Fixes: 025bd7c753aa (selftests/bpf: Add test for bpf_get_branch_snapshot) > > missing quotes? Aha, I copied this line from e31eec77e4ab90dcec7d2da93415f839098dc287. Will fix. > > > Signed-off-by: Song Liu <songliubraving@fb.com> > > --- > > .../bpf/prog_tests/get_branch_snapshot.c | 32 +++++++++++++++++++ > > 1 file changed, 32 insertions(+) > > > > diff --git a/tools/testing/selftests/bpf/prog_tests/get_branch_snapshot.c b/tools/testing/selftests/bpf/prog_tests/get_branch_snapshot.c > > index 67e86f8d86775..bf9d47a859449 100644 > > --- a/tools/testing/selftests/bpf/prog_tests/get_branch_snapshot.c > > +++ b/tools/testing/selftests/bpf/prog_tests/get_branch_snapshot.c > > @@ -6,6 +6,30 @@ > > static int *pfd_array; > > static int cpu_cnt; > > > > +static bool is_hypervisor(void) > > +{ > > + char *line = NULL; > > + bool ret = false; > > + size_t len; > > + FILE *fp; > > + > > + fp = fopen("/proc/cpuinfo", "r"); > > + if (!fp) > > + return false; > > + > > + while (getline(&line, &len, fp) != -1) { > > + if (strstr(line, "flags") == line) { > > strncmp() would be more explicit. That's what you are trying to do > (prefix match), right? right... let me fix it in v2. > > > + if (strstr(line, "hypervisor") != NULL) > > + ret = true; > > + break; > > + } > > + } > > + > > + free(line); > > + fclose(fp); > > + return ret; > > +} > > + > > static int create_perf_events(void) > > { > > struct perf_event_attr attr = {0}; > > @@ -54,6 +78,14 @@ void test_get_branch_snapshot(void) > > struct get_branch_snapshot *skel = NULL; > > int err; > > > > + if (is_hypervisor()) { > > + /* As of today, LBR in hypervisor cannot be stopped before > > + * too many entries are flushed. Skip the test for now in > > + * hypervisor until we optimize the LBR in hypervisor. > > + */ > > + test__skip(); > > + return; > > + } > > if (create_perf_events()) { > > test__skip(); /* system doesn't support LBR */ > > goto cleanup; > > -- > > 2.30.2 > >
diff --git a/tools/testing/selftests/bpf/prog_tests/get_branch_snapshot.c b/tools/testing/selftests/bpf/prog_tests/get_branch_snapshot.c index 67e86f8d86775..bf9d47a859449 100644 --- a/tools/testing/selftests/bpf/prog_tests/get_branch_snapshot.c +++ b/tools/testing/selftests/bpf/prog_tests/get_branch_snapshot.c @@ -6,6 +6,30 @@ static int *pfd_array; static int cpu_cnt; +static bool is_hypervisor(void) +{ + char *line = NULL; + bool ret = false; + size_t len; + FILE *fp; + + fp = fopen("/proc/cpuinfo", "r"); + if (!fp) + return false; + + while (getline(&line, &len, fp) != -1) { + if (strstr(line, "flags") == line) { + if (strstr(line, "hypervisor") != NULL) + ret = true; + break; + } + } + + free(line); + fclose(fp); + return ret; +} + static int create_perf_events(void) { struct perf_event_attr attr = {0}; @@ -54,6 +78,14 @@ void test_get_branch_snapshot(void) struct get_branch_snapshot *skel = NULL; int err; + if (is_hypervisor()) { + /* As of today, LBR in hypervisor cannot be stopped before + * too many entries are flushed. Skip the test for now in + * hypervisor until we optimize the LBR in hypervisor. + */ + test__skip(); + return; + } if (create_perf_events()) { test__skip(); /* system doesn't support LBR */ goto cleanup;
VMs running on latest kernel support LBR. However, bpf_get_branch_snapshot couldn't stop the LBR before too many entries are flushed. Skip the test for VMs before we find a proper fix for VMs. Read the "flags" line from /proc/cpuinfo, if it contains "hypervisor", skip test get_branch_snapshot. Fixes: 025bd7c753aa (selftests/bpf: Add test for bpf_get_branch_snapshot) Signed-off-by: Song Liu <songliubraving@fb.com> --- .../bpf/prog_tests/get_branch_snapshot.c | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+)