Hi L4-hackers,
I’m analyzing the memory usage of Fiasco/L4Re/L4Linux. On my platform, there are 128MB physical memory. L4 bootstrap can detect it correctly. ================================================== L4 Bootstrapper Build: #164 拻 12堎 9 11:39:51 CST 2016, 4.8.4 Scanning up to 128 MB RAM, starting at offset 32MB Memory size is 128MB (20000000 - 27ffffff) RAM: 0000000020000000 - 0000000027ffffff: 131072kB Total RAM: 128MB ==================================================
The memory regions after boot up and sigma0 loaded: ================================================== Regions of list 'regions' [ 20000000, 200001c7] { 1c8} Root mbi_rt [ 20001000, 20001aff] { b00} Kern fiasco [ 20002000, 20092fff] { 91000} Kern fiasco [ 200c0000, 200c9f43] { 9f44} Sigma0 sigma0 [ 200d0000, 200d6177] { 6178} Sigma0 sigma0 [ 20140000, 20168c27] { 28c28} Root moe [ 20170000, 2017b58b] { b58c} Root moe [ 21000000, 2100e5e3] { e5e4} Boot bootstrap [ 21100000, 21a2dfff] { 92e000} Root Module
SIGMA0: Hello! KIP @ 20002000 allocated 4KB for maintenance structures SIGMA0: Dump of all resource maps RAM:------------------------ [4:20000000;20000fff] [0:20093000;200bffff] [0:200ca000;200cffff] [0:200d7000;2013ffff] [4:20140000;20168fff] [0:20169000;2016ffff] [4:20170000;2017bfff] [0:2017c000;210fffff] [4:21100000;21a2dfff] [0:21a2e000;26ffffff] ==================================================
The largest unused continuous memory region are at “0x21a2e000 ~ 0x26ffffff”, which is about 85MB. I would like to make continuous memory region larger and have the following ideas and questions:
1. The memory used by bootstrap may be freed after the system bring up. If moving “bootstrap” program to 0x26000000, the “Module” programs can append to “MOE” program. The “Module” will be started “0x207c0000” (aligned to page size 4KB). Thus, I can get larger continuous memory area that originally separated by “bootstrap” program. Is this idea correct ?
[ 20170000, 2017b58b] { b58c} Root moe [ 21000000, 2100e5e3] { e5e4} Boot bootstrap [ 21100000, 21a2dfff] { 92e000} Root Module
2. There are a reserved region “0x27000000 ~ 0x27FFFFFF” not shown in boot log. When I traced into program, this region seems used by sigma0. What is this memory used for? I think 16MB is a very large chunk in current embedded system. Can we compute the amount this area really use and shrink to a smaller size?
Any suggestion is very appreciated. Thanks.
BRs, Jesse
Hi,
On Fri Dec 16, 2016 at 08:38:28 +0000, Jesse-SC Chou (©P®Ñ¥¿) wrote:
I¡¦m analyzing the memory usage of Fiasco/L4Re/L4Linux. On my platform, there are 128MB physical memory. L4 bootstrap can detect it correctly. ================================================== L4 Bootstrapper Build: #164 Îå 12Ô 9 11:39:51 CST 2016, 4.8.4 Scanning up to 128 MB RAM, starting at offset 32MB Memory size is 128MB (20000000 - 27ffffff) RAM: 0000000020000000 - 0000000027ffffff: 131072kB Total RAM: 128MB ==================================================
The memory regions after boot up and sigma0 loaded:
Regions of list 'regions' [ 20000000, 200001c7] { 1c8} Root mbi_rt [ 20001000, 20001aff] { b00} Kern fiasco [ 20002000, 20092fff] { 91000} Kern fiasco [ 200c0000, 200c9f43] { 9f44} Sigma0 sigma0 [ 200d0000, 200d6177] { 6178} Sigma0 sigma0 [ 20140000, 20168c27] { 28c28} Root moe [ 20170000, 2017b58b] { b58c} Root moe [ 21000000, 2100e5e3] { e5e4} Boot bootstrap [ 21100000, 21a2dfff] { 92e000} Root Module
SIGMA0: Hello! KIP @ 20002000 allocated 4KB for maintenance structures SIGMA0: Dump of all resource maps RAM:------------------------ [4:20000000;20000fff] [0:20093000;200bffff] [0:200ca000;200cffff] [0:200d7000;2013ffff] [4:20140000;20168fff] [0:20169000;2016ffff] [4:20170000;2017bfff] [0:2017c000;210fffff] [4:21100000;21a2dfff] [0:21a2e000;26ffffff] ==================================================
The largest unused continuous memory region are at ¡§0x21a2e000 ~ 0x26ffffff¡¨, which is about 85MB. I would like to make continuous memory region larger and have the following ideas and questions:
Generally: yes, there are tuning possibilities, given that memory and program sizes are known.
The memory used by bootstrap may be freed after the system bring up. If moving ¡§bootstrap¡¨ program to 0x26000000, the ¡§Module¡¨ programs can append to ¡§MOE¡¨ program. The ¡§Module¡¨ will be started ¡§0x207c0000¡¨ (aligned to page size 4KB). Thus, I can get larger continuous memory area that originally separated by ¡§bootstrap¡¨ program. Is this idea correct ?
[ 20170000, 2017b58b] { b58c} Root moe [ 21000000, 2100e5e3] { e5e4} Boot bootstrap [ 21100000, 21a2dfff] { 92e000} Root Module
Yes, should generally work I think.
There are a reserved region ¡§0x27000000 ~ 0x27FFFFFF¡¨ not shown in boot log. When I traced into program, this region seems used by sigma0. What is this memory used for? I think 16MB is a very large chunk in current embedded system. Can we compute the amount this area really use and shrink to a smaller size?
That's the memory taken by Fiasco, see src/kern/arm/config-arm.cpp KMEMSIZE. Depending on your use case you can make this smaller.
Adam
Hi, Adam,
Many thanks for your suggestion. It works with shrinking KMEM_SIZE from 16MB to 1MB(JDB disabled). By printing kernel memory usage by Kmem_alloc::debug_dump(), it seems only 758KB used in the following message.
"Used 758KB out of 1024KB of Kmem"
Now I can get a larger continuous memory area on my platform. Thanks again.
BRs, Jesse -----Original Message----- From: l4-hackers [mailto:l4-hackers-bounces@os.inf.tu-dresden.de] On Behalf Of Adam Lackorzynski Sent: Monday, December 19, 2016 6:46 AM To: l4-hackers@os.inf.tu-dresden.de Subject: Re: Memory usage analysis and optimization
Hi,
On Fri Dec 16, 2016 at 08:38:28 +0000, Jesse-SC Chou (©P®Ñ¥¿) wrote:
I¡¦m analyzing the memory usage of Fiasco/L4Re/L4Linux. On my platform, there are 128MB physical memory. L4 bootstrap can detect it correctly. ================================================== L4 Bootstrapper Build: #164 Îå 12Ô 9 11:39:51 CST 2016, 4.8.4 Scanning up to 128 MB RAM, starting at offset 32MB Memory size is 128MB (20000000 - 27ffffff) RAM: 0000000020000000 - 0000000027ffffff: 131072kB Total RAM: 128MB ==================================================
The memory regions after boot up and sigma0 loaded:
Regions of list 'regions' [ 20000000, 200001c7] { 1c8} Root mbi_rt [ 20001000, 20001aff] { b00} Kern fiasco [ 20002000, 20092fff] { 91000} Kern fiasco [ 200c0000, 200c9f43] { 9f44} Sigma0 sigma0 [ 200d0000, 200d6177] { 6178} Sigma0 sigma0 [ 20140000, 20168c27] { 28c28} Root moe [ 20170000, 2017b58b] { b58c} Root moe [ 21000000, 2100e5e3] { e5e4} Boot bootstrap [ 21100000, 21a2dfff] { 92e000} Root Module
SIGMA0: Hello! KIP @ 20002000 allocated 4KB for maintenance structures SIGMA0: Dump of all resource maps RAM:------------------------ [4:20000000;20000fff] [0:20093000;200bffff] [0:200ca000;200cffff] [0:200d7000;2013ffff] [4:20140000;20168fff] [0:20169000;2016ffff] [4:20170000;2017bfff] [0:2017c000;210fffff] [4:21100000;21a2dfff] [0:21a2e000;26ffffff] ==================================================
The largest unused continuous memory region are at ¡§0x21a2e000 ~ 0x26ffffff¡¨, which is about 85MB. I would like to make continuous memory region larger and have the following ideas and questions:
Generally: yes, there are tuning possibilities, given that memory and program sizes are known.
The memory used by bootstrap may be freed after the system bring up. If moving ¡§bootstrap¡¨ program to 0x26000000, the ¡§Module¡¨ programs can append to ¡§MOE¡¨ program. The ¡§Module¡¨ will be started ¡§0x207c0000¡¨ (aligned to page size 4KB). Thus, I can get larger continuous memory area that originally separated by ¡§bootstrap¡¨ program. Is this idea correct ?
[ 20170000, 2017b58b] { b58c} Root moe [ 21000000, 2100e5e3] { e5e4} Boot bootstrap [ 21100000, 21a2dfff] { 92e000} Root Module
Yes, should generally work I think.
There are a reserved region ¡§0x27000000 ~ 0x27FFFFFF¡¨ not shown in boot log. When I traced into program, this region seems used by sigma0. What is this memory used for? I think 16MB is a very large chunk in current embedded system. Can we compute the amount this area really use and shrink to a smaller size?
That's the memory taken by Fiasco, see src/kern/arm/config-arm.cpp KMEMSIZE. Depending on your use case you can make this smaller.
Adam
_______________________________________________ l4-hackers mailing list l4-hackers@os.inf.tu-dresden.de http://os.inf.tu-dresden.de/mailman/listinfo/l4-hackers
l4-hackers@os.inf.tu-dresden.de