Upgrade to 15.11 from 15.02 results in quota exceded message

Bob Stewart robjsstewart at ...196...
Thu Dec 3 13:37:52 CET 2015


Hi Martin, thanks for your detailed and excellent explanation of what 
has changed with quota accounting. I'll assume the "quota exceeded" 
message is simply informational for now while I tackle an an apparent IO 
mapping issue.

The scenario I run includes sdcard, gpio, gp timers, uarts, i2c, and PWM 
drivers and vfs is also in there. All of this, with my modified base-hw 
kernel, appears to be running as it does in 15.02 with the exception of 
the PWM driver. The log from the 15.11 implementation shows nothing 
exceptional (attached) and is practically identical to what is output on 
15.02. Running my PWM driver in verbose mode shows that data received 
from sensors on the i2c bus and from a manual input controller is being 
correctly received, processed, and sent to the PWM driver. The PWM does 
some signal conditioning and writes updated duty cycle values to an IO 
register from which the SoC's pwm subsystem sends the modified pulse to 
an IO pin. That pin is attached to a motor ESC which provides the power 
to drive the motor. The motor never receives the pulse. So, presumably, 
there is an issue with IO mapping and the signal is not going to the 
correct register location. I notice in the 5.11 release notes that there 
have been changes in the area of memory mapped IO, so I'm starting to 
explore that avenue. I have not touched the PWM driver code in more than 
a year so I doubt that the problem is there.

Bob



