- 论坛徽章:
- 0
|
最近遇到一难题, 写关于进程间通讯的速度测试的c程序, 分别对以下3种方式进行测试:
1, Shared Memory
2, Message Queue
3, TCP-IP Loopback (127.0.0.1)
要求的测试数据是250MB, 运行平台是BSD,仅测速度,其他的都不考虑.
遇到的问题:
1,shared memory怎么测,既然是共享了就不存在速度的问题吧?还是我理解错了?
2,关于message queue我是这样实现的:
...
for (i = 0; i < DATASIZE/MSGSIZE; i++)
{
rcvd = msgrcv(msgID, &dataMsg, MSGSIZE, msgTyp, 0);
if (rcvd == -1)
{
perror("msgrcv");
}
else
{
//printf("\nreceived: %d Byte\n", rcvd);
rcvdt += rcvd;
}
}
...
DATASIZE是250M,MSGSIZE是一次发送的大小.发送端结构与此相同,只不过方向是发送.
这样的实现可以不可以?MSGSIZE最大是多少?如果用getrusage()记时的话应该用哪一个作为测量结果:system time?user time?我用system time得出的结果是大约90MB/s...
有无更好的测试方法?
3,关于tcp-ip我是这样实现的:
...
for(i = 0; i< 5; i++)
{
size = recvall(s, buffer, TSIZE);
if (size==-1)
{
close(s);
fprintf(stderr, "reading data failed\n");
return -1;
}
tsize += size;
}
...
int recvall(int sockfd, void *buf, int len)
{
int recvd;
int n = 0;
char* p = (char*)buf;
while (n < len)
{
recvd = recv(sockfd, p+n, len-n, 0);
if (recvd < 0)
{
printf("Error at recv!\n");
exit(0);
}
n += recvd;
}
return n;
}
我把数据分成5份,每份50MB(TSIZE),不然recvall()错误.
这样的实现可以不可以?TSIZE和什么有关?如果用getrusage()记时的话应该用哪一个作为测量结果:system time?user time?好像都不对,有无更好的测试方法?
本人初次涉及这个方面,望各位高手赐教.
[ 本帖最后由 qiubite 于 2006-6-4 05:17 编辑 ] |
|