|
|
ru.unix.bsd- RU.UNIX.BSD ------------------------------------------------------------------ From : Valentin Nechayev 2:5020/400 05 Sep 2004 10:53:03 To : Yar Tikhiy Subject : Re: interrupt -------------------------------------------------------------------------------- >>> Yar Tikhiy wrote: YT>>> Дело все в том, что в версии 4 еще сохранилось деление YT>>> ядра на верхнюю и нижнюю половины. Верхняя считается как YT>>> system, это все, что выполняется от имени процессов (грубо YT>>> говоря, syscalls). Hижняя -- interrupt, ее выполнение YT>>> инициируется как раз из прерываний от устройств. Очевидно, YT>>> что ipfw относится к нижней части. VN>> Оно и в пятерке есть. Только в старом bottom half остался только таймер. VN>> Остальное загнали на псевдопроцессы. Как по мне, не стоило так резко VN>> переключаться на эту схему. YT> Почему же? Коль решили делать систему с возможностью параллельного YT> выполнения, то надо переходить на многонитевое ядро. Оно и было многонитевым. В верхней части. Hижнюю же полностью перевести на такую работу невозможно принципиально, как минимум таймер и шедулер (не включая их фоновые пересчётные действия) не могут быть уложены в эту схему. YT> Ведь раньше YT> ядро BSD по сути представляло собой набор процедур, которые вызывались YT> процессами пользователей или обработчиками прерываний. Hасколько YT> я понял, при таком подходе весьма сложно сделать тонкую блокировку YT> общих данных и т.п. Она и не была нужна. А теперь посмотри на линуксовое ядро с его квадратно-гнездовой схемой. "Тонкая блокировка" есть. А структура - всё тот же "набор процедур". Скользящая сериализация имени FreeBSD5 - вещь хорошая для kernel preemption, а теперь объясни, накойхер нам kernel preemption в обычном сервере? Профилирование? Его можно и другими средствами делать вполне успешно. Вынесение заметной части работы из "ненумерованных" потоков прерываний (включая и аппаратные и softinterrupt) в нумерованные и учитываемые? Так это и без тотального скольжения можно сделать: PID TTY STAT TIME COMMAND 1 ? S 0:07 init [3] 2 ? SW 0:00 [keventd] 3 ? SWN 0:13 [ksoftirqd_CPU0] [...] # uname -mrs Linux 2.4.28-pre2-ow1 i686 Softinterrupt в этой схеме уже учтён - в ksoftirqd_CPU0. Потребуется вынести какие-то действия сюда ещё, разнести по разным потокам - будет точно так же сделано, ну будет больше похоже на FreeBSD'шную схему со множеством swi. Потребуется что-то вынести в фон - породят ещё ядрёных веток. А тотальный preemption зачем? Ради realtime? И где то realtime? YT> Теперь аппаратное прерывание только будит YT> соответствующую нить в ядре. Говоря умными словами, произошла смена YT> парадигмы :-) Hу, будит. Увеличивая количество горизонтальных переключений контекстов. Раньше обходились вертикальными переключениями для таких случаев, которые дешевле. YT>>> В CURRENT, я думаю, мы когда-нибудь увидим отдельные нити YT>>> ip_input, ipfw_in, ip_forward, ipfw_out, ip_output. VN>> Вполне возможно. А зачем ipfw_in отдельно от ip_input? YT> Чтобы можно было отдельно следить за потреблением ресурсов. Тогда YT> легче будет решать вопросы вроде: "Почему тормозит мой маршрутизатор?" Это решается профилированием. Ты, кстати, INN 2.4 рассматривал? Там встроили профилирование в innd, innreport рассказывает времена. А в ядре всё это уже есть - profile timer, осталось на него только учёт адресов навесить. -netch- --- ifmail v.2.15dev5.3 * Origin: Dark side of coredump (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.unix.bsd/223835f43d067.html, оценка из 5, голосов 10
|