可用于构建低延迟应用程序,如高频交易( HFT )?
但是,可以使用Boost.ASIO + TOE + OpenOnload构建低延迟应用程序吗?
发布于 2017-06-08 23:50:57
几年前,我评估了用于高频交易的Boost Asio。据我所知,今天的基础还是一样的。以下是我决定不使用它的一些原因:
bind()
风格的回调。这上面有一些东西。libev
、libevent
和libuv
等其他库就会更加强硬,并避免其中的一些不利因素。发布于 2019-02-23 22:44:42
这是Asio作者的建议,他向公众发布了SG-14 Google Group (不幸的是,他们有问题,他们已经转移到另一个邮件列表系统):
我确实从事超低延迟金融市场系统的工作。就像业内的许多人一样,我无法透露项目的细节。不过,我会尝试回答你的问题。 一般而言:
Asio在插入内核旁路库时工作得很好。使用这些,基于Asio的应用程序可以实现标准的金融市场协议,处理多个并发连接,并期望中间的1/2往返延迟为~2 usec,低抖动和高消息率。
我对那些使用Asio进行低延迟工作的人的建议可以概括为:“旋转、引脚和插入”。
旋转:不要睡觉。不要切换上下文。使用io_service::poll()而不是io_service::run()。更喜欢单线程调度。禁用锁定和线程支持。禁用电源管理。禁用C状态。禁用中断合并。
Pin:分配CPU关联。分配中断关联。将内存分配给NUMA节点。考虑NIC的物理位置。隔离核心与一般操作系统的使用。使用具有单个物理CPU的系统。
插入:根据插入内核旁路库的性能和可用性选择NIC供应商。使用内核旁路库。
此建议将与正在使用的特定协议实现解耦。因此,作为Beast用户,您现在可以应用这些技术,如果您应用了这些技术,那么您将有一个具有~10 usec延迟的HTTP实现(请注意,从空气中提取编号,不执行实际的基准测试)。当然,特定的协议实现仍然应该注意可能影响延迟的事情,例如编码和解码效率、内存分配等等。
就低延迟空间而言,Asio和网络TS缺少的主要内容是:
这些内容不包括在内,因为它们(目前)是操作系统特有的,而不是POSIX的一部分。但是,Asio和Networking确实提供了一个转义舱口,其形式是native_*()函数和“可扩展”类型需求。
干杯,克里斯
https://stackoverflow.com/questions/44446984
复制相似问题