丢失的数据包仅在第一次运行中发生
lost packets only occur in the first run
我正在尝试提高在巨大网络上工作的多播应用程序的性能(以减少其数据包丢失(
我的实验表明,在应用程序的第一次运行中,有一些丢失的数据包。但是,当我在上一个运行后再次运行应用程序(有时也有一点延迟(时,没有数据包丢失。虽然当我在长时间延迟后重新运行应用程序(例如20分钟左右(时,我再次看到数据包丢失。
当我检查他们的时间戳时,我看到丢失的数据包主要是一开始发送的数据包。因此,似乎开关或路由器需要一些热身!或某些东西(我不知道如何称呼这种现象(。
我已经检查了tcpdump
的结果,并且接收器应用程序收到的数据包数量完全相同的数据包数量。
我已经尝试了以下技巧:1-在不同的CPU内核和调度策略上更改过程的亲和力2-更改插座描述符的优先级
更改套接字描述符的优先级已经使它变得更好(减少了丢失的数据包(,但是将优先级设置为高,同样有一些丢失的数据包(
// For example
MulticastSender multicast_sender;
multicast_sender.init();
// Here I need a function in order to find out the switch is already warmed up or not
while (some condition)
{
////
multicast_sender.send(something);
////
}
我想知道添加一些代码的任何可能的方法是为了找出开关(或路由器(是否已经变热!足够了?
,如果您的开关&路由器是动态多播网络的一部分(例如,基于PIM
,IGMP
(,它确实需要一定的路径设置(取决于M-Cast网络的类型,各个过程可能会影响设置发件人和接收器之间的路径(,,(,,而且您无法控制M-Cast网络配置(以便您可以修复它或设置静态路径(,那么您无能为力。
即使您确实具有控制访问权限,也不是所有导致M-Cast数据包丢失的事件都可以"固定"(其中一些是固有的M-Casting(。例如,就像您的M-Cast在PIM-sparse
模式下运行一样,从共享树到最短树的转换可能会导致损失。当会合点(在稀疏模式下找到RP
(完成发件人的注册过程时,一些数据包损失是不可避免的,等等。
与您的网络管理员检查 - 查看他们是否可以帮助您在发件人之间设置"静态"路径(这并不总是可能性(和接收器,或者至少最小化数据包丢失(M-casting(。
从应用程序的角度来看:如果您还编写了接收者的部分 - 那么最好采用一些反馈机制,指示数据包丢失并可能重新传输内容。
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 为什么无论你输入什么,这"while(cin.get(str,3))"只运行一次?
- 花括号使循环运行一次?
- 我必须构建我的项目 2 次,第一次失败,因为它无法打开库
- 是什么导致我的循环在第一次迭代中运行得更慢
- QLibrary 函数在第一次调用时工作缓慢
- 第一次运行时,用CL挂起的代码挂太长
- cl 生成的可执行文件在第一次运行时运行速度非常慢
- 丢失的数据包仅在第一次运行中发生
- 第一次运行程序时出现损坏的双链表错误,后续运行正常
- Visual C++Express.exe在第一次执行之后再次运行
- C++-在第一次运行后跳过代码
- 如何在第一次运行循环时忽略代码的特定部分
- 程序在第一次运行时正确地找到了最大值和最小值,但如果我再次运行,它会给我错误的答案
- c++使用一个函数表示多个变量.只有第一次运行有效
- 第一次运行后,反向编号功能无法正常工作
- 一种测试您是否第一次运行多个递归调用 C++ 的方法
- Qt在运行时改变对话框的模式,而不是第一次隐藏它,然后再显示
- c++循环在第一次运行后跳过
- dev c++第一次编译但没有运行(BLACKSCREEN)