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: Tony Jones <tonyj@suse.de> Cc: Sanagi Koki <sanagi.koki@jp.fujitsu.com> Link: http://lkml.kernel.org/r/20190222230619.17887-2-tonyj@suse.de Signed-off-by: Seeteena Thoufeek <s1seetee@linux.vnet.ibm.com> Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
parent
94816add00
commit
02b03ec383
|
@ -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'] + \
|
||||||
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):
|
||||||
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):
|
||||||
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():
|
||||||
|
|
||||||
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():
|
||||||
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):
|
||||||
|
|
Loading…
Reference in New Issue