应用程序的响应时间与给定时间段内输入触发器的数量不经意地相关
Response time of an application unintutively correlated with number of input triggers in a give time period
我有一个多线程C++网络应用程序,它侦听UDP数据包作为输入-然后这些数据在应用程序中跳跃/通过各种队列和线程进行处理,最后在TCP套接字上推出。
我看到的是,如果输入速度很慢,比如说5/sec,总响应时间(从内到外)很慢(比如说100ms),如果输入很快,比如20/sec,响应时间也很快(~50ms)。这种观察真的很奇怪。在快速情况下也会打乱响应时间,因为第一次响应总是很慢。只是为了确保应用程序在慢速和快速情况下都能完成完全相同的工作量。
已经尝试调查的事情-
-
它是一个运行Linux 2.6内核的双Xeon机箱,禁用Turbo boost,确保处理器处于C0状态。
-
消除了网络原因。根本原因就在盒子里。(软件或硬件)
-
我在计时器上有一个从输入到输出的假输入通过系统,以保持应用程序"温暖"——没有效果。(申请的工作线程正忙于等待并固定到核心)。
-
perf点表明,每件事都会变慢——这基本上意味着处理器在没有持续负载的情况下会变慢,但没有其他迹象表明(17z/turbostat)或我读错了。
有人知道可能发生的事情吗?
根据我的经验,这将是Nagle魔鬼装置的恶劣行为。对我来说,缓冲区中填充TCP数据包的数据比发送的要多,这听起来非常合理。在没有太多数据的情况下,tcp数据包正在等待来自另一端的ack,众所周知,这是延迟的。
解决方案-在创建任何可发送的TCP套接字后,首先要确保禁用Nagle的程序杀手。
相关文章:
- 物理键盘上的触发器按键
- 防止SC_METHOD在没有事件/触发器的情况下执行
- C++ - 将函数链接到触发器的有效和高效方法
- 如何在没有现有引擎的情况下在游戏中设计我的事件触发器框架?
- 使用 epoll 边缘触发器的套接字上的数据过多
- 默认的默认构造函数触发器 -Werror=effc
- 为什么 ++ 运算符触发器返回对局部变量警告的引用
- 如何使用 c++ 在任务计划程序中检查任务的触发器
- C 如何结束一个段循环,该循环添加数字而不使用数字作为触发器来结束循环
- 确定 QAction 的触发器
- 基于两个程序之间的事件触发器访问数据(内存)
- 获取键盘使用代码,如何从read()发送触发器
- 应用程序的响应时间与给定时间段内输入触发器的数量不经意地相关
- 为什么for_each+lambda触发器-Waggregate返回警告
- 由触发器调用的 MS SQL XP 更改 C++ 文件日期戳,以允许刷新表单应用程序 vb.net
- 如何在QT中制作带有触发器的图片按钮
- 为什么我不能在SQLite中的VIEW上创建触发器
- delete[]触发器断点
- 当PHP提交更新时,为C++应用程序调用SQLite触发器
- 如果应用程序窗口失去激活c++,则绕过OnFocus/GetFocus事件的触发器