使用TCP_节点延迟的unix send()调用的延迟
与TCP_NODELAY选项一起使用时,send()的预期延迟是多少?根据我们的测试,10G网络的容量大约为2.5us。这是否意味着tcpstack需要2.5us使用TCP_节点延迟的unix send()调用的延迟,unix,send,Unix,Send,与TCP_NODELAY选项一起使用时,send()的预期延迟是多少?根据我们的测试,10G网络的容量大约为2.5us。这是否意味着tcpstack需要2.5us 如果IO非阻塞模式与tcp_节点延迟一起使用,send()延迟是否会远低于2.5us,因为它应该是mem copy?我认为这个问题的答案将完全取决于什么操作系统、什么硬件以及涉及什么软件。TCP协议中没有指定延迟的内容;事实上,TCP的一大特点是它能够跨性能差异很大的硬件工作。但是,我不希望阻塞模式和非阻塞模式之间的延迟有太大的差异,
如果IO非阻塞模式与tcp_节点延迟一起使用,send()延迟是否会远低于2.5us,因为它应该是mem copy?我认为这个问题的答案将完全取决于什么操作系统、什么硬件以及涉及什么软件。TCP协议中没有指定延迟的内容;事实上,TCP的一大特点是它能够跨性能差异很大的硬件工作。但是,我不希望阻塞模式和非阻塞模式之间的延迟有太大的差异,除非您试图从单个线程处理多个套接字(在这种情况下,非阻塞IO的性能会更好,因为套接字B永远不必等待套接字a上的操作完成,等等).非阻塞模式与延迟无关。它只是在套接字上提前设置的一个标志,以便各个读/写操作立即返回。当任何
读取
或写入
无法完成时,将返回相应的错误号,例如EAGAIN
,而不是导致整个服务器等待操作完成。等待仍然会发生,但以不同的方式,通过使用其他系统调用,如select
或kqueue
,它们确实会“阻塞”,但会以一种有效的方式同时监视大量连接的进度。这意味着如果使用非阻塞模式,即使使用tcp_nodelay,发送也应在几纳秒内立即返回?顺便说一句,在RHEL6.2中使用connect x3 eth卡测试了延迟。