ardupilot icon indicating copy to clipboard operation
ardupilot copied to clipboard

AP_DDS: Optimize the stack/memory usage of DDS

Open Ryanf55 opened this issue 2 years ago • 0 comments

Goal

The stack allocation of DDS was just a best guess. Once the API is getting more stable, reduce the needed stack size to what's actually needed. Also, validate memory usage and other runtime metrics are within expectations.

Tools

Overhead of thread stack usage on AP_DDS before initialization

RTL> Getting @SYS/threads.txt as -
ThreadsV2
ISR           PRI=255 sp=0x30000000 STACK=1308/1536
ArduPlane     PRI=182 sp=0x30000600 STACK=5548/7168
idle          PRI=  1 sp=0x300200D0 STACK=288/496
UART_RX       PRI= 60 sp=0x3003B4F8 STACK=856/1200
OTG1          PRI= 60 sp=0x3003A5B0 STACK=344/752
monitor       PRI=183 sp=0x3001BE70 STACK=1104/1456
timer         PRI=181 sp=0x3001D430 STACK=1528/1968
rcout         PRI=181 sp=0x3001CA50 STACK=688/944
rcin          PRI=177 sp=0x3001C460 STACK=1112/1456
io            PRI= 58 sp=0x3001B480 STACK=1616/2480
storage       PRI= 59 sp=0x3001CE40 STACK=936/1456
UART2         PRI= 60 sp=0x3003A0A0 STACK=336/752
UART3         PRI= 60 sp=0x30038BD0 STACK=272/752
UART4         PRI= 60 sp=0x30038088 STACK=368/752
UART8         PRI= 60 sp=0x30037540 STACK=480/752
UART7         PRI= 60 sp=0x300369F8 STACK=344/752
OTG2          PRI= 60 sp=0x30035AB0 STACK=344/752
UART6         PRI=181 sp=0x30034C10 STACK=360/752
IOMCU         PRI=183 sp=0x3002A648 STACK=712/1456
SPI4          PRI=181 sp=0x3002AFE8 STACK=824/1456
SPI1          PRI=181 sp=0x3002B6D8 STACK=824/1456
log_io        PRI= 59 sp=0x3002C638 STACK=1576/2016
DDS           PRI= 59 sp=0x3002D880 STACK=7816/8624
FTP           PRI= 58 sp=0x300331C0 STACK=1064/2992

Overhead after initialization

RTL> ftp get @SYS/threads.txt - 
RTL> Getting @SYS/threads.txt as -
ThreadsV2
ISR           PRI=255 sp=0x30000000 STACK=1296/1536
ArduPlane     PRI=182 sp=0x30000600 STACK=5548/7168
idle          PRI=  1 sp=0x300200D0 STACK=288/496
UART_RX       PRI= 60 sp=0x3003B4F8 STACK=856/1200
OTG1          PRI= 60 sp=0x3003A5B0 STACK=344/752
monitor       PRI=183 sp=0x3001BE70 STACK=1104/1456
timer         PRI=181 sp=0x3001D430 STACK=1528/1968
rcout         PRI=181 sp=0x3001CA50 STACK=688/944
rcin          PRI=177 sp=0x3001C460 STACK=1112/1456
io            PRI= 58 sp=0x3001B480 STACK=1616/2480
storage       PRI= 59 sp=0x3001CE40 STACK=936/1456
UART2         PRI= 60 sp=0x3003A0A0 STACK=336/752
UART3         PRI= 60 sp=0x30038BD0 STACK=272/752
UART4         PRI= 60 sp=0x30038088 STACK=368/752
UART8         PRI= 60 sp=0x30037540 STACK=480/752
UART7         PRI= 60 sp=0x300369F8 STACK=344/752
OTG2          PRI= 60 sp=0x30035AB0 STACK=344/752
UART6         PRI=181 sp=0x30034C10 STACK=360/752
IOMCU         PRI=183 sp=0x3002A648 STACK=712/1456
SPI4          PRI=181 sp=0x3002AFE8 STACK=824/1456
SPI1          PRI=181 sp=0x3002B6D8 STACK=824/1456
log_io        PRI= 59 sp=0x3002C638 STACK=1576/2016
DDS           PRI= 59 sp=0x3002D880 STACK=7560/8624
FTP           PRI= 58 sp=0x300331C0 STACK=1064/2992

Free memory

RTL> status meminfo
RTL> 1031: MEMINFO {brkval : 0, freemem : 65535, freemem32 : 511560}

More memory info

ftp get @SYS/memory.txt
RTL> Getting @SYS/memory.txt as memory.txt
Wrote 346 bytes to memory.txt in 0.05s 6.9kByte/s
ctrl+C
ryan@ryan-B650:~$ cat memory.txt 
MemInfoV1
START=0x30000000 LEN=256k FREE=  7968 LRG=  3344 TYPE=0
START=0x20000000 LEN=128k FREE= 27128 LRG= 27128 TYPE=2
START=0x24000000 LEN=512k FREE=315360 LRG=315344 TYPE=4
START=0x00000400 LEN= 63k FREE= 64504 LRG= 64504 TYPE=2
START=0x30040000 LEN= 32k FREE= 32760 LRG= 32760 TYPE=0
START=0x38000000 LEN= 64k FREE= 56200 LRG= 55320 TYPE=1

Ryanf55 avatar Apr 14 '23 02:04 Ryanf55