| What: /sys/kernel/debug/kmemtrace/ |
| Date: July 2008 |
| Contact: Eduard - Gabriel Munteanu <eduard.munteanu@linux360.ro> |
| Description: |
| |
| In kmemtrace-enabled kernels, the following files are created: |
| |
| /sys/kernel/debug/kmemtrace/ |
| cpu<n> (0400) Per-CPU tracing data, see below. (binary) |
| total_overruns (0400) Total number of bytes which were dropped from |
| cpu<n> files because of full buffer condition, |
| non-binary. (text) |
| abi_version (0400) Kernel's kmemtrace ABI version. (text) |
| |
| Each per-CPU file should be read according to the relay interface. That is, |
| the reader should set affinity to that specific CPU and, as currently done by |
| the userspace application (though there are other methods), use poll() with |
| an infinite timeout before every read(). Otherwise, erroneous data may be |
| read. The binary data has the following _core_ format: |
| |
| Event ID (1 byte) Unsigned integer, one of: |
| 0 - represents an allocation (KMEMTRACE_EVENT_ALLOC) |
| 1 - represents a freeing of previously allocated memory |
| (KMEMTRACE_EVENT_FREE) |
| Type ID (1 byte) Unsigned integer, one of: |
| 0 - this is a kmalloc() / kfree() |
| 1 - this is a kmem_cache_alloc() / kmem_cache_free() |
| 2 - this is a __get_free_pages() et al. |
| Event size (2 bytes) Unsigned integer representing the |
| size of this event. Used to extend |
| kmemtrace. Discard the bytes you |
| don't know about. |
| Sequence number (4 bytes) Signed integer used to reorder data |
| logged on SMP machines. Wraparound |
| must be taken into account, although |
| it is unlikely. |
| Caller address (8 bytes) Return address to the caller. |
| Pointer to mem (8 bytes) Pointer to target memory area. Can be |
| NULL, but not all such calls might be |
| recorded. |
| |
| In case of KMEMTRACE_EVENT_ALLOC events, the next fields follow: |
| |
| Requested bytes (8 bytes) Total number of requested bytes, |
| unsigned, must not be zero. |
| Allocated bytes (8 bytes) Total number of actually allocated |
| bytes, unsigned, must not be lower |
| than requested bytes. |
| Requested flags (4 bytes) GFP flags supplied by the caller. |
| Target CPU (4 bytes) Signed integer, valid for event id 1. |
| If equal to -1, target CPU is the same |
| as origin CPU, but the reverse might |
| not be true. |
| |
| The data is made available in the same endianness the machine has. |
| |
| Other event ids and type ids may be defined and added. Other fields may be |
| added by increasing event size, but see below for details. |
| Every modification to the ABI, including new id definitions, are followed |
| by bumping the ABI version by one. |
| |
| Adding new data to the packet (features) is done at the end of the mandatory |
| data: |
| Feature size (2 byte) |
| Feature ID (1 byte) |
| Feature data (Feature size - 3 bytes) |
| |
| |
| Users: |
| kmemtrace-user - git://repo.or.cz/kmemtrace-user.git |
| |