tools/kvm/kvm_stat/kvm_stat
Source file repositories/reference/linux-study-clean/tools/kvm/kvm_stat/kvm_stat
File Facts
- System
- Linux kernel
- Corpus path
tools/kvm/kvm_stat/kvm_stat- Extension
[no extension]- Size
- 64460 bytes
- Lines
- 1889
- Domain
- Support Tooling And Documentation
- Bucket
- tools
- Inferred role
- Support Tooling And Documentation: tools
- Status
- atlas-only
Why This File Exists
Repository support layer: documentation, build tooling, samples, user-space helper tools, generated initramfs support, licenses, and validation utilities.
- Repository support layer: documentation, build tooling, samples, user-space helper tools, generated initramfs support, licenses, and validation utilities.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
- No C-style include directives detected by the generator.
Detected Declarations
struct read_format
Annotated Snippet
struct read_format {
u64 nr; /* The number of events */
struct {
u64 value; /* The value of the event */
} values[nr];
};
"""
length = 8 * (1 + len(self.events))
read_format = 'xxxxxxxx' + 'Q' * len(self.events)
return dict(zip([event.name for event in self.events],
struct.unpack(read_format,
os.read(self.events[0].fd, length))))
class Event(object):
"""Represents a performance event and manages its life cycle."""
def __init__(self, name, group, trace_cpu, trace_pid, trace_point,
trace_filter, trace_set='kvm'):
self.libc = ctypes.CDLL('libc.so.6', use_errno=True)
self.syscall = self.libc.syscall
self.name = name
self.fd = None
self._setup_event(group, trace_cpu, trace_pid, trace_point,
trace_filter, trace_set)
def __del__(self):
"""Closes the event's file descriptor.
As no python file object was created for the file descriptor,
python will not reference count the descriptor and will not
close it itself automatically, so we do it.
"""
if self.fd:
os.close(self.fd)
def _perf_event_open(self, attr, pid, cpu, group_fd, flags):
"""Wrapper for the sys_perf_evt_open() syscall.
Used to set up performance events, returns a file descriptor or -1
on error.
Attributes are:
- syscall number
- struct perf_event_attr *
- pid or -1 to monitor all pids
- cpu number or -1 to monitor all cpus
- The file descriptor of the group leader or -1 to create a group.
- flags
"""
return self.syscall(ARCH.sc_perf_evt_open, ctypes.pointer(attr),
ctypes.c_int(pid), ctypes.c_int(cpu),
ctypes.c_int(group_fd), ctypes.c_long(flags))
def _setup_event_attribute(self, trace_set, trace_point):
"""Returns an initialized ctype perf_event_attr struct."""
id_path = os.path.join(PATH_DEBUGFS_TRACING, 'events', trace_set,
trace_point, 'id')
event_attr = perf_event_attr()
event_attr.config = int(open(id_path).read())
return event_attr
def _setup_event(self, group, trace_cpu, trace_pid, trace_point,
trace_filter, trace_set):
"""Sets up the perf event in Linux.
Annotation
- Detected declarations: `struct read_format`.
- Atlas domain: Support Tooling And Documentation / tools.
- Implementation status: atlas-only.
Implementation Notes
- This generated page is the file-by-file coverage layer; curated subsystem chapters should link here when they synthesize a multi-file control flow.
- Core OS pages should be promoted from atlas-only to deep-reviewed when they explain data structures, invariants, locking, lifecycle, and C implementation snippets.
- Driver-family pages are intentionally pattern-oriented unless they are part of the selected PCIe/NVMe representative device path.