0.27.0 - UlricE/pen GitHub Wiki

The 0.27.0 release focuses on doing more by doing less. The number of syscalls required per transaction has been reduced significantly. On Linux, 100 ApacheBench requests using all default Pen settings took 5689 syscalls on 0.26.1, but only 2819 on 0.27.0 (2413 with tcp_fastclose).

Another way of doing less has been to move certain operations from O(n) to O(1), where n is the number of connections. That doesn't matter much with the default 256 simultaneous connections, but when n is 100000, it makes a difference.

Two new configuration commands have seen the light of day. These can be set on the command line at startup or dynamically with penctl.

tcp_nodelay|no tcp_nodelay

This controls the TCP_NODELAY option on sockets, which turns the Nagle algorithm on or off on supported systems. May or may not make a difference. Default is no tcp_nodelay.

tcp_fastclose up|down|both|off

With Pen being a proxy, one Pen connection is actually two TCP connections, one to the client and one to the server. Normally, Pen waits for both client and server to signal end of file before shutting down the connection. For some protocols this is not necessary and it is safe to shut down the connection when either end does. Default is off.

Finally, it is no longer required to run the configure script when cross-compiling for Windows.

All ChangeLog entries since 0.26.1:

150212 Added config.h.win with reasonable settings for Windows.

150211 Better detection and blacklisting of unavailable servers.

150209 New penctl commands: tcp_nodelay sets TCP_NODELAY on sockets. Turn off with no tcp_nodelay. tcp_fastclose closes both upstream and downstream sockets if one of them closes theirs. Will take the values up, down, both or off (default).

150208 Rather than making a table of pending connections every time through the main loop, keep them in a doubly linked list which is only updated as needed. O(n) -> O(1).

150207 A bug in udp mode: after successful "connect", do not event_add downfd, because it is equal to listenfd and epoll_ctl doesn't like that.

150206 Module kqueue.c updated. Module poll.c: set unused fd:s to -1, or Solaris will say ENOSYS.

150205 Enable diagnostic messages by default in configure.ac. Changed event bookkeeping from stateless to stateful. Made keepalive optional and added "keepalive / no keepalive" penctl command.