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 |