[PlanetCCRMA] Akmod for the realtime kernel

Fernando Lopez-Lezcano nando at ccrma.Stanford.EDU
Mon Jan 10 15:06:07 PST 2022


On 1/9/22 12:23 PM, Fernando Lopez-Lezcano wrote:
> On 1/9/22 11:21 AM, Fernando Lopez-Lezcano wrote:
>> On 1/9/22 4:39 AM, Yoann LE BARS wrote:
...
>>>      Thank you for this information, this is good news. I guess I can 
>>> wait until 5.16.
>>
>> I think you do not need to wait till 5.16 if you want to try this, 
>> current Fedora kernels do have this option but it is turned off by 
>> default as Nils pointed out (ie: without configuration the kernel 
>> boots into PREEMPT_VOLUNTARY instead of PREEMPT_FULL). I think the 
>> option was introduced in 5.12 (5.13 certainly has it).
> 
> Nils pointed out to me off-list that there are two options:
> 
> CONFIG_HAVE_PREEMPT_DYNAMIC
> and
> CONFIG_PREEMPT_DYNAMIC

Thanks to Nils for the clarification! I had forgotten the details of 
what I was _actually_ using... :-(

So, I am currently using a kernel for audio that has 
CONFIG_PREEMPT_DYNAMIC enabled (I had to add that to the kernel build) 
and the special Motu audio driver (64 channels I/O over USB at 48KHz).

The stock Fedora kernel does not have CONFIG_PREEMPT_DYNAMIC enabled by 
default, as Nils pointed out, so cross fingers that it is enabled in the 
near future. It makes a big difference.

See below for some numbers...
-- Fernando


The short: running with preempt=full and CONFIG_PREEMPT_DYNAMIC shows 
much less, and more consistent latency than the stock kernel with 
PREEMPT_VOLUNTARY. Latency topping at 29 or so. The stock Fedora kernel 
shows peaks up to almost 400, it does have reasonable performance but 
those peaks are the problem.

The second run shows system A (preempt=full) running with jackd and 
heavy dsp load (three supernova threads and gui). You can see how 
cyclictest is basically measuring the latency due to the three dsp cores 
being loaded. A third run with a higher priority for cyclictest goes 
back to the previous low figures.

A run without SCHED_FIFO shows the higher latencies to be expected. Much 
more so with PREEMPT_VOLUNTARY in the stock Fedora kernel.

Hope this helps...


==== System A: kernel 5.14.8-200.1.motu.fc34.ccrma (preempt=full)

Ryzen 5700U NUC, 8 cores / 16 threads in a fanless case:

---- mostly idle (just jackd running)

# cyclictest --smp --policy=fifo --duration=90 --default-system
defaulting realtime priority to 17
WARN: not setting cpu_dma_latency from cyclictest
policy: fifo: loadavg: 0.76 0.29 0.10 1/767 550331

T: 0 (550231) P:17 I:1000 C:  89994 Min:   1 Act:    2 Avg:    2 Max:   18
T: 1 (550232) P:17 I:1500 C:  59996 Min:   1 Act:    2 Avg:    1 Max:   14
T: 2 (550233) P:17 I:2000 C:  44997 Min:   1 Act:    2 Avg:    1 Max:   19
T: 3 (550234) P:17 I:2500 C:  35997 Min:   1 Act:    2 Avg:    1 Max:   15
T: 4 (550235) P:17 I:3000 C:  29998 Min:   1 Act:    2 Avg:    2 Max:   10
T: 5 (550236) P:17 I:3500 C:  25712 Min:   1 Act:    3 Avg:    1 Max:   12
T: 6 (550237) P:17 I:4000 C:  22498 Min:   1 Act:    2 Avg:    1 Max:   15
T: 7 (550238) P:17 I:4500 C:  19998 Min:   1 Act:    2 Avg:    1 Max:   17
T: 8 (550239) P:17 I:5000 C:  17998 Min:   2 Act:    2 Avg:    2 Max:   14
T: 9 (550240) P:17 I:5500 C:  16362 Min:   1 Act:    2 Avg:    2 Max:   29
T:10 (550241) P:17 I:6000 C:  14999 Min:   1 Act:    2 Avg:    2 Max:   16
T:11 (550242) P:17 I:6500 C:  13845 Min:   1 Act:    2 Avg:    2 Max:   14
T:12 (550243) P:17 I:7000 C:  12856 Min:   1 Act:    3 Avg:    2 Max:   15
T:13 (550244) P:17 I:7500 C:  11999 Min:   1 Act:    2 Avg:    2 Max:   17
T:14 (550245) P:17 I:8000 C:  11249 Min:   1 Act:    2 Avg:    2 Max:   13
T:15 (550246) P:17 I:8500 C:  10587 Min:   1 Act:    4 Avg:    2 Max:   17

---- with high DSP/CPU load, SuperCollider with supernova multithreaded 
server (3 threads), qt gui running:

# cyclictest --smp --policy=fifo --duration=90 --default-system
defaulting realtime priority to 17
WARN: not setting cpu_dma_latency from cyclictest
policy: fifo: loadavg: 3.07 1.16 0.42 1/840 553358

T: 0 (553259) P:17 I:1000 C:  58001 Min:   2 Act: 1352 Avg:  699 Max: 4574
T: 1 (553260) P:17 I:1500 C:  58430 Min:   2 Act:  817 Avg:  260 Max: 3694
T: 2 (553261) P:17 I:2000 C:  44510 Min:   2 Act:   82 Avg:  303 Max: 3666
T: 3 (553262) P:17 I:2500 C:  35996 Min:   1 Act:   11 Avg:    5 Max:   25
T: 4 (553263) P:17 I:3000 C:  29997 Min:   2 Act:    2 Avg:    2 Max:  134
T: 5 (553264) P:17 I:3500 C:  25711 Min:   1 Act:    2 Avg:    2 Max:   15
T: 6 (553265) P:17 I:4000 C:  22497 Min:   2 Act:    2 Avg:    2 Max:  139
T: 7 (553266) P:17 I:4500 C:  19998 Min:   2 Act:    2 Avg:    2 Max:   28
T: 8 (553267) P:17 I:5000 C:  17998 Min:   2 Act:    3 Avg:    3 Max:   28
T: 9 (553268) P:17 I:5500 C:  16362 Min:   2 Act:    2 Avg:    3 Max:   50
T:10 (553269) P:17 I:6000 C:  14998 Min:   2 Act:    5 Avg:    3 Max:   25
T:11 (553270) P:17 I:6500 C:  13844 Min:   2 Act:    3 Avg:    3 Max:   26
T:12 (553271) P:17 I:7000 C:  12855 Min:   2 Act:    6 Avg:    3 Max:   23
T:13 (553272) P:17 I:7500 C:  11998 Min:   2 Act:    5 Avg:    3 Max:   25
T:14 (553273) P:17 I:8000 C:  11248 Min:   2 Act:    6 Avg:    3 Max:   27
T:15 (553274) P:17 I:8500 C:  10587 Min:   2 Act:    4 Avg:    4 Max:   20

---- same as the previous test but running cyclictest with a higher 
priority than the jackd and other FIFO tasks (except for system tasks):

# cyclictest --smp --policy=fifo --duration=90 --default-system 
--priority=85
WARN: not setting cpu_dma_latency from cyclictest
policy: fifo: loadavg: 2.78 1.84 0.84 4/838 553632

T: 0 (553533) P:85 I:1000 C:  89997 Min:   2 Act:    7 Avg:    4 Max:   33
T: 1 (553534) P:85 I:1500 C:  59998 Min:   2 Act:    5 Avg:    4 Max:   30
T: 2 (553535) P:85 I:2000 C:  44998 Min:   2 Act:    3 Avg:    4 Max:   22
T: 3 (553536) P:85 I:2500 C:  35998 Min:   2 Act:    7 Avg:    4 Max:   21
T: 4 (553537) P:85 I:3000 C:  29999 Min:   2 Act:    2 Avg:    2 Max:   14
T: 5 (553538) P:85 I:3500 C:  25713 Min:   1 Act:    2 Avg:    2 Max:   18
T: 6 (553539) P:85 I:4000 C:  22499 Min:   2 Act:    2 Avg:    2 Max:   19
T: 7 (553540) P:85 I:4500 C:  19999 Min:   2 Act:    2 Avg:    2 Max:   20
T: 8 (553541) P:85 I:5000 C:  17999 Min:   2 Act:    4 Avg:    3 Max:   20
T: 9 (553542) P:85 I:5500 C:  16363 Min:   2 Act:    7 Avg:    3 Max:   34
T:10 (553543) P:85 I:6000 C:  14999 Min:   2 Act:    4 Avg:    3 Max:   38
T:11 (553544) P:85 I:6500 C:  13845 Min:   2 Act:    7 Avg:    3 Max:   27
T:12 (553545) P:85 I:7000 C:  12856 Min:   2 Act:    6 Avg:    3 Max:   26
T:13 (553546) P:85 I:7500 C:  11999 Min:   2 Act:    4 Avg:    3 Max:   23
T:14 (553547) P:85 I:8000 C:  11249 Min:   2 Act:    5 Avg:    3 Max:   19
T:15 (553548) P:85 I:8500 C:  10587 Min:   2 Act:   14 Avg:    3 Max:   21

---- system idle, using SCHED_OTHER scheduling:

# cyclictest --smp --duration=90 --default-system
WARN: not setting cpu_dma_latency from cyclictest
policy: other/other: loadavg: 0.99 1.80 1.22 1/771 553957

T: 0 (553900) P: 0 I:1000 C:  89990 Min:   4 Act:   59 Avg:   52 Max:   77
T: 1 (553901) P: 0 I:1500 C:  59993 Min:   6 Act:   53 Avg:   52 Max:   65
T: 2 (553902) P: 0 I:2000 C:  44995 Min:  52 Act:   53 Avg:   52 Max:   68
T: 3 (553903) P: 0 I:2500 C:  35996 Min:  52 Act:   52 Avg:   52 Max:  467
T: 4 (553904) P: 0 I:3000 C:  29996 Min:  39 Act:   58 Avg:   52 Max:   75
T: 5 (553905) P: 0 I:3500 C:  25711 Min:  52 Act:   52 Avg:   52 Max:   69
T: 6 (553906) P: 0 I:4000 C:  22497 Min:  52 Act:   52 Avg:   52 Max: 2046
T: 7 (553907) P: 0 I:4500 C:  19997 Min:  52 Act:   53 Avg:   52 Max: 4154
T: 8 (553908) P: 0 I:5000 C:  17998 Min:  38 Act:   41 Avg:   39 Max:  413
T: 9 (553909) P: 0 I:5500 C:  16361 Min:  11 Act:   53 Avg:   39 Max:  227
T:10 (553910) P: 0 I:6000 C:  14998 Min:   5 Act:    8 Avg:    7 Max:  200
T:11 (553911) P: 0 I:6500 C:  13844 Min:  52 Act:   53 Avg:   53 Max: 2114
T:12 (553912) P: 0 I:7000 C:  12855 Min:  15 Act:   53 Avg:   53 Max: 1916
T:13 (553913) P: 0 I:7500 C:  11998 Min:   5 Act:   52 Avg:   52 Max:  304
T:14 (553914) P: 0 I:8000 C:  11248 Min:   4 Act:   52 Avg:   53 Max:  832
T:15 (553915) P: 0 I:8500 C:  10587 Min:  15 Act:   53 Avg:   53 Max:   72


==== System B: Fedora stock kernel 5.15.12-100.fc34

Same hardware as system A

---- mostly idle (w an instance of firefox showing the motu mixer)

# cyclictest  --smp --policy=fifo --duration=90 --default-system
defaulting realtime priority to 17
WARN: not setting cpu_dma_latency from cyclictest
policy: fifo: loadavg: 0.83 0.34 0.12 1/1043 149044

T: 0 (148849) P:17 I:1000 C:  89998 Min:   1 Act:    1 Avg:    1 Max:  200
T: 1 (148850) P:17 I:1500 C:  59999 Min:   1 Act:    1 Avg:    1 Max:  100
T: 2 (148851) P:17 I:2000 C:  44999 Min:   1 Act:    1 Avg:    1 Max:   25
T: 3 (148852) P:17 I:2500 C:  35999 Min:   1 Act:    1 Avg:    1 Max:   16
T: 4 (148853) P:17 I:3000 C:  29999 Min:   1 Act:    1 Avg:    1 Max:  115
T: 5 (148854) P:17 I:3500 C:  25713 Min:   1 Act:    2 Avg:    1 Max:   15
T: 6 (148855) P:17 I:4000 C:  22499 Min:   1 Act:    1 Avg:    1 Max:   16
T: 7 (148856) P:17 I:4500 C:  19999 Min:   1 Act:    2 Avg:    1 Max:   18
T: 8 (148857) P:17 I:5000 C:  17999 Min:   1 Act:    2 Avg:    2 Max:  112
T: 9 (148858) P:17 I:5500 C:  16363 Min:   1 Act:    2 Avg:    2 Max:  121
T:10 (148859) P:17 I:6000 C:  14999 Min:   1 Act:    2 Avg:    2 Max:   72
T:11 (148860) P:17 I:6500 C:  13845 Min:   1 Act:    2 Avg:    2 Max:  194
T:12 (148861) P:17 I:7000 C:  12856 Min:   1 Act:    2 Avg:    2 Max:   16
T:13 (148862) P:17 I:7500 C:  11999 Min:   1 Act:    2 Avg:    1 Max:   14
T:14 (148863) P:17 I:8000 C:  11249 Min:   1 Act:    2 Avg:    2 Max:  720
T:15 (148864) P:17 I:8500 C:  10588 Min:   1 Act:    2 Avg:    2 Max:   19

---- idle

# cyclictest  --smp --policy=fifo --duration=90 --default-system
defaulting realtime priority to 17
WARN: not setting cpu_dma_latency from cyclictest
policy: fifo: loadavg: 0.71 0.30 0.11 1/1051 156528

T: 0 (156369) P:17 I:1000 C:  89992 Min:   1 Act:    2 Avg:    1 Max:   51
T: 1 (156370) P:17 I:1500 C:  59994 Min:   1 Act:    2 Avg:    1 Max:   74
T: 2 (156371) P:17 I:2000 C:  44995 Min:   1 Act:    2 Avg:    1 Max:   32
T: 3 (156372) P:17 I:2500 C:  35996 Min:   1 Act:    2 Avg:    1 Max:   19
T: 4 (156373) P:17 I:3000 C:  29997 Min:   1 Act:    1 Avg:    1 Max:  366
T: 5 (156374) P:17 I:3500 C:  25712 Min:   1 Act:    2 Avg:    1 Max:   15
T: 6 (156375) P:17 I:4000 C:  22498 Min:   1 Act:    2 Avg:    1 Max:  277
T: 7 (156376) P:17 I:4500 C:  19998 Min:   1 Act:    2 Avg:    1 Max:   21
T: 8 (156377) P:17 I:5000 C:  17998 Min:   1 Act:    2 Avg:    2 Max:  148
T: 9 (156378) P:17 I:5500 C:  16362 Min:   1 Act:    2 Avg:    2 Max:   85
T:10 (156379) P:17 I:6000 C:  14998 Min:   1 Act:    4 Avg:    2 Max:   25
T:11 (156380) P:17 I:6500 C:  13844 Min:   1 Act:    6 Avg:    2 Max:   19
T:12 (156381) P:17 I:7000 C:  12856 Min:   1 Act:    4 Avg:    2 Max:   21
T:13 (156382) P:17 I:7500 C:  11998 Min:   1 Act:    1 Avg:    2 Max:   20
T:14 (156383) P:17 I:8000 C:  11248 Min:   1 Act:    4 Avg:    2 Max:   19
T:15 (156384) P:17 I:8500 C:  10587 Min:   1 Act:    3 Avg:    2 Max:   16

---- using SCHED_OTHER

# cyclictest  --smp --duration=90 --default-system
WARN: not setting cpu_dma_latency from cyclictest
policy: other/other: loadavg: 0.77 0.46 0.22 1/722 157246

T: 0 (157087) P: 0 I:1000 C:  89978 Min:  35 Act:   53 Avg:   52 Max: 5117
T: 1 (157088) P: 0 I:1500 C:  59995 Min:   3 Act:   52 Avg:   52 Max: 1642
T: 2 (157089) P: 0 I:2000 C:  44997 Min:  39 Act:   52 Avg:   52 Max:  578
T: 3 (157090) P: 0 I:2500 C:  35998 Min:  15 Act:   52 Avg:   52 Max: 1931
T: 4 (157091) P: 0 I:3000 C:  29998 Min:  15 Act:   52 Avg:   52 Max:  875
T: 5 (157092) P: 0 I:3500 C:  25712 Min:  51 Act:   52 Avg:   52 Max: 3421
T: 6 (157093) P: 0 I:4000 C:  22496 Min:   3 Act:   52 Avg:   53 Max: 5916
T: 7 (157094) P: 0 I:4500 C:  19996 Min:   4 Act:   53 Avg:   53 Max: 7900
T: 8 (157095) P: 0 I:5000 C:  17998 Min:   5 Act:   53 Avg:   53 Max: 5887
T: 9 (157096) P: 0 I:5500 C:  16362 Min:  51 Act:   52 Avg:   52 Max:  559
T:10 (157097) P: 0 I:6000 C:  14999 Min:   4 Act:   52 Avg:   53 Max: 5730
T:11 (157098) P: 0 I:6500 C:  13845 Min:   8 Act:   52 Avg:   53 Max: 5832
T:12 (157099) P: 0 I:7000 C:  12856 Min:  11 Act:   54 Avg:   52 Max:  371
T:13 (157100) P: 0 I:7500 C:  11999 Min:  52 Act:   53 Avg:   52 Max:   67
T:14 (157101) P: 0 I:8000 C:  11249 Min:  42 Act:   52 Avg:   52 Max:   84
T:15 (157102) P: 0 I:8500 C:  10587 Min:  52 Act:   54 Avg:   52 Max:   76



More information about the PlanetCCRMA mailing list