¿Por qué la función fwrite libc es más rápida que la función de escritura syscall?

Después de proporcionar el mismo programa que lee un archivo de entrada generado aleatoriamente y repite la misma cadena que leyó en una salida. La única diferencia es que en un lado estoy proporcionando los métodos de lectura y escritura de Linux syscalls, y en el otro lado estoy usando fread / fwrite.

Al sincronizar mi aplicación con una entrada de 10Mb de tamaño y enviarla a / dev / null, y asegurándome de que el archivo no se almacene en la caché, he descubierto que la escritura de libc es más rápida en una escala GRANDE cuando se utilizan buffers muy pequeños (1 byte en caso).

Aquí está mi salida del tiempo, usando fwrite:

real    0m0.948s
user    0m0.780s
sys     0m0.012s

Y usando el syscall escriba:

real    0m8.607s
user    0m0.972s
sys     0m7.624s

La única posibilidad en la que puedo pensar es que libc internamente ya está almacenando en búfer mi entrada ... Desafortunadamente, no pude encontrar tanta información en la web, así que tal vez los gurús de aquí puedan ayudarme.

Respuestas a la pregunta(3)

Su respuesta a la pregunta