Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 95766fff authored by Hideo Aoki's avatar Hideo Aoki Committed by David S. Miller
Browse files

[UDP]: Add memory accounting.

parent 3ab224be
Loading
Loading
Loading
Loading
+27 −0
Original line number Diff line number Diff line
@@ -446,6 +446,33 @@ tcp_dma_copybreak - INTEGER
	and CONFIG_NET_DMA is enabled.
	Default: 4096

UDP variables:

udp_mem - vector of 3 INTEGERs: min, pressure, max
	Number of pages allowed for queueing by all UDP sockets.

	min: Below this number of pages UDP is not bothered about its
	memory appetite. When amount of memory allocated by UDP exceeds
	this number, UDP starts to moderate memory usage.

	pressure: This value was introduced to follow format of tcp_mem.

	max: Number of pages allowed for queueing by all UDP sockets.

	Default is calculated at boot time from amount of available memory.

udp_rmem_min - INTEGER
	Minimal size of receive buffer used by UDP sockets in moderation.
	Each UDP socket is able to use the size for receiving data, even if
	total pages of UDP sockets exceed udp_mem pressure. The unit is byte.
	Default: 4096

udp_wmem_min - INTEGER
	Minimal size of send buffer used by UDP sockets in moderation.
	Each UDP socket is able to use the size for sending data, even if
	total pages of UDP sockets exceed udp_mem pressure. The unit is byte.
	Default: 4096

CIPSOv4 Variables:

cipso_cache_enable - BOOLEAN
+9 −0
Original line number Diff line number Diff line
@@ -65,6 +65,13 @@ extern rwlock_t udp_hash_lock;

extern struct proto udp_prot;

extern atomic_t udp_memory_allocated;

/* sysctl variables for udp */
extern int sysctl_udp_mem[3];
extern int sysctl_udp_rmem_min;
extern int sysctl_udp_wmem_min;

struct sk_buff;

/*
@@ -198,4 +205,6 @@ extern void udp_proc_unregister(struct udp_seq_afinfo *afinfo);
extern int  udp4_proc_init(void);
extern void udp4_proc_exit(void);
#endif

extern void udp_init(void);
#endif	/* _UDP_H */
+5 −0
Original line number Diff line number Diff line
@@ -139,6 +139,8 @@ void inet_sock_destruct(struct sock *sk)
	__skb_queue_purge(&sk->sk_receive_queue);
	__skb_queue_purge(&sk->sk_error_queue);

	sk_mem_reclaim(sk);

	if (sk->sk_type == SOCK_STREAM && sk->sk_state != TCP_CLOSE) {
		printk("Attempt to release TCP socket in state %d %p\n",
		       sk->sk_state, sk);
@@ -1417,6 +1419,9 @@ static int __init inet_init(void)
	/* Setup TCP slab cache for open requests. */
	tcp_init();

	/* Setup UDP memory threshold */
	udp_init();

	/* Add UDP-Lite (RFC 3828) */
	udplite4_register();

+2 −1
Original line number Diff line number Diff line
@@ -56,7 +56,8 @@ static int sockstat_seq_show(struct seq_file *seq, void *v)
		   sock_prot_inuse(&tcp_prot), atomic_read(&tcp_orphan_count),
		   tcp_death_row.tw_count, atomic_read(&tcp_sockets_allocated),
		   atomic_read(&tcp_memory_allocated));
	seq_printf(seq, "UDP: inuse %d\n", sock_prot_inuse(&udp_prot));
	seq_printf(seq, "UDP: inuse %d mem %d\n", sock_prot_inuse(&udp_prot),
		   atomic_read(&udp_memory_allocated));
	seq_printf(seq, "UDPLITE: inuse %d\n", sock_prot_inuse(&udplite_prot));
	seq_printf(seq, "RAW: inuse %d\n", sock_prot_inuse(&raw_prot));
	seq_printf(seq,  "FRAG: inuse %d memory %d\n",
+31 −0
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@
#include <net/ip.h>
#include <net/route.h>
#include <net/tcp.h>
#include <net/udp.h>
#include <net/cipso_ipv4.h>
#include <net/inet_frag.h>

@@ -812,6 +813,36 @@ static struct ctl_table ipv4_table[] = {
		.mode		= 0644,
		.proc_handler	= &proc_dointvec,
	},
	{
		.ctl_name	= CTL_UNNUMBERED,
		.procname	= "udp_mem",
		.data		= &sysctl_udp_mem,
		.maxlen		= sizeof(sysctl_udp_mem),
		.mode		= 0644,
		.proc_handler	= &proc_dointvec_minmax,
		.strategy	= &sysctl_intvec,
		.extra1		= &zero
	},
	{
		.ctl_name	= CTL_UNNUMBERED,
		.procname	= "udp_rmem_min",
		.data		= &sysctl_udp_rmem_min,
		.maxlen		= sizeof(sysctl_udp_rmem_min),
		.mode		= 0644,
		.proc_handler	= &proc_dointvec_minmax,
		.strategy	= &sysctl_intvec,
		.extra1		= &zero
	},
	{
		.ctl_name	= CTL_UNNUMBERED,
		.procname	= "udp_wmem_min",
		.data		= &sysctl_udp_wmem_min,
		.maxlen		= sizeof(sysctl_udp_wmem_min),
		.mode		= 0644,
		.proc_handler	= &proc_dointvec_minmax,
		.strategy	= &sysctl_intvec,
		.extra1		= &zero
	},
	{ .ctl_name = 0 }
};

Loading