* [PATCH] bpf: Allocate bpf_event_entry with node info
@ 2024-05-28 22:36 Namhyung Kim
2024-05-29 6:29 ` kernel test robot
0 siblings, 1 reply; 2+ messages in thread
From: Namhyung Kim @ 2024-05-28 22:36 UTC (permalink / raw)
To: Alexei Starovoitov, Daniel Borkmann, Andrii Nakryiko
Cc: Martin KaFai Lau, Eduard Zingerman, Song Liu, Yonghong Song,
John Fastabend, KP Singh, Stanislav Fomichev, Hao Luo, Jiri Olsa,
LKML, bpf, Aleksei Shchekotikhin, Nilay Vaish
It was reported that accessing perf_event map entry caused pretty high
LLC misses in get_map_perf_counter(). As reading perf_event is allowed
for the local CPU only, I think we can use the target CPU of the event
as hint for the allocation like in perf_event_alloc() so that the event
and the entry can be in the same node at least.
Reported-by: Aleksei Shchekotikhin <alekseis@google.com>
Reported-by: Nilay Vaish <nilayvaish@google.com>
Signed-off-by: Namhyung Kim <namhyung@kernel.org>
---
kernel/bpf/arraymap.c | 9 +++++++--
1 file changed, 7 insertions(+), 2 deletions(-)
diff --git a/kernel/bpf/arraymap.c b/kernel/bpf/arraymap.c
index feabc0193852..3f7718c261d7 100644
--- a/kernel/bpf/arraymap.c
+++ b/kernel/bpf/arraymap.c
@@ -1194,10 +1194,15 @@ static struct bpf_event_entry *bpf_event_entry_gen(struct file *perf_file,
struct file *map_file)
{
struct bpf_event_entry *ee;
+ struct perf_event *event = perf_file->private_data;
+ int node = -1;
- ee = kzalloc(sizeof(*ee), GFP_KERNEL);
+ if (event->cpu >= 0)
+ node = cpu_to_node(cpu);
+
+ ee = kzalloc_node(sizeof(*ee), GFP_KERNEL, node);
if (ee) {
- ee->event = perf_file->private_data;
+ ee->event = event;
ee->perf_file = perf_file;
ee->map_file = map_file;
}
--
2.45.1.288.g0e0cd299f1-goog
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH] bpf: Allocate bpf_event_entry with node info
2024-05-28 22:36 [PATCH] bpf: Allocate bpf_event_entry with node info Namhyung Kim
@ 2024-05-29 6:29 ` kernel test robot
0 siblings, 0 replies; 2+ messages in thread
From: kernel test robot @ 2024-05-29 6:29 UTC (permalink / raw)
To: Namhyung Kim, Alexei Starovoitov, Daniel Borkmann,
Andrii Nakryiko
Cc: oe-kbuild-all, Martin KaFai Lau, Eduard Zingerman, Song Liu,
Yonghong Song, John Fastabend, KP Singh, Stanislav Fomichev,
Hao Luo, Jiri Olsa, LKML, bpf, Aleksei Shchekotikhin, Nilay Vaish
Hi Namhyung,
kernel test robot noticed the following build errors:
[auto build test ERROR on bpf-next/master]
[also build test ERROR on bpf/master linus/master v6.10-rc1 next-20240528]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Namhyung-Kim/bpf-Allocate-bpf_event_entry-with-node-info/20240529-063828
base: https://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next.git master
patch link: https://lore.kernel.org/r/20240528223643.1166776-1-namhyung%40kernel.org
patch subject: [PATCH] bpf: Allocate bpf_event_entry with node info
config: m68k-defconfig (https://download.01.org/0day-ci/archive/20240529/202405291415.6JlTkRMF-lkp@intel.com/config)
compiler: m68k-linux-gcc (GCC) 13.2.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240529/202405291415.6JlTkRMF-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202405291415.6JlTkRMF-lkp@intel.com/
All error/warnings (new ones prefixed by >>):
kernel/bpf/arraymap.c: In function 'bpf_event_entry_gen':
>> kernel/bpf/arraymap.c:1200:18: error: 'struct perf_event' has no member named 'cpu'
1200 | if (event->cpu >= 0)
| ^~
In file included from ./arch/m68k/include/generated/asm/topology.h:1,
from include/linux/topology.h:36,
from include/linux/gfp.h:8,
from include/linux/umh.h:4,
from include/linux/kmod.h:9,
from include/linux/module.h:17,
from include/linux/bpf.h:20,
from kernel/bpf/arraymap.c:5:
kernel/bpf/arraymap.c:1201:36: error: 'cpu' undeclared (first use in this function)
1201 | node = cpu_to_node(cpu);
| ^~~
include/asm-generic/topology.h:35:41: note: in definition of macro 'cpu_to_node'
35 | #define cpu_to_node(cpu) ((void)(cpu),0)
| ^~~
kernel/bpf/arraymap.c:1201:36: note: each undeclared identifier is reported only once for each function it appears in
1201 | node = cpu_to_node(cpu);
| ^~~
include/asm-generic/topology.h:35:41: note: in definition of macro 'cpu_to_node'
35 | #define cpu_to_node(cpu) ((void)(cpu),0)
| ^~~
>> include/asm-generic/topology.h:35:45: warning: left-hand operand of comma expression has no effect [-Wunused-value]
35 | #define cpu_to_node(cpu) ((void)(cpu),0)
| ^
kernel/bpf/arraymap.c:1201:24: note: in expansion of macro 'cpu_to_node'
1201 | node = cpu_to_node(cpu);
| ^~~~~~~~~~~
vim +1200 kernel/bpf/arraymap.c
1192
1193 static struct bpf_event_entry *bpf_event_entry_gen(struct file *perf_file,
1194 struct file *map_file)
1195 {
1196 struct bpf_event_entry *ee;
1197 struct perf_event *event = perf_file->private_data;
1198 int node = -1;
1199
> 1200 if (event->cpu >= 0)
1201 node = cpu_to_node(cpu);
1202
1203 ee = kzalloc_node(sizeof(*ee), GFP_KERNEL, node);
1204 if (ee) {
1205 ee->event = event;
1206 ee->perf_file = perf_file;
1207 ee->map_file = map_file;
1208 }
1209
1210 return ee;
1211 }
1212
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2024-05-29 6:30 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-05-28 22:36 [PATCH] bpf: Allocate bpf_event_entry with node info Namhyung Kim
2024-05-29 6:29 ` kernel test robot
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox