xref: /aosp_15_r20/external/bcc/tests/python/test_trace3.py (revision 387f9dfdfa2baef462e92476d413c7bc2470293e)
1*387f9dfdSAndroid Build Coastguard Worker#!/usr/bin/env python3
2*387f9dfdSAndroid Build Coastguard Worker# Copyright (c) PLUMgrid, Inc.
3*387f9dfdSAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License")
4*387f9dfdSAndroid Build Coastguard Worker
5*387f9dfdSAndroid Build Coastguard Workerfrom ctypes import c_uint, c_ulong, Structure
6*387f9dfdSAndroid Build Coastguard Workerfrom bcc import BPF
7*387f9dfdSAndroid Build Coastguard Workerfrom time import sleep
8*387f9dfdSAndroid Build Coastguard Workerimport sys
9*387f9dfdSAndroid Build Coastguard Workerfrom unittest import main, TestCase
10*387f9dfdSAndroid Build Coastguard Workerfrom utils import mayFail
11*387f9dfdSAndroid Build Coastguard Worker
12*387f9dfdSAndroid Build Coastguard Workerarg1 = sys.argv.pop(1).encode()
13*387f9dfdSAndroid Build Coastguard Workerarg2 = b""
14*387f9dfdSAndroid Build Coastguard Workerif len(sys.argv) > 1:
15*387f9dfdSAndroid Build Coastguard Worker  arg2 = sys.argv.pop(1)
16*387f9dfdSAndroid Build Coastguard Worker
17*387f9dfdSAndroid Build Coastguard Worker
18*387f9dfdSAndroid Build Coastguard Workerclass TestBlkRequest(TestCase):
19*387f9dfdSAndroid Build Coastguard Worker    def setUp(self):
20*387f9dfdSAndroid Build Coastguard Worker        b = BPF(arg1, arg2, debug=0)
21*387f9dfdSAndroid Build Coastguard Worker        self.latency = b.get_table(b"latency", c_uint, c_ulong)
22*387f9dfdSAndroid Build Coastguard Worker        if BPF.get_kprobe_functions(b"blk_start_request"):
23*387f9dfdSAndroid Build Coastguard Worker            b.attach_kprobe(event=b"blk_start_request",
24*387f9dfdSAndroid Build Coastguard Worker                    fn_name=b"probe_blk_start_request")
25*387f9dfdSAndroid Build Coastguard Worker        b.attach_kprobe(event=b"blk_mq_start_request",
26*387f9dfdSAndroid Build Coastguard Worker                fn_name=b"probe_blk_start_request")
27*387f9dfdSAndroid Build Coastguard Worker        b.attach_kprobe(event=b"blk_update_request",
28*387f9dfdSAndroid Build Coastguard Worker                fn_name=b"probe_blk_update_request")
29*387f9dfdSAndroid Build Coastguard Worker
30*387f9dfdSAndroid Build Coastguard Worker    def test_blk1(self):
31*387f9dfdSAndroid Build Coastguard Worker        import subprocess
32*387f9dfdSAndroid Build Coastguard Worker        import os
33*387f9dfdSAndroid Build Coastguard Worker        # use /opt instead of /tmp so that it hits a real disk
34*387f9dfdSAndroid Build Coastguard Worker        for i in range(0, 2):
35*387f9dfdSAndroid Build Coastguard Worker            subprocess.call(["dd", "if=/dev/zero", "of=/opt/trace3.txt",
36*387f9dfdSAndroid Build Coastguard Worker                             "count=1024", "bs=4096"])
37*387f9dfdSAndroid Build Coastguard Worker            subprocess.call(["sync"])
38*387f9dfdSAndroid Build Coastguard Worker        os.unlink("/opt/trace3.txt")
39*387f9dfdSAndroid Build Coastguard Worker        for key, leaf in self.latency.items():
40*387f9dfdSAndroid Build Coastguard Worker            print("latency %u:" % key.value, "count %u" % leaf.value)
41*387f9dfdSAndroid Build Coastguard Worker        sys.stdout.flush()
42*387f9dfdSAndroid Build Coastguard Worker        self.assertEqual(len(list(self.latency.keys())), len(self.latency))
43*387f9dfdSAndroid Build Coastguard Worker
44*387f9dfdSAndroid Build Coastguard Workerif __name__ == "__main__":
45*387f9dfdSAndroid Build Coastguard Worker    main()
46