Skip to main content

Crate blktrace_rs

Crate blktrace_rs 

Source
Expand description

Linux block-layer I/O trace capture, straight from the kernel.

blktrace_rs drives the kernel block tracing interface directly (the BLKTRACESETUP/BLKTRACESTART/BLKTRACESTOP/BLKTRACETEARDOWN ioctls plus the per-CPU relay channels under debugfs), so it needs neither the blktrace nor the blkparse command line tools.

Capturing requires root and a kernel with debugfs. Building this crate requires libclang and the kernel UAPI headers (linux/blktrace_api.h).

§Example

use blktrace_rs::BlkTrace;

let session = BlkTrace::monitor("/dev/sda")?;
// ... do I/O on the device while the tracer runs ...
let report = session.shutdown()?;
for event in &report.events {
    if event.is_read() {
        println!("read {} bytes at sector {}", event.event.bytes, event.event.sector);
    }
}

§The async feature

The tracing core is inherently blocking (relay channel reads and ioctl waits). With features = ["async"] the crate adds monitor_async and shutdown_async, which run that core on the tokio blocking pool so async callers never stall their executor.

Structs§

BlkTrace
Entry point for starting a trace.
BlkTraceEvent
One parsed blk_io_trace record together with its trailing pdu data.
BlkTraceReport
The outcome of a completed tracing session.
BlkTraceSession
A live tracing session.
__kernel_fd_set
__kernel_fsid_t
blk_io_trace
blk_io_trace2
blk_io_trace_remap
blk_user_trace_setup
blk_user_trace_setup2

Enums§

BlktraceError
Errors returned by this crate.

Constants§

BLKTRACE_BDEV_SIZE
BLKTRACE_BDEV_SIZE2
BLK_IO_TRACE2_VERSION
BLK_IO_TRACE_MAGIC
BLK_IO_TRACE_VERSION
BLK_TC_SHIFT
Blktrace_running
Blktrace_setup
Blktrace_stopped
__BITS_PER_LONG
__BITS_PER_LONG_LONG
__FD_SETSIZE
blktrace_act___BLK_TA_ABORT
blktrace_act___BLK_TA_BACKMERGE
blktrace_act___BLK_TA_BOUNCE
blktrace_act___BLK_TA_CGROUP
blktrace_act___BLK_TA_COMPLETE
blktrace_act___BLK_TA_DRV_DATA
blktrace_act___BLK_TA_FRONTMERGE
blktrace_act___BLK_TA_GETRQ
blktrace_act___BLK_TA_INSERT
blktrace_act___BLK_TA_ISSUE
blktrace_act___BLK_TA_PLUG
blktrace_act___BLK_TA_QUEUE
blktrace_act___BLK_TA_REMAP
blktrace_act___BLK_TA_REQUEUE
blktrace_act___BLK_TA_SLEEPRQ
blktrace_act___BLK_TA_SPLIT
blktrace_act___BLK_TA_UNPLUG_IO
blktrace_act___BLK_TA_UNPLUG_TIMER
blktrace_act___BLK_TA_ZONE_PLUG
blktrace_act___BLK_TA_ZONE_UNPLUG
blktrace_cat_BLK_TC_AHEAD
blktrace_cat_BLK_TC_COMPLETE
blktrace_cat_BLK_TC_DISCARD
blktrace_cat_BLK_TC_DRV_DATA
blktrace_cat_BLK_TC_END_V1
blktrace_cat_BLK_TC_END_V2
blktrace_cat_BLK_TC_FLUSH
blktrace_cat_BLK_TC_FS
blktrace_cat_BLK_TC_FUA
blktrace_cat_BLK_TC_ISSUE
blktrace_cat_BLK_TC_META
blktrace_cat_BLK_TC_NOTIFY
blktrace_cat_BLK_TC_PC
blktrace_cat_BLK_TC_QUEUE
blktrace_cat_BLK_TC_READ
blktrace_cat_BLK_TC_REQUEUE
blktrace_cat_BLK_TC_SYNC
blktrace_cat_BLK_TC_SYNCIO
blktrace_cat_BLK_TC_WRITE
blktrace_cat_BLK_TC_WRITE_ZEROES
blktrace_cat_BLK_TC_ZONE_APPEND
blktrace_cat_BLK_TC_ZONE_CLOSE
blktrace_cat_BLK_TC_ZONE_FINISH
blktrace_cat_BLK_TC_ZONE_OPEN
blktrace_cat_BLK_TC_ZONE_RESET
blktrace_cat_BLK_TC_ZONE_RESET_ALL
blktrace_notify___BLK_TN_CGROUP
blktrace_notify___BLK_TN_MESSAGE
blktrace_notify___BLK_TN_PROCESS
blktrace_notify___BLK_TN_TIMESTAMP

Type Aliases§

__be16
__be32
__be64
__kernel_caddr_t
__kernel_clock_t
__kernel_clockid_t
__kernel_daddr_t
__kernel_gid16_t
__kernel_gid32_t
__kernel_gid_t
__kernel_ino_t
__kernel_ipc_pid_t
__kernel_key_t
__kernel_loff_t
__kernel_long_t
__kernel_mode_t
__kernel_mqd_t
__kernel_off_t
__kernel_old_dev_t
__kernel_old_gid_t
__kernel_old_time_t
__kernel_old_uid_t
__kernel_pid_t
__kernel_ptrdiff_t
__kernel_sighandler_t
__kernel_size_t
__kernel_ssize_t
__kernel_suseconds_t
__kernel_time64_t
__kernel_time_t
__kernel_timer_t
__kernel_uid16_t
__kernel_uid32_t
__kernel_uid_t
__kernel_ulong_t
__kernel_uoff_t
__le16
__le32
__le64
__poll_t
__s8
__s16
__s32
__s64
__s128
__sum16
__u8
__u16
__u32
__u64
__u128
__wsum
_bindgen_ty_1
blktrace_act
blktrace_cat
blktrace_notify