Integrated GPU and CPU load balancing issue

Hello,

I’m running TrueNAS Scale Dragonfish-24.04.2 and have an Intel Core i9-14900K, which has 24 cores and 32 threads. I’m allocating integrated Intel GPU(s) to my Jellyfin app, but noticed a load balancing issue.

The Jellyfin app Edit page implies that my CPU has 5 integrated GPUs (i.e. it allows me to allocate 0-5). I currently have 2 of these allocated to Jellyfin.

When I add new content to my Jellyfin library, I can see CPU spikes in the Dashboard, which makes sense, but the issue is it’s consistently threads 9-16. I see very little activity on the other threads. I’m not sure how CPUs are constructed, but I imagine it would be undesirable for the bulk of a CPUs processing to be done on just a few of its many threads (correct me if wrong). My main concern is thermal hot spots where these threads are located which may shorten the life of the CPU.

I don’t see any way of specifying which GPUs an app can use - just a number. Is there any way to change which GPUs are allocated to an app? If TrueNAS is not going to rotate them for me (i.e. for load balancing), I would like to do it myself.

My understanding is that LGA 1700 cpus don’t have multiple integrated gpus. They have a singular one. Given that the 14900k is basically a refresh of the 13900k I’m fairly certain that the following image should ilustrate that the iGPU is separate from basically any singular core:

The option for multiple GPUs being assigned even though only one is present is a ‘feature’ even in the Plex app (I only have 1 nvidia GPU):
image

I also know that on proxmox I’ve had to make extensive use of vGPUs which slice up the iGPU into several vGPUs that I can tell pass through to VMs. This required some work following along the efforts of those more talented that me to implement. I don’t believe this is even close to default on anything at all, let alone TrueNAS.

I don’t think you’re actually allocating 2 of anything because you ain’t got it. I think that the CPU load you’re seeing on specific cores is exactly that; a CPU work load that Jellyfin is using to analyze new media. Generally the GPU/iGPU is used for transcoding for when you want to change bitrate or encoding to meet playback needs on whatever device you’re using. Heavy cpu usage for analyzing media is normal; gpu only shines during playing of said media (when transcoding).

You can likely play around in the app settings for how many CPU core you’re allocating. You can also go to apps, settings, advanced settings, & confirm the ‘Integrated Loadbalancer’ is enabled. I don’t think either is necessary.

Realistically having specific cores loaded harder than others is normal. Something I noticed with the 13900k is that it has preferred cores from the factory; this are the ones that generally boost to the inane speeds intel has set as during manufacturing intel’s magic sand wizards have decided that those specific cores are the most capable ones when your specific CPU was made. For me I think it is cores 4 & 5 on my 13900k.

So it’d make sense when there is an intensive task that requires high single core load that your processor picks those specific cores to get 'er done. Thermal issues on the 13900k/14900k are more to do with needful bios tuning, setting reasonable clock speeds, setting voltage caps, and mostly underclocking because intel pumped these chips way too hard. It won’t be because 2 cores out of many are preferred that you’ll eventually have issues with your 14900k - it’ll be due to the unreasonable default settings, microcode, and manufacturing issues that intel has made. Details on that can be viewed here:

3 Likes

Thank you so much for the detailed reply. I marked this as solved, but will follow-up with a few comments.

I was actually curious about this because I was under the impression that TrueNAS itself requires a dedicated GPU. So if you only have one, which I do (my iGPU), wouldn’t this prevent me from allocating any GPU to anything, or do I have this wrong?

I am also curious as to why the GUI implies that I can allocate up to 5 of these to the app if I can’t allocate any. This is further confusing by the fact that the AMD and NVIDIA dropdowns correctly show there are 0 available, which is correct. In other words, IDU why it would correctly show that I have 0 AMD and NVIDIA available, but incorrectly show that I have 5 Intel iGPUs available. Any thoughts?

The Resources Configuration section actually allocates a CPU limit, not a number of cores. I’m not sure which method would be better, but I think that allocating cores would be more intuitive.

Mine is enabled, so I assume this is default.

Mine is happy with allocating my only GPU as long as the IPMI GPU isn’t touched. :slight_smile: Though I can’t remember if this is necessary specifically for GPU pass-through (isolation for a VM), or also a requirement for apps…

No clue - I got 1 GPU yet I can allocate up to 5 of them to apps as well?..

Putting the following into shell & scrolling through it a bit confirms that I appearantly have 5 available to dedicate?
k3s kubectl describe node ix-truenas

image

Perhaps the vGPU feature that I was talking previously is something TrueNAS does by default with K3s? Someone smarter than me would have to confirm. Then I’d guess that 1,2,3,4,5 would be the vGPU # that you’re allocating? Or maybe it would be the # of vGPUs that the app is reserving? No clue.

You’re likely right on the more/less cores limit; I might be remembering wrong in terms of specific cores. I think it might even be a max amount of threads (generally 2 threads per core). Maybe I was mixing up with VMs where you can specify which cores.