Thanks Adrian. This is a useful start. It sounds like the easiest
thing may be to overwrite some syscall that I don't use to loop over
all the threads in the kernel and print out their debugging info.

Also, I've never called raw seL4 system calls from a camkes component
before. Is it just a matter of calling seL4_BenchmarkResetLog() or
seL4_BenchmarkFinalizeLog() directly in the control code for one of my
components?

-Andrew

On Tue, Jan 17, 2017 at 7:23 PM,  <[email protected]> wrote:
> Hi Andrew,
>
> There is some code already in the kernel to help you do this, although it is
> tested and fixed on an as used basis so may or may not work as I describe.
> You can enable the the thread utilization tracking with
> make menuconfig -> seL4 Kernel -> Build Options -> Enable benchmarks ->
> Track threads and kernel utilisation time
> Once enabled you gain the following relevant functions
>
> seL4_BenchmarkResetLog()
> Reset idle time and total run time and start capturing utilization
> information
>
> seL4_BenchmarkFinalizeLog()
> Calculate idle time, total run time and stop capturing utilization
> information
>
> seL4_BenchmarkGetThreadUtilisation(seL4_Word tcb_cptr)
> Retrieve the utilization for a particular thread where
> seL4_GetMR(0) == Thread utilization (in cycles) of this (tcb_cptr) thread
> seL4_GetMR(1) == Idle thread utilization (in cycles) between the last call
> to Reset and Finalize log
> seL4_GetMR(2) == Totall execution time (in cycles) between the last call to
> Reset and Finalize log
>
> seL4_BenchmarkResetThreadUtilisation(seL4_Word tcb_cptr)
> Reset the utilization of this thread.
>
> The main problem with this API is that it requires you to have caps to all
> the threads you wish to get the information of, which in CAmkES is generally
> only the capdl-loader application. It is also designed with the idea that
> you want to reset the utilization counts at the point you're querying them,
> i.e. you're doing some kind of benchmark and you just want utilization over
> that benchmark.
>
> Hope this provides some use to you.
>
> Adrian
>
>
> On Wed 18-Jan-2017 9:59 AM, Andrew Gacek wrote:
>
> Hi,
>
> I'm interested in seeing how much of the CPU is being used by the
> various threads in my (camkes) application. I'd like a simple "Task
> Manager" style report of the form:
>
> 70% idle
> 25% can_obj_7_0_control_9_tcb
> 5% can_obj_7_Int_3_0000_tcb
> 0% can_obj_7_0_fault_handler_15_
> 0000_tcb
> etc
>
> I've tried poking around libsel4bench, but I don't see any obvious way
> of benchmarking the whole system. From what I can tell, it's mostly
> designed to get cycle counts from specific code segments. Is that
> right? What's the best way to go about benchmarking the whole system?
> It's only for debugging, so I'm willing to make some quick-and-dirty
> changes to the kernel just to see the results.
>
> Thanks,
> Andrew
>
> _______________________________________________
> Devel mailing list
> [email protected]
> https://sel4.systems/lists/listinfo/devel
>
>

_______________________________________________
Devel mailing list
[email protected]
https://sel4.systems/lists/listinfo/devel

Reply via email to