profiling in user mode.
authorRonald G. Minnich <rminnich@google.com>
Wed, 14 May 2014 01:13:24 +0000 (18:13 -0700)
committerRonald G. Minnich <rminnich@google.com>
Wed, 14 May 2014 01:13:24 +0000 (18:13 -0700)
This change should allow reasonable and accurate user-mode profiling.
An MCP can look at its vcore stats and see at what time (in ns)
it was resumed. It can also see see total ns spent in that process.
Finally, it can compute the current ns spent in the process
by converting the tsc to ns and subtracting the resume value.

Only a proposal, let me know if there's a better way.

Signed-off-by: Ronald G. Minnich <rminnich@google.com>
kern/include/ros/procinfo.h

index 9b69de4..65cfd4f 100644 (file)
@@ -32,6 +32,15 @@ struct vcore {
        uint32_t                        nr_preempts_sent;       /* these two differ when a preempt*/
        uint32_t                        nr_preempts_done;       /* is in flight. */
        uint64_t                        preempt_pending;
+       /* for profiling. Store nsecs into 'resume' each time we start.
+        * Each time we stop, subtract resume from current nsecs and add it to total.
+        * This way, a process can see cumulative runtime as of the last
+        * resume, and can also calculate runtime in this interval, by adding
+        * (ns - resume) + total. This assumes we have an easy way to get
+        * ns at the application level.
+        */
+       uint64_t                        resume; 
+       uint64_t                        total;
 };
 
 struct pcore {