perf: Set sample_period
[akaros.git] / tools / profile / perf / perfconv.h
1 /* Copyright (c) 2015 Google Inc
2  * Davide Libenzi <dlibenzi@google.com>
3  * See LICENSE for details.
4  *
5  * Converts kprof profiler files into Linux perf ones. The Linux Perf file
6  * format has bee illustrated here:
7  *
8  *       https://lwn.net/Articles/644919/
9  *       https://openlab-mu-internal.web.cern.ch/openlab-mu-internal/03_Documents/
10  *                       3_Technical_Documents/Technical_Reports/2011/Urs_Fassler_report.pdf
11  *
12  */
13
14 #pragma once
15
16 #include <sys/types.h>
17 #include <stdio.h>
18 #include <stdint.h>
19 #include "xlib.h"
20 #include "perf_format.h"
21
22 struct mem_file_reloc {
23         struct mem_file_reloc *next;
24         uint64_t *ptr;
25 };
26
27 struct mem_block {
28         struct mem_block *next;
29         char *base;
30         char *top;
31         char *wptr;
32 };
33
34 struct mem_file {
35         struct mem_arena *ma;
36         size_t size;
37         struct mem_block *head;
38         struct mem_block *tail;
39         struct mem_file_reloc *relocs;
40 };
41
42 struct static_mmap64 {
43         struct static_mmap64 *next;
44         uint64_t addr;
45         uint64_t size;
46         uint64_t offset;
47         uint32_t pid;
48         char *path;
49 };
50
51 struct perf_headers {
52         struct mem_block *headers[HEADER_FEAT_BITS];
53 };
54
55 struct perf_event_id {
56         uint64_t event;
57         uint64_t id;
58 };
59
60 struct perfconv_context {
61         struct mem_arena ma;
62         int debug_level;
63         uint64_t kernel_load_address;
64         struct static_mmap64 *static_mmaps;
65         uint64_t sqnr_id;
66         struct perf_event_id *events;
67         size_t alloced_events;
68         struct perf_header ph;
69         struct perf_headers hdrs;
70         struct mem_file fhdrs, misc, attrs, data, event_types;
71 };
72
73 struct perfconv_context *perfconv_create_context(void);
74 void perfconv_free_context(struct perfconv_context *cctx);
75 void perfconv_set_dbglevel(int level, struct perfconv_context *cctx);
76 void perfconv_add_kernel_mmap(const char *path, size_t size,
77                                                           struct perfconv_context *cctx);
78 void perfconv_process_input(struct perfconv_context *cctx, FILE *input,
79                                                         FILE *output);