BPF Perf buffer vs BPF Ring buffer: Resident set size (RSS) === This document outlines some differences between the BPF perf buffer and the BPF ring buffer per-CPU approach. It focuses on memory aspects and mainly on the "Resident set size" (RSS). These are the 2 test programs discussed in this document: * BPF perf buffer test program: * [BPF side](https://github.com/Andreagit97/BPF-perf-tests/blob/main/templates/perfbuf_output.bpf.c) * [Userspace side](https://github.com/Andreagit97/BPF-perf-tests/blob/main/templates/perfbuf_output.c) * BPF ring buffer test program: * [BPF side](https://github.com/Andreagit97/BPF-perf-tests/blob/main/templates/ringbuf_output.bpf.c) * [Userspace side](https://github.com/Andreagit97/BPF-perf-tests/blob/main/templates/ringbuf_output.c) The 2 programs run on a system with `8` CPUs (online CPUs = system-available CPUs) and `32 GB` of RAM. They try to allocate a `8 MB` buffer for each CPU on the system. The document presents some memory snapshots taken with the `pmap` tool. For every snapshot, we have the full program snapshot and a little focus on the part that we are really interested in. All the data in the snapshots are represented in `KB`. # Perf buffer In the perf buffer case, we take 2 memory snapshots. This is because the `RSS` value change during the lifecycle of the program. The first snapshot is taken immediately after the program's start, while the second one is taken after some minutes when we have read almost all pages of the perf buffer. In the perf buffer case, there is nothing interesting, I've reported it just to have a comparison with the ring buffer one. ## Snapshot after startup ### Full snapshot: This is the full snapshot of our program `./perfbuf_output --buf 8388608`. `--buf 8388608` is a command line option, that tells the program to allocate 8 MB per-CPU buffers. ``` 10921: ./perfbuf_output --buf 8388608 Address Perm Offset Device Inode Size KernelPageSize MMUPageSize Rss Pss Shared_Clean Shared_Dirty Private_Clean Private_Dirty Referenced Anonymous LazyFree AnonHugePages ShmemPmdMapped FilePmdMapped Shared_Hugetlb Private_Hugetlb Swap SwapPss Locked THPeligible ProtectionKey VmFlags Mapping 5603ceaee000 r--p 00000000 103:02 23862339 16 4 4 16 16 0 0 16 0 16 0 0 0 0 0 0 0 0 0 0 0 0 rd mr mw me sd perfbuf_output 5603ceaf2000 r-xp 00004000 103:02 23862339 184 4 4 184 184 0 0 184 0 184 0 0 0 0 0 0 0 0 0 0 0 0 rd ex mr mw me sd perfbuf_output 5603ceb20000 r--p 00032000 103:02 23862339 80 4 4 64 64 0 0 64 0 64 0 0 0 0 0 0 0 0 0 0 0 0 rd mr mw me sd perfbuf_output 5603ceb34000 r--p 00045000 103:02 23862339 8 4 4 8 8 0 0 0 8 8 8 0 0 0 0 0 0 0 0 0 0 0 rd mr mw me ac sd perfbuf_output 5603ceb36000 rw-p 00047000 103:02 23862339 4 4 4 4 4 0 0 0 4 4 4 0 0 0 0 0 0 0 0 0 0 0 rd wr mr mw me ac sd perfbuf_output 5603d03c7000 rw-p 00000000 00:00 0 132 4 4 16 16 0 0 0 16 16 16 0 0 0 0 0 0 0 0 0 0 0 rd wr mr mw me ac sd [heap] 7faac9981000 rw-s 00000000 00:0e 12497 8196 4 4 2096 2096 0 0 2092 4 2096 0 0 0 0 0 0 0 0 0 0 0 0 rd wr sh mr mw me ms dc de dd sd anon_inode:[perf_event] 7faaca182000 rw-s 00000000 00:0e 12497 8196 4 4 2104 2104 0 0 2100 4 2104 0 0 0 0 0 0 0 0 0 0 0 0 rd wr sh mr mw me ms dc de dd sd anon_inode:[perf_event] 7faaca983000 rw-s 00000000 00:0e 12497 8196 4 4 1848 1848 0 0 1844 4 1848 0 0 0 0 0 0 0 0 0 0 0 0 rd wr sh mr mw me ms dc de dd sd anon_inode:[perf_event] 7faacb184000 rw-s 00000000 00:0e 12497 8196 4 4 1532 1532 0 0 1528 4 1532 0 0 0 0 0 0 0 0 0 0 0 0 rd wr sh mr mw me ms dc de dd sd anon_inode:[perf_event] 7faacb985000 rw-s 00000000 00:0e 12497 8196 4 4 2384 2384 0 0 2380 4 2384 0 0 0 0 0 0 0 0 0 0 0 0 rd wr sh mr mw me ms dc de dd sd anon_inode:[perf_event] 7faacc186000 rw-s 00000000 00:0e 12497 8196 4 4 2732 2732 0 0 2728 4 2732 0 0 0 0 0 0 0 0 0 0 0 0 rd wr sh mr mw me ms dc de dd sd anon_inode:[perf_event] 7faacc987000 rw-s 00000000 00:0e 12497 8196 4 4 2260 2260 0 0 2256 4 2260 0 0 0 0 0 0 0 0 0 0 0 0 rd wr sh mr mw me ms dc de dd sd anon_inode:[perf_event] 7faacd188000 rw-s 00000000 00:0e 12497 8196 4 4 2144 2144 0 0 2140 4 2144 0 0 0 0 0 0 0 0 0 0 0 0 rd wr sh mr mw me ms dc de dd sd anon_inode:[perf_event] 7faacd989000 rw-p 00000000 00:00 0 8 4 4 8 8 0 0 0 8 8 8 0 0 0 0 0 0 0 0 0 0 0 rd wr mr mw me ac sd 7faacd98b000 r--p 00000000 103:02 17438936 160 4 4 160 1 160 0 0 0 160 0 0 0 0 0 0 0 0 0 0 0 0 rd mr mw me sd libc.so.6 7faacd9b3000 r-xp 00028000 103:02 17438936 1620 4 4 1004 9 1004 0 0 0 1004 0 0 0 0 0 0 0 0 0 0 0 0 rd ex mr mw me sd libc.so.6 7faacdb48000 r--p 001bd000 103:02 17438936 352 4 4 140 1 140 0 0 0 140 0 0 0 0 0 0 0 0 0 0 0 0 rd mr mw me sd libc.so.6 7faacdba0000 r--p 00214000 103:02 17438936 16 4 4 16 16 0 0 0 16 16 16 0 0 0 0 0 0 0 0 0 0 0 rd mr mw me ac sd libc.so.6 7faacdba4000 rw-p 00218000 103:02 17438936 8 4 4 8 8 0 0 0 8 8 8 0 0 0 0 0 0 0 0 0 0 0 rd wr mr mw me ac sd libc.so.6 7faacdba6000 rw-p 00000000 00:00 0 52 4 4 20 20 0 0 0 20 20 20 0 0 0 0 0 0 0 0 0 0 0 rd wr mr mw me ac sd 7faacdbb3000 r--p 00000000 103:02 17433363 8 4 4 8 0 8 0 0 0 8 0 0 0 0 0 0 0 0 0 0 0 0 rd mr mw me sd libz.so.1.2.11 7faacdbb5000 r-xp 00002000 103:02 17433363 68 4 4 64 0 64 0 0 0 64 0 0 0 0 0 0 0 0 0 0 0 0 rd ex mr mw me sd libz.so.1.2.11 7faacdbc6000 r--p 00013000 103:02 17433363 24 4 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 rd mr mw me sd libz.so.1.2.11 7faacdbcc000 ---p 00019000 103:02 17433363 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 mr mw me sd libz.so.1.2.11 7faacdbcd000 r--p 00019000 103:02 17433363 4 4 4 4 4 0 0 0 4 4 4 0 0 0 0 0 0 0 0 0 0 0 rd mr mw me ac sd libz.so.1.2.11 7faacdbce000 rw-p 0001a000 103:02 17433363 4 4 4 4 4 0 0 0 4 4 4 0 0 0 0 0 0 0 0 0 0 0 rd wr mr mw me ac sd libz.so.1.2.11 7faacdbcf000 r--p 00000000 103:02 17439127 12 4 4 12 1 12 0 0 0 12 0 0 0 0 0 0 0 0 0 0 0 0 rd mr mw me sd libelf-0.186.so 7faacdbd2000 r-xp 00003000 103:02 17439127 80 4 4 76 23 60 0 16 0 76 0 0 0 0 0 0 0 0 0 0 0 0 rd ex mr mw me sd libelf-0.186.so 7faacdbe6000 r--p 00017000 103:02 17439127 16 4 4 16 16 0 0 16 0 16 0 0 0 0 0 0 0 0 0 0 0 0 rd mr mw me sd libelf-0.186.so 7faacdbea000 ---p 0001b000 103:02 17439127 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 mr mw me sd libelf-0.186.so 7faacdbeb000 r--p 0001b000 103:02 17439127 4 4 4 4 4 0 0 0 4 4 4 0 0 0 0 0 0 0 0 0 0 0 rd mr mw me ac sd libelf-0.186.so 7faacdbec000 rw-p 0001c000 103:02 17439127 4 4 4 4 4 0 0 0 4 4 4 0 0 0 0 0 0 0 0 0 0 0 rd wr mr mw me ac sd libelf-0.186.so 7faacdbff000 rw-p 00000000 00:00 0 8 4 4 8 8 0 0 0 8 8 8 0 0 0 0 0 0 0 0 0 0 0 rd wr mr mw me ac sd 7faacdc01000 r--p 00000000 103:02 17438601 8 4 4 8 0 8 0 0 0 8 0 0 0 0 0 0 0 0 0 0 0 0 rd mr mw me sd ld-linux-x86-64.so.2 7faacdc03000 r-xp 00002000 103:02 17438601 168 4 4 168 1 168 0 0 0 168 0 0 0 0 0 0 0 0 0 0 0 0 rd ex mr mw me sd ld-linux-x86-64.so.2 7faacdc2d000 r--p 0002c000 103:02 17438601 44 4 4 40 0 40 0 0 0 40 0 0 0 0 0 0 0 0 0 0 0 0 rd mr mw me sd ld-linux-x86-64.so.2 7faacdc39000 r--p 00037000 103:02 17438601 8 4 4 8 8 0 0 0 8 8 8 0 0 0 0 0 0 0 0 0 0 0 rd mr mw me ac sd ld-linux-x86-64.so.2 7faacdc3b000 rw-p 00039000 103:02 17438601 8 4 4 8 8 0 0 0 8 8 8 0 0 0 0 0 0 0 0 0 0 0 rd wr mr mw me ac sd ld-linux-x86-64.so.2 7fff4e726000 rw-p 00000000 00:00 0 132 4 4 20 20 0 0 0 20 20 20 0 0 0 0 0 0 0 0 0 0 0 rd wr mr mw me gd ac [stack] 7fff4e759000 r--p 00000000 00:00 0 16 4 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 rd mr pf io de dd sd [vvar] 7fff4e75d000 r-xp 00000000 00:00 0 8 4 4 4 0 4 0 0 0 4 0 0 0 0 0 0 0 0 0 0 0 0 rd ex mr mw me de sd [vdso] ffffffffff600000 --xp 00000000 00:00 0 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ex [vsyscall] ===== ============== =========== ===== ===== ============ ============ ============= ============= ========== ========= ======== ============= ============== ============= ============== =============== ==== ======= ====== =========== ============= 68844 172 172 19204 17556 1668 0 17364 172 19204 140 0 0 0 0 0 0 0 0 0 0 0 KB ``` ### Snapshot detail: The virtual memory size of each buffer is `8196 KB` as we expect, and `RSS` is slowly increasing its value since we are reading the content of our perf buffers. ``` 10921: ./perfbuf_output --buf 8388608 Address Perm Offset Device Inode Size KernelPageSize MMUPageSize Rss Pss Shared_Clean Shared_Dirty Private_Clean Private_Dirty Referenced Anonymous LazyFree AnonHugePages ShmemPmdMapped FilePmdMapped Shared_Hugetlb Private_Hugetlb Swap SwapPss Locked THPeligible ProtectionKey VmFlags Mapping 7faac9981000 rw-s 00000000 00:0e 12497 8196 4 4 2096 2096 0 0 2092 4 2096 0 0 0 0 0 0 0 0 0 0 0 0 rd wr sh mr mw me ms dc de dd sd anon_inode:[perf_event] 7faaca182000 rw-s 00000000 00:0e 12497 8196 4 4 2104 2104 0 0 2100 4 2104 0 0 0 0 0 0 0 0 0 0 0 0 rd wr sh mr mw me ms dc de dd sd anon_inode:[perf_event] 7faaca983000 rw-s 00000000 00:0e 12497 8196 4 4 1848 1848 0 0 1844 4 1848 0 0 0 0 0 0 0 0 0 0 0 0 rd wr sh mr mw me ms dc de dd sd anon_inode:[perf_event] 7faacb184000 rw-s 00000000 00:0e 12497 8196 4 4 1532 1532 0 0 1528 4 1532 0 0 0 0 0 0 0 0 0 0 0 0 rd wr sh mr mw me ms dc de dd sd anon_inode:[perf_event] 7faacb985000 rw-s 00000000 00:0e 12497 8196 4 4 2384 2384 0 0 2380 4 2384 0 0 0 0 0 0 0 0 0 0 0 0 rd wr sh mr mw me ms dc de dd sd anon_inode:[perf_event] 7faacc186000 rw-s 00000000 00:0e 12497 8196 4 4 2732 2732 0 0 2728 4 2732 0 0 0 0 0 0 0 0 0 0 0 0 rd wr sh mr mw me ms dc de dd sd anon_inode:[perf_event] 7faacc987000 rw-s 00000000 00:0e 12497 8196 4 4 2260 2260 0 0 2256 4 2260 0 0 0 0 0 0 0 0 0 0 0 0 rd wr sh mr mw me ms dc de dd sd anon_inode:[perf_event] 7faacd188000 rw-s 00000000 00:0e 12497 8196 4 4 2144 2144 0 0 2140 4 2144 0 0 0 0 0 0 0 0 0 0 0 0 rd wr sh mr mw me ms dc de dd sd anon_inode:[perf_event] ``` ## Snapshot after a few minutes ### Full snapshot: This is the full snapshot of our program `./perfbuf_output --buf 8388608`. ``` 10921: ./perfbuf_output --buf 8388608 Address Perm Offset Device Inode Size KernelPageSize MMUPageSize Rss Pss Shared_Clean Shared_Dirty Private_Clean Private_Dirty Referenced Anonymous LazyFree AnonHugePages ShmemPmdMapped FilePmdMapped Shared_Hugetlb Private_Hugetlb Swap SwapPss Locked THPeligible ProtectionKey VmFlags Mapping 5603ceaee000 r--p 00000000 103:02 23862339 16 4 4 16 16 0 0 16 0 16 0 0 0 0 0 0 0 0 0 0 0 0 rd mr mw me sd perfbuf_output 5603ceaf2000 r-xp 00004000 103:02 23862339 184 4 4 184 184 0 0 184 0 184 0 0 0 0 0 0 0 0 0 0 0 0 rd ex mr mw me sd perfbuf_output 5603ceb20000 r--p 00032000 103:02 23862339 80 4 4 64 64 0 0 64 0 64 0 0 0 0 0 0 0 0 0 0 0 0 rd mr mw me sd perfbuf_output 5603ceb34000 r--p 00045000 103:02 23862339 8 4 4 8 8 0 0 0 8 8 8 0 0 0 0 0 0 0 0 0 0 0 rd mr mw me ac sd perfbuf_output 5603ceb36000 rw-p 00047000 103:02 23862339 4 4 4 4 4 0 0 0 4 4 4 0 0 0 0 0 0 0 0 0 0 0 rd wr mr mw me ac sd perfbuf_output 5603d03c7000 rw-p 00000000 00:00 0 132 4 4 16 16 0 0 0 16 16 16 0 0 0 0 0 0 0 0 0 0 0 rd wr mr mw me ac sd [heap] 7faac9981000 rw-s 00000000 00:0e 12497 8196 4 4 8196 8196 0 0 8192 4 8196 0 0 0 0 0 0 0 0 0 0 0 0 rd wr sh mr mw me ms dc de dd sd anon_inode:[perf_event] 7faaca182000 rw-s 00000000 00:0e 12497 8196 4 4 8196 8196 0 0 8192 4 8196 0 0 0 0 0 0 0 0 0 0 0 0 rd wr sh mr mw me ms dc de dd sd anon_inode:[perf_event] 7faaca983000 rw-s 00000000 00:0e 12497 8196 4 4 8196 8196 0 0 8192 4 8196 0 0 0 0 0 0 0 0 0 0 0 0 rd wr sh mr mw me ms dc de dd sd anon_inode:[perf_event] 7faacb184000 rw-s 00000000 00:0e 12497 8196 4 4 8196 8196 0 0 8192 4 8196 0 0 0 0 0 0 0 0 0 0 0 0 rd wr sh mr mw me ms dc de dd sd anon_inode:[perf_event] 7faacb985000 rw-s 00000000 00:0e 12497 8196 4 4 8196 8196 0 0 8192 4 8196 0 0 0 0 0 0 0 0 0 0 0 0 rd wr sh mr mw me ms dc de dd sd anon_inode:[perf_event] 7faacc186000 rw-s 00000000 00:0e 12497 8196 4 4 8196 8196 0 0 8192 4 8196 0 0 0 0 0 0 0 0 0 0 0 0 rd wr sh mr mw me ms dc de dd sd anon_inode:[perf_event] 7faacc987000 rw-s 00000000 00:0e 12497 8196 4 4 8196 8196 0 0 8192 4 8196 0 0 0 0 0 0 0 0 0 0 0 0 rd wr sh mr mw me ms dc de dd sd anon_inode:[perf_event] 7faacd188000 rw-s 00000000 00:0e 12497 8196 4 4 8196 8196 0 0 8192 4 8196 0 0 0 0 0 0 0 0 0 0 0 0 rd wr sh mr mw me ms dc de dd sd anon_inode:[perf_event] 7faacd989000 rw-p 00000000 00:00 0 8 4 4 8 8 0 0 0 8 8 8 0 0 0 0 0 0 0 0 0 0 0 rd wr mr mw me ac sd 7faacd98b000 r--p 00000000 103:02 17438936 160 4 4 160 1 160 0 0 0 160 0 0 0 0 0 0 0 0 0 0 0 0 rd mr mw me sd libc.so.6 7faacd9b3000 r-xp 00028000 103:02 17438936 1620 4 4 1004 9 1004 0 0 0 1004 0 0 0 0 0 0 0 0 0 0 0 0 rd ex mr mw me sd libc.so.6 7faacdb48000 r--p 001bd000 103:02 17438936 352 4 4 140 1 140 0 0 0 140 0 0 0 0 0 0 0 0 0 0 0 0 rd mr mw me sd libc.so.6 7faacdba0000 r--p 00214000 103:02 17438936 16 4 4 16 16 0 0 0 16 16 16 0 0 0 0 0 0 0 0 0 0 0 rd mr mw me ac sd libc.so.6 7faacdba4000 rw-p 00218000 103:02 17438936 8 4 4 8 8 0 0 0 8 8 8 0 0 0 0 0 0 0 0 0 0 0 rd wr mr mw me ac sd libc.so.6 7faacdba6000 rw-p 00000000 00:00 0 52 4 4 20 20 0 0 0 20 20 20 0 0 0 0 0 0 0 0 0 0 0 rd wr mr mw me ac sd 7faacdbb3000 r--p 00000000 103:02 17433363 8 4 4 8 0 8 0 0 0 8 0 0 0 0 0 0 0 0 0 0 0 0 rd mr mw me sd libz.so.1.2.11 7faacdbb5000 r-xp 00002000 103:02 17433363 68 4 4 64 0 64 0 0 0 64 0 0 0 0 0 0 0 0 0 0 0 0 rd ex mr mw me sd libz.so.1.2.11 7faacdbc6000 r--p 00013000 103:02 17433363 24 4 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 rd mr mw me sd libz.so.1.2.11 7faacdbcc000 ---p 00019000 103:02 17433363 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 mr mw me sd libz.so.1.2.11 7faacdbcd000 r--p 00019000 103:02 17433363 4 4 4 4 4 0 0 0 4 4 4 0 0 0 0 0 0 0 0 0 0 0 rd mr mw me ac sd libz.so.1.2.11 7faacdbce000 rw-p 0001a000 103:02 17433363 4 4 4 4 4 0 0 0 4 4 4 0 0 0 0 0 0 0 0 0 0 0 rd wr mr mw me ac sd libz.so.1.2.11 7faacdbcf000 r--p 00000000 103:02 17439127 12 4 4 12 1 12 0 0 0 12 0 0 0 0 0 0 0 0 0 0 0 0 rd mr mw me sd libelf-0.186.so 7faacdbd2000 r-xp 00003000 103:02 17439127 80 4 4 76 23 60 0 16 0 76 0 0 0 0 0 0 0 0 0 0 0 0 rd ex mr mw me sd libelf-0.186.so 7faacdbe6000 r--p 00017000 103:02 17439127 16 4 4 16 16 0 0 16 0 16 0 0 0 0 0 0 0 0 0 0 0 0 rd mr mw me sd libelf-0.186.so 7faacdbea000 ---p 0001b000 103:02 17439127 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 mr mw me sd libelf-0.186.so 7faacdbeb000 r--p 0001b000 103:02 17439127 4 4 4 4 4 0 0 0 4 4 4 0 0 0 0 0 0 0 0 0 0 0 rd mr mw me ac sd libelf-0.186.so 7faacdbec000 rw-p 0001c000 103:02 17439127 4 4 4 4 4 0 0 0 4 4 4 0 0 0 0 0 0 0 0 0 0 0 rd wr mr mw me ac sd libelf-0.186.so 7faacdbff000 rw-p 00000000 00:00 0 8 4 4 8 8 0 0 0 8 8 8 0 0 0 0 0 0 0 0 0 0 0 rd wr mr mw me ac sd 7faacdc01000 r--p 00000000 103:02 17438601 8 4 4 8 0 8 0 0 0 8 0 0 0 0 0 0 0 0 0 0 0 0 rd mr mw me sd ld-linux-x86-64.so.2 7faacdc03000 r-xp 00002000 103:02 17438601 168 4 4 168 1 168 0 0 0 168 0 0 0 0 0 0 0 0 0 0 0 0 rd ex mr mw me sd ld-linux-x86-64.so.2 7faacdc2d000 r--p 0002c000 103:02 17438601 44 4 4 40 0 40 0 0 0 40 0 0 0 0 0 0 0 0 0 0 0 0 rd mr mw me sd ld-linux-x86-64.so.2 7faacdc39000 r--p 00037000 103:02 17438601 8 4 4 8 8 0 0 0 8 8 8 0 0 0 0 0 0 0 0 0 0 0 rd mr mw me ac sd ld-linux-x86-64.so.2 7faacdc3b000 rw-p 00039000 103:02 17438601 8 4 4 8 8 0 0 0 8 8 8 0 0 0 0 0 0 0 0 0 0 0 rd wr mr mw me ac sd ld-linux-x86-64.so.2 7fff4e726000 rw-p 00000000 00:00 0 132 4 4 20 20 0 0 0 20 20 20 0 0 0 0 0 0 0 0 0 0 0 rd wr mr mw me gd ac [stack] 7fff4e759000 r--p 00000000 00:00 0 16 4 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 rd mr pf io de dd sd [vvar] 7fff4e75d000 r-xp 00000000 00:00 0 8 4 4 4 0 4 0 0 0 4 0 0 0 0 0 0 0 0 0 0 0 0 rd ex mr mw me de sd [vdso] ffffffffff600000 --xp 00000000 00:00 0 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ex [vsyscall] ===== ============== =========== ===== ===== ============ ============ ============= ============= ========== ========= ======== ============= ============== ============= ============== =============== ==== ======= ====== =========== ============= 68844 172 172 67672 66024 1668 0 65832 172 67672 140 0 0 0 0 0 0 0 0 0 0 0 KB ``` ### Snapshot detail: Here `RSS` reached the maximum value of `8196 KB` and this is exactly what we expect, we have `8192 KB` of data and `4 KB` for the metadata page. ``` 10921: ./perfbuf_output --buf 8388608 Address Perm Offset Device Inode Size KernelPageSize MMUPageSize Rss Pss Shared_Clean Shared_Dirty Private_Clean Private_Dirty Referenced Anonymous LazyFree AnonHugePages ShmemPmdMapped FilePmdMapped Shared_Hugetlb Private_Hugetlb Swap SwapPss Locked THPeligible ProtectionKey VmFlags Mapping 7faac9981000 rw-s 00000000 00:0e 12497 8196 4 4 8196 8196 0 0 8192 4 8196 0 0 0 0 0 0 0 0 0 0 0 0 rd wr sh mr mw me ms dc de dd sd anon_inode:[perf_event] 7faaca182000 rw-s 00000000 00:0e 12497 8196 4 4 8196 8196 0 0 8192 4 8196 0 0 0 0 0 0 0 0 0 0 0 0 rd wr sh mr mw me ms dc de dd sd anon_inode:[perf_event] 7faaca983000 rw-s 00000000 00:0e 12497 8196 4 4 8196 8196 0 0 8192 4 8196 0 0 0 0 0 0 0 0 0 0 0 0 rd wr sh mr mw me ms dc de dd sd anon_inode:[perf_event] 7faacb184000 rw-s 00000000 00:0e 12497 8196 4 4 8196 8196 0 0 8192 4 8196 0 0 0 0 0 0 0 0 0 0 0 0 rd wr sh mr mw me ms dc de dd sd anon_inode:[perf_event] 7faacb985000 rw-s 00000000 00:0e 12497 8196 4 4 8196 8196 0 0 8192 4 8196 0 0 0 0 0 0 0 0 0 0 0 0 rd wr sh mr mw me ms dc de dd sd anon_inode:[perf_event] 7faacc186000 rw-s 00000000 00:0e 12497 8196 4 4 8196 8196 0 0 8192 4 8196 0 0 0 0 0 0 0 0 0 0 0 0 rd wr sh mr mw me ms dc de dd sd anon_inode:[perf_event] 7faacc987000 rw-s 00000000 00:0e 12497 8196 4 4 8196 8196 0 0 8192 4 8196 0 0 0 0 0 0 0 0 0 0 0 0 rd wr sh mr mw me ms dc de dd sd anon_inode:[perf_event] 7faacd188000 rw-s 00000000 00:0e 12497 8196 4 4 8196 8196 0 0 8192 4 8196 0 0 0 0 0 0 0 0 0 0 0 0 rd wr sh mr mw me ms dc de dd sd anon_inode:[perf_event] ``` # Ring buffer This is the real relevant case. Here we have just one snapshot because immediately after the startup we already have the `RSS` at its maximum value. ### Full Snapshot: This is the full snapshot of our program `./ringbuf_output --buf 8388608`. `--buf 8388608` is a command line option, that tells the program to allocate 8 MB per-CPU buffers. ``` 11940: ./ringbuf_output --buf 8388608 Address Perm Offset Device Inode Size KernelPageSize MMUPageSize Rss Pss Shared_Clean Shared_Dirty Private_Clean Private_Dirty Referenced Anonymous LazyFree AnonHugePages ShmemPmdMapped FilePmdMapped Shared_Hugetlb Private_Hugetlb Swap SwapPss Locked THPeligible ProtectionKey VmFlags Mapping 563a09b70000 r--p 00000000 103:02 23856113 16 4 4 16 16 0 0 16 0 16 0 0 0 0 0 0 0 0 0 0 0 0 rd mr mw me sd ringbuf_output 563a09b74000 r-xp 00004000 103:02 23856113 188 4 4 176 176 0 0 176 0 176 0 0 0 0 0 0 0 0 0 0 0 0 rd ex mr mw me sd ringbuf_output 563a09ba3000 r--p 00033000 103:02 23856113 80 4 4 64 64 0 0 64 0 64 0 0 0 0 0 0 0 0 0 0 0 0 rd mr mw me sd ringbuf_output 563a09bb8000 r--p 00047000 103:02 23856113 8 4 4 8 8 0 0 0 8 8 8 0 0 0 0 0 0 0 0 0 0 0 rd mr mw me ac sd ringbuf_output 563a09bba000 rw-p 00049000 103:02 23856113 4 4 4 4 4 0 0 0 4 4 4 0 0 0 0 0 0 0 0 0 0 0 rd wr mr mw me ac sd ringbuf_output 563a0a3f7000 rw-p 00000000 00:00 0 132 4 4 20 20 0 0 0 20 20 20 0 0 0 0 0 0 0 0 0 0 0 rd wr mr mw me ac sd [heap] 7fae1e205000 r--s 00001000 00:0e 12497 16388 4 4 16388 8196 16384 0 4 0 16388 0 0 0 0 0 0 0 0 0 0 0 0 rd sh mr ms de dd sd mm anon_inode:bpf-map 7fae1f206000 r--s 00001000 00:0e 12497 16388 4 4 16388 8196 16384 0 4 0 16388 0 0 0 0 0 0 0 0 0 0 0 0 rd sh mr ms de dd sd mm anon_inode:bpf-map 7fae20207000 r--s 00001000 00:0e 12497 16388 4 4 16388 8196 16384 0 4 0 16388 0 0 0 0 0 0 0 0 0 0 0 0 rd sh mr ms de dd sd mm anon_inode:bpf-map 7fae21208000 r--s 00001000 00:0e 12497 16388 4 4 16388 8196 16384 0 4 0 16388 0 0 0 0 0 0 0 0 0 0 0 0 rd sh mr ms de dd sd mm anon_inode:bpf-map 7fae22209000 r--s 00001000 00:0e 12497 16388 4 4 16388 8196 16384 0 4 0 16388 0 0 0 0 0 0 0 0 0 0 0 0 rd sh mr ms de dd sd mm anon_inode:bpf-map 7fae2320a000 r--s 00001000 00:0e 12497 16388 4 4 16388 8196 16384 0 4 0 16388 0 0 0 0 0 0 0 0 0 0 0 0 rd sh mr ms de dd sd mm anon_inode:bpf-map 7fae2420b000 r--s 00001000 00:0e 12497 16388 4 4 16388 8196 16384 0 4 0 16388 0 0 0 0 0 0 0 0 0 0 0 0 rd sh mr ms de dd sd mm anon_inode:bpf-map 7fae2520c000 r--s 00001000 00:0e 12497 16388 4 4 16388 8196 16384 0 4 0 16388 0 0 0 0 0 0 0 0 0 0 0 0 rd sh mr ms de dd sd mm anon_inode:bpf-map 7fae2620d000 rw-p 00000000 00:00 0 8 4 4 8 8 0 0 0 8 8 8 0 0 0 0 0 0 0 0 0 0 0 rd wr mr mw me ac sd 7fae2620f000 r--p 00000000 103:02 17438936 160 4 4 160 1 160 0 0 0 160 0 0 0 0 0 0 0 0 0 0 0 0 rd mr mw me sd libc.so.6 7fae26237000 r-xp 00028000 103:02 17438936 1620 4 4 1092 9 1092 0 0 0 1092 0 0 0 0 0 0 0 0 0 0 0 0 rd ex mr mw me sd libc.so.6 7fae263cc000 r--p 001bd000 103:02 17438936 352 4 4 184 1 184 0 0 0 184 0 0 0 0 0 0 0 0 0 0 0 0 rd mr mw me sd libc.so.6 7fae26424000 r--p 00214000 103:02 17438936 16 4 4 16 16 0 0 0 16 16 16 0 0 0 0 0 0 0 0 0 0 0 rd mr mw me ac sd libc.so.6 7fae26428000 rw-p 00218000 103:02 17438936 8 4 4 8 8 0 0 0 8 8 8 0 0 0 0 0 0 0 0 0 0 0 rd wr mr mw me ac sd libc.so.6 7fae2642a000 rw-p 00000000 00:00 0 52 4 4 20 20 0 0 0 20 20 20 0 0 0 0 0 0 0 0 0 0 0 rd wr mr mw me ac sd 7fae26437000 r--p 00000000 103:02 17433363 8 4 4 8 0 8 0 0 0 8 0 0 0 0 0 0 0 0 0 0 0 0 rd mr mw me sd libz.so.1.2.11 7fae26439000 r-xp 00002000 103:02 17433363 68 4 4 64 0 64 0 0 0 64 0 0 0 0 0 0 0 0 0 0 0 0 rd ex mr mw me sd libz.so.1.2.11 7fae2644a000 r--p 00013000 103:02 17433363 24 4 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 rd mr mw me sd libz.so.1.2.11 7fae26450000 ---p 00019000 103:02 17433363 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 mr mw me sd libz.so.1.2.11 7fae26451000 r--p 00019000 103:02 17433363 4 4 4 4 4 0 0 0 4 4 4 0 0 0 0 0 0 0 0 0 0 0 rd mr mw me ac sd libz.so.1.2.11 7fae26452000 rw-p 0001a000 103:02 17433363 4 4 4 4 4 0 0 0 4 4 4 0 0 0 0 0 0 0 0 0 0 0 rd wr mr mw me ac sd libz.so.1.2.11 7fae26453000 r--p 00000000 103:02 17439127 12 4 4 12 1 12 0 0 0 12 0 0 0 0 0 0 0 0 0 0 0 0 rd mr mw me sd libelf-0.186.so 7fae26456000 r-xp 00003000 103:02 17439127 80 4 4 76 23 60 0 16 0 76 0 0 0 0 0 0 0 0 0 0 0 0 rd ex mr mw me sd libelf-0.186.so 7fae2646a000 r--p 00017000 103:02 17439127 16 4 4 16 16 0 0 16 0 16 0 0 0 0 0 0 0 0 0 0 0 0 rd mr mw me sd libelf-0.186.so 7fae2646e000 ---p 0001b000 103:02 17439127 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 mr mw me sd libelf-0.186.so 7fae2646f000 r--p 0001b000 103:02 17439127 4 4 4 4 4 0 0 0 4 4 4 0 0 0 0 0 0 0 0 0 0 0 rd mr mw me ac sd libelf-0.186.so 7fae26470000 rw-p 0001c000 103:02 17439127 4 4 4 4 4 0 0 0 4 4 4 0 0 0 0 0 0 0 0 0 0 0 rd wr mr mw me ac sd libelf-0.186.so 7fae2647c000 rw-s 00000000 00:0e 12497 4 4 4 4 4 0 0 0 4 4 0 0 0 0 0 0 0 0 0 0 0 0 rd wr sh mr mw ms de dd sd mm anon_inode:bpf-map 7fae2647d000 rw-s 00000000 00:0e 12497 4 4 4 4 4 0 0 0 4 4 0 0 0 0 0 0 0 0 0 0 0 0 rd wr sh mr mw ms de dd sd mm anon_inode:bpf-map 7fae2647e000 rw-s 00000000 00:0e 12497 4 4 4 4 4 0 0 0 4 4 0 0 0 0 0 0 0 0 0 0 0 0 rd wr sh mr mw ms de dd sd mm anon_inode:bpf-map 7fae2647f000 rw-s 00000000 00:0e 12497 4 4 4 4 4 0 0 0 4 4 0 0 0 0 0 0 0 0 0 0 0 0 rd wr sh mr mw ms de dd sd mm anon_inode:bpf-map 7fae26480000 rw-s 00000000 00:0e 12497 4 4 4 4 4 0 0 0 4 4 0 0 0 0 0 0 0 0 0 0 0 0 rd wr sh mr mw ms de dd sd mm anon_inode:bpf-map 7fae26481000 rw-s 00000000 00:0e 12497 4 4 4 4 4 0 0 0 4 4 0 0 0 0 0 0 0 0 0 0 0 0 rd wr sh mr mw ms de dd sd mm anon_inode:bpf-map 7fae26482000 rw-s 00000000 00:0e 12497 4 4 4 4 4 0 0 0 4 4 0 0 0 0 0 0 0 0 0 0 0 0 rd wr sh mr mw ms de dd sd mm anon_inode:bpf-map 7fae26483000 rw-p 00000000 00:00 0 8 4 4 8 8 0 0 0 8 8 8 0 0 0 0 0 0 0 0 0 0 0 rd wr mr mw me ac sd 7fae26485000 r--p 00000000 103:02 17438601 8 4 4 8 0 8 0 0 0 8 0 0 0 0 0 0 0 0 0 0 0 0 rd mr mw me sd ld-linux-x86-64.so.2 7fae26487000 r-xp 00002000 103:02 17438601 168 4 4 168 1 168 0 0 0 168 0 0 0 0 0 0 0 0 0 0 0 0 rd ex mr mw me sd ld-linux-x86-64.so.2 7fae264b1000 r--p 0002c000 103:02 17438601 44 4 4 40 0 40 0 0 0 40 0 0 0 0 0 0 0 0 0 0 0 0 rd mr mw me sd ld-linux-x86-64.so.2 7fae264bc000 rw-s 00000000 00:0e 12497 4 4 4 4 4 0 0 0 4 4 0 0 0 0 0 0 0 0 0 0 0 0 rd wr sh mr mw ms de dd sd mm anon_inode:bpf-map 7fae264bd000 r--p 00037000 103:02 17438601 8 4 4 8 8 0 0 0 8 8 8 0 0 0 0 0 0 0 0 0 0 0 rd mr mw me ac sd ld-linux-x86-64.so.2 7fae264bf000 rw-p 00039000 103:02 17438601 8 4 4 8 8 0 0 0 8 8 8 0 0 0 0 0 0 0 0 0 0 0 rd wr mr mw me ac sd ld-linux-x86-64.so.2 7ffffc006000 rw-p 00000000 00:00 0 132 4 4 20 20 0 0 0 20 20 20 0 0 0 0 0 0 0 0 0 0 0 rd wr mr mw me gd ac [stack] 7ffffc16c000 r--p 00000000 00:00 0 16 4 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 rd mr pf io de dd sd [vvar] 7ffffc170000 r-xp 00000000 00:00 0 8 4 4 4 0 4 0 0 0 4 0 0 0 0 0 0 0 0 0 0 0 0 rd ex mr mw me de sd [vdso] ffffffffff600000 --xp 00000000 00:00 0 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ex [vsyscall] ====== ============== =========== ====== ===== ============ ============ ============= ============= ========== ========= ======== ============= ============== ============= ============== =============== ==== ======= ====== =========== ============= 134416 204 204 133368 66052 132872 0 320 176 133368 144 0 0 0 0 0 0 0 0 0 0 0 KB ``` ### Snapshot detail: The virtual size of a single buffer is `16388 KB` as we can expect (`16 MB` of double-mapped data pages + `4 KB` of the producer page). What I don't fully understand is why`RSS` is `16388 KB`. I know that this memory is `mmap()'ed` and fully shared, but I would expect something like `8196 KB` + a few extra pages, so something really similar to the perf buffer case. We access the mapped part of the buffer when we have to manage some records that wrap around, but in this case, we should access just a few pages of the mapped area (supposing that we never send huge events of some MBs). Is there a technical reason behind this fact? IIRC the `RSS` is taken into account during the OOM score computation, my concern here is that the ring buffer program will have more chances to be killed with respect than the perf buffer one... ``` 11940: ./ringbuf_output --buf 8388608 Address Perm Offset Device Inode Size KernelPageSize MMUPageSize Rss Pss Shared_Clean Shared_Dirty Private_Clean Private_Dirty Referenced Anonymous LazyFree AnonHugePages ShmemPmdMapped FilePmdMapped Shared_Hugetlb Private_Hugetlb Swap SwapPss Locked THPeligible ProtectionKey VmFlags Mapping 7fae1e205000 r--s 00001000 00:0e 12497 16388 4 4 16388 8196 16384 0 4 0 16388 0 0 0 0 0 0 0 0 0 0 0 0 rd sh mr ms de dd sd mm anon_inode:bpf-map 7fae1f206000 r--s 00001000 00:0e 12497 16388 4 4 16388 8196 16384 0 4 0 16388 0 0 0 0 0 0 0 0 0 0 0 0 rd sh mr ms de dd sd mm anon_inode:bpf-map 7fae20207000 r--s 00001000 00:0e 12497 16388 4 4 16388 8196 16384 0 4 0 16388 0 0 0 0 0 0 0 0 0 0 0 0 rd sh mr ms de dd sd mm anon_inode:bpf-map 7fae21208000 r--s 00001000 00:0e 12497 16388 4 4 16388 8196 16384 0 4 0 16388 0 0 0 0 0 0 0 0 0 0 0 0 rd sh mr ms de dd sd mm anon_inode:bpf-map 7fae22209000 r--s 00001000 00:0e 12497 16388 4 4 16388 8196 16384 0 4 0 16388 0 0 0 0 0 0 0 0 0 0 0 0 rd sh mr ms de dd sd mm anon_inode:bpf-map 7fae2320a000 r--s 00001000 00:0e 12497 16388 4 4 16388 8196 16384 0 4 0 16388 0 0 0 0 0 0 0 0 0 0 0 0 rd sh mr ms de dd sd mm anon_inode:bpf-map 7fae2420b000 r--s 00001000 00:0e 12497 16388 4 4 16388 8196 16384 0 4 0 16388 0 0 0 0 0 0 0 0 0 0 0 0 rd sh mr ms de dd sd mm anon_inode:bpf-map 7fae2520c000 r--s 00001000 00:0e 12497 16388 4 4 16388 8196 16384 0 4 0 16388 0 0 0 0 0 0 0 0 0 0 0 0 rd sh mr ms de dd sd mm anon_inode:bpf-map 7fae2647c000 rw-s 00000000 00:0e 12497 4 4 4 4 4 0 0 0 4 4 0 0 0 0 0 0 0 0 0 0 0 0 rd wr sh mr mw ms de dd sd mm anon_inode:bpf-map 7fae2647d000 rw-s 00000000 00:0e 12497 4 4 4 4 4 0 0 0 4 4 0 0 0 0 0 0 0 0 0 0 0 0 rd wr sh mr mw ms de dd sd mm anon_inode:bpf-map 7fae2647e000 rw-s 00000000 00:0e 12497 4 4 4 4 4 0 0 0 4 4 0 0 0 0 0 0 0 0 0 0 0 0 rd wr sh mr mw ms de dd sd mm anon_inode:bpf-map 7fae2647f000 rw-s 00000000 00:0e 12497 4 4 4 4 4 0 0 0 4 4 0 0 0 0 0 0 0 0 0 0 0 0 rd wr sh mr mw ms de dd sd mm anon_inode:bpf-map 7fae26480000 rw-s 00000000 00:0e 12497 4 4 4 4 4 0 0 0 4 4 0 0 0 0 0 0 0 0 0 0 0 0 rd wr sh mr mw ms de dd sd mm anon_inode:bpf-map 7fae26481000 rw-s 00000000 00:0e 12497 4 4 4 4 4 0 0 0 4 4 0 0 0 0 0 0 0 0 0 0 0 0 rd wr sh mr mw ms de dd sd mm anon_inode:bpf-map 7fae26482000 rw-s 00000000 00:0e 12497 4 4 4 4 4 0 0 0 4 4 0 0 0 0 0 0 0 0 0 0 0 0 rd wr sh mr mw ms de dd sd mm anon_inode:bpf-map 7fae264bc000 rw-s 00000000 00:0e 12497 4 4 4 4 4 0 0 0 4 4 0 0 0 0 0 0 0 0 0 0 0 0 rd wr sh mr mw ms de dd sd mm anon_inode:bpf-map ```