потоки в модуле ядра

Вопросы программного кода и архитектуры Linux

Модератор: Olej

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: потоки в модуле ядра

Непрочитанное сообщение Olej » 15 авг 2022, 16:23

Olej писал(а):
15 авг 2022, 15:47
поэтому некоторые краткие комментарии:
Ну, а дальше остаётся только многократно экспериментировать... Вот экспоненциальная степень роста полного объёма работы в зависимости от глубины вложенности (100 раз при росте max_level с 2 до 4):
- Без синхронизации:

Код: Выделить всё

olej@R420:~/2022/own.BOOKs/BHV.kernel/examples/thread/mlock$ time sudo insmod slock.ko rep=10 num=2 max_level=2 sync=-1
insmod: ERROR: could not insert module slock.ko: Operation not permitted

real    0m1,273s
user    0m0,007s
sys     0m0,007s

Код: Выделить всё

olej@R420:~/2022/own.BOOKs/BHV.kernel/examples/thread/mlock$ dmesg | grep ! | tail -n7
[18389.739924] ! repeat 10 times in 2 levels; synch. in level -1
[18389.740005] ! 4299489591 : kthread [21697:1] is running
[18389.740056] ! 4299489591 : kthread [21698:0] is running
[18390.936524] ! 4299489891 : kthread [21698:0] do 100 units
[18390.936526] ! 4299489891 : kthread [21697:1] do 100 units
[18390.936562] ! 4299489891 : kthread [21696:2] is finished
[18390.936564] !! working time was 1.2 seconds, locked 0 times
- С синхронизацией:

Код: Выделить всё

olej@R420:~/2022/own.BOOKs/BHV.kernel/examples/thread/mlock$ time sudo insmod slock.ko rep=10 num=2 max_level=4 sync=-1
insmod: ERROR: could not insert module slock.ko: Operation not permitted
real    2m0,379s
user    0m0,008s
sys     0m0,005s

Код: Выделить всё

olej@R420:~/2022/own.BOOKs/BHV.kernel/examples/thread/mlock$ dmesg | grep ! | tail -n7
[17830.610924] ! repeat 10 times in 4 levels; synch. in level -1
[17830.611044] ! 4299349808 : kthread [20915:1] is running
[17830.611099] ! 4299349808 : kthread [20916:0] is running
[17950.836423] ! 4299379865 : kthread [20916:0] do 10000 units
[17950.912423] ! 4299379884 : kthread [20915:1] do 10000 units
[17950.912433] ! 4299379884 : kthread [20914:2] is finished
[17950.912435] ! working time was 120.3 seconds, locked 0 times
Такое заметное торможение синхронизированной задачи, может, объясняется ещё и тем, что в отсутствии блокирования критических областей примитивами синхронизации (семафор в этом случае) в выполнении «работы» (как бы бессмысленной она не была) параллельно включаются другие ядра многопроцессорной системы. При включении синхронизации подключение к выполнению других процессоров пресекается. (Проверить это предположение у меня не было возможности, потому что одноядерные процессоры остались в доступе только в политехнических музеях.)

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: потоки в модуле ядра

Непрочитанное сообщение Olej » 15 авг 2022, 16:47

Olej писал(а):
15 авг 2022, 16:23
Вот экспоненциальная степень роста полного объёма работы в зависимости от глубины вложенности
А вот картина синхронизации на разных уровнях вложенности... различия в числе выполненных синхронизаций в зависимости от того на какой глубине вложения они применяются:

Код: Выделить всё

olej@R420:~/2022/own.BOOKs/BHV.kernel/examples/thread/mlock$ time sudo insmod slock.ko rep=7 num=5 max_level=3 sync=-1
insmod: ERROR: could not insert module slock.ko: Operation not permitted

real    0m4,233s
user    0m0,006s
sys     0m0,007s

olej@R420:~/2022/own.BOOKs/BHV.kernel/examples/thread/mlock$ dmesg | grep '!!' | tail -n1
[18805.948779] !! working time was 4.1 seconds, locked 0 times

Код: Выделить всё

olej@R420:~/2022/own.BOOKs/BHV.kernel/examples/thread/mlock$ time sudo insmod slock.ko rep=7 num=5 max_level=3 sync=0
insmod: ERROR: could not insert module slock.ko: Operation not permitted

real    0m20,668s
user    0m0,006s
sys     0m0,007s

olej@R420:~/2022/own.BOOKs/BHV.kernel/examples/thread/mlock$ dmesg | grep '!!' | tail -n1
[18907.343872] !! working time was 20.6 seconds, locked 1715 times

Код: Выделить всё

olej@R420:~/2022/own.BOOKs/BHV.kernel/examples/thread/mlock$ time sudo insmod slock.ko rep=7 num=5 max_level=3 sync=1
insmod: ERROR: could not insert module slock.ko: Operation not permitted

real    0m20,676s
user    0m0,008s
sys     0m0,004s

olej@R420:~/2022/own.BOOKs/BHV.kernel/examples/thread/mlock$ dmesg | grep '!!' | tail -n1
[18939.039549] !! working time was 20.6 seconds, locked 245 times

Код: Выделить всё

olej@R420:~/2022/own.BOOKs/BHV.kernel/examples/thread/mlock$ time sudo insmod slock.ko rep=7 num=5 max_level=3 sync=2
insmod: ERROR: could not insert module slock.ko: Operation not permitted

real    0m20,712s
user    0m0,009s
sys     0m0,003s

olej@R420:~/2022/own.BOOKs/BHV.kernel/examples/thread/mlock$ dmesg | grep '!!' | tail -n1
[18982.239179] !! working time was 20.6 seconds, locked 35 times

Код: Выделить всё

olej@R420:~/2022/own.BOOKs/BHV.kernel/examples/thread/mlock$ time sudo insmod slock.ko rep=7 num=5 max_level=3 sync=3
insmod: ERROR: could not insert module slock.ko: Operation not permitted

real    0m20,764s
user    0m0,009s
sys     0m0,003s

olej@R420:~/2022/own.BOOKs/BHV.kernel/examples/thread/mlock$ dmesg | grep '!!' | tail -n1
[19015.890922] !! working time was 20.6 seconds, locked 5 times

Код: Выделить всё

olej@R420:~/2022/own.BOOKs/BHV.kernel/examples/thread/mlock$ time sudo insmod slock.ko rep=7 num=5 max_level=3 sync=4
insmod: ERROR: could not insert module slock.ko: Operation not permitted

real    0m4,195s
user    0m0,008s
sys     0m0,005s

olej@R420:~/2022/own.BOOKs/BHV.kernel/examples/thread/mlock$ dmesg | grep '!!' | tail -n1
[19030.418666] !! working time was 4.1 seconds, locked 0 times
Очень показательно в выводе число обращений (locked) к семафору: на одном и том же периоде выполнения число обращений изменяется на 3 порядка!

Ответить

Вернуться в «Linux изнутри»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 11 гостей