Messages in this thread | | | Date | Tue, 01 Dec 2009 10:16:42 -0600 | From | "Chris Friesen" <> | Subject | seeing strange values for tcp sk_rmem_alloc |
| |
I'm hoping someone might be able to explain some odd behaviour that I'm seeing.
Some of our developers wanted to be able to see how much of their rx socket buffer space was in use, so I added the following to sock_ioctl()
case SIOCGSKRMEMALLOC: { int tmp; err = -EINVAL; if(!sock->sk) break; tmp = atomic_read(&sock->sk->sk_rmem_alloc); err = copy_to_user(argp, &tmp, sizeof(tmp)); break; }
To validate it, I wrote a testcase that opened a tcp socket, then looped sending 2k of data at a time to it and calling the above ioctl to check the sk_rmem_alloc value (without ever reading from the socket).
The results were odd--I've copied them below. Can anyone explain how I can send 20K of data but sk_rmem_alloc still only shows 4.8K used, then it suddenly jumps by a lot on the next packet to something that more reflects reality, then repeats that pattern again? Is there some additional buffering happening somewhere in the TCP stack?
Thanks,
Chris
used: 2424 used: 4848 used: 4848 used: 4848 used: 4848 used: 4848 used: 4848 used: 4848 used: 4848 used: 4848 used: 23696 used: 23696 used: 23696 used: 23696 used: 23696 used: 23696 used: 23696 used: 23696 used: 23696 used: 42544 used: 42544 used: 42544 used: 42544 used: 42544 used: 42544 used: 42544 used: 42544 used: 42544 used: 61392 used: 61392 used: 61392 used: 61392 used: 61392 used: 61392 used: 61392 used: 61392 used: 61392 used: 80240 used: 80240 used: 80240 used: 80240 used: 80240 used: 80240 used: 80240 used: 80240 used: 80240 used: 80240 used: 80240 used: 80240 used: 80240 used: 80240 used: 80240 used: 80240 used: 80240 used: 80240 used: 80240 used: 80240 used: 80240
| |