GNU/Linuxтопик-ссылка FlexSC: новый механизм системных вызовов в ядре Linux

Эта статья рассказывает о новом механизме системных вызовов ядра Linux, который позволяет существенно сократить время исполнения приложений без необходимости их модификации. Уже 30 лет системные вызовы остаются стандартным и, в большинстве OS, единственным способом коммуникации между приложениями и ядром OS.

Комментарии (8)

Что-то я не понял, а как FlexSC-Threads понимает, что пора дергать flexsc_wait (для выполнения отложенных вызовов).
Судя по всему, никак. Дергает каждый раз. Если повезет, и в очереди окажутся вызовы из других потоков, то станет немного быстрее.
В том то и дело, что «дергает каждый раз» и «в очереди окажутся вызовы из других потоков» не стыкуются. Единственное что видится — вызов с задержкой, но хочется верить, что не все так просто.
Почему не стыкуется?
Поток синхронно вызывает flexsc_wait, когда ему надо выполнить все накопленные вызовы, в данном случае это делает библиотека FlexSC-Threads ровно для одного сискола, но сами вызовы flexsc_wait из разных потоков никак не взаимосвязаны, за счет этого и получается увеличение производительности, правда, при условии, что сисколы от всех потоков валятся прямо лавиной.

А ответ на вопрос «когда же реально произойдут сисколы?» кроется в этой фразе: «Приложение, пожелавшее использовать механизм FlexSC, делает системный вызов (классический) flexsc_register(), в результате которого ядро выделяет нескольких страниц памяти и создает новый внутриядерный поток, который в будущем будет обслуживать интерфейс FlexSC для этого приложения.»
Вот когда этот самый внутриядерный поток получит квант времени, тогда и выполнятся.

Хотя может все и не совсем так. Без деталей реализации трудно рассуждать.
  • avatar
  • LRN
  • 10 апреля 2011, 14:16
  • #
  • 0
Т.е. тупо сделать все syscall'ы асинхронными? Интересное решение.
Они только забыли, что синхронные вызовы нужны еще для контроля возможных ошибок и, соответственно, ветвления в случае разных результатов. Не думаю, что сильно большое количество системных вызовов ничего не возвращает, чтобы так лихо все делать асинхронным.
www.opennet.ru/opennews/art.shtml?num=30193#27
На видео 22:35
— Did it work on linux? Did you tried upstream patcher for the kernel pushes?
— No.
— Did you planned it?
— No.
— Why?!
— Because it think is a lot of timing effort that I prefer to use in another ways.
  • avatar
  • SPU
  • 13 апреля 2011, 00:15
  • #
  • 0
Однако для многопоточных приложений выигрыш оказывается значительным, так как FlexSC позволяет группировать исполнение системных вызовов многих потоков (которые просто по определению не могут быть взаимосвязанными).

Вот даже как… «по определению». «А мужики то не знают!» :)
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.