O syslog chama ambos emitem um send () para um soquete AF_UNIX por chamada. Mesmo se o syslogd descartar os dados, ele ainda terá que lê-lo primeiro. Tudo isso leva tempo.
As gravações em / dev / null também emitem um write () por chamada, mas como os dados são descartados, podem ser processados muito rapidamente pelo kernel.
As chamadas fprintf () geram apenas uma gravação () para cada 4096 bytes que são transferidos, ou seja, cerca de uma a cada oitenta chamadas printf. Cada um envolve apenas a transferência de dados do buffer da libc para os buffers do kernel. O commit para o disco será (em comparação pelo menos) muito lento, mas na ausência de qualquer sincronização explícita, as chamadas podem acontecer mais tarde (talvez mesmo após o processo terminar).
Em suma: o syslog é mais lento que / dev / null porque está fazendo muito trabalho e é mais lento que o printf em um arquivo devido ao buffering.