Я искал подходящий метод для измерения стоимости различных системных вызовов в ОС Linux. В прошлом было много вопросов, связанных с этим топи c, но ни один из них не дает подробного описания того, как его точно измерить. В большинстве ответов произвольно утверждается, что стоимость системного вызова составляет 1-2 миллиарда долларов или несколько 100 циклов, если он кэшируется на ЦП.
- Накладные расходы на системные вызовы
- Накладные расходы на системные вызовы
Наивный способ, который я могу придумать для измерения стоимости системных вызовов, - это использовать инструкцию rdtscp для системного вызова, такого как getpid (). Однако этого недостаточно для точного измерения стоимости вызовов open (), read () или write (). Я могу изменить ядро и вставить специальный код таймера c в эти функции и измерить его, но это потребует изменений в ядре, которых я не хочу делать. Интересно, есть ли более простое решение, которое позволило бы мне измерить его из самого пользовательского пространства.
Обновление: 14 июля: после долгих поисков я нашел набор тестов libmicro от RedHat. https://github.com/redhat-performance/libMicro
Однако это создается некоторое время как go, и мне интересно, насколько это хорошо. Конечно, он не использует rdtscp, что добавляет некоторые ошибки измерения. Есть ли что-нибудь еще, чего не хватает при создании этого теста?