futexes

sergey_m

1) Как называются ядерные сущности, которые соответствуют futexам в userland? В каком файле смотреть реализацию?
2) В инете можно найти места, где люди называют futexы словами shared locks. Действительно ли это так? Могут ли два треда обладать futexом? Может ли каждый из них проверить, что он владеет локом или нет?

Marinavo_0507

include/linux/futex.h
kernel/futex.c
кажется так
про shared locks - кажется, нет
в деталях не разбирался с этой шнягой

sergey_m

А есть ли в Линукс (или любой другой open source ОС) реализация shared/exclusive lockов, в которой каждый тред мог бы проверить, то что он держит/не держит сейчас лок?

Marinavo_0507

я в локах мало понимаю
в posix нет такого разве?

sergey_m

В pthread такого точно нет. В pthread, по-моему нету shared. Тем более, что мне нужна не спецификация, а реализация

Marinavo_0507

я думаю, можно реализовать это поверх футексов
как и поверх sysv ipc
как и наверное поверх примитивов из posix threads

sergey_m

Мне нужно это реализовать в ядре. То есть значит пользуясь только атомарными примитивами. И мне хочется такой же производительности, как у обычных мьютексов, во всяком случае, того же порядка.

Marinavo_0507

Если в ядре, то нужно использовать то, что есть в ядре.
Спинлоки, семафоры, wait queues и ещё что-то есть, это в линуксе.

sergey_m

В kernel/futex.c функция sys_futex - это собственно ядерная сторона syscallа?
P.S. Лень разбираться в том, как устроен syscall glue в Linux, а ты наверное знаешь.

Marinavo_0507

Если тебе нужно из юзерспейса синхронизироваться - то надо читать man futex, а в ядро смотреть, только чтоб понять как реализовано.
А если из ядра - то на футексы забей, и используй внутренние механизмы ядра.

sergey_m

shared lock - это примитив примерно того же уровня. Если его реализовывать с помощью перечисленного, то получится тормознуто.

sergey_m

> если из ядра - то на футексы забей, и используй внутренние механизмы ядра.
Я пока не въехал, но мне кажется что у футексов есть та функциональность, что мне интересна.

Marinavo_0507

Поищи в гугле Rusty's Unreliable Locking Guide, там для начинающих кернел-хакеров написано про локи.
Должно быть на netfilter.org
Локов разных дофига, наверняка найдёшь то, что надо.
Я не уверен, что футексы нормально из ядра юзать, ихний прикол как раз в том, что переключение в контекст
ядра происходит только в случае contention, то есть в нормальной ситуации выполняется только fast path полностью в юзерспейсе.

sergey_m

Ага, через хэш. Выглядит не очень быстро... Возможно удовлетворительно для userland. Надо пробовать и мерять.
Оставить комментарий
Имя или ник:
Комментарий: