Message ID | 20240418062602.1291391-3-pizhenwei@bytedance.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | Improve memory statistics for virtio balloon | expand |
On 18.04.24 08:26, zhenwei pi wrote: > Memory allocation stall counter represents the performance/latency of > memory allocation, expose this counter to the host side by virtio > balloon device via out-of-bound way. > > Signed-off-by: zhenwei pi <pizhenwei@bytedance.com> > --- > drivers/virtio/virtio_balloon.c | 20 +++++++++++++++++++- > include/uapi/linux/virtio_balloon.h | 6 ++++-- > 2 files changed, 23 insertions(+), 3 deletions(-) > > diff --git a/drivers/virtio/virtio_balloon.c b/drivers/virtio/virtio_balloon.c > index fd19934a847f..e88e6573afa5 100644 > --- a/drivers/virtio/virtio_balloon.c > +++ b/drivers/virtio/virtio_balloon.c > @@ -321,7 +321,7 @@ static unsigned int update_balloon_stats(struct virtio_balloon *vb) > unsigned long events[NR_VM_EVENT_ITEMS]; > struct sysinfo i; > unsigned int idx = 0; > - long available; > + long available, stall = 0; > unsigned long caches; > > all_vm_events(events); > @@ -338,6 +338,24 @@ static unsigned int update_balloon_stats(struct virtio_balloon *vb) > update_stat(vb, idx++, VIRTIO_BALLOON_S_MAJFLT, events[PGMAJFAULT]); > update_stat(vb, idx++, VIRTIO_BALLOON_S_MINFLT, events[PGFAULT]); > update_stat(vb, idx++, VIRTIO_BALLOON_S_OOM_KILL, events[OOM_KILL]); > + > + /* sum all the stall events */ > +#ifdef CONFIG_ZONE_DMA > + stall += events[ALLOCSTALL_DMA]; > +#endif > +#ifdef CONFIG_ZONE_DMA32 > + stall += events[ALLOCSTALL_DMA32]; > +#endif > +#ifdef CONFIG_HIGHMEM > + stall += events[ALLOCSTALL_HIGH]; > +#endif > +#ifdef CONFIG_ZONE_DEVICE > + stall += events[ALLOCSTALL_DEVICE]; > +#endif Naive me would think that ALLOCSTALL_DEVICE is always 0. :) Likely we should just do: for (zid = 0; zid < MAX_NR_ZONES; zid++) stall += events[ALLOCSTALL_NORMAL - ZONE_NORMAL + zid]; (see isolate_lru_folios() -> __count_zid_vm_events(), where we realy on the same ordering) Apart form that, LGTM.
Hi zhenwei, kernel test robot noticed the following build warnings: [auto build test WARNING on akpm-mm/mm-everything] [also build test WARNING on linus/master v6.9-rc4 next-20240419] [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/zhenwei-pi/virtio_balloon-introduce-oom-kill-invocations/20240418-142934 base: https://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm.git mm-everything patch link: https://lore.kernel.org/r/20240418062602.1291391-3-pizhenwei%40bytedance.com patch subject: [PATCH 2/3] virtio_balloon: introduce memory allocation stall counter config: i386-randconfig-141-20240421 (https://download.01.org/0day-ci/archive/20240421/202404211106.B9pwuFqk-lkp@intel.com/config) compiler: clang version 17.0.6 (https://github.com/llvm/llvm-project 6009708b4367171ccdbf4b5905cb6a803753fe18) reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240421/202404211106.B9pwuFqk-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/202404211106.B9pwuFqk-lkp@intel.com/ All warnings (new ones prefixed by >>): >> drivers/virtio/virtio_balloon.c:324:18: warning: unused variable 'stall' [-Wunused-variable] 324 | long available, stall = 0; | ^~~~~ 1 warning generated. vim +/stall +324 drivers/virtio/virtio_balloon.c 318 319 static unsigned int update_balloon_stats(struct virtio_balloon *vb) 320 { 321 unsigned long events[NR_VM_EVENT_ITEMS]; 322 struct sysinfo i; 323 unsigned int idx = 0; > 324 long available, stall = 0; 325 unsigned long caches; 326 327 all_vm_events(events); 328 si_meminfo(&i); 329 330 available = si_mem_available(); 331 caches = global_node_page_state(NR_FILE_PAGES); 332
diff --git a/drivers/virtio/virtio_balloon.c b/drivers/virtio/virtio_balloon.c index fd19934a847f..e88e6573afa5 100644 --- a/drivers/virtio/virtio_balloon.c +++ b/drivers/virtio/virtio_balloon.c @@ -321,7 +321,7 @@ static unsigned int update_balloon_stats(struct virtio_balloon *vb) unsigned long events[NR_VM_EVENT_ITEMS]; struct sysinfo i; unsigned int idx = 0; - long available; + long available, stall = 0; unsigned long caches; all_vm_events(events); @@ -338,6 +338,24 @@ static unsigned int update_balloon_stats(struct virtio_balloon *vb) update_stat(vb, idx++, VIRTIO_BALLOON_S_MAJFLT, events[PGMAJFAULT]); update_stat(vb, idx++, VIRTIO_BALLOON_S_MINFLT, events[PGFAULT]); update_stat(vb, idx++, VIRTIO_BALLOON_S_OOM_KILL, events[OOM_KILL]); + + /* sum all the stall events */ +#ifdef CONFIG_ZONE_DMA + stall += events[ALLOCSTALL_DMA]; +#endif +#ifdef CONFIG_ZONE_DMA32 + stall += events[ALLOCSTALL_DMA32]; +#endif +#ifdef CONFIG_HIGHMEM + stall += events[ALLOCSTALL_HIGH]; +#endif +#ifdef CONFIG_ZONE_DEVICE + stall += events[ALLOCSTALL_DEVICE]; +#endif + stall += events[ALLOCSTALL_NORMAL]; + stall += events[ALLOCSTALL_MOVABLE]; + update_stat(vb, idx++, VIRTIO_BALLOON_S_ALLOC_STALL, stall); + #ifdef CONFIG_HUGETLB_PAGE update_stat(vb, idx++, VIRTIO_BALLOON_S_HTLB_PGALLOC, events[HTLB_BUDDY_PGALLOC]); diff --git a/include/uapi/linux/virtio_balloon.h b/include/uapi/linux/virtio_balloon.h index b17bbe033697..487b893a160e 100644 --- a/include/uapi/linux/virtio_balloon.h +++ b/include/uapi/linux/virtio_balloon.h @@ -72,7 +72,8 @@ struct virtio_balloon_config { #define VIRTIO_BALLOON_S_HTLB_PGALLOC 8 /* Hugetlb page allocations */ #define VIRTIO_BALLOON_S_HTLB_PGFAIL 9 /* Hugetlb page allocation failures */ #define VIRTIO_BALLOON_S_OOM_KILL 10 /* OOM killer invocations */ -#define VIRTIO_BALLOON_S_NR 11 +#define VIRTIO_BALLOON_S_ALLOC_STALL 11 /* Stall count of memory allocatoin */ +#define VIRTIO_BALLOON_S_NR 12 #define VIRTIO_BALLOON_S_NAMES_WITH_PREFIX(VIRTIO_BALLOON_S_NAMES_prefix) { \ VIRTIO_BALLOON_S_NAMES_prefix "swap-in", \ @@ -85,7 +86,8 @@ struct virtio_balloon_config { VIRTIO_BALLOON_S_NAMES_prefix "disk-caches", \ VIRTIO_BALLOON_S_NAMES_prefix "hugetlb-allocations", \ VIRTIO_BALLOON_S_NAMES_prefix "hugetlb-failures", \ - VIRTIO_BALLOON_S_NAMES_prefix "oom-kills" \ + VIRTIO_BALLOON_S_NAMES_prefix "oom-kills", \ + VIRTIO_BALLOON_S_NAMES_prefix "alloc-stalls" \ } #define VIRTIO_BALLOON_S_NAMES VIRTIO_BALLOON_S_NAMES_WITH_PREFIX("")
Memory allocation stall counter represents the performance/latency of memory allocation, expose this counter to the host side by virtio balloon device via out-of-bound way. Signed-off-by: zhenwei pi <pizhenwei@bytedance.com> --- drivers/virtio/virtio_balloon.c | 20 +++++++++++++++++++- include/uapi/linux/virtio_balloon.h | 6 ++++-- 2 files changed, 23 insertions(+), 3 deletions(-)