LINUX.ORG.RU

[kernel] Семафоры и RCU

 


0

0

Есть секция закрытая rcu_read_lock (netfilter: nf_hook_slow), где то там, в глубине, есть секция кода, которую необходимо распараллелить на n ядер платформы. Соответственно заранее порождаются потоки, и ожидают постановок задач в очередь. Все это дело прикрыто семаформами. Собственно после up() все к чертям валится в ребут даже без кернел паника. Есть ли адекватное решение этой проблемы?

Ответ на: комментарий от vasily_pupkin

> ВНЕЗАПНО в биосе был обрублен мульикоре. Проблема снята.

Не понял юмора. Типа падать в однопроцессорном режиме нынче не зазорно?

const86 ★★★★★
()
Ответ на: комментарий от const86

Вообще странно что линукс валится от userspace программок, винду, я многопоточность часто ронял, но там это в порядке вещей.

wfrr ★★☆
()
Ответ на: комментарий от wfrr

> Вообще странно что линукс валится от userspace программок, винду, я многопоточность часто ронял, но там это в порядке вещей.

О таких багах принято сообщать разработчикам ядра (если юзерспейсная программа - это не modprobe с кривым .ko в init).

sf ★★★
()
Ответ на: комментарий от wfrr

С чего вы взяли что это было про йузерспейс? То когда оно падало - это был ап семафора из атомарного процесса в другой поток. Какого хрена оно падало - тот еще вопрос конечно, но думаю там имело место быть печальное стечение обстоятельств.

vasily_pupkin ★★★★★
() автор топика
Ответ на: комментарий от tailgunner

Это конечно круто, но если мне нужен именно семантический семафор? Я пока скрестил атомарную переменную и wake_up_process, но яхз на сколько это корректно

vasily_pupkin ★★★★★
() автор топика
Ответ на: комментарий от tailgunner

Необходимо выполнить достаточно тяжелое преобразование над IP пакетом. Код обработчика встроен в netfilter hook. Задачу можно распараллелить. Принято решение запустить n потоков, по числу ядер-1, и в них обрабатывать участки пакета. У потоков есть очередь, в которую набиваются задания. Пока очередь пустая, потоки спят. Ну в общем и все..

vasily_pupkin ★★★★★
() автор топика
Ответ на: комментарий от vasily_pupkin

> У потоков есть очередь, в которую набиваются задания.

Ммм... это же workqueue, не? Там просто не нужны дополнительные примитивы синхронизации. http://lwn.net/Articles/23634/ http://lwn.net/Articles/211279/

Альтернативно, можно построить свою очередь из completion и спинлока.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

Это все круто, но не очень. С workqueue небольшой гемморой - мне необходимо гарантированное выполнение максимально в одно время куска кода на разных процах. И еще мне нужно ждать выполнения всех потоков. И еще без schedule(), потому что я в атомарном контексте. Все было бы чудесно с wake_up_process(), но тут одна лажа - какого то черта он не всегда просыпается O_o

vasily_pupkin ★★★★★
() автор топика
Ответ на: комментарий от vasily_pupkin

> мне необходимо гарантированное выполнение максимально в одно время куска кода на разных процах.

Не распарсил.

> мне нужно ждать выполнения всех потоков. И еще без schedule(), потому что я в атомарном контексте.

Ты по факту в прерывании несколько нитей организовываешь? O_o

> было бы чудесно с wake_up_process(), но тут одна лажа - какого то черта он не всегда просыпается O_o

Я удивлен, что оно вообще работает. Побудка нити, которая в атомарном состоянии - какой ужас O_o

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

>> мне нужно ждать выполнения всех потоков. И еще без schedule(), потому что я в атомарном контексте.

> Ты по факту в прерывании несколько нитей организовываешь? O_o

Ну не то что бы организовываю, а использую :D

>> было бы чудесно с wake_up_process(), но тут одна лажа - какого то черта он не всегда просыпается O_o

> Я удивлен, что оно вообще работает. Побудка нити, которая в атомарном состоянии - какой ужас O_o

То что я бужу - не атомарное, а вполне себе мирно спит.

vasily_pupkin ★★★★★
() автор топика
Ответ на: комментарий от vasily_pupkin

> То что я бужу - не атомарное, а вполне себе мирно спит.

Тогда я не понимаю, что не так с workqueue. Задери рабочим нитям приоритеты, и онибудут вступать в дело сразу же.

tailgunner ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.