ardupilot
ardupilot copied to clipboard
AP_DDS: Optimize the stack/memory usage of DDS
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