Eduard - Gabriel Munteanu | aa46a7e | 2008-08-10 20:14:04 +0300 | [diff] [blame] | 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) |
Eduard - Gabriel Munteanu | 4a80b24 | 2008-08-19 20:43:27 +0300 | [diff] [blame] | 66 | Feature data (Feature size - 3 bytes) |
Eduard - Gabriel Munteanu | aa46a7e | 2008-08-10 20:14:04 +0300 | [diff] [blame] | 67 | |
| 68 | |
| 69 | Users: |
| 70 | kmemtrace-user - git://repo.or.cz/kmemtrace-user.git |
| 71 | |