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