Donny9 opened a new pull request #5585:
URL: https://github.com/apache/incubator-nuttx/pull/5585


   ## Summary
   Add memory dump function when enable CONFIG_DEBUG_MM.
   
   When we enable CONFIG_DEBUG_MM, this patch will add backtrace and pid info 
to every allocated memory node, so it will waste some memory(36bytes when 
pointer size is 4byte) to fill debug info and slow down the speed of allocate 
memory. But it has particularly great benefits for debug memory issue, 
examples: memory leak, memory fragment, memory action...
   
   we can use the following several wethods to look memory info for every task
   1. `ps` , the HEAP column of ps will print heap alloc size for every task.
   ```
   ap> ps
     PID GROUP PRI POLICY   TYPE    NPX STATE    EVENT     SIGMASK      HEAP  
STACK   USED  FILLED    CPU COMMAND
       0     0   0 FIFO     Kthread N-- Ready              00000000 00060524 
003048 000856  28.0%   99.4% Idle Task
       1     1 224 FIFO     Kthread --- Waiting  Semaphore 00000000 00000000 
002016 000608  30.1%    0.0% hpwork 0x3c476038
       2     2 100 FIFO     Kthread --- Waiting  Semaphore 00000000 00000000 
002016 000672  33.3%    0.0% lpwork 0x3c476044
       3    15 100 FIFO     pthread --- Waiting  Semaphore 00000000 00000320 
002048 001424  69.5%    0.0% pt-0x2c636b65 0x3c4fc3bc
       4    15 100 FIFO     pthread --- Waiting  Semaphore 00000000 00000256 
002048 001008  49.2%    0.0% pt-0x2c636b65 0x3c4fc3bc
       5    15 100 FIFO     pthread --- Waiting  Semaphore 00000000 00000000 
002048 001008  49.2%    0.0% pt-0x2c636b65 0x3c4fc3bc
       6    15 100 FIFO     pthread --- Waiting  Semaphore 00000000 00000000 
002048 001008  49.2%    0.0% pt-0x2c636b65 0x3c4fc3bc
   ```
   2. `cat /proc/pid/heap`, it will display short info about this task,  
examples: 
   ```
   ap> cat proc/35/heap
   AllocSize:  16192
   AllocBlks:  40
   ```
   3. `memdump pid` and `echo pid > /proc/memdump`,  it will show detail 
