Ну, а дальше остаётся только многократно экспериментировать... Вот экспоненциальная степень роста полного объёма работы в зависимости от глубины вложенности (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