Messages in this thread Patch in this message | | | From | Jamie Bainbridge <> | Subject | [PATCH] tcp: Add memory pressure flag to sockstat | Date | Fri, 14 Jul 2023 16:39:53 +1000 |
| |
When tuning a system it can be helpful to know whether the protocol is in memory pressure state or not. This can be determined by corresponding the number of pages in "net.ipv4.tcp_mem" with the current allocation, but a global variable already tracks this as the source of truth.
Expose that variable in sockstat where other protocol memory usage is already reported.
Add "pressure" which is 0 in normal state and 1 under pressure:
# grep TCP /proc/net/sockstat TCP: inuse 5 orphan 0 tw 0 alloc 7 mem 1 pressure 0
# grep TCP /proc/net/sockstat TCP: inuse 5 orphan 0 tw 0 alloc 7 mem 1 pressure 1
Tested by writing a large value to global variable tcp_memory_pressure (it usually stores jiffies when memory pressure was entered) and not just by code review or editing example output.
Signed-off-by: Jamie Bainbridge <jamie.bainbridge@gmail.com> --- net/ipv4/proc.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/net/ipv4/proc.c b/net/ipv4/proc.c index eaf1d3113b62f7dc93fdc7b7c4041140ac63bf69..f4c5ced2de49d5c6d7f5d7ccdaa76c89dcf8c932 100644 --- a/net/ipv4/proc.c +++ b/net/ipv4/proc.c @@ -51,16 +51,17 @@ static int sockstat_seq_show(struct seq_file *seq, void *v) { struct net *net = seq->private; - int orphans, sockets; + int orphans, sockets, tcp_pressure; orphans = tcp_orphan_count_sum(); sockets = proto_sockets_allocated_sum_positive(&tcp_prot); + tcp_pressure = READ_ONCE(tcp_memory_pressure) ? 1 : 0; socket_seq_show(seq); - seq_printf(seq, "TCP: inuse %d orphan %d tw %d alloc %d mem %ld\n", + seq_printf(seq, "TCP: inuse %d orphan %d tw %d alloc %d mem %ld pressure %d\n", sock_prot_inuse_get(net, &tcp_prot), orphans, refcount_read(&net->ipv4.tcp_death_row.tw_refcount) - 1, - sockets, proto_memory_allocated(&tcp_prot)); + sockets, proto_memory_allocated(&tcp_prot), tcp_pressure); seq_printf(seq, "UDP: inuse %d mem %ld\n", sock_prot_inuse_get(net, &udp_prot), proto_memory_allocated(&udp_prot)); -- 2.41.0
| |