Message ID | 20240415084113.1203428-3-pizhenwei@bytedance.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | Improve memory statistics for virtio balloon | expand |
On 15.04.24 10:41, 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 | 19 ++++++++++++++++++- > include/uapi/linux/virtio_balloon.h | 6 ++++-- > 2 files changed, 22 insertions(+), 3 deletions(-) > > diff --git a/drivers/virtio/virtio_balloon.c b/drivers/virtio/virtio_balloon.c > index fd8daa742734..4b9c9569f6e5 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); > @@ -355,6 +355,23 @@ static unsigned int update_balloon_stats(struct virtio_balloon *vb) > update_stat(vb, idx++, VIRTIO_BALLOON_S_OOM_KILL, > events[OOM_KILL]); > > + /* sum all the stall event */ > +#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); > + > return idx; > } > > diff --git a/include/uapi/linux/virtio_balloon.h b/include/uapi/linux/virtio_balloon.h > index cde5547e64a7..13d0c32ba27c 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-kill" \ > + VIRTIO_BALLOON_S_NAMES_prefix "oom-kill", \ > + VIRTIO_BALLOON_S_NAMES_prefix "alloc-stall" \ "alloc-stalls"
diff --git a/drivers/virtio/virtio_balloon.c b/drivers/virtio/virtio_balloon.c index fd8daa742734..4b9c9569f6e5 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); @@ -355,6 +355,23 @@ static unsigned int update_balloon_stats(struct virtio_balloon *vb) update_stat(vb, idx++, VIRTIO_BALLOON_S_OOM_KILL, events[OOM_KILL]); + /* sum all the stall event */ +#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); + return idx; } diff --git a/include/uapi/linux/virtio_balloon.h b/include/uapi/linux/virtio_balloon.h index cde5547e64a7..13d0c32ba27c 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-kill" \ + VIRTIO_BALLOON_S_NAMES_prefix "oom-kill", \ + VIRTIO_BALLOON_S_NAMES_prefix "alloc-stall" \ } #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 | 19 ++++++++++++++++++- include/uapi/linux/virtio_balloon.h | 6 ++++-- 2 files changed, 22 insertions(+), 3 deletions(-)