92f117132d054feff79121f257413bde54566e40
[akaros.git] / Documentation / profiling.txt
1 Akaros Profiling
2 ===========================
3 2015-07-15 Barret Rhoden (brho)
4
5 Contents
6 ---------------------------
7 "Kprof"
8
9 "Kprof"
10 ---------------------------
11 Akaros has a very basic sampling profiler, similar to oprofile.  The kernel
12 generates traces, which you copy off the machine and process on Linux using
13 Linux perf.
14 First build the Akaros kernel:
15
16 / $ make && make xcc-headers-install && make apps-install
17
18 To get started, make sure #K is mounted.  The basic ifconfig script will do
19 this, as will:
20
21 / $ bind -a \#K /prof/
22
23 You control the profiler with the kpctl file.  The general style is to start
24 the events that trigger a sample, such as a timer tick, then you start and stop
25 the profiling.  The distinction between the two steps is that one actually
26 fires the events (e.g. the timer IRQ), and the other enables *collection*
27 of profiling info when those events occur.
28
29 The timer command takes the core id (or "all"), followed by "on" or "off".
30 As with all good devices, if you echo garbage, in, you should get the usage as
31 an errstr.  That'll be kept up to date more than documentation.
32 The profiler accepts a few configuration options.
33 There is a queue size limit of 64MB by default, and it is used as circular
34 buffer, so old data will be dropped.
35 To change its value:
36
37 / $ echo prof_qlimit SIZE_KB > /prof/kpctl
38
39 This should be run before starting the profiler.
40 There is a limit of the maximum call strace dept, by default 16.
41 To change it:
42
43 / $ echo prof_btdepth DEPTH > /prof/kpctl
44
45 This should be run before starting the profiler as well.
46 It is possible to configure the timer period, which defaults to 1000us, though
47 it is not suggested to move too far from the default:
48
49 / $ echo timer period 1000 > /prof/kpctl
50
51 And then start the Akaros profiler system-wide.
52
53 / $ echo start > /prof/kpctl
54 Enable tracing on 0
55 Enable tracing on 1
56 Enable tracing on 2
57 Enable tracing on 3
58 Enable tracing on 4
59 Enable tracing on 5
60 Enable tracing on 6
61 Enable tracing on 7
62
63 Run whatever command you want, then stop the profiler.
64
65 / $ foo
66 / $ echo stop > /prof/kpctl
67
68 The trace will be then available in the /prof/kpdata file.
69 The data will be available until the next start of the profiler.
70 Then copy this on your dev box.
71 The easiest way is via 9p:
72
73 / $ cp /prof/kpdata /mnt/
74
75 Or by using the simple netcat (snc) utility.
76 On your dev box:
77
78 / $ nc -l PORT > kpdata.data
79
80 On Akaros:
81
82 / $ scn -s DEVBOX_IP -p PORT -i /prof/kpdata
83
84 In order to process the Akaros kprof file, you need to convert it to the
85 Linux perf one.
86 You can do that, on your dev box, with:
87
88 / $ ./tools/profile/kprof2perf/kprof2perf-linux -k `pwd`/obj/kern/akaros-kernel-64b -i kpdata.data -o perf.data
89
90 You then need to build the Akaros specific Linux perf binary.
91 First you need to install (if you have not already) libelf-dev:
92
93 \ $ sudo apt-get install libelf-dev
94
95 Then pull the Linux kernel source code which is closer to the kernel
96 version you are running in your dev box, and patch it:
97
98 / $ cd linux
99 / $ patch -p 1 < $AKAROS/tools/profile/kprof2perf/perf_patches/perf_patch.diff
100 / $ cd tools/perf
101 / $ make
102
103 Then you should be able to run Linux perf data analysis command on it:
104 Example:
105
106 $ /PATH_TO/perf --root-dir $AKAROS/kern/kfs/ report -g -i perf.data