ISOLCPUs results in only 1 core being used.


NeoDude

Recommended Posts

Has anybody else had this behaviour?

 

I have 32 cores available and so I decided to isolate all but the first 4 (2 + pairs) for use in VMs and dockers. I assigned 8 of these to my Plex server docker, this resulted in only 1 core being used by Plex when transcoding, resulting in unwatchable playback. Removing the ISOLCPU command results in all 8 assigned cores being used.

 

I remember having previous performance issues when using ISOLCPU for my Win10 VM and wonder if something similar was happening with my 8-core VM perhaps being reduced to 1 core. I'll need to test this sometime.

Link to comment

I could be mistaken, but if you've isolated all but the 4+4 cores to unRaid, then there is no point in actually assigning them to a docker container since by default the container will use all the cores (4+4) available to unRaid.

 

Also, I don't know (and haven't experimented) with how the --cpuset-cpus parameter changes if you have isolated cores.  (ie: does the core numbers change)

Link to comment

You've got me confused now, lol.

 

Here's how my core assignments are currently set up...

 

cpu 0 / 16 UnRaid

cpu 1 / 17 UnRaid

cpu 2 / 18 pfSense

cpu 3 / 19 pfSense

cpu 4 / 20 Legolas

cpu 5 / 21 Legolas

cpu 6 / 22 Legolas

cpu 7 / 23 Legolas

cpu 8 / 24 Dockers

cpu 9 / 25 Dockers

cpu 10 / 26 Dockers

cpu 11 / 27 Dockers

cpu 12 / 28 Plex

cpu 13 / 29 Plex

cpu 14 / 30 Plex

cpu 15 / 31 Plex

 

So, they way I understood ISOLCPU works was that I could stop UnRaid from using cores that I wanted to use for something else, i.e. VMs and Dockers. So I added this to my config...

 

isolcpus=2-15,18-31

 

The behaviour that I'm seeing is that with the command in place, my Plex server only uses 1 core (Core 12). Without the command it uses all 8.

Link to comment

I could be very wrong,  but I understood that if you use isolcpus in the syslinux.cfg that it isolated the listed cores from unRaid AND the dockers, meaning that your dockers/plugins can only now use what you have listed as 1, 16, 17.

 

I've never pinned cores to dockers, just isolated cores for vm's, and let unRaid and my dockers figure out which cores of the remaining they want to use and when, and have had no issues with that.

Link to comment

ISOLCPUS works by preventing the OS from utilizing certain cores.  Since Docker runs directly as processes on the OS, then it only has access to the cores that you've assigned specifically for unRaid use.  Therefore if you want Plex to utilize all of the cores available to unRaid, it is pointless to add in the cpuset-cpus parameter to plex as you've implied you did by stating you assigned the cores to Plex.  And by your example, your assigning Plex access to cores that it doesn't have access to since the OS doesn't have access to it.  A docker, although similar to a VM is not a VM and is constrained by the limits imposed firstly by the OS and then secondly by the parameters passed to it in the template.

 

When I said that I don't know how the cpuset-cpus parameter changes when isolating cores, I mean that

 

I do not know if the docker subsystem when you're say isolating cores 0 and 16 only as an example will the cpuset-cpus parameter take 0 and 16 or does it take 0 and 1 since there are only two cores.

 

My system does not have hyperthreaded cores, and I am quite happy without the ISOLCPUS setting, so I have no reason to experiment.

Link to comment

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.