Customising kernel for low latency.

Hi,
I wanted to experiment ‘creating’ my own low latency kernel for audio production (Jack server etc). Reading some articles including https://www.suse.com/c/compiling-de-linux-kernel-suse-way/ and https://www.kernel.org/doc/html/latest/admin-guide/README.html?highlight=menuconfig I felt confident enough to have a try at it.

I installed Leap 42.3 on a Virtualbox and did a refresh and update. The kernel was 4.4.155-68-default

chris@linux-6h1q:~> uname -r
4.4.155-68-default

and runs fine even though the virtualbox guest module was 5.2.18_k4.4.143_65-56.1.

Information for package virtualbox-guest-kmp-default:
-----------------------------------------------------
Repository     : openSUSE-Leap-42.3-Update          
Name           : virtualbox-guest-kmp-default       
Version        : 5.2.18_k4.4.143_65-56.1            
Arch           : x86_64                             
Vendor         : openSUSE                           
Installed Size : 606.4 KiB                          
Installed      : Yes (automatically)                
Status         : up-to-date                         
Source package : virtualbox-5.2.18-56.1.src         
Summary        : Guest kernel modules for VirtualBox
Description    :                                    
    VirtualBox is an extremely feature rich, high performance product
    for enterprise customers, it is also the only professional solution
    that is freely available as Open Source Software under the terms of the
    GNU Public License (GPL).

I created a folder under my home called kernel/mykernel and copied the source kernel here as well as the default config file from /boot here as .config.

linux-6h1q:~/kernel/mykernel # cp -r /usr/src/linux-4.4.155-68/* .
linux-6h1q:~/kernel/mykernel # cp /boot/config-4.4.155-68-default .config

