Actually, is there any easy way to get all TCBs even from within the kernel? I see ksReadyQueues has all the runnable TCBs, but what about the rest?
-Andrew On Tue, Jan 17, 2017 at 7:29 PM, Andrew Gacek <[email protected]> wrote: > 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
