2a24444f8f
Reading /proc/net/snmp6 on a machine with a lot of cpus is very expensive (can be ~88000 us). This is because ICMPV6MSG MIB uses 4096 bytes per cpu, and folding values for all possible cpus can read 16 Mbytes of memory (32MBytes on non x86 arches) ICMP messages are not considered as fast path on a typical server, and eventually few cpus handle them anyway. We can afford an atomic operation instead of using percpu data. This saves 4096 bytes per cpu and per network namespace. Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
29 lines
975 B
C
29 lines
975 B
C
#ifndef __NETNS_MIB_H__
|
|
#define __NETNS_MIB_H__
|
|
|
|
#include <net/snmp.h>
|
|
|
|
struct netns_mib {
|
|
DEFINE_SNMP_STAT(struct tcp_mib, tcp_statistics);
|
|
DEFINE_SNMP_STAT(struct ipstats_mib, ip_statistics);
|
|
DEFINE_SNMP_STAT(struct linux_mib, net_statistics);
|
|
DEFINE_SNMP_STAT(struct udp_mib, udp_statistics);
|
|
DEFINE_SNMP_STAT(struct udp_mib, udplite_statistics);
|
|
DEFINE_SNMP_STAT(struct icmp_mib, icmp_statistics);
|
|
DEFINE_SNMP_STAT_ATOMIC(struct icmpmsg_mib, icmpmsg_statistics);
|
|
|
|
#if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE)
|
|
struct proc_dir_entry *proc_net_devsnmp6;
|
|
DEFINE_SNMP_STAT(struct udp_mib, udp_stats_in6);
|
|
DEFINE_SNMP_STAT(struct udp_mib, udplite_stats_in6);
|
|
DEFINE_SNMP_STAT(struct ipstats_mib, ipv6_statistics);
|
|
DEFINE_SNMP_STAT(struct icmpv6_mib, icmpv6_statistics);
|
|
DEFINE_SNMP_STAT_ATOMIC(struct icmpv6msg_mib, icmpv6msg_statistics);
|
|
#endif
|
|
#ifdef CONFIG_XFRM_STATISTICS
|
|
DEFINE_SNMP_STAT(struct linux_xfrm_mib, xfrm_statistics);
|
|
#endif
|
|
};
|
|
|
|
#endif
|