Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

virtio_balloon: introduce memory allocation stall counter

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.

Acked-by: David Hildenbrand <david@redhat.com>
Signed-off-by: zhenwei pi <pizhenwei@bytedance.com>
Message-Id: <20240423034109.1552866-4-pizhenwei@bytedance.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>

authored by

zhenwei pi and committed by
Michael S. Tsirkin
c5b70a26 6cf1c97d

+12 -2
+8
drivers/virtio/virtio_balloon.c
··· 355 355 { 356 356 unsigned long events[NR_VM_EVENT_ITEMS]; 357 357 unsigned int idx = 0; 358 + unsigned int zid; 359 + unsigned long stall = 0; 358 360 359 361 all_vm_events(events); 360 362 update_stat(vb, idx++, VIRTIO_BALLOON_S_SWAP_IN, ··· 366 364 update_stat(vb, idx++, VIRTIO_BALLOON_S_MAJFLT, events[PGMAJFAULT]); 367 365 update_stat(vb, idx++, VIRTIO_BALLOON_S_MINFLT, events[PGFAULT]); 368 366 update_stat(vb, idx++, VIRTIO_BALLOON_S_OOM_KILL, events[OOM_KILL]); 367 + 368 + /* sum all the stall events */ 369 + for (zid = 0; zid < MAX_NR_ZONES; zid++) 370 + stall += events[ALLOCSTALL_NORMAL - ZONE_NORMAL + zid]; 371 + 372 + update_stat(vb, idx++, VIRTIO_BALLOON_S_ALLOC_STALL, stall); 369 373 370 374 #ifdef CONFIG_HUGETLB_PAGE 371 375 update_stat(vb, idx++, VIRTIO_BALLOON_S_HTLB_PGALLOC,
+4 -2
include/uapi/linux/virtio_balloon.h
··· 72 72 #define VIRTIO_BALLOON_S_HTLB_PGALLOC 8 /* Hugetlb page allocations */ 73 73 #define VIRTIO_BALLOON_S_HTLB_PGFAIL 9 /* Hugetlb page allocation failures */ 74 74 #define VIRTIO_BALLOON_S_OOM_KILL 10 /* OOM killer invocations */ 75 - #define VIRTIO_BALLOON_S_NR 11 75 + #define VIRTIO_BALLOON_S_ALLOC_STALL 11 /* Stall count of memory allocatoin */ 76 + #define VIRTIO_BALLOON_S_NR 12 76 77 77 78 #define VIRTIO_BALLOON_S_NAMES_WITH_PREFIX(VIRTIO_BALLOON_S_NAMES_prefix) { \ 78 79 VIRTIO_BALLOON_S_NAMES_prefix "swap-in", \ ··· 86 85 VIRTIO_BALLOON_S_NAMES_prefix "disk-caches", \ 87 86 VIRTIO_BALLOON_S_NAMES_prefix "hugetlb-allocations", \ 88 87 VIRTIO_BALLOON_S_NAMES_prefix "hugetlb-failures", \ 89 - VIRTIO_BALLOON_S_NAMES_prefix "oom-kills" \ 88 + VIRTIO_BALLOON_S_NAMES_prefix "oom-kills", \ 89 + VIRTIO_BALLOON_S_NAMES_prefix "alloc-stalls" \ 90 90 } 91 91 92 92 #define VIRTIO_BALLOON_S_NAMES VIRTIO_BALLOON_S_NAMES_WITH_PREFIX("")