• Ajay Kaher's avatar
    eventfs: Move tracing/events to eventfs · 27152bce
    Ajay Kaher authored
    Up until now, /sys/kernel/tracing/events was no different than any other
    part of tracefs. The files and directories within the events directory was
    created when the tracefs was mounted, and also created for the instances in
    /sys/kernel/tracing/instances/<instance>/events. Most of these files and
    directories will never be referenced. Since there are thousands of these
    files and directories they spend their time wasting precious memory
    resources.
    
    Move the "events" directory to the new eventfs. The eventfs will take the
    meta data of the events that they represent and store that. When the files
    in the events directory are referenced, the dentry and inodes to represent
    them are then created. When the files are no longer referenced, they are
    freed. This saves the precious memory resources that were wasted on these
    seldom referenced dentries and inodes.
    
    Running the following:
    
     ~# cat /proc/meminfo /proc/slabinfo  > before.out
     ~# mkdir /sys/kernel/tracing/instances/foo
     ~# cat /proc/meminfo /proc/slabinfo  > after.out
    
    to test the changes produces the following deltas:
    
    Before this change:
    
     Before after deltas for meminfo:
    
       MemFree: -32260
       MemAvailable: -21496
       KReclaimable: 21528
       Slab: 22440
       SReclaimable: 21528
       SUnreclaim: 912
       VmallocUsed: 16
    
     Before after deltas for slabinfo:
    
       <slab>:		<objects>	[ * <size> = <total>]
    
       tracefs_inode_cache:	14472		[* 1184 = 17134848]
       buffer_head:		24		[* 168 = 4032]
       hmem_inode_cache:	28		[* 1480 = 41440]
       dentry:		14450		[* 312 = 4508400]
       lsm_inode_cache:	14453		[* 32 = 462496]
       vma_lock:		11		[* 152 = 1672]
       vm_area_struct:	2		[* 184 = 368]
       trace_event_file:	1748		[* 88 = 153824]
       kmalloc-256:		1072		[* 256 = 274432]
       kmalloc-64:		2842		[* 64 = 181888]
    
     Total slab additions in size: 22,763,400 bytes
    
    With this change:
    
     Before after deltas for meminfo:
    
       MemFree: -12600
       MemAvailable: -12580
       Cached: 24
       Active: 12
       Inactive: 68
       Inactive(anon): 48
       Active(file): 12
       Inactive(file): 20
       Dirty: -4
       AnonPages: 68
       KReclaimable: 12
       Slab: 1856
       SReclaimable: 12
       SUnreclaim: 1844
       KernelStack: 16
       PageTables: 36
       VmallocUsed: 16
    
     Before after deltas for slabinfo:
    
       <slab>:		<objects>	[ * <size> = <total>]
    
       tracefs_inode_cache:	108		[* 1184 = 127872]
       buffer_head:		24		[* 168 = 4032]
       hmem_inode_cache:	18		[* 1480 = 26640]
       dentry:		127		[* 312 = 39624]
       lsm_inode_cache:	152		[* 32 = 4864]
       vma_lock:		67		[* 152 = 10184]
       vm_area_struct:	-12		[* 184 = -2208]
       trace_event_file: 	1764		[* 96 = 169344]
       kmalloc-96:		14322		[* 96 = 1374912]
       kmalloc-64:		2814		[* 64 = 180096]
       kmalloc-32:		1103		[* 32 = 35296]
       kmalloc-16:		2308		[* 16 = 36928]
       kmalloc-8:		12800		[* 8 = 102400]
    
     Total slab additions in size: 2,109,984 bytes
    
    Which is a savings of 20,653,416 bytes (20 MB) per tracing instance.
    
    Link: https://lkml.kernel.org/r/1690568452-46553-10-git-send-email-akaher@vmware.comSigned-off-by: default avatarAjay Kaher <akaher@vmware.com>
    Co-developed-by: default avatarSteven Rostedt (VMware) <rostedt@goodmis.org>
    Signed-off-by: default avatarSteven Rostedt (VMware) <rostedt@goodmis.org>
    Tested-by: default avatarChing-lin Yu <chinglinyu@google.com>
    Signed-off-by: default avatarSteven Rostedt (Google) <rostedt@goodmis.org>
    27152bce
trace.h 65.1 KB