|  | 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 | 
|  |  |