Эксперимент по повышению эффективности работы утилиты cat

Ариадна Конилл (Ariadne Conill), создатель музыкального проигрывателя Audacious, инициатор разработки протокола IRCv3 и лидер команды по обеспечению безопасности Alpine Linux, провела исследование насколько можно оптимизировать утилиту cat, осуществляющую вывод в стандартный выходной поток одного иди нескольких файлов. Для улучшения производительности cat в Linux предложено два варианта оптимизаций, основанных на использовании системных вызовов sendfile и splice для прямого копирования данных между файловыми дескрипторами на уровне ядра без переключения контекста в пространство пользователя.

Базовая реализация, использующая традиционные вызовы read и write, приводящие к переключению контекста, при копировании 4ГБ файла из tmpfs показала производительность 3.6 GB/s. Вариант на базе sendfile позволил повысить производительность до 6.4 GB/s, а вариант на базе splice – до 11.6 GB/s, т.е. оказался быстрее исходного варианта более чем в 3 раза.

Release. Ссылка here.