backtrace info for every allocated node of this task. examples:
   ```
   ap> echo 35 > /proc/memdump
   [ 5286.767232] [ 9] [  INFO] [ap] Dump all used memory node info:
   [ 5286.767884] [ 9] [  INFO] [ap]    PID        Size    Address Backtrace
   [ 5286.769569] [ 9] [  INFO] [ap]     35          64 0x3c55d4d8 0x2c5b0ef6 
0x2c5a9bee 0x2c767c40 0x2c76dbb6 0x2c777ad4 0x2c76c468 0x2c7813a6 0x2c5a0072
   [ 5286.771200] [ 9] [  INFO] [ap]     35          64 0x3c55d518 0x2c5b0ef6 
0x2c5a9bee 0x2c767c40 0x2c76dbb6 0x2c777adc 0x2c76c468 0x2c7813a6 0x2c5a0072
   [ 5286.772831] [ 9] [  INFO] [ap]     35          64 0x3c55d558 0x2c5b0ef6 
0x2c5a9bee 0x2c767c40 0x2c76dbb6 0x2c777ae4 0x2c76c468 0x2c7813a6 0x2c5a0072
   [ 5286.774516] [ 9] [  INFO] [ap]     35          64 0x3c55d598 0x2c5b0ef6 
0x2c5a9bee 0x2c767c40 0x2c76dbb6 0x2c777aec 0x2c76c468 0x2c7813a6 0x2c5a0072
   [ 5286.776201] [ 9] [  INFO] [ap]     35          64 0x3c55d5d8 0x2c5b0ef6 
0x2c5a9bee 0x2c767dc0 0x2c777b2e 0x2c76c468 0x2c7813a6 0x2c5a0072 0x2c5876de
   [ 5286.777832] [ 9] [  INFO] [ap]     35         128 0x3c55d618 0x2c5b0ef6 
0x2c5a9bee 0x2c767e9a 0x2c777b3a 0x2c76c468 0x2c7813a6 0x2c5a0072 0x2c5876de
   [ 5286.779517] [ 9] [  INFO] [ap]     35          64 0x3c55d698 0x2c5b0ef6 
0x2c5a9bee 0x2c767c40 0x2c767ed0 0x2c777b3a 0x2c76c468 0x2c7813a6 0x2c5a0072
   [ 5286.781474] [ 9] [  INFO] [ap]     35          64 0x3c566398 0x2c5b0ef6 
0x2c5a9bee 0x2c767c40 0x2c76dbb6 0x2c76c42e 0x2c7813a6 0x2c5a0072 0x2c5876de
   [ 5286.783105] [ 9] [  INFO] [ap]     35          64 0x3c5663d8 0x2c5b0ef6 
0x2c5a9bee 0x2c767c40 0x2c76dbb6 0x2c76c436 0x2c7813a6 0x2c5a0072 0x2c5876de
   [ 5286.784735] [ 9] [  INFO] [ap]     35          64 0x3c566418 0x2c5b0ef6 
0x2c5a9bee 0x2c767c40 0x2c76dbb6 0x2c76c43e 0x2c7813a6 0x2c5a0072 0x2c5876de
   [ 5286.786692] [ 9] [  INFO] [ap]     35         128 0x3c5e8618 0x2c5b0ef6 
0x2c5a9bee 0x2c5aa110 0x2c8566c0 0x2c85ab7a 0x2c85ae64 0x2c767ec4 0x2c777b3a
   [ 5286.788323] [ 9] [  INFO] [ap]     35         192 0x3c5e8698 0x2c5b0ef6 
0x2c5a9bee 0x2c5aa110 0x2c5837da 0x2c85ab8e 0x2c85ae64 0x2c767ec4 0x2c777b3a
   [ 5286.789954] [ 9] [  INFO] [ap]     35          64 0x3c5e8758 0x2c5b0ef6 
0x2c5a9bee 0x2c767d90 0x2c767ed8 0x2c777b3a 0x2c76c468 0x2c7813a6 0x2c5a0072
   [ 5286.791639] [ 9] [  INFO] [ap]     35          64 0x3c5e8798 0x2c5b0ef6 
0x2c5a9bee 0x2c767c40 0x2c76dbb6 0x2c777b84 0x2c76c468 0x2c7813a6 0x2c5a0072
   [ 5286.793324] [ 9] [  INFO] [ap]     35          64 0x3c5e87d8 0x2c5b0ef6 
0x2c5a9bee 0x2c767fe8 0x2c777bae 0x2c76c468 0x2c7813a6 0x2c5a0072 0x2c5876de
   [ 5286.795064] [ 9] [  INFO] [ap]     35         448 0x3c5e8818 0x2c5b0ef6 
0x2c5a9bee 0x2c5aa110 0x2c5824be 0x2c58726a 0x2c58715a 0x2c76801a 0x2c777bae
   [ 5286.796640] [ 9] [  INFO] [ap]     35          64 0x3c5e89d8 0x2c5b0ef6 
0x2c5a9bee 0x2c767fe8 0x2c777bae 0x2c76d5d2 0x2c781394 0x2c5a0072 0x2c5876de
   [ 5286.798325] [ 9] [  INFO] [ap]     35         512 0x3c5e8a18 0x2c5b0ef6 
0x2c5a9bee 0x2c5aa110 0x2c587142 0x2c76801a 0x2c777bae 0x2c76c468 0x2c7813a6
   [ 5286.800010] [ 9] [  INFO] [ap]     35         256 0x3c5e8c18 0x2c5b0ef6 
0x2c5a9bee 0x2c5aa110 0x2c5824c8 0x2c58726a 0x2c58715a 0x2c76801a 0x2c777bae
   [ 5286.801641] [ 9] [  INFO] [ap]     35         128 0x3c5e8d18 0x2c5b0ef6 
0x2c5a9bee 0x2c582186 0x2c5824dc 0x2c58726a 0x2c58715a 0x2c76801a 0x2c777bae
   [ 5286.803326] [ 9] [  INFO] [ap]     35          64 0x3c5e8d98 0x2c5b0ef6 
0x2c5a9f0a 0x2c855520 0x2c8558aa 0x2c582814 0x2c587274 0x2c58715a 0x2c76801a
   [ 5286.805066] [ 9] [  INFO] [ap]     35         256 0x3c5e8dd8 0x2c5b0ef6 
0x2c5a9bee 0x2c5aa110 0x2c855538 0x2c8558aa 0x2c582814 0x2c587274 0x2c58715a
   [ 5286.806697] [ 9] [  INFO] [ap]     35          64 0x3c5e8ed8 0x2c5b0ef6 
0x2c5a9bee 0x2c85beac 0x2c856fdc 0x2c8558bc 0x2c582814 0x2c587274 0x2c58715a
   [ 5286.808327] [ 9] [  INFO] [ap]     35         256 0x3c5e8f18 0x2c5b0ef6 
0x2c5a9bee 0x2c5aa110 0x2c855538 0x2c8558aa 0x2c582814 0x2c587274 0x2c58715a
   [ 5286.810013] [ 9] [  INFO] [ap]     35         128 0x3c5e9018 0x2c5b0ef6 
0x2c5a9bee 0x2c5aa110 0x2c58f312 0x2c856f9c 0x2c8558bc 0x2c582814 0x2c587274
   [ 5286.811698] [ 9] [  INFO] [ap]     35         128 0x3c5e9098 0x2c5b0ef6 
0x2c5a9bee 0x2c5aa666 0x2c58f330 0x2c856f9c 0x2c8558bc 0x2c582814 0x2c587274
   [ 5286.813328] [ 9] [  INFO] [ap]     35         256 0x3c5e9118 0x2c5b0ef6 
0x2c5a9bee 0x2c5aa110 0x2c855538 0x2c8558aa 0x2c582814 0x2c587274 0x2c58715a
   [ 5286.815068] [ 9] [  INFO] [ap]     35         128 0x3c5e9218 0x2c5b0ef6 
0x2c5a9bee 0x2c5aa110 0x2c58f312 0x2c856f9c 0x2c8558bc 0x2c582814 0x2c587274
   [ 5286.816699] [ 9] [  INFO] [ap]     35         128 0x3c5e9298 0x2c5b0ef6 
0x2c5a9bee 0x2c5aa666 0x2c58f330 0x2c856f9c 0x2c8558bc 0x2c582814 0x2c587274
   [ 5286.818330] [ 9] [  INFO] [ap]     35         256 0x3c5e9318 0x2c5b0ef6 
0x2c5a9bee 0x2c5aa110 0x2c855538 0x2c8558aa 0x2c582814 0x2c587274 0x2c58715a
   [ 5286.820015] [ 9] [  INFO] [ap]     35         128 0x3c5e9418 0x2c5b0ef6 
0x2c5a9bee 0x2c5aa110 0x2c592f40 0x2c856f9c 0x2c8558bc 0x2c582814 0x2c587274
   [ 5286.821700] [ 9] [  INFO] [ap]     35         128 0x3c5e9498 0x2c5b0ef6 
0x2c5a9bee 0x2c5aa666 0x2c592f4e 0x2c856f9c 0x2c8558bc 0x2c582814 0x2c587274
   [ 5286.823331] [ 9] [  INFO] [ap]     35         256 0x3c5e9518 0x2c5b0ef6 
0x2c5a9bee 0x2c5aa110 0x2c855538 0x2c8558aa 0x2c582814 0x2c587274 0x2c58715a
   [ 5286.825016] [ 9] [  INFO] [ap]     35         512 0x3c5e9618 0x2c5b0ef6 
0x2c5a9bee 0x2c76dc14 0x2c76df66 0x2c7720a4 0x2c76c488 0x2c7813a6 0x2c5a0072
   [ 5286.826701] [ 9] [  INFO] [ap]     35         128 0x3c5e9a98 0x2c5b0ef6 
0x2c5a9bee 0x2c5aa110 0x2c8566c0 0x2c85ab7a 0x2c85ae64 0x2c767ec4 0x2c769fcc
   [ 5286.828386] [ 9] [  INFO] [ap]     35         192 0x3c5e9b18 0x2c5b0ef6 
0x2c5a9bee 0x2c5aa110 0x2c5837da 0x2c85ab8e 0x2c85ae64 0x2c767ec4 0x2c769fcc
   [ 5286.830017] [ 9] [  INFO] [ap]     35          64 0x3c5e9bd8 0x2c5b0ef6 
0x2c5a9bee 0x2c767c40 0x2c76dbb6 0x2c76c416 0x2c7813a6 0x2c5a0072 0x2c5876de
   [ 5286.831702] [ 9] [  INFO] [ap]     35          64 0x3c5e9c18 0x2c5b0ef6 
0x2c5a9bee 0x2c767c40 0x2c76dbb6 0x2c76c422 0x2c7813a6 0x2c5a0072 0x2c5876de
   [ 5286.833387] [ 9] [  INFO] [ap]     35       10368 0x3c5ec558 0x2c5b0ef6 
0x2c5a9bee 0x2c5b0b0c 0x2c5872ee 0x2c58715a 0x2c76801a 0x2c777bae 0x2c76c468
   [ 5286.835018] [ 9] [  INFO] [ap]     35          64 0x3c5eedd8 0x2c5b0ef6 
0x2c5a9bee 0x2c582554 0x2c5872c4 0x2c58715a 0x2c76801a 0x2c777bae 0x2c76c468
   [ 5286.837899] [ 9] [  INFO] [ap]   Total Blks  Total Size
   [ 5286.838497] [ 9] [  INFO] [ap]           40       16192
   ```
   4. `memdump free` and  `echo free > /proc/memdump`, we can get free heap 
