karelzak/mutt-kz — pull request #68 by dw (2014-04-22 23:25:56+00:00)
Title: Use unlocked libc IO everywhere.

Since mutt does not use threads, there is no reason it should use the
locked variants of the FILE* IO functions. This checks if the unlocked
functions are available, and if so enables them globally via mutt.h.

Cuts load time for a 56k message, 1.8GB /var/mail mailbox from 14
seconds to ~6 seconds, since we avoid acquiring and releasing a mutex
for every character of input read.

Before: 0m14.376s

74.98% mutt libc-2.18.so [.] _IO_getc
11.87% mutt mutt [.] mbox_parse_mailbox
0.94% mutt [kernel.kallsyms] [k] copy_user_generic_string
0.83% mutt libc-2.18.so [.] __strchr_sse2
0.53% mutt libc-2.18.so [.] __memcpy_sse2
0.44% mutt libc-2.18.so [.] _int_malloc

After: 6 seconds

68.92% mutt mutt [.] mbox_parse_mailbox
2.25% mutt [kernel.kallsyms] [k] copy_user_generic_string
1.73% mutt libc-2.18.so [.] __strchr_sse2
1.24% mutt libc-2.18.so [.] __memcpy_sse2
1.17% mutt libc-2.18.so [.] _int_malloc
0.87% mutt libc-2.18.so [.] __strspn_sse42