| #!/usr/bin/env python |
| # Copyright (c) PLUMgrid, Inc. |
| # Licensed under the Apache License, Version 2.0 (the "License") |
| |
| from ctypes import c_uint, c_ulong, Structure |
| from bcc import BPF |
| from time import sleep |
| import sys |
| from unittest import main, TestCase |
| |
| arg1 = sys.argv.pop(1) |
| arg2 = "" |
| if len(sys.argv) > 1: |
| arg2 = sys.argv.pop(1) |
| |
| |
| class TestBlkRequest(TestCase): |
| def setUp(self): |
| b = BPF(arg1, arg2, debug=0) |
| self.latency = b.get_table("latency", c_uint, c_ulong) |
| b.attach_kprobe(event="blk_start_request", |
| fn_name="probe_blk_start_request", pid=-1, cpu=0) |
| b.attach_kprobe(event="blk_update_request", |
| fn_name="probe_blk_update_request", pid=-1, cpu=0) |
| |
| def test_blk1(self): |
| import subprocess |
| import os |
| # use /opt instead of /tmp so that it hits a real disk |
| for i in range(0, 2): |
| subprocess.call(["dd", "if=/dev/zero", "of=/opt/trace3.txt", |
| "count=1024", "bs=4096"]) |
| subprocess.call(["sync"]) |
| os.unlink("/opt/trace3.txt") |
| for key, leaf in self.latency.items(): |
| print("latency %u:" % key.value, "count %u" % leaf.value) |
| sys.stdout.flush() |
| self.assertEqual(len(list(self.latency.keys())), len(self.latency)) |
| |
| if __name__ == "__main__": |
| main() |