info (address and size) by this cmd. examples:
   ```
   ap> echo free > /proc/memdump
   [ 5627.704827] [ 9] [  INFO] [ap] Dump all free memory node info:
   [ 5627.705479] [ 9] [  INFO] [ap]         Size    Address
   [ 5627.706566] [ 9] [  INFO] [ap]          128 0x3c5089d8
   [ 5627.707110] [ 9] [  INFO] [ap]       131136 0x3c50b918
   [ 5627.707816] [ 9] [  INFO] [ap]          128 0x3c553658
   [ 5627.709175] [ 9] [  INFO] [ap]           64 0x3c5e9958
   [ 5627.710045] [ 9] [  INFO] [ap]        20928 0x3c868b58
   [ 5627.711567] [ 9] [  INFO] [ap]       194240 0x3ca09b98
   [ 5627.712111] [ 9] [  INFO] [ap]     15874920 0x3ccdc498
   [ 5627.712763] [ 9] [  INFO] [ap]   Total Blks  Total Size
   [ 5627.713415] [ 9] [  INFO] [ap]            7    16221544
   ```
   5. `memdump` and `echo used > /proc/memdump`, this cmd will all allocated 
memory detail info, include backtrace, address, pid and size.  And we can use 
tools/parsememdump.py to parse this result. examples:
   ```
   ap> memdump
   [ 5921.423624] [ 9] [  INFO] [ap] Dump all used memory node info:
   [ 5921.424331] [ 9] [  INFO] [ap]    PID        Size    Address Backtrace
   [ 5921.425146] [ 9] [  INFO] [ap]      0          44 0x3c4b576c
   [ 5921.425907] [ 9] [  INFO] [ap]      3          64 0x3c4b5798 0x2c5b0ef6 
0x2c5a9bee 0x2c582554 0x2c5872c4 0x2c587220 0x2c597ba0 0x2c5ac864 0x000514a6
   [ 5921.427484] [ 9] [  INFO] [ap]      0         448 0x3c4b57d8 0x2c5b0ef6
   [ 5921.428353] [ 9] [  INFO] [ap]      0         256 0x3c4b5998 0x2c5b0ef6
   [ 5921.429223] [ 9] [  INFO] [ap]      0          64 0x3c4b5a98 0x2c5b0ef6 
0x2c5a9bee 0x2c582554 0x000512a8 0x2c8913fe 0x2c300056
   [ 5921.430637] [ 9] [  INFO] [ap]      0         128 0x3c4b5ad8 0x2c5b0ef6 
0x2c5a9bee 0x2c5aa110 0x2c8565dc 0x000512d2 0x2c8913fe 0x2c300056
   [ 5921.432213] [ 9] [  INFO] [ap]      0         128 0x3c4b5b58 0x2c5b0ef6 
0x2c5a9bee 0x2c5aa110 0x2c5ab4a8 0x2c581d4c 0x2c582eea 0x2c582d56 0x2c5aaa5c
   [ 5921.433898] [ 9] [  INFO] [ap]      0          64 0x3c4b5bd8 0x2c5b0ef6 
0x2c5a9bee 0x2c5aa110 0x2c59b49a 0x2c5ac75c 0x2c581d50 0x2c582eea 0x2c582d56
   [ 5921.435583] [ 9] [  INFO] [ap]      0         128 0x3c4b5c18 0x2c5b0ef6 
0x2c5a9bee 0x2c5aa110 0x2c597902 0x2c59b4c6 0x2c5ac75c 0x2c581d50 0x2c582eea
   [ 5921.437214] [ 9] [  INFO] [ap]      0         192 0x3c4b5c98 0x2c5b0ef6 
0x2c5a9bee 0x2c5aa110 0x2c59ba20 0x2c5ac76c 0x2c581d50 0x2c582eea 0x2c582d56
   ...
   [ 5927.434333] [ 9] [  INFO] [ap]     15       38784 0x3c9ce8d8 0x2c5b0ef6 
0x2c5a9bee 0x2c845a06 0x2c844a12 0x2c844cc6 0x2c840cbe 0x2c840e8a 0x2c840310
   [ 5927.436018] [ 9] [  INFO] [ap]     15       38784 0x3c9d8058 0x2c5b0ef6 
0x2c5a9bee 0x2c845a06 0x2c844a12 0x2c844cc6 0x2c840cbe 0x2c840e8a 0x2c840310
   [ 5927.437649] [ 9] [  INFO] [ap]     15       38976 0x3c9e17d8 0x2c5b0ef6 
0x2c5a9bee 0x2c7bb4c6 0x2c79fcba 0x2c79f318 0x2c79c09e 0x2c7af502 0x2c79a898
   [ 5927.439334] [ 9] [  INFO] [ap]     15       36352 0x3c9eb018 0x2c5b0ef6 
0x2c5a9bee 0x2c7bb4c6 0x2c79fcba 0x2c79f318 0x2c79c09e 0x2c7af502 0x2c79a898
   [ 5927.441019] [ 9] [  INFO] [ap]     15       48640 0x3c9f3e18 0x2c5b0ef6 
0x2c5a9bee 0x2c7bb4c6 0x2c79fcba 0x2c79f318 0x2c79c09e 0x2c7af502 0x2c79a898
   [ 5927.442650] [ 9] [  INFO] [ap]     15       40832 0x3c9ffc18 0x2c5b0ef6 
0x2c5a9bee 0x2c7bb4c6 0x2c79fcba 0x2c79f318 0x2c79c09e 0x2c7af502 0x2c79a898
   [ 5927.444335] [ 9] [  INFO] [ap]     15      921664 0x3ca39258 0x2c5b0ef6 
0x2c5a9bee 0x2c8458b4 0x2c844a08 0x2c844cc6 0x2c841d88 0x2c840328 0x2c83cb22
   [ 5927.446020] [ 9] [  INFO] [ap]     15      921856 0x3cb1a298 0x2c5b0ef6 
0x2c5a9bee 0x2c7bb4c6 0x2c79fcba 0x2c79f318 0x2c79c09e 0x2c7af502 0x2c79a898
   [ 5927.447651] [ 9] [  INFO] [ap]     15      921856 0x3cbfb398 0x2c5b0ef6 
0x2c5a9bee 0x2c7bb4c6 0x2c79fcba 0x2c79f318 0x2c79c09e 0x2c7af502 0x2c79a898
   [ 5927.449282] [ 9] [  INFO] [ap]   Total Blks  Total Size
   [ 5927.449934] [ 9] [  INFO] [ap]         3621     8200748
   ```
   parse result:
   ./memdump.py -f log.txt -e nuttx.elf
   ```
   cnt   size   pid   addr         mem
   47    256    15    0x3c5e2ad8   0x2c869f2e 0x2c868d3e 0x2c869844 0x2c869f2e 
0x2c8677f6 0x2c83fdb4 
       draw_rect_path
       
/home/djz/workspace/test/m1_new/apps/graphics/lvgl/lv_porting/lv_gpu_draw_rect.c:549
       malloc_float_path_data
       
/home/djz/workspace/test/m1_new/apps/graphics/lvgl/lv_porting/lv_gpu_draw.c:84
       draw_bg_path
       
/home/djz/workspace/test/m1_new/apps/graphics/lvgl/lv_porting/lv_gpu_draw_rect.c:479
       draw_rect_path
       
/home/djz/workspace/test/m1_new/apps/graphics/lvgl/lv_porting/lv_gpu_draw_rect.c:549
       lv_draw_rect_gpu
       
/home/djz/workspace/test/m1_new/apps/graphics/lvgl/lv_porting/lv_gpu_interface.c:230
       lv_obj_draw
       
/home/djz/workspace/test/m1_new/apps/graphics/lvgl/./lvgl/src/core/lv_obj.c:544
   ```
   6. Other cmd:
     `cat /proc/memdump`, this cmd will output usage about memdump
   ```
   ap> cat proc/memdump
   usage: <pid/used/free>
   pid: dump pid allocated node
   used: dump all allocated node
   free: dump all free node
   ```
   
   ## Impact
   add memory debug function.
   ## Testing
   board test and daily test.
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscr...@nuttx.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


Reply via email to