net: openvswitch: use this_cpu_ptr per-cpu helper
Subsystems (3)
PATCH 4/9 net: openvswitch: use this_cpu_ptr per-cpu helper
From: Shan Wei <[email protected]>
no change vs v1.
Lots of drivers use this kind to read/write per-cpu variable. stats = this_cpu_ptr(dp->stats_percpu); u64_stats_update_begin(&stats->sync);
stats->tx_packets++;u64_stats_update_begin(&stats->sync);
--- net/openvswitch/datapath.c | 4 ++-- net/openvswitch/vport.c | 5 ++--- 2 files changed, 4 insertions(+), 5 deletions(-)
net/openvswitch/datapath.c +2 -2
@@ -208,7 +208,7 @@ void ovs_dp_process_received_packet(struct vport *p, struct sk_buff *skb)int error;int key_len; - stats =per_cpu_ptr (dp->stats_percpu,smp_processor_id ()); + stats =this_cpu_ptr (dp->stats_percpu);/* Extract flow from 'skb' into 'key'. */ error =ovs_flow_extract (skb, p->port_no, &key, &key_len);
@@ -282,7 +282,7 @@ int ovs_dp_upcall(struct datapath *dp, struct sk_buff *skb,return 0 ; err: - stats =per_cpu_ptr (dp->stats_percpu,smp_processor_id ()); + stats =this_cpu_ptr (dp->stats_percpu);u64_stats_update_begin (&stats->sync); stats->n_lost++;
net/openvswitch/vport.c +2 -3
@@ -333,8 +333,7 @@ void ovs_vport_receive(struct vport *vport, struct sk_buff *skb) {struct vport_percpu_stats *stats; - stats =per_cpu_ptr (vport->percpu_stats,smp_processor_id ()); - + stats =this_cpu_ptr (vport->percpu_stats);u64_stats_update_begin (&stats->sync); stats->rx_packets++; stats->rx_bytes += skb->len;
@@ -359,7 +358,7 @@ int ovs_vport_send(struct vport *vport, struct sk_buff *skb)if (likely (sent)) {struct vport_percpu_stats *stats; - stats =per_cpu_ptr (vport->percpu_stats,smp_processor_id ()); + stats =this_cpu_ptr (vport->percpu_stats);u64_stats_update_begin (&stats->sync); stats->tx_packets++;
Signature · 1 line
1.7.1
Quoted 34 lines · Shan Wei
+++
b/net/openvswitch/datapath.cnet/openvswitch/datapath.c +2
-2@@ -208,7 +208,7 @@ void ovs_dp_process_received_packet(struct vport *p, struct sk_buff *skb)int error;int key_len; - stats =per_cpu_ptr (dp->stats_percpu,smp_processor_id ()); + stats =this_cpu_ptr (dp->stats_percpu);/* Extract flow from 'skb' into 'key'. */ error =ovs_flow_extract (skb, p->port_no, &key, &key_len);@@ -282,7 +282,7 @@ int ovs_dp_upcall(struct datapath *dp, struct sk_buff *skb,return 0 ; err: - stats =per_cpu_ptr (dp->stats_percpu,smp_processor_id ()); + stats =this_cpu_ptr (dp->stats_percpu);u64_stats_update_begin (&stats->sync); stats->n_lost++;net/openvswitch/vport.c +1
-2@@ -333,8 +333,7 @@ void ovs_vport_receive(struct vport *vport, struct sk_buff *skb) {struct vport_percpu_stats *stats; - stats =per_cpu_ptr (vport->percpu_stats,smp_processor_id ()); - + stats =this_cpu_ptr (vport->percpu_stats);u64_stats_update_begin (&stats->sync); stats->rx_packets++; stats->rx_bytes += skb->len;
net/openvswitch/vport.c int ovs_vport_send(struct vport *vport, struct sk_buff *skb) · line 364
Quoted 8 lines
net/openvswitch/vport.c +1
-1@@ -359,7 +358,7 @@ int ovs_vport_send(struct vport *vport, struct sk_buff *skb)if (likely (sent)) {struct vport_percpu_stats *stats; - stats =per_cpu_ptr (vport->percpu_stats,smp_processor_id ()); + stats =this_cpu_ptr (vport->percpu_stats);u64_stats_update_begin (&stats->sync); stats->tx_packets++;
Use this_cpu_inc(vport->percpu_stats->packets) here?
Christoph Lameter said, at 2012/11/3 1:46:
Quoted 4 lines
net/openvswitch/vport.c int ovs_vport_send(struct vport *vport, struct sk_buff *skb) · line 364
Quoted 2 lines
net/openvswitch/vport.c +0
-0u64_stats_update_begin (&stats->sync); stats->tx_packets++;Use
this_cpu_inc(vport->percpu_stats->packets)here?
Lots of network drivers use u64_stats_sync infrastructure for statistics on 32bit or 64bit hosts no matter how many members in per-cpu variable.
keep them be consistent, so no plan to change them.
Thanks
Quoted 7 lines · Shan Wei
Christoph Lameter said, at 2012/11/3 1:46:
Quoted 4 lines
net/openvswitch/vport.c int ovs_vport_send(struct vport *vport, struct sk_buff *skb) · line 364
Quoted 2 lines
net/openvswitch/vport.c +0
-0u64_stats_update_begin (&stats->sync); stats->tx_packets++;Use
this_cpu_inc(vport->percpu_stats->packets)here?Lots of network drivers use
u64_stats_syncinfrastructure for statistics
So they would all have an advantage from the patch.
Christoph Lameter said, at 2012/11/9 1:18:
Quoted 11 lines · Shan Wei
Quoted 8 lines
Christoph Lameter said, at 2012/11/3 1:46:
Quoted 4 lines
net/openvswitch/vport.c int ovs_vport_send(struct vport *vport, struct sk_buff *skb) · line 364
Quoted 2 lines
net/openvswitch/vport.c +0
-0u64_stats_update_begin (&stats->sync); stats->tx_packets++;Use
this_cpu_inc(vport->percpu_stats->packets)here?Lots of network drivers use
u64_stats_syncinfrastructure for statisticsSo they would all have an advantage from the patch.
I will try to do the optimizing next time in another patchset which not included in this series patchset.
I will submit v3 version of this series after testing today.
Thanks