mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-03 14:42:18 -04:00
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: David S. Miller <davem@davemloft.net>
This commit is contained in:
@@ -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)
|
||||
|
||||
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);
|
||||
#if BITS_PER_LONG==32
|
||||
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,
|
||||
}
|
||||
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 res = 0;
|
||||
|
||||
@@ -72,6 +72,7 @@ bool mptcp_mib_alloc(struct net *net)
|
||||
|
||||
void mptcp_seq_show(struct seq_file *seq)
|
||||
{
|
||||
unsigned long sum[ARRAY_SIZE(mptcp_snmp_list) - 1];
|
||||
struct net *net = seq->private;
|
||||
int i;
|
||||
|
||||
@@ -81,17 +82,13 @@ void mptcp_seq_show(struct seq_file *seq)
|
||||
|
||||
seq_puts(seq, "\nMPTcpExt:");
|
||||
|
||||
if (!net->mib.mptcp_statistics) {
|
||||
for (i = 0; mptcp_snmp_list[i].name; i++)
|
||||
seq_puts(seq, " 0");
|
||||
|
||||
seq_putc(seq, '\n');
|
||||
return;
|
||||
}
|
||||
memset(sum, 0, sizeof(sum));
|
||||
if (net->mib.mptcp_statistics)
|
||||
snmp_get_cpu_field_batch(sum, mptcp_snmp_list,
|
||||
net->mib.mptcp_statistics);
|
||||
|
||||
for (i = 0; mptcp_snmp_list[i].name; i++)
|
||||
seq_printf(seq, " %lu",
|
||||
snmp_fold_field(net->mib.mptcp_statistics,
|
||||
mptcp_snmp_list[i].entry));
|
||||
seq_printf(seq, " %lu", sum[i]);
|
||||
|
||||
seq_putc(seq, '\n');
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user