gpt4 book ai didi

c++ - EPOLLOUT | EPOLLET、虚假唤醒和 MTU

转载 作者:行者123 更新时间:2023-11-28 07:08:33 24 4
gpt4 key购买 nike

写入器程序使用固定缓冲区的多次写入发送几 MB(几乎没有延迟)。处理程序在 EPOLLOUT | 中注册。 EPOLLET 标志。

  1. MTU=16KB,写入缓冲区 = 4KB 或更多。 write(...) 调用返回了一些 ~3 EAGAIN(写入在下一个事件中重新开始)和 ~30 虚假 EPOLLOUT(在所有写入完成并且数据被认为已发送之后)。
  2. MTU=16KB,写入缓冲区 = 2KB。一些 ~5 EAGAIN 和一些 (2-5) 个虚假的 EPOLLOUT 事件 - 日志表明在这种情况下作者和读者同时进行。
  3. MTU=16KB,写入缓冲区 < 1KB。几个 ~5 EAGAIN 和一个没有虚假的 EPOLLOUT 事件。
  4. MTU=1-5KB,写入缓冲区 = 4KB。几个 ~5 EAGAIN 并且没有虚假的 EPOLLOUT 事件。
  5. MTU=50KB(环回)- 99% 的事件是虚假的 EPOLLOUT。

好像没那么简单EPOLLOUT 在缓冲区从已满变为“可用空间”时生成。与 MTU 大小的相关性很有趣。问题:

1) 除非最后一次写入以 EAGAIN 代码结束,否则禁用 EPOLLOUT - 是正确的模式吗?

2) 更大的缓冲区或 MTU 建议传输更大的数据 block 产生更少的 TCP/IP 缓冲区更新和更少的事件。实践表明相反。任何人都可以对此有所了解吗?

最佳答案

EPOLLOUT 表示缓冲区中有空间。这并不意味着只是从无空间到有空间的过渡。您应该仅在从发送中获得 EAGAIN 后才使用它。否则,您只会得到毫无意义的 EPOLLOUT 事件流,因为发送缓冲区中几乎总是有空间。

关于您的 (1),是的,这才是正确的使用方式。只要写到你获得 EAGAIN,然后使用 EPOLLIUT 告诉你什么时候可以再次写。

关于c++ - EPOLLOUT | EPOLLET、虚假唤醒和 MTU,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21395074/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com