Commit b0517302 authored by David S. Miller's avatar David S. Miller

Merge branch 'snmp-optimizations'

Eric Dumazet says:

====================
net: snmp: minor optimizations

Fetching many SNMP counters on hosts with large number of cpus
takes a lot of time. mptcp still uses the old non-batched
fashion which is not cache friendly.
====================
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parents dee3b2d0 acbd0c81
...@@ -291,7 +291,11 @@ void ip_send_unicast_reply(struct sock *sk, struct sk_buff *skb, ...@@ -291,7 +291,11 @@ void ip_send_unicast_reply(struct sock *sk, struct sk_buff *skb,
#define NET_ADD_STATS(net, field, adnd) SNMP_ADD_STATS((net)->mib.net_statistics, field, adnd) #define NET_ADD_STATS(net, field, adnd) SNMP_ADD_STATS((net)->mib.net_statistics, field, adnd)
#define __NET_ADD_STATS(net, field, adnd) __SNMP_ADD_STATS((net)->mib.net_statistics, field, adnd) #define __NET_ADD_STATS(net, field, adnd) __SNMP_ADD_STATS((net)->mib.net_statistics, field, adnd)
u64 snmp_get_cpu_field(void __percpu *mib, int cpu, int offct); static inline u64 snmp_get_cpu_field(void __percpu *mib, int cpu, int offt)
{
return *(((unsigned long *)per_cpu_ptr(mib, cpu)) + offt);
}
unsigned long snmp_fold_field(void __percpu *mib, int offt); unsigned long snmp_fold_field(void __percpu *mib, int offt);
#if BITS_PER_LONG==32 #if BITS_PER_LONG==32
u64 snmp_get_cpu_field64(void __percpu *mib, int cpu, int offct, u64 snmp_get_cpu_field64(void __percpu *mib, int cpu, int offct,
......
...@@ -1662,12 +1662,6 @@ int inet_ctl_sock_create(struct sock **sk, unsigned short family, ...@@ -1662,12 +1662,6 @@ int inet_ctl_sock_create(struct sock **sk, unsigned short family,
} }
EXPORT_SYMBOL_GPL(inet_ctl_sock_create); EXPORT_SYMBOL_GPL(inet_ctl_sock_create);
u64 snmp_get_cpu_field(void __percpu *mib, int cpu, int offt)
{
return *(((unsigned long *)per_cpu_ptr(mib, cpu)) + offt);
}
EXPORT_SYMBOL_GPL(snmp_get_cpu_field);
unsigned long snmp_fold_field(void __percpu *mib, int offt) unsigned long snmp_fold_field(void __percpu *mib, int offt)
{ {
unsigned long res = 0; unsigned long res = 0;
......
...@@ -72,6 +72,7 @@ bool mptcp_mib_alloc(struct net *net) ...@@ -72,6 +72,7 @@ bool mptcp_mib_alloc(struct net *net)
void mptcp_seq_show(struct seq_file *seq) void mptcp_seq_show(struct seq_file *seq)
{ {
unsigned long sum[ARRAY_SIZE(mptcp_snmp_list) - 1];
struct net *net = seq->private; struct net *net = seq->private;
int i; int i;
...@@ -81,17 +82,13 @@ void mptcp_seq_show(struct seq_file *seq) ...@@ -81,17 +82,13 @@ void mptcp_seq_show(struct seq_file *seq)
seq_puts(seq, "\nMPTcpExt:"); seq_puts(seq, "\nMPTcpExt:");
if (!net->mib.mptcp_statistics) { memset(sum, 0, sizeof(sum));
for (i = 0; mptcp_snmp_list[i].name; i++) if (net->mib.mptcp_statistics)
seq_puts(seq, " 0"); snmp_get_cpu_field_batch(sum, mptcp_snmp_list,
net->mib.mptcp_statistics);
seq_putc(seq, '\n');
return;
}
for (i = 0; mptcp_snmp_list[i].name; i++) for (i = 0; mptcp_snmp_list[i].name; i++)
seq_printf(seq, " %lu", seq_printf(seq, " %lu", sum[i]);
snmp_fold_field(net->mib.mptcp_statistics,
mptcp_snmp_list[i].entry));
seq_putc(seq, '\n'); seq_putc(seq, '\n');
} }
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