blob: a8bdd724f7e192975424e8ef4ce3d7950255d468 [file] [log] [blame]
#!/usr/bin/env python3
# Copyright (C) 2023 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License a
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
from python.generators.diff_tests.testing import Path, DataPath, Metric
from python.generators.diff_tests.testing import Csv, Json, TextProto
from python.generators.diff_tests.testing import DiffTestBlueprint
from python.generators.diff_tests.testing import TestSuite
class Network(TestSuite):
# Network performance
def test_netif_receive_skb(self):
return DiffTestBlueprint(
trace=Path('netif_receive_skb.textproto'),
query="""
SELECT
ts,
REPLACE(name, " Received KB", "") AS dev,
EXTRACT_ARG(arg_set_id, 'cpu') AS cpu,
EXTRACT_ARG(arg_set_id, 'len') AS len
FROM
counter AS c
LEFT JOIN
counter_track AS t
ON c.track_id = t.id
WHERE
name GLOB "* Received KB"
ORDER BY ts;
""",
out=Csv("""
"ts","dev","cpu","len"
10000,"rmnet0",0,1000
10000,"rmnet0",1,1000
10010,"rmnet0",0,1000
10011,"rmnet0",1,1000
12000,"wlan",4,1300
"""))
def test_net_dev_xmit(self):
return DiffTestBlueprint(
trace=Path('net_dev_xmit.textproto'),
query="""
SELECT
ts,
REPLACE(name, " Transmitted KB", "") AS dev,
EXTRACT_ARG(arg_set_id, 'cpu') AS cpu,
EXTRACT_ARG(arg_set_id, 'len') AS len
FROM
counter AS c
LEFT JOIN
counter_track AS t
ON c.track_id = t.id
WHERE
name GLOB "* Transmitted KB"
ORDER BY ts;
""",
out=Csv("""
"ts","dev","cpu","len"
10000,"rmnet0",0,1000
10000,"rmnet0",1,1000
10010,"rmnet0",0,1000
12000,"wlan0",4,1300
"""))
def test_netperf_metric(self):
return DiffTestBlueprint(
trace=Path('netperf_metric.textproto'),
query=Metric('android_netperf'),
out=Path('netperf_metric.out'))
def test_inet_sock_set_state(self):
return DiffTestBlueprint(
trace=Path('inet_sock_set_state.textproto'),
query="""
SELECT
ts,
s.name,
dur,
t.name
FROM
slice AS s
LEFT JOIN track AS t
ON s.track_id = t.id
WHERE
t.name GLOB "TCP stream#*"
ORDER BY ts;
""",
out=Csv("""
"ts","name","dur","name"
10000000,"TCP_SYN_SENT(pid=123)",100000000,"TCP stream#1"
110000000,"TCP_ESTABLISHED(sport=56789,dport=5001)",500000000,"TCP stream#1"
610000000,"TCP_CLOSE_WAIT",-1,"TCP stream#1"
710000000,"TCP_SYN_SENT(pid=567)",10000000,"TCP stream#2"
720000000,"TCP_ESTABLISHED(sport=56790,dport=5002)",300000000,"TCP stream#2"
1020000000,"TCP_CLOSE_WAIT",-1,"TCP stream#2"
"""))
def test_tcp_retransmit_skb(self):
return DiffTestBlueprint(
trace=TextProto(r"""
packet {
ftrace_events {
cpu: 1
event {
timestamp: 110000000
pid: 234
tcp_retransmit_skb {
daddr: 19216801
saddr: 127001
dport: 5001
sport: 56789
state: 1
skaddr: 77889900
}
}
}
}
packet {
ftrace_events {
cpu: 1
event {
timestamp: 720000000
pid: 234
tcp_retransmit_skb {
daddr: 0
saddr: 0
dport: 5002
sport: 56790
state: 2
skaddr: 33445566
}
}
}
}
"""),
query="""
SELECT
ts,
s.name,
dur
FROM
slice AS s
LEFT JOIN track AS t
ON s.track_id = t.id
WHERE
t.name = "TCP Retransmit Skb"
ORDER BY ts;
""",
out=Csv("""
"ts","name","dur"
110000000,"sport=56789,dport=5001",0
720000000,"sport=56790,dport=5002",0
"""))
def test_napi_gro_receive(self):
return DiffTestBlueprint(
trace=Path('napi_gro_receive.textproto'),
query="""
SELECT
ts,
s.name,
dur,
cat,
t.name,
EXTRACT_ARG(arg_set_id, 'ret') AS ret,
EXTRACT_ARG(arg_set_id, 'len') AS len
FROM
slice AS s
LEFT JOIN
track AS t
ON s.track_id = t.id
WHERE
t.name GLOB "Napi Gro Cpu *"
ORDER BY ts;
""",
out=Csv("""
"ts","name","dur","cat","name","ret","len"
10000,"rmnet0",20,"napi_gro","Napi Gro Cpu 2",2,1000
20000,"rmnet0",20,"napi_gro","Napi Gro Cpu 2",1,1000
30000,"wlan",20,"napi_gro","Napi Gro Cpu 4",3,500
"""))
def test_kfree_skb(self):
return DiffTestBlueprint(
trace=TextProto(r"""
packet {
ftrace_events {
cpu: 2
event {
timestamp: 10000
pid: 200
kfree_skb {
protocol: 2048
}
}
}
}
packet {
ftrace_events {
cpu: 2
event {
timestamp: 10020
pid: 300
kfree_skb {
protocol: 34525
}
}
}
}
packet {
ftrace_events {
cpu: 2
event {
timestamp: 20000
pid: 200
kfree_skb {
protocol: 1536
}
}
}
}
packet {
ftrace_events {
cpu: 2
event {
timestamp: 20020
pid: 300
kfree_skb {
protocol: 2048
}
}
}
}
"""),
query="""
SELECT
ts,
value,
EXTRACT_ARG(arg_set_id, 'protocol') AS prot
FROM
counter AS c
LEFT JOIN
counter_track AS t
ON c.track_id = t.id
WHERE
name GLOB "Kfree Skb IP Prot"
ORDER BY ts;
""",
out=Csv("""
"ts","value","prot"
10000,1.000000,"IP"
10020,2.000000,"IPV6"
20020,3.000000,"IP"
"""))