我使用10GibE在兩臺機器之間運行以下C程序;該程序報告12Gib/s,而nload
報告(更可信)9.2Gib/s。任何人都可以告訴我我在做什麼錯誤的程序?這個C程序爲什麼報告比nload更多的吞吐量?
.
.
#define BUFFSZ (4*1024)
char buffer[BUFFSZ];
.
.
start = clock();
while (1) {
n = write(sockfd, buffer, BUFFSZ);
if (n < 0)
error("ERROR writing to socket");
if (++blocks % (1024*1024) == 0)
{
blocks = 0;
printf("32Gib at %6.2lf Gib/s\n", 32.0/(((double) (clock() - start))/CLOCKS_PER_SEC));
start = clock();
}
}
這是Linux 2.6.32上的CentOs 6.0; nload 0.7.3,gcc 4.4.4。
難道是你的程序正在測量吞吐量*進入*系統緩衝區和nload是測量它的整個* out *? – spraff
@spraff你的評論是真實的,如果套接字在非阻塞模式下打開。 – crazyjul
@Fixee你能提供socket的開放代碼嗎? – crazyjul