Why application request RAM quota from parent even if it is enough?

Alexander Tormasov a.tormasov at innopolis.ru
Thu Sep 5 11:06:37 CEST 2019


I am trying to start Go application in genode/sel4, 19.08. Now it try to alloc 544Mb Ram (standard initialization approach for reservation via mmap - instead it really alloc space using libc malloc inside mmap() ).
So, I have 3 gb ram VM, and ram quota for application is 2 gb.

I see that it just plain hangs on the response in 
void resource_request(Resource_args const &args),
from expanding_parent_client.h

Any suggestions?

here it hang in _wait_for_resource_response:
/*
             * Issue resource request
             */
            Parent_client::resource_request(args);

            /*
             * Block until we get a response for the outstanding resource
             * request.
             */
            if (_state == BLOCKING_DEFAULT)
                _wait_for_resource_response();
        }

My run script:
build {
        core init timer lib/libc_noux
        test/go_app
}

create_boot_directory

install_config {
        <config verbose="yes" ld_verbose="yes">
                <parent-provides>
                        <service name="ROM"/>
                        <service name="LOG"/>
                        <service name="RM"/>
                        <service name="CPU"/>
                        <service name="PD"/>
                        <service name="IRQ"/>
                        <service name="IO_MEM"/>
                        <service name="IO_PORT"/>
                </parent-provides>
                <default-route>
                        <any-service> <any-child/> <parent/> </any-service>
                </default-route>
                <default caps="2200"/>
                <start name="timer">
                        <resource name="RAM" quantum="1M"/>
                        <provides><service name="Timer"/></provides>
                </start>
                <start name="test-go" caps="1500">
                        <resource name="RAM" quantum="2G"/>
                        <config verbose="yes" ld_verbose="yes" stdin="/null" stdout="/log" stderr="/log">
                        </config>
                </start>
        </config>
}

build_boot_image {
        core init timer ld.lib.so libc.lib.so libm.lib.so posix.lib.so
        libc_noux.lib.so vfs.lib.so test-go
}


Log:
...
2747 MiB RAM and 261141 caps assigned to init
Warning: void Genode::Rpc_cap_factory::free(Genode::Native_capability) not implemented - resources leaked: 0x1
Warning: void Genode::Rpc_cap_factory::free(Genode::Native_capability) not implemented - resources leaked: 0x2
[init]   0x40000000 .. 0x4fffffff: stack area
[init]   0x30000 .. 0x197fff: ld.lib.so
[init] parent provides
[init]   service "ROM"
[init]   service "LOG"
[init]   service "RM"
[init]   service "CPU"
[init]   service "PD"
[init]   service "IRQ"
[init]   service "IO_MEM"
[init]   service "IO_PORT"
[init] child "timer"
[init]   RAM quota:  776K
[init]   cap quota:  2168
[init]   ELF binary: timer
[init]   priority:   0
[init]   provides service Timer
[init] child "test-go"
[init]   RAM quota:  2096904K
[init]   cap quota:  1468
[init]   ELF binary: test-go
[init]   priority:   0
Warning: void Genode::Rpc_cap_factory::free(Genode::Native_capability) not implemented - resources leaked: 0x4

Warning: void Genode::Rpc_cap_factory::free(Genode::Native_capability) not implemented - resources leaked: 0x8
[init -> timer]   0x40000000 .. 0x4fffffff: stack area
[init -> timer]   0x30000 .. 0x197fff: ld.lib.so
[init] child "timer" announces service "Timer"
[init -> test-go]   0x40000000 .. 0x4fffffff: stack area
[init -> test-go]   0x30000 .. 0x197fff: ld.lib.so
[init -> test-go]   0x12f8000 .. 0x1492fff: libc.lib.so
[init -> test-go]   0x1493000 .. 0x1503fff: vfs.lib.so
[init -> test-go]   0x1504000 .. 0x153bfff: libm.lib.so
[init -> test-go] mmap addr=0xc000000000 len =567472562176 prot=0 flags=4098 libc_fd=-1 offset=0
[init -> test-go]
[init -> test-go] resource_request: ram_quota=567472578560







More information about the users mailing list