The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



"Представлен модуль ядра, способный в разы ускорить OpenVPN"
Версия для распечатки Пред. тема | След. тема
Форум Разговоры, обсуждение новостей
Исходное сообщение [ Отслеживать ]
Есть идеи по улучшению форума и сайта ? Пишите.
. "Представлен модуль ядра, способный в разы ускорить OpenVPN" +/
Сообщение от Совершенно другой аноним (?), 23-Сен-21, 10:20 
Справедливости ради, одной из причин, по которой не особо взлетели микроядра, это и были лишние накладные расходы на системные вызовы и переключение контекстов. Для примера можно посмотреть работу прикладной программы с сетевой файловой системой.

В linux с ядерным nfs, прикладная программа говорит open() на какой-то сетевой файл, происходит системный вызов (1с), далее начинается беготня по ядру, сначала по коду клиента nfs, потом по сетевой подсистеме, которая обеспечивает протокольную часть, а затем и по драйверной части, если за это время нам понадобилось чего-то ждать, то может происходить переключение контекстов на другой процесс/поток (1п?). Как бы то ни было, всё заканчивается выдачей сформированного пакета через один из сетевых интерфейсов. Затем происходит возврат из ядра, но в данном случае мы его не будем рассматривать.

В микроядерной QNX6 всё немного по-другому. Прикладная программа говорит open() на какой-то сетевой файл. Происходит системный вызов (1с) микроядра, и переключение (1п) на прикладной процесс демона nfs, который внутри себя начинает формировать пакет и далее опять вызывает микроядро (2с), которое переключается (2п) на процесс сетевой подсистемы, который уже выдаёт сообщение через один из сетевых интерфейсов. Аналогично в процессе работы как nfs, так и процесса сетевой подсистемы им может понадобиться чего-то подождать, что потребует ещё одного или более переключений контекста (3п?).

В QNX4 было-бы ещё сложнее - там был отдельный процесс обеспечивающий стек протоколов tcp/ip, а отдельно - сетевая подсистема работающая с сетевыми-же интерфейсами, т.е. системных вызовов и переключений контекста было-бы ещё больше.

В итоге видите, что в linux для открытия файла на nfs требуется один условный системный вызов и половину переключения контекста (может быть, а может нет), в микроядерной QNX требуется два системных вызова и два с половиной переключения. На самом деле всё гораздо сложнее, в обоих случаях и в linux и в QNX могут потребоваться ещё дополнительные системные вызовы и переключения контекста, но по факту, в QNX их количество будет больше, соответственно больше будут и накладные расходы на аналогичные операции.

Аналогично и для простых файловых систем, которые в микроядерной ОС будут отдельными менеджерами и, соответственно, будут требовать отдельные системные вызовы в ядро и переключения контекста процессора на себя.

Ответить | Правка | Наверх | Cообщить модератору

Оглавление
Представлен модуль ядра, способный в разы ускорить OpenVPN, opennews, 21-Сен-21, 21:11  [смотреть все]
Форумы | Темы | Пред. тема | След. тема



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру