39 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
			
		
		
	
	
			39 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
#!/usr/bin/python
 | 
						|
#
 | 
						|
# urandomread  Example of instrumenting a kernel tracepoint.
 | 
						|
#              For Linux, uses BCC, BPF. Embedded C.
 | 
						|
#
 | 
						|
# REQUIRES: Linux 4.7+ (BPF_PROG_TYPE_TRACEPOINT support).
 | 
						|
#
 | 
						|
# Test by running this, then in another shell, run:
 | 
						|
#     dd if=/dev/urandom of=/dev/null bs=1k count=5
 | 
						|
#
 | 
						|
# Copyright 2016 Netflix, Inc.
 | 
						|
# Licensed under the Apache License, Version 2.0 (the "License")
 | 
						|
 | 
						|
from __future__ import print_function
 | 
						|
from bcc import BPF
 | 
						|
from bcc.utils import printb
 | 
						|
 | 
						|
# load BPF program
 | 
						|
b = BPF(text="""
 | 
						|
TRACEPOINT_PROBE(random, urandom_read) {
 | 
						|
    // args is from /sys/kernel/debug/tracing/events/random/urandom_read/format
 | 
						|
    bpf_trace_printk("%d\\n", args->got_bits);
 | 
						|
    return 0;
 | 
						|
}
 | 
						|
""")
 | 
						|
 | 
						|
# header
 | 
						|
print("%-18s %-16s %-6s %s" % ("TIME(s)", "COMM", "PID", "GOTBITS"))
 | 
						|
 | 
						|
# format output
 | 
						|
while 1:
 | 
						|
    try:
 | 
						|
        (task, pid, cpu, flags, ts, msg) = b.trace_fields()
 | 
						|
    except ValueError:
 | 
						|
        continue
 | 
						|
    except KeyboardInterrupt:
 | 
						|
        exit()
 | 
						|
    printb(b"%-18.9f %-16s %-6d %s" % (ts, task, pid, msg))
 |