vDSO: почему Linux использует их только для функций, связанных со временем?

Просто искал в ядре Linux хуки vdso (например, нашел это на kernel.org), и в настоящее время он используется в основном для системных вызовов, связанных со временем. Это напоминает два вопроса:

  • Есть ли какие-либо другие системные вызовы, которые планируется использовать интерфейс vDSO в ближайшее время?
  • Действительно ли clock_gettime() становилось достаточно узким местом, чтобы мотивировать дизайн vDSO? Есть ли какое-то конкретное приложение, для которого это было полезно? Если да, то какое приложение и на сколько?

Просто казалось странным спроектировать новый интерфейс системного вызова ядра для просто временных поисков. Я предполагаю, что это помогает высокопроизводительным серверам для таких вещей, как отметка времени ответов на запросы и журналов. Но я хочу знать, есть ли у кого-то здесь более конкретные детали, чем просто догадки.

1 ответ

Решение

Причины появления vDSO

На руководства страницеvDSO говорится о причине создания этой специальной библиотеки:

Почему вообще существует vDSO? Ядро предоставляет некоторые системные вызовы, которые в конечном итоге часто используются в коде пользовательского пространства до такой степени, что такие вызовы могут доминировать над общей производительностью. Это связано как с частотой вызовов, так и с накладными расходами на переключение контекста, возникающими в результате выхода из пользовательского пространства и входа в ядро.

Дальнейшее чтение расскажет вам о различных стратегиях, используемых для обеспечения возможности обмена данными между ядром и пользовательским пространством. Особенно:

Эта информация также не является секретом - любое приложение в любом привилегированном режиме (root или любой непривилегированный пользователь) получит такой же ответ.

Примечание: выделено мной.

Это говорит нам о том, что данные, предлагаемые через этот интерфейс vDSO, должны быть общедоступными, к чему любой процесс, запущенный в системе, в любом случае будет иметь доступ. Очевидно, это очень важно.

Итак, напомним, у нас есть две причины / ограничения для добавления функций в vDSO:

  1. Функции должны предоставлять информацию, которая не является секретной.
  2. Функций нужно использовать настолько много, что действительно стоит перейти на vDSO

Доступные функции

Если вы посмотрите дальше на странице руководства vDSO, вы увидите списки функций, поддерживаемых различными реализациями (см. Раздел * ЗАМЕЧАНИЯ, ОСОБЕННЫЕ ДЛЯ АРХИТЕКТУРЫ). Это дает нам еще одну информацию: версию Linux, когда то или иное было реализовано / доступно. Самая первая доступная реализация была в Linux 2.5 (в конце 2001 года, обратите внимание, что это была версия для разработки, поэтому первой доступной для пользователя версией была версия 2.6.1 в 2003 году).

В vDSO находим следующие функции:

      sigreturn
rt_sigreturn
sigtramp
sigtramp32
sigtramp_rt32
sigtramp_rt64

syscall_via_break
syscall_via_epc
vsyscall
get_syscall_map
lws_entry
linux_gateway_entry

gettimeofday
clock_gettime
clock_gettime64
clock_getres
time

getcpu
get_tbfreq
sync_dicache
sync_dicache_p5
flush_icache

getpid
getppid
set_tid_address
set_thread_pointer
datapage_offset

Итак, в целом мы видим призывы к:

  • Сигнал
  • Система / Ядро
  • Время
  • ЦП / кэш
  • Процессы

Для процессоров x86 это в основном ограничено временем и процессором. В i386 также есть функции, связанные с сигналами.

Другие вопросы по тегам