RFR: 8280289: Enhance debug pp() command with NMT info

Thomas Stuefe stuefe at openjdk.java.net
Fri Jan 21 09:38:45 UTC 2022


On Thu, 20 Jan 2022 15:31:12 GMT, Zhengyu Gu <zgu at openjdk.org> wrote:

> JDK-8275320 enhanced NMT malloc header, provided ability to identify if a pointer points to a malloc'd memory. Further,  JDK-8277822 enabled NMT for debug builds.
> 
> This is a good opportunity to integrate NMT to debug pp() command to provide useful information collected by NMT. 
> 
> For example:
> 
> NMT=summary
> 
> (gdb) call pp(0x7f2d9803db70)
> "Executing pp"
> 0x00007f2d9803db70 malloc'd 1576 bytes by Internal
> 
> (gdb) call pp(0x00007f4300a20000)
> "Executing pp"
> 0x00007f4300a20000 in mmap'd memory region [0x00007f4300a20000 - 0x00007f4310000000] by GC
> 
> 
> NMT=detail
> 
> 
> (gdb) call pp(0x7f2d9803db70)
> "Executing pp"
> 0x00007f2d9803db70 malloc'd 1576 bytes by Internal
> [0x00007f2d9f1b784b] G1Arguments::create_heap()+0x1b
> [0x00007f2d9f98a855] universe_init()+0x85
> [0x00007f2d9f2e0a97] init_globals()+0x37
> [0x00007f2d9f960acb] Threads::create_vm(JavaVMInitArgs*, bool*)+0x3db
> 
> (gdb) call pp(0x00007f4300a20000)
> "Executing pp"
> 0x00007f4300a20000 in mmap'd memory region [0x00007f4300a20000 - 0x00007f4310000000] by GC
> [0x00007f433dc49c7f] reserve_memory(char*, unsigned long, unsigned long, int, bool)+0x17f
> [0x00007f433dc4cf0b] ReservedSpace::reserve(unsigned long, unsigned long, unsigned long, char*, bool)+0x14b
> [0x00007f433dc4d527] ReservedSpace::initialize(unsigned long, unsigned long, unsigned long, char*, bool)+0x1c7
> [0x00007f433d949d40] ShenandoahHeap::initialize()+0x340

Hi Zhengyu,

this is nice :)

I have a small proposal though. How about splitting check_block_integrity into two functions, one which checks and returns error information, one which does the assert? That way seems a bit cleaner, and we can re-use the checking functionality without the assert in other places.

I tested an addition to your patch, what I meant was something like this (I probably could have suggested the change in your PR but don't know how):

https://github.com/openjdk/jdk/compare/pr/7160...tstuefe:zhengyu-pp-proposal

And inside debug.cpp, in pp(), we could actually print out corruption information for corrupted blocks. But I did not do this in my proposal, since I was not sure how to distinguish "its a malloced block, I know it, so show me if its broken" from "its just some pointer, may not be malloced at all". Thought about printing something like "if this was a malloced block, its broken" but that seemed weird for the cases where the user knows the pointer is not malloced.

What do you think?

..Thomas

-------------

PR: https://git.openjdk.java.net/jdk/pull/7160


More information about the hotspot-dev mailing list