Commit 02b03ec3 authored by Tony Jones's avatar Tony Jones Committed by Arnaldo Carvalho de Melo

perf script python: Add Python3 support to netdev-times.py

Support both Python2 and Python3 in the netdev-times.py script

There may be differences in the ordering of output lines due to
differences in dictionary ordering etc.  However the format within lines
should be unchanged.

The use of 'from __future__' implies the minimum supported Python2
version is now v2.6.
Signed-off-by: default avatarTony Jones <tonyj@suse.de>
Cc: Sanagi Koki <sanagi.koki@jp.fujitsu.com>
Link: http://lkml.kernel.org/r/20190222230619.17887-2-tonyj@suse.deSigned-off-by: default avatarSeeteena Thoufeek <s1seetee@linux.vnet.ibm.com>
Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
parent 94816add
...@@ -8,6 +8,8 @@ ...@@ -8,6 +8,8 @@
# dev=: show only thing related to specified device # dev=: show only thing related to specified device
# debug: work with debug mode. It shows buffer status. # debug: work with debug mode. It shows buffer status.
from __future__ import print_function
import os import os
import sys import sys
...@@ -17,6 +19,7 @@ sys.path.append(os.environ['PERF_EXEC_PATH'] + \ ...@@ -17,6 +19,7 @@ sys.path.append(os.environ['PERF_EXEC_PATH'] + \
from perf_trace_context import * from perf_trace_context import *
from Core import * from Core import *
from Util import * from Util import *
from functools import cmp_to_key
all_event_list = []; # insert all tracepoint event related with this script all_event_list = []; # insert all tracepoint event related with this script
irq_dic = {}; # key is cpu and value is a list which stacks irqs irq_dic = {}; # key is cpu and value is a list which stacks irqs
...@@ -61,12 +64,12 @@ def diff_msec(src, dst): ...@@ -61,12 +64,12 @@ def diff_msec(src, dst):
def print_transmit(hunk): def print_transmit(hunk):
if dev != 0 and hunk['dev'].find(dev) < 0: if dev != 0 and hunk['dev'].find(dev) < 0:
return return
print "%7s %5d %6d.%06dsec %12.3fmsec %12.3fmsec" % \ print("%7s %5d %6d.%06dsec %12.3fmsec %12.3fmsec" %
(hunk['dev'], hunk['len'], (hunk['dev'], hunk['len'],
nsecs_secs(hunk['queue_t']), nsecs_secs(hunk['queue_t']),
nsecs_nsecs(hunk['queue_t'])/1000, nsecs_nsecs(hunk['queue_t'])/1000,
diff_msec(hunk['queue_t'], hunk['xmit_t']), diff_msec(hunk['queue_t'], hunk['xmit_t']),
diff_msec(hunk['xmit_t'], hunk['free_t'])) diff_msec(hunk['xmit_t'], hunk['free_t'])))
# Format for displaying rx packet processing # Format for displaying rx packet processing
PF_IRQ_ENTRY= " irq_entry(+%.3fmsec irq=%d:%s)" PF_IRQ_ENTRY= " irq_entry(+%.3fmsec irq=%d:%s)"
...@@ -98,55 +101,55 @@ def print_receive(hunk): ...@@ -98,55 +101,55 @@ def print_receive(hunk):
if show_hunk == 0: if show_hunk == 0:
return return
print "%d.%06dsec cpu=%d" % \ print("%d.%06dsec cpu=%d" %
(nsecs_secs(base_t), nsecs_nsecs(base_t)/1000, cpu) (nsecs_secs(base_t), nsecs_nsecs(base_t)/1000, cpu))
for i in range(len(irq_list)): for i in range(len(irq_list)):
print PF_IRQ_ENTRY % \ print(PF_IRQ_ENTRY %
(diff_msec(base_t, irq_list[i]['irq_ent_t']), (diff_msec(base_t, irq_list[i]['irq_ent_t']),
irq_list[i]['irq'], irq_list[i]['name']) irq_list[i]['irq'], irq_list[i]['name']))
print PF_JOINT print(PF_JOINT)
irq_event_list = irq_list[i]['event_list'] irq_event_list = irq_list[i]['event_list']
for j in range(len(irq_event_list)): for j in range(len(irq_event_list)):
irq_event = irq_event_list[j] irq_event = irq_event_list[j]
if irq_event['event'] == 'netif_rx': if irq_event['event'] == 'netif_rx':
print PF_NET_RX % \ print(PF_NET_RX %
(diff_msec(base_t, irq_event['time']), (diff_msec(base_t, irq_event['time']),
irq_event['skbaddr']) irq_event['skbaddr']))
print PF_JOINT print(PF_JOINT)
print PF_SOFT_ENTRY % \ print(PF_SOFT_ENTRY %
diff_msec(base_t, hunk['sirq_ent_t']) diff_msec(base_t, hunk['sirq_ent_t']))
print PF_JOINT print(PF_JOINT)
event_list = hunk['event_list'] event_list = hunk['event_list']
for i in range(len(event_list)): for i in range(len(event_list)):
event = event_list[i] event = event_list[i]
if event['event_name'] == 'napi_poll': if event['event_name'] == 'napi_poll':
print PF_NAPI_POLL % \ print(PF_NAPI_POLL %
(diff_msec(base_t, event['event_t']), event['dev']) (diff_msec(base_t, event['event_t']), event['dev']))
if i == len(event_list) - 1: if i == len(event_list) - 1:
print "" print("")
else: else:
print PF_JOINT print(PF_JOINT)
else: else:
print PF_NET_RECV % \ print(PF_NET_RECV %
(diff_msec(base_t, event['event_t']), event['skbaddr'], (diff_msec(base_t, event['event_t']), event['skbaddr'],
event['len']) event['len']))
if 'comm' in event.keys(): if 'comm' in event.keys():
print PF_WJOINT print(PF_WJOINT)
print PF_CPY_DGRAM % \ print(PF_CPY_DGRAM %
(diff_msec(base_t, event['comm_t']), (diff_msec(base_t, event['comm_t']),
event['pid'], event['comm']) event['pid'], event['comm']))
elif 'handle' in event.keys(): elif 'handle' in event.keys():
print PF_WJOINT print(PF_WJOINT)
if event['handle'] == "kfree_skb": if event['handle'] == "kfree_skb":
print PF_KFREE_SKB % \ print(PF_KFREE_SKB %
(diff_msec(base_t, (diff_msec(base_t,
event['comm_t']), event['comm_t']),
event['location']) event['location']))
elif event['handle'] == "consume_skb": elif event['handle'] == "consume_skb":
print PF_CONS_SKB % \ print(PF_CONS_SKB %
diff_msec(base_t, diff_msec(base_t,
event['comm_t']) event['comm_t']))
print PF_JOINT print(PF_JOINT)
def trace_begin(): def trace_begin():
global show_tx global show_tx
...@@ -172,8 +175,7 @@ def trace_begin(): ...@@ -172,8 +175,7 @@ def trace_begin():
def trace_end(): def trace_end():
# order all events in time # order all events in time
all_event_list.sort(lambda a,b :cmp(a[EINFO_IDX_TIME], all_event_list.sort(key=cmp_to_key(lambda a,b :a[EINFO_IDX_TIME] < b[EINFO_IDX_TIME]))
b[EINFO_IDX_TIME]))
# process all events # process all events
for i in range(len(all_event_list)): for i in range(len(all_event_list)):
event_info = all_event_list[i] event_info = all_event_list[i]
...@@ -210,19 +212,19 @@ def trace_end(): ...@@ -210,19 +212,19 @@ def trace_end():
print_receive(receive_hunk_list[i]) print_receive(receive_hunk_list[i])
# display transmit hunks # display transmit hunks
if show_tx: if show_tx:
print " dev len Qdisc " \ print(" dev len Qdisc "
" netdevice free" " netdevice free")
for i in range(len(tx_free_list)): for i in range(len(tx_free_list)):
print_transmit(tx_free_list[i]) print_transmit(tx_free_list[i])
if debug: if debug:
print "debug buffer status" print("debug buffer status")
print "----------------------------" print("----------------------------")
print "xmit Qdisc:remain:%d overflow:%d" % \ print("xmit Qdisc:remain:%d overflow:%d" %
(len(tx_queue_list), of_count_tx_queue_list) (len(tx_queue_list), of_count_tx_queue_list))
print "xmit netdevice:remain:%d overflow:%d" % \ print("xmit netdevice:remain:%d overflow:%d" %
(len(tx_xmit_list), of_count_tx_xmit_list) (len(tx_xmit_list), of_count_tx_xmit_list))
print "receive:remain:%d overflow:%d" % \ print("receive:remain:%d overflow:%d" %
(len(rx_skb_list), of_count_rx_skb_list) (len(rx_skb_list), of_count_rx_skb_list))
# called from perf, when it finds a correspoinding event # called from perf, when it finds a correspoinding event
def irq__softirq_entry(name, context, cpu, sec, nsec, pid, comm, callchain, vec): def irq__softirq_entry(name, context, cpu, sec, nsec, pid, comm, callchain, vec):
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment