Эта программа печатает 65 тыс. байт в строке.
Я измеряю пропускную способность с помощью ./a.out | pv >/dev/null
и получаю около 3 ГБ/с.
Как только я изменяю длину линии до 70k, пропускная способность падает до ~ 1 ГБ/с.
Какое узкое место (кеш процессора, libc idiosynchrasy и т.д.) Я нахожусь здесь?
#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);
}
Обновление: Я запускаю это на 64-битной версии Ubuntu 12.04, которая имеет EGLIBC 2.15, на Core i5-2520M.
Обновление: puts (s)
имеет ту же проблему.