社区
Linux/Unix社区
帖子详情
求教啊~~~如何让程序延迟几微妙??
tangqingyang
2011-06-21 05:58:21
重发pcap文件里面的数据包,但是发的太快 网卡处理不了丢了很多 所以我想在每发一个包后延迟个几微妙。。
usleep和nanosleep都不行 最小延迟单位都是4毫秒左右。。用空循环 换个平台就没法实现。。。哎 头疼啊~~~
请高手指教啊 。。。最好能详细一点 本人初学者。。。
感谢 orz
...全文
171
11
打赏
收藏
求教啊~~~如何让程序延迟几微妙??
重发pcap文件里面的数据包,但是发的太快 网卡处理不了丢了很多 所以我想在每发一个包后延迟个几微妙。。 usleep和nanosleep都不行 最小延迟单位都是4毫秒左右。。用空循环 换个平台就没法实现。。。哎 头疼啊~~~ 请高手指教啊 。。。最好能详细一点 本人初学者。。。 感谢 orz
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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++博客
08linux历史
Linux发行版:CentOS、Ubuntu、RedHat、Android、Tizen...在这之前,Richard Stallman创建了Free Software Foundation(FSF)组织以及GNU项目,并不断的编写创建GNU
程序
(此类
程序
的许可方式均为GPL: General Public...
MySQL 精选问答 500 题
答:必须做语句分类,
延迟
敏感的⾛主库,不敏感的⾛从库。 9、上⾯说如果开启缓存查询在不命中的情况下开始执⾏分析器,分析语句,那么我发送语句的 key是什么时候⽣成的还是直接拿语句作为key,这时候我过我语句的...
C语言some练习
预处理器(Preprocessor) 1. 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题) #define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL 我在这想看到几件事情: 1). #def...
被称为乔布斯第二 盖茨早年曾为苹果"打工"
” 1983年末,乔布斯发现微软Windows在模仿苹果麦金塔(Macintosh)操作系统,他勃然大怒,让手下把盖茨叫到苹果公司。当时单刀赴会的盖茨身处苹果公司会议室,被十几个苹果员工围着,乔布斯领头儿发难。 盖茨曾...
同义词词库
# The ASF licenses this file to You under the Apache License, Version 2.0 # (the "License"); you may not use this file except in compliance with # the License. You may obtain a copy of the Licens...
Linux/Unix社区
23,217
社区成员
74,540
社区内容
发帖
与我相关
我的任务
Linux/Unix社区
Linux/Unix社区 应用程序开发区
复制链接
扫一扫
分享
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章