72 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			72 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
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
 | 
						|
 |