该程序每行打印 65k 字节。
我测量吞吐量./a.out | pv >/dev/null
并得到大约 3 GB/s。
一旦我将线路长度更改为 70k,吞吐量就会下降到 ~ 1 GB/s。
我在这里遇到了哪个瓶颈(CPU 缓存、libc 特质等) ?
#include <stdio.h>
#include <string.h>
#define LEN 65000 // high throughput
// #define LEN 70000 // low throughput
int main ()
{
char s[LEN]; memset(s, 'a', LEN-1); s[LEN-1] = '\0';
while (1)
printf ("%s\n", s);
}
更新:我在具有 EGLIBC 2.15 的 Ubuntu 12.04 64 位和 Core i5-2520M 上运行它。
更新: puts (s)
有同样的问题。