Re: [Dovecot] pop3 TCP_CORK too late error
On Sat, 2010-10-09 at 21:33 -0700, Ryan Murray wrote: I was straceing a pop3 process and noticed that the TCP_CORK option isn't set soon enough: epoll_wait(8, {{EPOLLOUT, {u32=37481984, u64=37481984}}}, 38, 207) = 1 write(41, iTxPBrNlaNFao+yQzLhuO4/+tQ5cuiKSe..., 224) = 224 http://hg.dovecot.org/dovecot-2.0/rev/f3aa8be626fa should fix this.
Re: [Dovecot] pop3 TCP_CORK too late error
On 2010-10-09 21:33:11 -0700, Ryan Murray wrote: epoll_wait(8, {{EPOLLOUT, {u32=37481984, u64=37481984}}}, 38, 207) = 1 write(41, iTxPBrNlaNFao+yQzLhuO4/+tQ5cuiKSe..., 224) = 224 epoll_ctl(8, EPOLL_CTL_MOD, 41, {EPOLLIN|EPOLLPRI|EPOLLERR|EPOLLHUP, {u32=37481984, u64=37481984}}) = 0 pread(19, AFABQAlAC0AJ\nQAUALQAUAFABQAlAC0AF..., 8192, 811008) = 8192 setsockopt(41, SOL_TCP, TCP_CORK, [1], 4) = 0 write(41, \r\nKUWtGCjKO5N8UbW5uYLZbS0nmaNi4ZB..., 4134) = 4134 *snip* setsockopt(41, SOL_TCP, TCP_CORK, [0], 4) = 0 The TCP_CORK option should get set before the first call to write() there, rather than after the first pread(). there are 2 calls to setsocketopt for it. maybe you missed the first one? darix -- openSUSE - SUSE Linux is my linux openSUSE is good for you www.opensuse.org
Re: [Dovecot] pop3 TCP_CORK too late error
On Mon, 2010-10-11 at 03:30 +0200, Marcus Rueckert wrote: On 2010-10-09 21:33:11 -0700, Ryan Murray wrote: epoll_wait(8, {{EPOLLOUT, {u32=37481984, u64=37481984}}}, 38, 207) = 1 write(41, iTxPBrNlaNFao+yQzLhuO4/+tQ5cuiKSe..., 224) = 224 epoll_ctl(8, EPOLL_CTL_MOD, 41, {EPOLLIN|EPOLLPRI|EPOLLERR|EPOLLHUP, {u32=37481984, u64=37481984}}) = 0 pread(19, AFABQAlAC0AJ\nQAUALQAUAFABQAlAC0AF..., 8192, 811008) = 8192 setsockopt(41, SOL_TCP, TCP_CORK, [1], 4) = 0 write(41, \r\nKUWtGCjKO5N8UbW5uYLZbS0nmaNi4ZB..., 4134) = 4134 *snip* setsockopt(41, SOL_TCP, TCP_CORK, [0], 4) = 0 The TCP_CORK option should get set before the first call to write() there, rather than after the first pread(). there are 2 calls to setsocketopt for it. maybe you missed the first one? One setting it on, and one setting it off, yes. The point of TCP_CORK is to set it on before _any_ write() calls, and off after the write calls. This allows the kernel to make TCP packets of MSS size, regardless of the size of your write()s. The write that occurs before enabling the cork causes a MSS size packet to be sent, which increases the time spent waiting for ACKs.