.. | .. |
---|
8 | 8 | # dev=: show only thing related to specified device |
---|
9 | 9 | # debug: work with debug mode. It shows buffer status. |
---|
10 | 10 | |
---|
| 11 | +from __future__ import print_function |
---|
| 12 | + |
---|
11 | 13 | import os |
---|
12 | 14 | import sys |
---|
13 | 15 | |
---|
.. | .. |
---|
17 | 19 | from perf_trace_context import * |
---|
18 | 20 | from Core import * |
---|
19 | 21 | from Util import * |
---|
| 22 | +from functools import cmp_to_key |
---|
20 | 23 | |
---|
21 | 24 | all_event_list = []; # insert all tracepoint event related with this script |
---|
22 | 25 | irq_dic = {}; # key is cpu and value is a list which stacks irqs |
---|
.. | .. |
---|
61 | 64 | def print_transmit(hunk): |
---|
62 | 65 | if dev != 0 and hunk['dev'].find(dev) < 0: |
---|
63 | 66 | return |
---|
64 | | - print "%7s %5d %6d.%06dsec %12.3fmsec %12.3fmsec" % \ |
---|
| 67 | + print("%7s %5d %6d.%06dsec %12.3fmsec %12.3fmsec" % |
---|
65 | 68 | (hunk['dev'], hunk['len'], |
---|
66 | 69 | nsecs_secs(hunk['queue_t']), |
---|
67 | 70 | nsecs_nsecs(hunk['queue_t'])/1000, |
---|
68 | 71 | diff_msec(hunk['queue_t'], hunk['xmit_t']), |
---|
69 | | - diff_msec(hunk['xmit_t'], hunk['free_t'])) |
---|
| 72 | + diff_msec(hunk['xmit_t'], hunk['free_t']))) |
---|
70 | 73 | |
---|
71 | 74 | # Format for displaying rx packet processing |
---|
72 | 75 | PF_IRQ_ENTRY= " irq_entry(+%.3fmsec irq=%d:%s)" |
---|
.. | .. |
---|
98 | 101 | if show_hunk == 0: |
---|
99 | 102 | return |
---|
100 | 103 | |
---|
101 | | - print "%d.%06dsec cpu=%d" % \ |
---|
102 | | - (nsecs_secs(base_t), nsecs_nsecs(base_t)/1000, cpu) |
---|
| 104 | + print("%d.%06dsec cpu=%d" % |
---|
| 105 | + (nsecs_secs(base_t), nsecs_nsecs(base_t)/1000, cpu)) |
---|
103 | 106 | for i in range(len(irq_list)): |
---|
104 | | - print PF_IRQ_ENTRY % \ |
---|
| 107 | + print(PF_IRQ_ENTRY % |
---|
105 | 108 | (diff_msec(base_t, irq_list[i]['irq_ent_t']), |
---|
106 | | - irq_list[i]['irq'], irq_list[i]['name']) |
---|
107 | | - print PF_JOINT |
---|
| 109 | + irq_list[i]['irq'], irq_list[i]['name'])) |
---|
| 110 | + print(PF_JOINT) |
---|
108 | 111 | irq_event_list = irq_list[i]['event_list'] |
---|
109 | 112 | for j in range(len(irq_event_list)): |
---|
110 | 113 | irq_event = irq_event_list[j] |
---|
111 | 114 | if irq_event['event'] == 'netif_rx': |
---|
112 | | - print PF_NET_RX % \ |
---|
| 115 | + print(PF_NET_RX % |
---|
113 | 116 | (diff_msec(base_t, irq_event['time']), |
---|
114 | | - irq_event['skbaddr']) |
---|
115 | | - print PF_JOINT |
---|
116 | | - print PF_SOFT_ENTRY % \ |
---|
117 | | - diff_msec(base_t, hunk['sirq_ent_t']) |
---|
118 | | - print PF_JOINT |
---|
| 117 | + irq_event['skbaddr'])) |
---|
| 118 | + print(PF_JOINT) |
---|
| 119 | + print(PF_SOFT_ENTRY % |
---|
| 120 | + diff_msec(base_t, hunk['sirq_ent_t'])) |
---|
| 121 | + print(PF_JOINT) |
---|
119 | 122 | event_list = hunk['event_list'] |
---|
120 | 123 | for i in range(len(event_list)): |
---|
121 | 124 | event = event_list[i] |
---|
122 | 125 | if event['event_name'] == 'napi_poll': |
---|
123 | | - print PF_NAPI_POLL % \ |
---|
124 | | - (diff_msec(base_t, event['event_t']), event['dev']) |
---|
| 126 | + print(PF_NAPI_POLL % |
---|
| 127 | + (diff_msec(base_t, event['event_t']), |
---|
| 128 | + event['dev'])) |
---|
125 | 129 | if i == len(event_list) - 1: |
---|
126 | | - print "" |
---|
| 130 | + print("") |
---|
127 | 131 | else: |
---|
128 | | - print PF_JOINT |
---|
| 132 | + print(PF_JOINT) |
---|
129 | 133 | else: |
---|
130 | | - print PF_NET_RECV % \ |
---|
131 | | - (diff_msec(base_t, event['event_t']), event['skbaddr'], |
---|
132 | | - event['len']) |
---|
| 134 | + print(PF_NET_RECV % |
---|
| 135 | + (diff_msec(base_t, event['event_t']), |
---|
| 136 | + event['skbaddr'], |
---|
| 137 | + event['len'])) |
---|
133 | 138 | if 'comm' in event.keys(): |
---|
134 | | - print PF_WJOINT |
---|
135 | | - print PF_CPY_DGRAM % \ |
---|
| 139 | + print(PF_WJOINT) |
---|
| 140 | + print(PF_CPY_DGRAM % |
---|
136 | 141 | (diff_msec(base_t, event['comm_t']), |
---|
137 | | - event['pid'], event['comm']) |
---|
| 142 | + event['pid'], event['comm'])) |
---|
138 | 143 | elif 'handle' in event.keys(): |
---|
139 | | - print PF_WJOINT |
---|
| 144 | + print(PF_WJOINT) |
---|
140 | 145 | if event['handle'] == "kfree_skb": |
---|
141 | | - print PF_KFREE_SKB % \ |
---|
| 146 | + print(PF_KFREE_SKB % |
---|
142 | 147 | (diff_msec(base_t, |
---|
143 | 148 | event['comm_t']), |
---|
144 | | - event['location']) |
---|
| 149 | + event['location'])) |
---|
145 | 150 | elif event['handle'] == "consume_skb": |
---|
146 | | - print PF_CONS_SKB % \ |
---|
| 151 | + print(PF_CONS_SKB % |
---|
147 | 152 | diff_msec(base_t, |
---|
148 | | - event['comm_t']) |
---|
149 | | - print PF_JOINT |
---|
| 153 | + event['comm_t'])) |
---|
| 154 | + print(PF_JOINT) |
---|
150 | 155 | |
---|
151 | 156 | def trace_begin(): |
---|
152 | 157 | global show_tx |
---|
.. | .. |
---|
172 | 177 | |
---|
173 | 178 | def trace_end(): |
---|
174 | 179 | # order all events in time |
---|
175 | | - all_event_list.sort(lambda a,b :cmp(a[EINFO_IDX_TIME], |
---|
176 | | - b[EINFO_IDX_TIME])) |
---|
| 180 | + all_event_list.sort(key=cmp_to_key(lambda a,b :a[EINFO_IDX_TIME] < b[EINFO_IDX_TIME])) |
---|
177 | 181 | # process all events |
---|
178 | 182 | for i in range(len(all_event_list)): |
---|
179 | 183 | event_info = all_event_list[i] |
---|
.. | .. |
---|
210 | 214 | print_receive(receive_hunk_list[i]) |
---|
211 | 215 | # display transmit hunks |
---|
212 | 216 | if show_tx: |
---|
213 | | - print " dev len Qdisc " \ |
---|
214 | | - " netdevice free" |
---|
| 217 | + print(" dev len Qdisc " |
---|
| 218 | + " netdevice free") |
---|
215 | 219 | for i in range(len(tx_free_list)): |
---|
216 | 220 | print_transmit(tx_free_list[i]) |
---|
217 | 221 | if debug: |
---|
218 | | - print "debug buffer status" |
---|
219 | | - print "----------------------------" |
---|
220 | | - print "xmit Qdisc:remain:%d overflow:%d" % \ |
---|
221 | | - (len(tx_queue_list), of_count_tx_queue_list) |
---|
222 | | - print "xmit netdevice:remain:%d overflow:%d" % \ |
---|
223 | | - (len(tx_xmit_list), of_count_tx_xmit_list) |
---|
224 | | - print "receive:remain:%d overflow:%d" % \ |
---|
225 | | - (len(rx_skb_list), of_count_rx_skb_list) |
---|
| 222 | + print("debug buffer status") |
---|
| 223 | + print("----------------------------") |
---|
| 224 | + print("xmit Qdisc:remain:%d overflow:%d" % |
---|
| 225 | + (len(tx_queue_list), of_count_tx_queue_list)) |
---|
| 226 | + print("xmit netdevice:remain:%d overflow:%d" % |
---|
| 227 | + (len(tx_xmit_list), of_count_tx_xmit_list)) |
---|
| 228 | + print("receive:remain:%d overflow:%d" % |
---|
| 229 | + (len(rx_skb_list), of_count_rx_skb_list)) |
---|
226 | 230 | |
---|
227 | 231 | # called from perf, when it finds a correspoinding event |
---|
228 | 232 | def irq__softirq_entry(name, context, cpu, sec, nsec, pid, comm, callchain, vec): |
---|
.. | .. |
---|
254 | 258 | all_event_list.append(event_info) |
---|
255 | 259 | |
---|
256 | 260 | def napi__napi_poll(name, context, cpu, sec, nsec, pid, comm, callchain, napi, |
---|
257 | | - dev_name, work=None, budget=None): |
---|
| 261 | + dev_name, work=None, budget=None): |
---|
258 | 262 | event_info = (name, context, cpu, nsecs(sec, nsec), pid, comm, |
---|
259 | 263 | napi, dev_name, work, budget) |
---|
260 | 264 | all_event_list.append(event_info) |
---|
.. | .. |
---|
351 | 355 | if irq_list == [] or event_list == 0: |
---|
352 | 356 | return |
---|
353 | 357 | rec_data = {'sirq_ent_t':sirq_ent_t, 'sirq_ext_t':time, |
---|
354 | | - 'irq_list':irq_list, 'event_list':event_list} |
---|
| 358 | + 'irq_list':irq_list, 'event_list':event_list} |
---|
355 | 359 | # merge information realted to a NET_RX softirq |
---|
356 | 360 | receive_hunk_list.append(rec_data) |
---|
357 | 361 | |
---|
.. | .. |
---|
388 | 392 | skbaddr, skblen, dev_name) = event_info |
---|
389 | 393 | if cpu in net_rx_dic.keys(): |
---|
390 | 394 | rec_data = {'event_name':'netif_receive_skb', |
---|
391 | | - 'event_t':time, 'skbaddr':skbaddr, 'len':skblen} |
---|
| 395 | + 'event_t':time, 'skbaddr':skbaddr, 'len':skblen} |
---|
392 | 396 | event_list = net_rx_dic[cpu]['event_list'] |
---|
393 | 397 | event_list.append(rec_data) |
---|
394 | 398 | rx_skb_list.insert(0, rec_data) |
---|