diff options
Diffstat (limited to 'Documentation/ABI/testing/debugfs-kmemtrace')
| -rw-r--r-- | Documentation/ABI/testing/debugfs-kmemtrace | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/Documentation/ABI/testing/debugfs-kmemtrace b/Documentation/ABI/testing/debugfs-kmemtrace new file mode 100644 index 000000000000..5e6a92a02d85 --- /dev/null +++ b/Documentation/ABI/testing/debugfs-kmemtrace | |||
| @@ -0,0 +1,71 @@ | |||
| 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) | ||
| 66 | Feature data (Feature size - 3 bytes) | ||
| 67 | |||
| 68 | |||
| 69 | Users: | ||
| 70 | kmemtrace-user - git://repo.or.cz/kmemtrace-user.git | ||
| 71 | |||
