Какое узкое место возникает при использовании printf для строк > 65 КБ?

Эта программа печатает 65 КБ на строку.

Я измеряю пропускную способность с помощью ./a.out | pv >/dev/nullи получаю около 3 ГБ/с.

Как только я изменяю длину линии на 70k, пропускная способность падает до ~1 ГБ/с.

Какое узкое место(Кэш ЦП, идиосинкразия 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);
}

Обновление:Я запускаю это на Ubuntu 12.04 64 -бит, которая имеет EGLIBC 2.15, на Core i5 -2520M.

Обновление:puts (s)имеет ту же проблему.

11
задан nh2 7 August 2012 в 19:33
поделиться