--- /usr/libexec/perf-core/scripts/python/netdev-times.py 2014-06-07 21:33:33.000000000 -0400 +++ /home/wcohen/libexec/perf-core/scripts/python/netdev-times.py 2014-06-13 09:46:03.809403435 -0400 @@ -23,7 +23,7 @@ net_rx_dic = {}; # key is cpu and value include time of NET_RX softirq-entry # and a list which stacks receive receive_hunk_list = []; # a list which include a sequence of receive events -rx_skb_list = []; # received packet list for matching +rx_skb_list = {}; # received packet list for matching # skb_copy_datagram_iovec buffer_budget = 65536; # the budget of rx_skb_list, tx_queue_list and @@ -387,9 +387,9 @@ 'event_t':time, 'skbaddr':skbaddr, 'len':skblen} event_list = net_rx_dic[cpu]['event_list'] event_list.append(rec_data) - rx_skb_list.insert(0, rec_data) - if len(rx_skb_list) > buffer_budget: - rx_skb_list.pop() + if len(rx_skb_list) < buffer_budget: + rx_skb_list[skbaddr] = rec_data + else: of_count_rx_skb_list += 1 def handle_net_dev_queue(event_info): @@ -435,13 +435,11 @@ tx_free_list.append(skb) del tx_xmit_list[i] return - for i in range(len(rx_skb_list)): - rec_data = rx_skb_list[i] - if rec_data['skbaddr'] == skbaddr: - rec_data.update({'handle':"kfree_skb", - 'comm':comm, 'pid':pid, 'comm_t':time}) - del rx_skb_list[i] - return + if skbaddr in rx_skb_list.keys(): + rx_skb_list[skbaddr].update({'handle':"kfree_skb", + 'comm':comm, 'pid':pid, 'comm_t':time}) + del rx_skb_list[skbaddr] + return def handle_consume_skb(event_info): (name, context, cpu, time, pid, comm, skbaddr) = event_info @@ -455,10 +453,8 @@ def handle_skb_copy_datagram_iovec(event_info): (name, context, cpu, time, pid, comm, skbaddr, skblen) = event_info - for i in range(len(rx_skb_list)): - rec_data = rx_skb_list[i] - if skbaddr == rec_data['skbaddr']: - rec_data.update({'handle':"skb_copy_datagram_iovec", - 'comm':comm, 'pid':pid, 'comm_t':time}) - del rx_skb_list[i] - return + if skbaddr in rx_skb_list.keys(): + rx_skb_list[skbaddr].update({'handle':"skb_copy_datagram_iovec", + 'comm':comm, 'pid':pid, 'comm_t':time}) + del rx_skb_list[skbaddr] + return