Hi,
I'm running 15.11 with a base-hw kernel on a TI Am335x SoC.
I modified an existing application I had previously created, whose design had an object which accessed processors external to the host running Genode, via mmio. The modification involved implementing the external processor access code in a driver and creating clients to access the driver using the same server/client coding pattern used in most Genode drivers. (This would give me control over the running priority of the driver and hence the response time of the driver code.) The driver would dynamically use the libc library for file access.
In the scenario I have, five drivers are running providing uart, timer, gpio, mmc, and pwm services. Now with this additional driver (named pruss_drv) running, I experience hard to follow messages related to ram quota allocations in the sys log (which is attached) as follows:
1. Core hands over the available RAM amount to init as shown in this log message- /int main(): transferred 501 MB to init /(This is correct and expected./) / 2. When the new driver runs, after all the other drivers are launched, an insufficient quota message is issued- /Insufficient quota for transfer: init -> pruss_drv// ////have 40960, need 143360 [init] not enough quota for a donation of 143360 bytes [init -> pruss_drv] resource_request: ram_quota=143360
/(Question about this output is what are these numbers telling me? Are these byte or KByte quantities or what? The total ram quota requests in all the components in the run script is about 35 MBytes so there should be well over 400 MBytes available to init at this point. And, changing the ram quotas in the run script or the ram quota requested in the associated server connection does not change the value of these numbers, which I would have thought it would.)
3/./ Then messages indicating that the emergency ram allocation had to be freed to satisfy the drivers request for ram-/ [init -> pruss_drv] virtual void Genode::Platform_env::release(): used before freeing emergency=503808 [init -> pruss_drv] virtual void Genode::Platform_env::release(): used after f reeing emergency=495616 [init] child "pruss_drv" requests resources: ram_quota=143360 /(Question: What situation has occurred to require this action for this new driver when the other five drivers that have just been installed did not invoke such an action? Again there should be plenty of ram available for allocation at this point in the execution. And, what units are these numbers in?)/
/4. Finally, another request for ram from the new driver is logged-/ [init -> pruss_drv] resource_request: ram_quota=45056 [init] child "pruss_drv" requests resources: ram_quota=45056 /(Question: I assume this is for information only and not an indication of abnormal behavior and that the allocation was actually made. Is that correct?)/
/After these unexpected log messages the output from the new driver is as expected and it appears that the initialization code in the driver executed correctly. In the initialization, a pair of disk files, specified in config settings, are correctly read via libc_ffat and loaded into the external processors instruction memories and begin there execution/. /So the driver appears to be running correctly, at least initially./
/Thanks in advance for any response. Bob Stewart/ ///
On 01/17/2016 01:28 PM, Bob Stewart wrote: Looking at this again tonight and turning on "verbose" in ram_session code, showed what appears to be the actual problem which was that the driver pruss_drv was given an initial ram quota about an order of magnitude smaller than was necessary--- 1M verse 10M. Presumably this is because libc was asking for a lot of ram. With the run script using 10M for the ram resource in the pruss_drv component, the lack of quota messages are gone.
It might be better to have error/warning messages emitted that more accurately reflect the real ram resource issue. If my analysis of the problem is correct, instead of the message "/Insufficient quota for transfer: init -> pruss_drv//" issued, /"pruss_drv ram allocation exhausted"//would be more informative. I interpreted the message as indicating that init had used all of it's allocation, which was not correct.
Thanks, Bob/ /