memcpy在发送socket之前增加吞吐量?

时间:2014-09-11 01:30:04

标签: c linux sockets memcpy

我在内存中有一些数据要通过千兆以太网发送给客户端。

服务器:

unsigned char *fbe_addr = mmap(0, img_size, PROT_READ | PROT_WRITE, MAP_SHARED, mem_fd, img_buf_phys);
int bytes_sent = 0;
int total_sent = 0;
while (total_sent != img_size) {
    bytes_sent = write(conn_fd, fbe_addr + total_sent, img_size - total_sent);
    total_sent += bytes_sent;
}

客户端:

int bytes_recv = 0;
int total_recv = 0;
for (; total_recv < img_size; ) {
    bytes_recv = read(sockfd, recv_buff + total_recv, img_size - total_recv);
    total_recv += bytes_recv;
}

通过使用此方法,img_size为65MB,我设法获得了大约4xx MBit / s的吞吐量。但是如果我将从fbe_addr开始的内容存储到临时缓冲区然后将其发送出去,我设法得到5xx Mbit / s。这背后的原因是什么?此外,有没有任何方法以尽可能快的速度发送内存数据,而无需额外调用memcpy?

0 个答案:

没有答案