由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - 请教一下,怎么控制发送UDP的速度?
相关主题
[合集] Socket编程问题 (转载)想编一个从同一台机器上的很多虚拟IP地址发出packet的程序?
UDP广播老是接收不到问个关于socket问题
用INADDR_ANY 怎么才能看出destination IP?有点挠头
开始折腾DPDK+mTCP怎样能让这个结构在32 或64 位系统大小一样?
mysql频繁写的时候老是挂掉,应该怎么办?谁来说说ZERO COPY和KERNEL Bypass networking
question on TCP slow start弱问:1us包含packet在网卡里和kernel里处理的时间吗?
有熟悉NDIS driver的吗? (转载)请教一个C++的设计问题
有人懂MAPI么?这个版看来是毁了
相关话题的讨论汇总
话题: udp话题: packets话题: sec话题: sleep
进入Programming版参与讨论
1 (共1页)
z***e
发帖数: 5393
1
大概的目的是要测试另外一边的负载能力,所以要程序按照不同速度发送udp过去,比
如:
100 packets/sec
1000 packets/sec
10K packets/sec
100K packets/secu1
...
现在我的solution大概是:
while(true)
{
SendPacket(N); //发N个UDP出去
Sleep(M);
}
每次跑不同的test,就设不同的N和M,比如 M=10, N=100,就差不多是预计每0.01秒送
100个,基本上是10000/sec(send packet本身还要时间,实际差不多是9k);
但是问题在于,M=10,N=100,和M=100,N=1000这样不同搭配出来,理论上都是平均
10000/sec,但实际上差别有点大,毕竟sleep本身有误差(windows最小单位好像是
15ms),thread本身switch也有影响。最后接受那边的CPU usage也不是很对,比如理
论上同样是收到100K/sec,但是一种搭配下的CPU usage是50%,另一种搭配可能就变成
40%。
所以关键是怎么让sende
a****l
发帖数: 8211
2
I doubt if you can do it on vista. vista is not designed to have precise
timing, which is where those "real-time operating system" comes into play.
I would suggest you just monitor the sender rate continuously and adjust
parameters if the rate is abnormal.

【在 z***e 的大作中提到】
: 大概的目的是要测试另外一边的负载能力,所以要程序按照不同速度发送udp过去,比
: 如:
: 100 packets/sec
: 1000 packets/sec
: 10K packets/sec
: 100K packets/secu1
: ...
: 现在我的solution大概是:
: while(true)
: {

O*******d
发帖数: 20343
3
用WaitForSingleObject。 先造一个CriticleSection,然后就是WaitForSingleObject
, 加一个timeout。timeout要从一个设定时间减去SendPacket用掉的时间,才能保证
在设定时间均匀发送。 整个思路就是一个timer的思路。 Windows的
WaitForSingleObject的时间比较精确。
O*******d
发帖数: 20343
4
把Sleep换成WaitForSingleObject.
z***e
发帖数: 5393
5
I see. so it's kind like:
while (TRUE)
{
CriticalSecion cs;
...
timeBigin = currenttime();
Send(...);
timeUsed = currenttime() - timeBegin();
WaitForSingleObject(&cs,...,timeDefined - timeUsed);
}
right? I'll try it.
Or just use a Timer and send packets in callback?

WaitForSingleObject

【在 O*******d 的大作中提到】
: 用WaitForSingleObject。 先造一个CriticleSection,然后就是WaitForSingleObject
: , 加一个timeout。timeout要从一个设定时间减去SendPacket用掉的时间,才能保证
: 在设定时间均匀发送。 整个思路就是一个timer的思路。 Windows的
: WaitForSingleObject的时间比较精确。

b*****n
发帖数: 482
6
iperf -u -c xx.xx.xx.xx -b100K -l1000 -pxxxx -t9999

【在 z***e 的大作中提到】
: 大概的目的是要测试另外一边的负载能力,所以要程序按照不同速度发送udp过去,比
: 如:
: 100 packets/sec
: 1000 packets/sec
: 10K packets/sec
: 100K packets/secu1
: ...
: 现在我的solution大概是:
: while(true)
: {

O*******d
发帖数: 20343
7
Windows has a function GetTickCount() that returns time in millisecond since
system is up. You may also need to initialize CriticalSection before using
it.

【在 z***e 的大作中提到】
: I see. so it's kind like:
: while (TRUE)
: {
: CriticalSecion cs;
: ...
: timeBigin = currenttime();
: Send(...);
: timeUsed = currenttime() - timeBegin();
: WaitForSingleObject(&cs,...,timeDefined - timeUsed);
: }

p**********g
发帖数: 9558
8
try a linux tool
Nistnet
1 (共1页)
进入Programming版参与讨论
相关主题
这个版看来是毁了mysql频繁写的时候老是挂掉,应该怎么办?
问个线程同步的问题question on TCP slow start
C++ InitializeCriticalSection问题有熟悉NDIS driver的吗? (转载)
两道小题有人懂MAPI么?
[合集] Socket编程问题 (转载)想编一个从同一台机器上的很多虚拟IP地址发出packet的程序?
UDP广播老是接收不到问个关于socket问题
用INADDR_ANY 怎么才能看出destination IP?有点挠头
开始折腾DPDK+mTCP怎样能让这个结构在32 或64 位系统大小一样?
相关话题的讨论汇总
话题: udp话题: packets话题: sec话题: sleep