社区
Linux/Unix社区
帖子详情
求教啊~~~如何让程序延迟几微妙??
tangqingyang
2011-06-21 05:58:21
重发pcap文件里面的数据包,但是发的太快 网卡处理不了丢了很多 所以我想在每发一个包后延迟个几微妙。。
usleep和nanosleep都不行 最小延迟单位都是4毫秒左右。。用空循环 换个平台就没法实现。。。哎 头疼啊~~~
请高手指教啊 。。。最好能详细一点 本人初学者。。。
感谢 orz
...全文
207
11
打赏
收藏
求教啊~~~如何让程序延迟几微妙??
重发pcap文件里面的数据包,但是发的太快 网卡处理不了丢了很多 所以我想在每发一个包后延迟个几微妙。。 usleep和nanosleep都不行 最小延迟单位都是4毫秒左右。。用空循环 换个平台就没法实现。。。哎 头疼啊~~~ 请高手指教啊 。。。最好能详细一点 本人初学者。。。 感谢 orz
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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++博客
STM32f103
微妙
延迟
函数
本文介绍了STM32F103系列微控制器上实现精确延时的方法,通过SysTick定时器配置,分别提供了
微妙
(us)和毫秒(ms)级别的延时函数。这些函数利用SysTick定时器的特性,设置LOAD寄存器以实现不同时间尺度的延时,适用于需要精确时间控制的应用场景。
微妙
级别的
延迟
函数DelayUSec sleep
本文讨论了在Delphi中实现
微妙
级别
延迟
函数的方法,通过查询性能计数器来精确控制
延迟
时间,误差在2us左右。
【Golang】Go语言中defer与return的精妙交织:探索
延迟
执行与返回顺序的
微妙
关系
本文深入探讨Go语言中defer与return的执行顺序及关系。defer用于
延迟
执行,return用于返回结果。文中详细分析了不返回具体变量、返回指定变量等不同情况,指出defer执行时机和返回值处理有
微妙
规则,合理使用可让代码更清晰、资源释放更正确。
Linux/Unix社区
23,223
社区成员
74,536
社区内容
发帖
与我相关
我的任务
Linux/Unix社区
Linux/Unix社区 应用程序开发区
复制链接
扫一扫
分享
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章