Hi, everyone!
I've written a small script using bcc python lib for qemu block io latency 
tracing.
I attach two uprobes to block_acct_start and block_acct_done.

On some servers i can see unexpectedly high latencies:
~# ./qemuioslower 40000
Tracing for qemu I/O... Ctrl-C to end
TIME               LATENCY    SIZE(KB)   IO TYPE
0.0                18446744073709551 8192       write
9.7294584          18446744073709551 0          flush
24.815983          18446744073709551 4096       write
25.422378          18446744073709551 0          flush

For me it looks like bpf_ktime_get_ns in stop() function returned time that is 
less, than bpf_ktime_get_ns() in start(), but why does this happen?
May someone help me with understanding this behavior?

BPF code:
#include <uapi/linux/ptrace.h>
BPF_HASH(req, u64);
enum BlockAcctType {
    BLOCK_ACCT_READ,
    BLOCK_ACCT_WRITE,
    BLOCK_ACCT_FLUSH,
    BLOCK_MAX_IOTYPE,
};
struct data_t {
    u64 ts;
    u64 lat;
    u64 bytes;
    enum BlockAcctType type;
};
typedef struct BlockAcctCookie {
    int64_t bytes;
    int64_t start_time_ns;
    enum BlockAcctType type;
} BlockAcctCookie;
BPF_PERF_OUTPUT(events);

void start(struct pt_regs *ctx) {
    u32 pid = bpf_get_current_pid_tgid();
    if (FILTER_PID)
        return;
    u64 key = 0;
    bpf_probe_read(&key, sizeof(key), (void *)PT_REGS_PARM1(ctx));
    u64 ts = bpf_ktime_get_ns();
    req.update(&key, &ts);
}

void stop(struct pt_regs *ctx,void *first, struct BlockAcctCookie *cookie) {
    struct data_t data = {};
    u64 key = 0;
    bpf_probe_read(&key, sizeof(key), (void *)PT_REGS_PARM1(ctx));
    data.ts = bpf_ktime_get_ns();
    data.type = cookie->type;
    data.bytes = cookie->bytes;
    u64 *s_time = req.lookup(&key);
    if (s_time != 0) {
        data.lat = (data.ts - *s_time);
        data.lat /= 1000;
        if (data.lat > MIN_US) {
                events.perf_submit(ctx, &data, sizeof(data));
        }
        req.delete(&key);
    }
}

Kernel: Linux hostname 4.15.0-36-generic #39~16.04.1-Ubuntu SMP Tue Sep 25 
08:59:23 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
bcc packages versions:
bcc-tools                             0.7.0-1
libbcc                                0.7.0-1
libcc1-0:amd64                        5.4.0-6ubuntu1~16.04.10
python-bcc                            0.7.0-1


-- 
Regards,
Aleksei Zakharov


-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.

View/Reply Online (#1527): https://lists.iovisor.org/g/iovisor-dev/message/1527
Mute This Topic: https://lists.iovisor.org/mt/28320360/21656
Group Owner: iovisor-dev+ow...@lists.iovisor.org
Unsubscribe: https://lists.iovisor.org/g/iovisor-dev/unsub  
[arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to