haproxy io 之sepoll
haporxy 支持多种io事件框架 poll、select、kqueue、epoll、sepoll, 其中sepoll从epoll中衍生而来;sepoll事件框架性能之所以优于epoll事件框架,是因为sepoll处理事件分为了投机事件和指定事件。
指定事件
通过epoll_wait 得到的事件信息投机事件
是指一个新的句柄加入事件框架监听时,先加入投机事件队列,事件框架先处理投机事件队列的句柄,若通过读、写发现并无成功结果,再加入指定事件通过epoll_wait中监听事件,比如一个新accept出来的子连接句柄,即可认为马上可读,对应http协议来说是很有可能的,如果未读到数据,再加入epoll_wait监听,或者; 同样,一个connect成功的句柄,即认为当前连接马上可写;
或者某个句柄刚完成读操作,加入事件框架,先加入投机事件队列
如此通过投机方式,认为可读或者可写,可以减少一次epoll_wait的扫描过程,同时也更好利用的cpu cache的利用率;
另外,事件框架中会从投机事件队列尾部往前处理,可能是认为后加入事件队列的句柄更有可能有读写操作,haproxy注释中描述从后往前处理可以提升 0.2%的性能;