On 12/03/2015 04:27 AM, Martin Stein wrote:
> Hello Bob,
>
> Am 02.12.2015 um 15:17 schrieb Bob Stewart:
>>       I just upgraded from 15.02 to 15.11 and ran my base-hw based os and
>> applications, which have been running for some time on 15.02. The
>> changes made during the update were to the directory structure required
>> by the "platform" changes and gpio driver changes to accomodate the
>> removal of the wait_for_irq method.
> It's nice to hear that you already got your hands on the new release :)
>
>> immediately after init starts I get a "quota execeeded"mesage:
>>
>> Starting kernel ...
>>
>> kernel initialized
>> Genode 15.11 <local changes>
>> int main(): --- create local services ---
>> int main(): --- start init ---
>> int main(): transferred 501 MB to init
>> int main(): --- init created, waiting for exit condition ---
>> Quota exceeded! amount=12288, size=12288, consumed=12288
>> [init -> uart_drv] int main(int, char**): --- OMAP3 UART driver started ---
>> [init -> ctrl_module] --- Beaglebone Control Module Server ---
>> [init -> platform_drv] --- bbb platform driver running ---
>> [init -> pwm_drv] --- am33xx pwm driver ---
>> .
>> ,
>> ,
>>
>> No changes have been made to available ram constants in board_base so
>> I'm confused as to what caused this message to be generated. Did I miss
>> a change to how quota's are requested and managed?
> Since 15.05, the accounting of quota on base-hw got much more
> comprehensive. Most notably, for the costs of PD related things like the
> page tables [1] or the local representations of capabilities [2] a
> component must now pay via quota. I assume that your "Quota exceeded" is
> printed by the Allocator_guard [3] (Otherwise it could only be a
> 'loader' server component which is unlikely).
>
> The basic sessions (say those of the Genode environment) are given an
> initial amount of quota. This amount is a guess on how much is needed to
> bring the component up. If this quota does not suffice, the session asks
> the parent to upgrade it by using some of the components slack quota. If
> its slack quota isn't sufficient for that, the component still may ask
> its parent to donate some more. So, the quota you assign to a component
> via the init configuration is the guaranteed minimum the component
> receives. Init may or may not - depending from what is left after
> starting all children and saving some quota for itself - hand in more
> quota to components if they ask for.
>
> During these mechanisms, the Allocator_guard is the one that applies
> given quota limits to allocations by wrapping the background allocator.
> That said, the warning indicates that you've reached a limit but it does
> not necessarily indicate a problem as, in return, your scenario may be
> able to relax the limit.
>
> And even more, there are places in Genode where reaching the limit is
> expected. My favourite explanation in your case is the
> upgrade_pd_session_quota function that triggers such behaviour. It is,
> for example, called when receiving capabilities in IPC and not having
> enough PD quota to create local references [4]. It results in a call of
> Capability_space::upgrade_slab in core [5]. This function currently
> allocates as much additional SLAB blocks as possible and, by doing so,
> always triggers the warning. The reason for this is that it's hard to
> measure how much additional blocks are needed at this point. Maybe you
> could give it a try and test if this is responsible for your warning.
>
> If so, the warning is no problem and I wonder whether your scenario runs
> properly apart from it. It would also be interesting to know whether
> you've sent the complete log output (what is the meaning of the point
> and the commas?). Please note that we're already planning to change
> output behaviour on reaching quota limits as it provides little
> information and can obviously be misleading.
>
> Cheers,
> Martin
>
> [1] Commit cc58b11 hw: replace page table allocator with static one
> [2] Commit e081554 hw: kernel backed capabilities (Fix #1443)
> [3] repos/base/include/base/allocator_guard.h
> [4] repos/base-hw/src/base/ipc/ipc.cc
> [5] repos/base-hw/src/core/platform_pd.cc
>
> ------------------------------------------------------------------------------
> Go from Idea to Many App Stores Faster with Intel(R) XDK
> Give your users amazing mobile app experiences with Intel(R) XDK.
> Use one codebase in this all-in-one HTML5 development environment.
> Design, debug & build mobile apps & 2D/3D high-impact games for multiple OSs.
> http://pubads.g.doubleclick.net/gampad/clk?id=254741911&iu=/4140
> _______________________________________________
> genode-main mailing list
> genode-main at lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/genode-main
>

-------------- next part --------------
Starting kernel ...

kernel initialized
Genode 15.11 <local changes>
int main(): --- create local services ---
int main(): --- start init ---
int main(): transferred 501 MB to init
int main(): --- init created, waiting for exit condition ---
Quota exceeded! amount=12288, size=12288, consumed=12288
[init -> uart_drv] int main(int, char**): --- OMAP3 UART driver started ---
[init -> ctrl_module] --- Beaglebone Control Module Server ---
[init -> platform_drv] --- bbb platform driver running ---
[init -> pwm_drv] --- am33xx pwm driver ---
[init -> sd_card_drv] --- OMAP3 SD card driver ---
[init -> ctrl_module] gpio 4 mode 2 dirn=1, pullup or down = 1
[init -> ctrl_module] gpio 5 mode 2 dirn=1, pullup or down = 1
[init -> ctrl_module] gpio 22 mode 4 dirn=0, pullup or down = 0
[init -> ctrl_module] gpio 23 mode 4 dirn=0, pullup or down = 0
[init -> ctrl_module] gpio 50 mode 6 dirn=0, pullup or down = 0
[init -> ctrl_module] gpio 51 mode 6 dirn=0, pullup or down = 0
[init -> ctrl_module] gpio 66 mode 7 dirn=1, pullup or down = 0
[init -> ctrl_module] gpio 67 mode 7 dirn=1, pullup or down = 0
[init -> ctrl_module] gpio 68 mode 7 dirn=1, pullup or down = 0
[init -> ctrl_module] gpio 69 mode 7 dirn=1, pullup or down = 0
[init -> ctrl_module] gpio 89 mode 7 dirn=1, pullup or down = 0
[init -> ctrl_module] gpio 78 mode 4 dirn=0, pullup or down = 0
[init -> ctrl_module] gpio 79 mode 4 dirn=1, pullup or down = 0
[init -> ctrl_module] gpio 110 mode 6 dirn=1, pullup or down = 0
[init -> ctrl_module] gpio 111 mode 6 dirn=1, pullup or down = 0
[init -> ctrl_module] gpio 112 mode 6 dirn=1, pullup or down = 0
[init -> ctrl_module] gpio 113 mode 6 dirn=1, pullup or down = 0
[init -> dmtimer_drv] DMTimer_driver::DMTimer_Control::DMTimer_Control(Genode::ad
dr_t, Genode::size_t, int, unsigned int): Starting dmtimer 4, irq 92
[init -> bbb_platform_client] --- bbb platform being configured ---
[init -> bbb_platform_client] Enabled dmtimer 3 freq = 2
[init -> bbb_platform_client] Enabled dmtimer 4 freq = 1
[init -> bbb_platform_client] Enabled dmtimer 5 freq = 1
[init -> bbb_platform_client] Enabled dmtimer 6 freq = 1
[init -> bbb_platform_client] Enabled dmtimer 7 freq = 1
[init -> bbb_platform_client] Enabled PWM 1
[init -> bbb_platform_client] Enabled PWM 2
[init -> bbb_platform_client] Enabled UART 5
[init -> platform_drv] void Ccm::ipu_clk_enable(BeagleBoneBlack::Device): Enablin
g MMC0
[init -> bbb_platform_client] Enabled MMC 0
[init -> platform_drv] void Ccm::ipu_clk_enable(BeagleBoneBlack::Device): Enablin
g MMC1
[init -> bbb_platform_client] Enabled MMC 1
[init -> bbb_platform_client] Enabled I2C 1
[init -> platform_drv] void Ccm::ipu_clk_enable(BeagleBoneBlack::Device): Enablin
g PRUSS
[init -> bbb_platform_client] Enabled PRUSS 0
[init] virtual void Genode::Child_policy::exit(int): child "bbb_platform_client" 
exited with exit value 0
[init -> pwm_drv] PWM port 0, num 1, period 31250, duty 1562, polarity 1, name=No
rth
[init -> pwm_drv] PWM port 1, num 1, period 31250, duty 1562, polarity 1, name=So
uth
[init -> pwm_drv] PWM port 0, num 2, period 31250, duty 1562, polarity 1, name=Ea
st
[init -> pwm_drv] PWM port 1, num 2, period 31250, duty 1562, polarity 1, name=We
st
[init -> dmtimer_drv] --- am33xx DMtimer driver ---
[init -> gpio_drv] --- am33xx gpio driver ---
[init -> i2c_drv] --- am33xx i2c driver ---
[init -> gpio_drv] gpio 53 mode O value=0
[init -> gpio_drv] gpio 54 mode O value=0
[init -> gpio_drv] gpio 55 mode O value=0
[init -> gpio_drv] gpio 56 mode O value=0
[init -> Autopilot] void init_libc_ffat(): using the libc_ffat plugin
[init -> Autopilot] --- Autopilot application starting ---
[init -> Autopilot] fault handler: waiting for fault signal
[init -> sd_card_drv] CID: 0x1d414453 0x44202020 0x02b16703 0xea00d927
[init -> sd_card_drv] RCA: 0x59b4
[init -> sd_card_drv] Block::Omap3_driver::Omap3_driver(bool): SDCard driver gett
ing mmc1 ready with dma 0
[init -> sd_card_drv] SD card detected
[init -> sd_card_drv] capacity: 60303 MiB
[init -> Autopilot] /Autopilot/ap_config.xml file size: 597 bytes
[init -> Autopilot] int main(): AP config read 597 bytes
[init -> Autopilot] Autopilot::Datalogger::~Datalogger(): Datalogger object endin
g
[init -> pwm_drv] 4 Motors initialized
[init -> Autopilot] mktime() returned -1, the file modification time reported by 
stat() will be incorrect
[init -> Autopilot] /Autopilot/ap_pru0.bin file size: 492 bytes
[init -> Autopilot] mktime() returned -1, the file modification time reported by 
stat() will be incorrect
[init -> Autopilot] /Autopilot/ap_pru1.bin file size: 1348 bytes
[init -> Autopilot] virtual void Pruss::Pruss_ctl::entry(): Loaded pru_0 program 
123 words
[init -> Autopilot] virtual void Pruss::Pruss_ctl::entry(): Loaded pru_1 program 
337 words
[init -> Autopilot] Autopilot::Datalogger::~Datalogger(): Datalogger object endin
g
[init -> Autopilot] Autopilot::Datalogger::~Datalogger(): Datalogger object endin
g
[init -> Autopilot] PRUSS Initialized
[init -> Autopilot] LSM303D accel found
[init -> Autopilot] L3GD20H gyro found on I2C bus
[init -> Autopilot] LSM303D magn found
[init -> uart_drv] virtual Uart::Driver* main(int, char**)::Omap_uart_driver_fact
ory::create(unsigned int, unsigned int, Uart::Char_avail_callback&): Baudrate is 
not defined. Use default 115200
[init -> Autopilot] /Autopilot/ap_config.xml file size: 597 bytes
[init -> Autopilot] Autopilot::System_param::System_param(Autopilot::sm*): System
_param object created
[init -> Autopilot] virtual void Autopilot::Gyros::entry(): writing gyro zero 0 a
s -129
[init -> Autopilot] virtual void Autopilot::Gyros::entry(): writing gyro zero 1 a
s 369
[init -> Autopilot] virtual void Autopilot::Gyros::entry(): writing gyro zero 2 a
s 6
[init -> Autopilot] control loop until end



More information about the users mailing list