read() returns ETIMEDOUT on steady TCP connection

Tim Gebbett tim at gebbettco.com
Sat May 3 17:43:49 UTC 2008


Hi Andre,

Just to introduce myself, I am now helping Mark Hills with testing. 
Thank you for your suggestion, here are the results from a similar 
system (RELENG-7) with increasing
kern.ipc.nmbjumbop to 25600.

at 1600 streams using approx 340mbit, netstat  -m  was reporting
 
12550/250/12800/12800 4k (page size) jumbo clusters in use

After the read() returns ETIMEDOUT,

3857/10551/14408/25600 4k (page size) jumbo clusters in use

sysctl kern.ipc.nmbjumbop=25600 > 51200

After the read() returns ETIMEDOUT,

200/25400/25600/51200 4k (page size) jumbo clusters in use 
(current/cache/total/max)

netstat -m:

4140/26205/30345 mbufs in use (current/cache/total)
256/3482/3738/25600 mbuf clusters in use (current/cache/total/max)
256/3328 mbuf+clusters out of packet secondary zone in use (current/cache)
3882/21718/25600/51200 4k (page size) jumbo clusters in use 
(current/cache/total/max)
0/0/0/6400 9k jumbo clusters in use (current/cache/total/max)
0/0/0/3200 16k jumbo clusters in use (current/cache/total/max)
17075K/100387K/117462K bytes allocated to network (current/cache/total)
0/0/0 requests for mbufs denied (mbufs/clusters/mbuf+clusters)
0/0/0 requests for jumbo clusters denied (4k/9k/16k)
0/7/6656 sfbufs in use (current/peak/max)
0 requests for sfbufs denied
0 requests for sfbufs delayed
0 requests for I/O initiated by sendfile
0 calls to protocol drain routines

Do you think we need to reel out further sysctls and should I apply the 
patch to see if tcp_output: error 55  is still occuring ?

Thanks again, Tim


Andre Oppermann wrote:
> Mark Hills wrote:
>> On Wed, 23 Apr 2008, Andre Oppermann wrote:
>>
>>> http://people.freebsd.org/~andre/tcp_output-error-log.diff
>>>
>>> Please apply this patch and enable the sysctl net.inet.tcp.log_debug=1
>>> and report any output.  You likely get some (normal) noise from 
>>> syncache.
>>> What we are looking for is reports from tcp_output.
>>
>> Hi Andre, I've applied the patch and tested.
>>
>> Aside from syncache noise, I get a constant stream of 'error 55' 
>> (ENOBUFS?), once the number of connection gets to around 150 at 192kbps.
>>
>> TCP: [192.168.5.43]:52153 to [192.168.5.40]:8080; tcp_output: error 
>> 55 while sending
>>
>> 192.168.5.40 is the IP address of this host, running the server.
>>
>> I tried to correlate the point of the application receiving ETIMEDOUT 
>> with these messages, but that is tricky as it seems to be outputting 
>> a lot of messages, and multiple messages over eachother (see below).
>>
>> Because of the mention of no buffer space available, I checked the 
>> values of net.inet.tcp.sendbuf* and recvbuf*, and increased the max 
>> values with no effect.
>>
>> When I get time I will modify the kernel to print errors which aren't 
>> ENOBUFS to see if there are any others. But in the meantime, this 
>> sounds like a problem to me. Is that correct?
>>
>> Mark
>>
>>
>> :8080; tcp_output: error 55 while sending
>> TCP: [192.168.5.42]:57384T CtPo:  
>> [[119922..116688..55..4402]]::85048400;1  ttoc p[_1o9u2t.p1u6t8:. 
>> 5e.r4r0o]r: 8080;5 5t cwp_hoiultep uste:n deirnrgor 55 while sending
>> TCP: [192.168.5.42]:57382 to [192.168.5.40]:8080; tcp_output: error 
>> 55 while sending
>> TCP: [192.168.5.42]:57381 to [192.168.5.40]:8080; tcp_output: error 
>> 55 while sending
>> TCP: [192.168.5.42]:57380 to [192.168.5.40]:8080; tcp_output: error 
>> 55 while sending
>
> After tracing through the code it seems you are indeed memory limited.
> Looking back at the netstat -m output:
>
>  12550/250/12800/12800 4k (page size) jumbo clusters in use
>  (current/cache/total/max)
>  0/0/0 requests for jumbo clusters denied (4k/9k/16k)
>
> This shows that the supply of 4k jumbo clusters is pretty much exhausted.
> The cache may be allocated to different CPUs and the one making the 
> request
> at a given point may be depleted and can't get any from the global pool.
> The big question is why the denied counter doesn't report anything.  I've
> looked at the code paths and don't see any obvious reason why it doesn't
> get counted.  Maybe Robert can give some insight here.
>
> Try doubling the amount of 4k page size jumbo mbufs.  They are the 
> primary
> workhorse in the kernel right now:
>
>  sysctl kern.ipc.nmbjumbop=25600
>
> This should get further.  Still more may be necessary depending on 
> workloads.
>



More information about the freebsd-net mailing list