I next ran ‘make menuconfig’ to change only the LOCALVERSION to ‘-RTmine-default’ , the Preemption Model from Server to low latency (see pic at https://paste.opensuse.org/9184282 ) and changed the frequency to 100Hz. These were the only 3 edits and the diff results are shown here.


linux-6h1q:/home/chris/kernel/mykernel # diff /boot/config-4.4.155-68-default .config
3c3
< # Linux/x86_64 4.4.141 Kernel Configuration
---
> # Linux/x86 4.4.155 Kernel Configuration
56c56
< CONFIG_LOCALVERSION="-68-default"
---
> CONFIG_LOCALVERSION="-RTmine-default"
136c136
< CONFIG_TREE_RCU=y
---
> CONFIG_PREEMPT_RCU=y
262d261
< CONFIG_OPTPROBES=y
385,389c384
< CONFIG_INLINE_SPIN_UNLOCK_IRQ=y
< CONFIG_INLINE_READ_UNLOCK=y
< CONFIG_INLINE_READ_UNLOCK_IRQ=y
< CONFIG_INLINE_WRITE_UNLOCK=y
< CONFIG_INLINE_WRITE_UNLOCK_IRQ=y
---
> CONFIG_UNINLINE_SPIN_UNLOCK=y
467c462
< CONFIG_PREEMPT_NONE=y
---
> # CONFIG_PREEMPT_NONE is not set
469c464
< # CONFIG_PREEMPT is not set
---
> CONFIG_PREEMPT=y
583c578
< CONFIG_HZ_250=y
---
> # CONFIG_HZ_250 is not set
585,586c580,581
< # CONFIG_HZ_1000 is not set
< CONFIG_HZ=250
---
> CONFIG_HZ_1000=y
> CONFIG_HZ=1000
5092d5086
< # CONFIG_DRM_I810 is not set
7357a7352
> CONFIG_DEBUG_PREEMPT=y
7436a7432
> # CONFIG_PREEMPT_TRACER is not set

I then ran -

linux-6h1q:~/kernel/mykernel # time make -j6
.
.(line removed by me)
.
real    22m57.498s
user    84m46.396s
sys    9m14.464s

followed by

linux-6h1q:/home/chris/kernel/mykernel # time make -j6 modules
  CHK     include/config/kernel.release
  CHK     include/generated/uapi/linux/version.h
  CHK     include/generated/utsrelease.h
  CHK     include/generated/timeconst.h
  CHK     include/generated/bounds.h
  CHK     include/generated/asm-offsets.h
  CALL    scripts/checksyscalls.sh
  Building modules, stage 2.
  MODPOST 3697 modules
WARNING: arch/x86/kvm/kvm-intel.o(.init.text+0xd18): Section mismatch in reference from the function init_module() to the function .exit.text:vmx_exit()
The function __init init_module() references
a function __exit vmx_exit().
This is often seen when error handling in the init function
uses functionality in the exit path.
The fix is often to remove the __exit annotation of
vmx_exit() so it may be used outside an exit section.


real    4m36.350s
user    2m14.241s
sys    0m40.028s

Next -

linux-6h1q:/home/chris/kernel/mykernel # time make -j6 modules_install

  INSTALL /lib/firmware/4.4.155-RTmine-default/yam/1200.bin
  INSTALL /lib/firmware/4.4.155-RTmine-default/yam/9600.bin
  DEPMOD  4.4.155RTmine

real    2m30.570s
user    0m28.789s
sys    0m34.772s

And finally -

linux-6h1q:/home/chris/kernel/mykernel # time make -j6 install

dracut:  root=UUID=33570143-ca15-447e-a3cd-974e9ed93c92 rootfstype=btrfs rootflags=rw,relatime,space_cache,subvolid=259,subvol=/@/.snapshots/1/snapshot,subvol=@/.snapshots/1/snapshot
dracut: *** Creating image file '/boot/initrd-4.4.15-RTmine-default' ***
dracut: *** Creating initramfs image file '/boot/initrd-4.4.15-RTmine-default' done ***

real    1m17.737s
user    0m49.606s
sys    0m21.512s

The results in /boot -

chris@linux-6h1q:~> ls -al /boot
total 153588
drwxr-xr-x 1 root root     1384 Oct 10 13:59 .
drwxr-xr-x 1 root root      166 Oct 10 12:41 ..
-rw-r--r-- 1 root root      512 Oct 10 12:04 backup_mbr
-rw-r--r-- 1 root root     1725 Jul 19 20:06 boot.readme
-rw-r--r-- 1 root root   180135 Sep 12 20:12 config-4.4.155-68-default
-rw-r--r-- 1 root root   180026 Oct 10 13:49 config-4.4.155-RTmine-default
-rw-r--r-- 1 root root   179969 Jul 16  2017 config-4.4.76-1-default
drwxr-xr-x 1 root root      140 Oct 10 14:57 grub2
lrwxrwxrwx 1 root root       25 Oct 10 12:39 initrd -> initrd-4.4.155-68-default
-rw------- 1 root root  9887520 Oct 10 12:41 initrd-4.4.155-68-default
-rw------- 1 root root  9689808 Oct 10 14:57 initrd-4.4.155-RTmine-default
-rw------- 1 root root  9677428 Oct 10 12:41 initrd-4.4.76-1-default
-rw-r--r-- 1 root root   502272 Oct 10 11:58 message
-rw-r--r-- 1 root root   999094 Sep 12 21:05 symtypes-4.4.155-68-default.gz
-rw-r--r-- 1 root root   995727 Jul 16  2017 symtypes-4.4.76-1-default.gz
-rw-r--r-- 1 root root   342888 Sep 12 21:01 symvers-4.4.155-68-default.gz
-rw-r--r-- 1 root root   340794 Jul 16  2017 symvers-4.4.76-1-default.gz
-rw-r--r-- 1 root root      377 Sep 12 21:01 sysctl.conf-4.4.155-68-default
-rw-r--r-- 1 root root      377 Jul 16  2017 sysctl.conf-4.4.76-1-default
-rw-r--r-- 1 root root  3297500 Sep 12 20:53 System.map-4.4.155-68-default
-rw-r--r-- 1 root root  3298407 Oct 10 14:07 System.map-4.4.155-RTmine-default
-rw-r--r-- 1 root root  3266760 Jul 16  2017 System.map-4.4.76-1-default
-rw-r--r-- 1 root root  7122536 Sep 12 21:06 vmlinux-4.4.155-68-default.gz
-rw-r--r-- 1 root root 81811001 Oct 10 14:57 vmlinux-4.4.155-RTmine-default.gz
-rw-r--r-- 1 root root  7022105 Jul 16  2017 vmlinux-4.4.76-1-default.gz
lrwxrwxrwx 1 root root       26 Oct 10 12:39 vmlinuz -> vmlinuz-4.4.155-68-default
-rw-r--r-- 1 root root  6205112 Sep 12 21:53 vmlinuz-4.4.155-68-default
-rw-r--r-- 1 root root       65 Sep 12 21:53 .vmlinuz-4.4.155-68-default.hmac
-rw-r--r-- 1 root root  6203200 Oct 10 14:07 vmlinuz-4.4.155-RTmine-default
-rw-r--r-- 1 root root  6006440 Jul 16  2017 vmlinuz-4.4.76-1-default
-rw-r--r-- 1 root root       65 Jul 16  2017 .vmlinuz-4.4.76-1-default.hmac
chris@linux-6h1q:~>

Well it booted sort of ok into my edited kernel

chris@linux-6h1q:~> uname -r
4.4.155-RTmine-default

And now the issues.

Question 1. The resultant modules under /lib/modules/4.4.155-RTmine-default/ are huge in size. Why won’t they build to the same size as the source kernel modules?

chris@linux-6h1q:~> du -hs /lib/modules/4.4.155-68-default/
199M    /lib/modules/4.4.155-68-default/
chris@linux-6h1q:~> du -hs /lib/modules/4.4.155-RTmine-default/
2.9G    /lib/modules/4.4.155-RTmine-default/
chris@linux-6h1q:~> ls -alR /lib/modules/4.4.155-68-default/ |wc -l
8971
chris@linux-6h1q:~> ls -alR /lib/modules/4.4.155-RTmine-default/ |wc -l
8928
chris@linux-6h1q:~> 

Question 2. Why is the default Preemption Model set to server? I would have made an assumption it would have been set for low latency desktop since most of us would install on desktop/laptop.

Question 3. The video size in Virtualbox is stuck at 640x480 ie no options for other resolutions. See https://paste.opensuse.org/33386165 .Plus I can’t copy/paste from guest to host. I would have assumed that since 4.4.155-68-default worked ok with the current virtualbox guest kmp it would have also done so with mine. Any reasons why not?

Question 4. I have not tested the efficacy of my low latency kernel with Jack server yet but are my kernel writing processes valid or have I made a mistake(s) in my method?

Thanks,
Chris.

.

Not sure, but maybe reinstalling said guest kmp creates the needed symlinks in the ‘-RTmine-default’ directory as well.

No joy. The screen is still stuck at 640x480. I did a forced reinstall -

sudo zypper in -f virtualbox-guest-kmp*
  • and then a reboot. See

https://paste.opensuse.org/51487943

https://paste.opensuse.org/89042347

Distributed modules are compressed.

Question 3. The video size in Virtualbox is stuck at 640x480 ie no options for other resolutions. See SUSE Paste .Plus I can’t copy/paste from guest to host. I would have assumed that since 4.4.155-68-default worked ok with the current virtualbox guest kmp it would have also done so with mine. Any reasons why not?

You need to rebuild any out-of-tree module against your kernel.

Your Q3 indicates that your Virtualbox Additions is not working.
You might not be seeing an error, but everything you describe like your fixed VGA screen resolution and unshared clipboard are related to Virtualbox Additions.

If you create a custom kernel, IMO there is a fair chance that the pre-compiled Virtualbox Guest Additions won’t work.
More than likely you’ll have to compile your own Guest additions which is not usually difficult…

To custom compile your Virtualbox Guest Additions…

  1. Remove your pre-compiled Guest Additions and all related
zypper rm "virtualbox-kernel*"
  1. Install c compiler and dependencies(make should already be installed)
zypper in gcc make
  1. Mount your Virtualbox Guest Additions ISO.
    You can do this ordinarily by launching your Guest, then in your Guest graphic console,
    in the menu bar running above your displayed Desktop,
    Devices > “Insert Guest Additions CD Image…”
    If the ISO is not available, you may have to download from the Oracle Virtualbox website, make sure the ISO version is the same as your Virtualbox version.

  2. In your Guest open an enhanced console and cd to the following location where “user” is your logged in user account

su
password
cd /run/media/user/VBox*

and execute

./VBoxLinuxadditions.run

Pay close attention to stdout to verify success or if a problem is encountered.
Resolve any problems until successful.

HTH,
TSU

Do you mean I need to use

# make rpm

and install my resultant kernel’s rpm file via the rpm command as per the method here Compiling the Linux Kernel, the SUSE way | SUSE Communities ?

Thanks…

That did the trick!!! Thank you very much.

Ok I made an assumption that distributed modules are created as

# make -j6 rpm

I let that run last night and the rpms were created.

Provides: kernel-headers = 4.4.155_RTrpm_default kernel-headers = 4.4.155_RTrpm_default-1 kernel-headers(x86-64) = 4.4.155_RTrpm_default-1
Requires(rpmlib): rpmlib(CompressedFileNames) <= 3.0.4-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1
Obsoletes: kernel-headers
Processing files: kernel-devel-4.4.155_RTrpm_default-1.x86_64
Provides: kernel-devel = 4.4.155_RTrpm_default-1 kernel-devel(x86-64) = 4.4.155_RTrpm_default-1
Requires(rpmlib): rpmlib(PayloadFilesHavePrefix) <= 4.0-1 rpmlib(CompressedFileNames) <= 3.0.4-1
Checking for unpackaged file(s): /usr/lib/rpm/check-files /usr/src/packages/BUILDROOT/kernel-4.4.155_RTrpm_default-1.x86_64
warning: Could not canonicalize hostname: linux-6h1q
Wrote: /usr/src/packages/SRPMS/kernel-4.4.155_RTrpm_default-1.src.rpm
Wrote: /usr/src/packages/RPMS/x86_64/kernel-4.4.155_RTrpm_default-1.x86_64.rpm
Wrote: /usr/src/packages/RPMS/x86_64/kernel-headers-4.4.155_RTrpm_default-1.x86_64.rpm
Wrote: /usr/src/packages/RPMS/x86_64/kernel-devel-4.4.155_RTrpm_default-1.x86_64.rpm
Executing(%clean): /bin/sh -e /var/tmp/rpm-tmp.0HyUUg
+ umask 022
+ cd /usr/src/packages/BUILD
+ cd kernel-4.4.155_RTrpm_default
+ rm -rf /usr/src/packages/BUILDROOT/kernel-4.4.155_RTrpm_default-1.x86_64
+ exit 0
rm kernel-4.4.155_RTrpm_default.tar.gz kernel.spec

real    52m1.629s
user    107m58.004s
sys    15m17.867s
linux-6h1q:/home/chris/kernel/kernelrpm # 

But the modules in the rpm file are still larger than the ones via the opensuse repos. For example the ath9k* modules from my rpm vs the repos-

linux-6h1q:/home/chris/kernel/kernelrpm # rpm -qp --dump /usr/src/packages/RPMS/x86_64/kernel-4.4.155_RTrpm_default-1.x86_64.rpm |grep ath9k_
/lib/modules/4.4.155-RTrpm-default/kernel/drivers/net/wireless/ath/ath9k/ath9k_common.ko 1927816 1539258254 924a4a19099816e8017bfa5536217efa 0100644 root root 0 0 0 X
/lib/modules/4.4.155-RTrpm-default/kernel/drivers/net/wireless/ath/ath9k/ath9k_htc.ko 3452280 1539258254 6e871fec41923eb9b9d621d25606c5f5 0100644 root root 0 0 0 X
/lib/modules/4.4.155-RTrpm-default/kernel/drivers/net/wireless/ath/ath9k/ath9k_hw.ko 9449120 1539258255 0be2e791543c73621807b86c759fefc6 0100644 root root 0 0 0 X
linux-6h1q:/home/chris/kernel/kernelrpm # ls -l /lib/modules/4.4.155-68-default/kernel/drivers/net/wireless/ath/ath9k/ath9k_*
-rw-r--r-- 1 root root  54714 Sep 12 21:54 /lib/modules/4.4.155-68-default/kernel/drivers/net/wireless/ath/ath9k/ath9k_common.ko
-rw-r--r-- 1 root root 135066 Sep 12 21:54 /lib/modules/4.4.155-68-default/kernel/drivers/net/wireless/ath/ath9k/ath9k_htc.ko
-rw-r--r-- 1 root root 603170 Sep 12 21:54 /lib/modules/4.4.155-68-default/kernel/drivers/net/wireless/ath/ath9k/ath9k_hw.ko
linux-6h1q:/home/chris/kernel/kernelrpm # 

Further reading this morning suggests module compression is actually set via the .config file as per this SUSE Paste. If this is so then it doesn’t matter if I compile with ‘make rpm’ or just ‘make’. Is there a preference of gzip or xz?

Odd that the module compression in the config-4.4.155-68-default, that I use to base my kernals on, is off. Am I on the right track? Makes me wonder what other config settings I need to review.

On Fri 12 Oct 2018 02:46:03 AM CDT, kitman wrote:

<snip>

Odd that the module compression in the config-4.4.155-68-default, that I
use to base my kernals on, is off. Am I on the right track? Makes me
wonder what other config settings I need to review.

Hi
Check a standard kernel config options?


zcat /proc/config.gz > config.txt
less config.txt

Else consider just branching a kernel on OBS and adding the config and
building this way…


Cheers Malcolm °¿° SUSE Knowledge Partner (Linux Counter #276890)
SLES 15 | GNOME Shell 3.26.2 | 4.12.14-25.19-default
If you find this post helpful and are logged into the web interface,
please show your appreciation and click on the star below… Thanks!

Sorry I was wrong. openSUSE RPM strips debug information from modules and puts it in different package (kernel-default-debuginfo). I am not sure how you created your RPM; have you got debuginfo package as well? Otherwise you may compare objdump results from distributed and your modules to see the difference.

I just did that zcat step - once each for a different reboot and named the files uniquely. A diff command shows -

chris@linux-6h1q:~> uname -r
4.4.155-68-default
chris@linux-6h1q:~> diff config-4.4.155.68.txt config-4.4.155.RTmine.txt 
3c3
< # Linux/x86_64 4.4.141 Kernel Configuration
---
> # Linux/x86 4.4.155 Kernel Configuration
56c56
< CONFIG_LOCALVERSION="-68-default"
---
> CONFIG_LOCALVERSION="-RTmine-default"
136c136
< CONFIG_TREE_RCU=y
---
> CONFIG_PREEMPT_RCU=y
262d261
< CONFIG_OPTPROBES=y
385,389c384
< CONFIG_INLINE_SPIN_UNLOCK_IRQ=y
< CONFIG_INLINE_READ_UNLOCK=y
< CONFIG_INLINE_READ_UNLOCK_IRQ=y
< CONFIG_INLINE_WRITE_UNLOCK=y
< CONFIG_INLINE_WRITE_UNLOCK_IRQ=y
---
> CONFIG_UNINLINE_SPIN_UNLOCK=y
467c462
< CONFIG_PREEMPT_NONE=y
---
> # CONFIG_PREEMPT_NONE is not set
469c464
< # CONFIG_PREEMPT is not set
---
> CONFIG_PREEMPT=y
583c578
< CONFIG_HZ_250=y
---
> # CONFIG_HZ_250 is not set
585,586c580,581
< # CONFIG_HZ_1000 is not set
< CONFIG_HZ=250
---
> CONFIG_HZ_1000=y
> CONFIG_HZ=1000
5092d5086
< # CONFIG_DRM_I810 is not set
7357a7352
> CONFIG_DEBUG_PREEMPT=y
7436a7432
> # CONFIG_PREEMPT_TRACER is not set
chris@linux-6h1q:~> 

I found this in the config-4.4.155.68.txt and /boot/config-4.4.155-68-default. Module compression is not set but the modules in /lib/modules/… are. Getting confused.

CONFIG_MODULE_SRCVERSION_ALL=y
# CONFIG_MODULE_SIG is not set
# CONFIG_MODULE_COMPRESS is not set
CONFIG_MODULES_TREE_LOOKUP=y

OBS??? Can you direct me please to where to start?

Thanks,
Chris.

I tried


#make -j6 rpm

No debug file created.

chris@linux-6h1q:~/kernel/mykernel/kernel> ls -al /usr/src/packages/RPMS/x86_64/
total 596372
drwxr-xr-x 1 root root       274 Oct 11 20:11 .
drwxr-xr-x 1 root root       682 Jun  7 20:11 ..
-rw-r--r-- 1 root root 505134057 Oct 11 20:07 kernel-4.4.155_RTrpm_default-1.x86_64.rpm
-rw-r--r-- 1 root root 104647320 Oct 11 20:11 kernel-devel-4.4.155_RTrpm_default-1.x86_64.rpm
-rw-r--r-- 1 root root    898433 Oct 11 20:07 kernel-headers-4.4.155_RTrpm_default-1.x86_64.rpm

My skill set is not that great with compiling and comparing results. Maybe there is a setting via ‘make menuconfig’ to turn debugging off?

Thanks.

On Fri 12 Oct 2018 04:06:04 AM CDT, kitman wrote:
<snip>

OBS??? Can you direct me please to where to start?

Hi
The place where it all happens…

For example;
https://software.opensuse.org/package/kernel-default


Cheers Malcolm °¿° SUSE Knowledge Partner (Linux Counter #276890)
SLES 15 | GNOME Shell 3.26.2 | 4.12.14-25.19-default
If you find this post helpful and are logged into the web interface,
please show your appreciation and click on the star below… Thanks!

This of course is entirely different from openSUSE package which explains the difference. You need different spec. You may have better luck rebuilding kernel SRPM instead.

Hi. I looked into OBS today and feel it is a new rabbit hole that would take me considerable time to work out. As I said previously I am not very well versed in this sort of development (objdumps, debugs??); but simple compiling of audio software from git I’m comfortable with.

Since I have the simple steps to compile a copy of the standard kernel, I’d really like to move forward to understand and fix the module sizes as mentioned in Question 1 of my original post. Once fixed I can then comfortably compile a low latency kernel on my host PC and start experimenting with the audio issues.

So, are there any flags I am needing at say the ‘make modules’ command or any other directions?

Also any comments on my Question 2 in my original post?

Appreciate all your help thus far.
Chris.

Ah ha, so the magic to reduce the module sizes was an extra post-compile step to run ‘strip’

#strip --strip-unneeded *.ko

Another domino falls.

Good news - my low latency kernel is up and running on my production PC and there seems to be some improvement for audio (ie no Xruns in the Jack server).

Bad news - my graphics can’t go beyond a resolution 1024x768 which makes me believe my Nvidia GeoForce 1050Ti is not running. This is causing some applications not to start as well.

These are the nvidia packages installed -

chris@asus-rog:~> zypper se -s nvidia*
Loading repository data...
Reading installed packages...

S  | Name                          | Type    | Version                | Arch   | Repository             
---+-------------------------------+---------+------------------------+--------+------------------------
   | nvidia-computeG02             | package | 304.137-13.1           | x86_64 | nVidia Graphics Drivers
   | nvidia-computeG03             | package | 340.107-9.1            | x86_64 | nVidia Graphics Drivers
i+ | nvidia-computeG04             | package | 390.87-10.1            | x86_64 | nVidia Graphics Drivers
   | nvidia-gfxG02-kmp-default     | package | 304.137_k4.4.76_1-13.1 | x86_64 | nVidia Graphics Drivers
   | nvidia-gfxG03-kmp-default     | package | 340.107_k4.4.76_1-9.1  | x86_64 | nVidia Graphics Drivers
i+ | nvidia-gfxG04-kmp-default     | package | 390.87_k4.4.76_1-10.1  | x86_64 | nVidia Graphics Drivers
   | nvidia-glG03                  | package | 340.107-9.1            | x86_64 | nVidia Graphics Drivers
i+ | nvidia-glG04                  | package | 390.87-10.1            | x86_64 | nVidia Graphics Drivers
   | nvidia-texture-tools          | package | 2.0.8-6.1              | x86_64 | openSUSE-Leap-42.3-Oss 
   | nvidia-uvm-gfxG03-kmp-default | package | 340.107_k4.4.76_1-9.1  | x86_64 | nVidia Graphics Drivers
chris@asus-rog:~>

Do I need to recompile something in the Nvidia world for my customized kernel and if so what and how?

Thanks.

The pre-packaged -kmp modules are good only for the openSUSE kernel. With a custom kernel you need to build the modules yourself via the *.run driver file downloaded directly from the Nvidia site.
Please be aware that you need matching kernel-devel and kernel-default-devel packages (i.e. headers etc.) to do that. I don’t know if the pre-packaged packages can be used in your case or you have already matching headers etc. after building your modified kernel…

Goods news (after some nervous times and sweaty palms on my production machine). After uninstalling the pre-packaged -kmp modules and installing the latest *.run file from Nvidia site, I have successfully compiled my own Nvidia driver to my low latency kernel which itself is based off the pre-packaged 4.4.15-68 kernel.

My Jack server is now running at ~5ms latency with no Xruns and 1920x1080!!! Very happy!!!

However, I am curious as to why the current kernels are compiled as ‘server’ ie no preempt? In the latest kernel update 4.4.159-73 changes file ‘/usr/share/doc/packages/kernel-source-4.4.159-73/config-options.changes.txt’ is states -

Fri Sep 25 20:35:38 UTC 2015 - [EMAIL="mmarek@suse.com"]mmarek@suse.com[/EMAIL]
- Drop the -desktop flavors and merge these settings back to
  i386/pae and x86_64/default, respectively:
  - CONFIG_PREEMPT=y
  - vm.dirty_ratio=20
  The builtin driver choices of the desktop configs were discarded
  and CONFIG_HZ is 250 (fate#319416).

So I assume pre 2015 kernels were configured for desktop/low latency work.

But thanks to all for helping me getting my issue resolved and I have learned just that bit more about linux;) .

Nice to see you are up and running as you like!
Yes, pre-2015 we had two kernel flavours, -desktop and -default, but at some point devs realized that the differences were so slight that they didn’t warrant the extra effort and everything was merged to the -default flavour.
Frankly I didn’t notice the difference on laptops, but I don’t run games or do specialized audio work so I didn’t investigate further.