另一方面,Bob表示Linux也还有需要改进的地方,例如I/O信号,它们让编程变得很复杂,如果事务繁忙,信号队列可能会溢出,用户空间的libaio异步I/O(AIO)是基于线程实现的,扩展性不好,和epoll的集成度也不好。相反,基于内核的异步I/O缺乏合适的套接字支持,他还提到了recvmsg()系统调用,每个入站数据包都需要一个进入内核的调用。 新的recvmmsg()系统调用在单次调用中可以接收多个数据包,但它现在是围绕内部recvmsg()实现的一个封装,还不能跨全部操作持有套接字锁,但Bob认为recvmmsg()是向Linux添加新API的一个很好示例,他也喜欢基于内核的AIO和eventfd()结合使用,使得将基于文件的AIO整合进应用程序正常的事件处理循环成为可能,syslets也仍然有潜力可挖,Bob认为它可以作为向用户空间发送通知的快捷方法,但现在尚不清楚syslets是否会扩大规模。 纳斯达克OMX现在最想在Linux中看到的是基于套接字的AIO,这样就可以用更少的系统调用替换epoll/recvmsg/sendmsg队列,更妙的是,内核可以同时为多个事件提供通知,最好是这个功能的接口完全基于套接字,Bob描绘了一个类似于epoll的内核项目,它可以处理内核中的网络通信,应用程序可以向队列异步发送和接收请求,当它们执行完毕时接收通知,他希望看到多个套接字连接到单个对象,和一个适合传递给poll()的文件描述符,有了这样的技术,通过内核的网络流量就可以更大,并且延迟也会更小。 总之,纳斯达克OMX对Linux的表现还是很满意的,它们也喜欢尝鲜,前不久交易所的服务器就升级到了2.6.35.3内核,新出现的API对运营的帮助也很大,Bob说很少有系统因性能原因愿意引入新的API,这和Linus Torvalds的观点却不一样,Linus Torvalds认为没有人会使用Linux特殊的API,这一次也许是Linus Torvalds错了,不是没有人使用,只是它们藏得很深,一般人不知道。 |