Commit | Line | Data |
---|---|---|
aa46a7e0 EGM |
1 | What: /sys/kernel/debug/kmemtrace/ |
2 | Date: July 2008 | |
3 | Contact: Eduard - Gabriel Munteanu <eduard.munteanu@linux360.ro> | |
4 | Description: | |
5 | ||
6 | In kmemtrace-enabled kernels, the following files are created: | |
7 | ||
8 | /sys/kernel/debug/kmemtrace/ | |
9 | cpu<n> (0400) Per-CPU tracing data, see below. (binary) | |
10 | total_overruns (0400) Total number of bytes which were dropped from | |
11 | cpu<n> files because of full buffer condition, | |
12 | non-binary. (text) | |
13 | abi_version (0400) Kernel's kmemtrace ABI version. (text) | |
14 | ||
15 | Each per-CPU file should be read according to the relay interface. That is, | |
16 | the reader should set affinity to that specific CPU and, as currently done by | |
17 | the userspace application (though there are other methods), use poll() with | |
18 | an infinite timeout before every read(). Otherwise, erroneous data may be | |
19 | read. The binary data has the following _core_ format: | |
20 | ||
21 | Event ID (1 byte) Unsigned integer, one of: | |
22 | 0 - represents an allocation (KMEMTRACE_EVENT_ALLOC) | |
23 | 1 - represents a freeing of previously allocated memory | |
24 | (KMEMTRACE_EVENT_FREE) | |
25 | Type ID (1 byte) Unsigned integer, one of: | |
26 | 0 - this is a kmalloc() / kfree() | |
27 | 1 - this is a kmem_cache_alloc() / kmem_cache_free() | |
28 | 2 - this is a __get_free_pages() et al. | |
29 | Event size (2 bytes) Unsigned integer representing the | |
30 | size of this event. Used to extend | |
31 | kmemtrace. Discard the bytes you | |
32 | don't know about. | |
33 | Sequence number (4 bytes) Signed integer used to reorder data | |
34 | logged on SMP machines. Wraparound | |
35 | must be taken into account, although | |
36 | it is unlikely. | |
37 | Caller address (8 bytes) Return address to the caller. | |
38 | Pointer to mem (8 bytes) Pointer to target memory area. Can be | |
39 | NULL, but not all such calls might be | |
40 | recorded. | |
41 | ||
42 | In case of KMEMTRACE_EVENT_ALLOC events, the next fields follow: | |
43 | ||
44 | Requested bytes (8 bytes) Total number of requested bytes, | |
45 | unsigned, must not be zero. | |
46 | Allocated bytes (8 bytes) Total number of actually allocated | |
47 | bytes, unsigned, must not be lower | |
48 | than requested bytes. | |
49 | Requested flags (4 bytes) GFP flags supplied by the caller. | |
50 | Target CPU (4 bytes) Signed integer, valid for event id 1. | |
51 | If equal to -1, target CPU is the same | |
52 | as origin CPU, but the reverse might | |
53 | not be true. | |
54 | ||
55 | The data is made available in the same endianness the machine has. | |
56 | ||
57 | Other event ids and type ids may be defined and added. Other fields may be | |
58 | added by increasing event size, but see below for details. | |
59 | Every modification to the ABI, including new id definitions, are followed | |
60 | by bumping the ABI version by one. | |
61 | ||
62 | Adding new data to the packet (features) is done at the end of the mandatory | |
63 | data: | |
64 | Feature size (2 byte) | |
65 | Feature ID (1 byte) | |
4a80b24b | 66 | Feature data (Feature size - 3 bytes) |
aa46a7e0 EGM |
67 | |
68 | ||
69 | Users: | |
70 | kmemtrace-user - git://repo.or.cz/kmemtrace-user.git | |
71 |