求教啊~~~如何让程序延迟几微妙??

tangqingyang 2011-06-21 05:58:21
重发pcap文件里面的数据包,但是发的太快 网卡处理不了丢了很多 所以我想在每发一个包后延迟个几微妙。。
usleep和nanosleep都不行 最小延迟单位都是4毫秒左右。。用空循环 换个平台就没法实现。。。哎 头疼啊~~~
请高手指教啊 。。。最好能详细一点 本人初学者。。。
感谢 orz
...全文
164 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
井朝天 2011-06-22
  • 打赏
  • 举报
回复
这个。。。在上层基本实现不了。
上层的延迟基本上都是睡眠(要让出处理器),而基本上调度一次所需要的 时间最少为10个毫秒。
就是说从你开始延迟,到下次执行到这里,至少10个毫秒已经过去了。
可以做个底层模块,udelay几微秒,但不能保证呵,用户态切换到内核,内核切换到用户态可能也要花点时间,不过应该差不多可以实现了。
tangqingyang 2011-06-22
  • 打赏
  • 举报
回复
会不会是因为我用虚拟机的缘故。。网卡是自适应的 所以才有问题
tangqingyang 2011-06-22
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 guosha 的回复:]
基本是做不到的,我觉得你可以换个方法,你不一定要每个发包动作的间隔时间相同, 你只需要做到在100ms里发1M的包,这不相当于是以每秒10M的速率发送数据了。 因为收发都有缓冲,所以基本上可以达到你的要求.
[/Quote]

是的 我也用这方法限制速率,但是如果速率高的话 像60Mbs的时候 丢包就很大 10%左右 请教过别人 他们说是因为缓冲不够 瞬间来的太多包所以直接被filter给丢了一部分
所以我想试试看能不能慢点发 而不是一下涌到网卡 然后就被咔嚓了。。
tangqingyang 2011-06-22
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 laojing123 的回复:]
这个。。。在上层基本实现不了。
上层的延迟基本上都是睡眠(要让出处理器),而基本上调度一次所需要的 时间最少为10个毫秒。
就是说从你开始延迟,到下次执行到这里,至少10个毫秒已经过去了。
可以做个底层模块,udelay几微秒,但不能保证呵,用户态切换到内核,内核切换到用户态可能也要花点时间,不过应该差不多可以实现了。
[/Quote]
言之有理 现在就希望在千兆网卡上面跑的时候丢包不要太多 要不还真挺麻烦的。。
快乐田伯光 2011-06-21
  • 打赏
  • 举报
回复
基本是做不到的,我觉得你可以换个方法,你不一定要每个发包动作的间隔时间相同, 你只需要做到在100ms里发1M的包,这不相当于是以每秒10M的速率发送数据了。 因为收发都有缓冲,所以基本上可以达到你的要求.
tangqingyang 2011-06-21
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 xunxun1982 的回复:]
这里也有一篇文章

http://mervyn807.blog.163.com/blog/static/45307259201072744412703/
[/Quote]

因为有些文章说select和usleep一样 都有最小精度 都只能毫秒级 所以就没试。。等等去试试 说不定就峰回路转了 呵呵。。安慰下自己
zhaokai3000 2011-06-21
  • 打赏
  • 举报
回复
struct timeval to;

to.tv_sec = 0;
to.tv_usec = 10; //10微秒
select(0, NULL, NULL, NULL, &to);

可能实际延时要比期望的长几微秒(函数调用消耗)
tangqingyang 2011-06-21
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 justkk 的回复:]
这么高的精度,你的系统不一定支持

关于短延迟 sleep usleep nanosleep select - Prayer - C++博客
[/Quote]

是啊 所以很头痛。。那有没有什么办法发包慢点 我用的是libpcap的pcap_sendpacket函数
xunxun 2011-06-21
  • 打赏
  • 举报
回复
这里也有一篇文章

http://mervyn807.blog.163.com/blog/static/45307259201072744412703/
xunxun 2011-06-21
  • 打赏
  • 举报
回复
nanosleep不是纳秒级么

那么使用select和pselect会如何?
justkk 2011-06-21
  • 打赏
  • 举报
回复
这么高的精度,你的系统不一定支持

关于短延迟 sleep usleep nanosleep select - Prayer - C++博客

23,125

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