ANDROID: binder: show high watermark of alloc->pages.
PATCH 1/1 ANDROID: binder: show high watermark of alloc->pages.
Show the high watermark of the index into the alloc->pages array, to facilitate sizing the buffer on a per-process basis.
--- drivers/android/binder_alloc.c | 4 ++++ drivers/android/binder_alloc.h | 2 ++ 2 files changed, 6 insertions(+)
drivers/android/binder_alloc.c +4 -0
@@ -281,6 +281,9 @@ static int binder_update_page_range(struct binder_alloc *alloc, int allocate, goto err_vm_insert_page_failed; } +if (index +1 > alloc->pages_high) + alloc->pages_high = index +1 ; +trace_binder_alloc_page_end (alloc, index);/* vm_insert_page does not seem to increment the refcount */ }
@@ -853,6 +856,7 @@ void binder_alloc_print_pages(struct seq_file *m, }mutex_unlock (&alloc->mutex);seq_printf (m," pages: %d:%d:%d\n" , active, lru, free); +seq_printf (m," pages high watermark: %zu\n" , alloc->pages_high); }/**
drivers/android/binder_alloc.h +2 -0
@@ -92,6 +92,7 @@ struct binder_lru_page {* @pages: array of binder_lru_page * @buffer_size: size of address space specified via mmap * @pid: pid for associated binder_proc (invariant after init) +* @pages_high: high watermark of offset in @pages * * Bookkeeping structure for per-proc address space management for binder * buffers. It is normally initialized during binder_init() and binder_mmap()
@@ -112,6 +113,7 @@ struct binder_alloc {size_t buffer_size;uint32_t buffer_free;int pid; +size_t pages_high; };#ifdef CONFIG_ANDROID_BINDER_IPC_SELFTEST
Signature · 1 line
2.15.0.448.gf294e3d99a-goog
Greg KH
maintainerQuoted 25 lines · Martijn Coenen
Show the high watermark of the index into the
alloc->pagesarray, to facilitate sizing the buffer on a per-process basis.Signed-off-by Martijn Coenen <[email protected]>--- drivers/android/binder_alloc.c | 4 ++++ drivers/android/binder_alloc.h | 2 ++ 2 files changed, 6 insertions(+)drivers/android/binder_alloc.c +3
-0@@ -281,6 +281,9 @@ static int binder_update_page_range(struct binder_alloc *alloc, int allocate, goto err_vm_insert_page_failed; } +if (index +1 > alloc->pages_high) + alloc->pages_high = index +1 ; +trace_binder_alloc_page_end (alloc, index);/* vm_insert_page does not seem to increment the refcount */ }
drivers/android/binder_alloc.c void binder_alloc_print_pages(struct seq_file *m, · line 859
Quoted 4 lines
drivers/android/binder_alloc.c +1
-0@@ -853,6 +856,7 @@ void binder_alloc_print_pages(struct seq_file *m, }mutex_unlock (&alloc->mutex);seq_printf (m," pages: %d:%d:%d\n" , active, lru, free); +seq_printf (m," pages high watermark: %zu\n" , alloc->pages_high);
Who can use this? A userspace tool? Or something else?
This is ok for 4.15-rc1, right?
thanks,
greg k-h
Quoted 1 line · Greg KH
Who can use this? A userspace tool? Or something else?
The output is part of Android bugreports, it's not parsed automatically but the information is very useful even to manually look at. Since Treble, we have more processes using binder, and some 32-bit Android targets run out of vmalloc space because every process using binder allocates 1MB in vmalloc address space. 1MB is overkill for many processes, and this helps us find out which processes that are.
Quoted 1 line
This is ok for 4.15-rc1, right?
Yes.
Thanks,
Martijn