RhinoCycles kernel compiler keeps running after closing -> high CPU usage

RhinoCycles kernel compiler process continues running after closing Rhino, causing high CPU usage

System:
• macOS
• Rhino 8

Description:
After closing Rhino 8 (with Grasshopper), the RhinoCycles kernel compiler process continues running in the background and does not terminate. This causes MTLCompilerService to consume extremely high CPU (~70-75% per instance) and memory (3+ GB).

Observed behavior:
• Process that keeps running: /Applications/Rhino 8.app/Contents/Frameworks/RhCore.framework/Resources/dotnet/x86_64/dotnet … RhinoCyclesKernelCompiler.dll
• This triggers multiple MTLCompilerService processes with high resource usage
• The process does not stop when Rhino is closed
• Killing MTLCompilerService temporarily helps, but the processes restart immediately
• Only stopping the RhinoCycles kernel compiler process resolves the issue

Steps to reproduce:

  1. Open Rhino 8 with Grasshopper
  2. Close Rhino
  3. Check Activity Monitor or run ps aux | grep -i rhino - the RhinoCycles compiler process is still running

Workaround:
Manually kill the process:
Expected behavior:
All Rhino-related background processes should terminate when the application is closed.

Rhino 8 SR27 2025-12-23 (Rhino 8, 8.27.25357.11372, Git hash:master @ 4f7e78056cadbad051d03c30f40683a64dcc7a5d)
License type: Educational, build 2025-12-23
License details: Cloud Zoo

Apple macOS Version 15.7.3 (Build 24G419) (Physical RAM: 16GB)
Mac Model Identifier: MacBookPro13,2
Language: nl-NL (MacOS default)
.NET 8.0.14

Metal GPU Family Apple 0
Metal GPU Family Common 3
Metal GPU Family Mac 2
Graphics processors
Intel Iris Graphics 550 (1536 MB)
Color LCD (1440 x 900)
GPU Vendor: Intel

USB devices
Apple Inc.: Apple T1 Controller

Bluetooth devices
None

Third party kernel extensions
as.vit9696.Lilu (1.7.0) 276C35BC-B576-3049-AF11-4E11E8EBE459
as.vit9696.RestrictEvents (1.1.5) 7B679FDE-3DCE-37E1-B992-31F11D03E4D7
com.khronokernel.AutoPkgInstaller (1.0.4) 826F8E17-D733-3251-9174-9B8AD5944EF1
com.flagers.KDKlessWorkaround (1.0.0) E964DA93-FAE8-33A6-9B27-98A788A4029E
com.khronokernel.RSRHelper (1.0.2) 1B59F406-0AB5-3C8C-8A37-6F80BB772598
as.lvs1974.AirportBrcmFixup (2.1.9) 3787F422-FE69-3E82-95F6-BE1B30F39EFD
com.dhinakg.AMFIPass (1.4.1) 7DF1CDFC-7EFE-3D82-A3A2-7DACE8B1D097

Third party plugins
/usr/lib/swift/libswiftCore.dylib
/usr/lib/swift/libswiftObjectiveC.dylib
/usr/lib/swift/libswiftCoreFoundation.dylib
/usr/lib/swift/libswiftDarwin.dylib
/usr/lib/swift/libswiftDispatch.dylib
/usr/lib/swift/libswiftIOKit.dylib
/usr/lib/swift/libswiftSystem.dylib
/usr/lib/swift/libswiftXPC.dylib
/usr/lib/swift/libswift_Builtin_float.dylib
/usr/lib/swift/libswift_Concurrency.dylib
/usr/lib/swift/libswift_StringProcessing.dylib
/usr/lib/swift/libswift_errno.dylib
/usr/lib/swift/libswift_math.dylib
/usr/lib/swift/libswift_signal.dylib
/usr/lib/swift/libswift_stdio.dylib
/usr/lib/swift/libswift_time.dylib
/usr/lib/swift/libswiftos.dylib
/usr/lib/swift/libswiftsys_time.dylib
/usr/lib/swift/libswiftunistd.dylib
/usr/lib/swift/libswiftDistributed.dylib
/usr/lib/swift/libswiftObservation.dylib
/usr/lib/swift/libswiftSynchronization.dylib
/usr/lib/swift/libswiftMetal.dylib
/usr/lib/swift/libswiftOSLog.dylib
/usr/lib/swift/libswiftQuartzCore.dylib
/usr/lib/swift/libswiftUniformTypeIdentifiers.dylib
/usr/lib/swift/libswiftsimd.dylib
/usr/lib/swift/libswiftRegexBuilder.dylib
/usr/lib/swift/libswift_RegexParser.dylib
/usr/lib/swift/libswiftCoreAudio.dylib
/usr/lib/swift/libswiftCryptoTokenKit.dylib
/usr/lib/swift/libswiftAVFoundation.dylib
/usr/lib/swift/libswiftCoreLocation.dylib
/usr/lib/swift/libswiftCoreMIDI.dylib
/usr/lib/swift/libswiftCoreMedia.dylib
/usr/lib/swift/libswiftCoreImage.dylib
/usr/lib/swift/libswiftAccelerate.dylib
/usr/lib/swift/libswiftNaturalLanguage.dylib
/usr/lib/swift/libswiftMLCompute.dylib
/usr/lib/swift/libswiftCompression.dylib
/usr/lib/swift/libswiftDataDetection.dylib
/usr/lib/swift/libswiftCoreGraphics.dylib
/usr/lib/swift/libswiftFoundation.dylib
/usr/lib/swift/libswiftSwiftOnoneSupport.dylib
/usr/lib/usd/libusd_ms.dylib
/usr/lib/swift/libswiftIntents.dylib
/usr/lib/swift/libswiftSpatial.dylib
/usr/lib/swift/libswiftPassKit.dylib
/usr/lib/swift/libswiftAppleArchive.dylib
/usr/lib/swift/libswiftDemangle.dylib
/usr/lib/swift/libswiftVideoToolbox.dylib
/usr/lib/swift/libswiftGameplayKit.dylib
/usr/lib/swift/libswiftSpriteKit.dylib
/usr/lib/swift/libswiftGLKit.dylib
/usr/lib/swift/libswiftMetalKit.dylib
/usr/lib/swift/libswiftModelIO.dylib
/usr/lib/swift/libswiftSceneKit.dylib
/usr/lib/swift/libswiftMapKit.dylib
/usr/lib/log/liblog_network.dylib
/Users/eef/Library/Application Support/McNeel/Rhinoceros/packages/8.0/Vectorize/8.4.24044/libVectorizeLib.dylib

Rhino plugins that do not ship with Rhino

Rhino plugins that ship with Rhino
/Applications/Rhino 8.app/Contents/Frameworks/RhMaterialEditor.framework “Renderer Development Kit” 8.27.25357.1002
/Applications/Rhino 8.app/Contents/Frameworks/RhCore.framework/Resources/ManagedPlugIns/Commands.rhp “Commands” 8.27.25357.11372
/Applications/Rhino 8.app/Contents/PlugIns/NamedSnapshots.rhp “Snapshots” 8.27.25357.1002
/Applications/Rhino 8.app/Contents/Frameworks/RhCore.framework/Resources/ManagedPlugIns/RDK_EtoUI.rhp “RDK_EtoUI” 8.27.25357.11372
/Applications/Rhino 8.app/Contents/Frameworks/RhCore.framework/Resources/ManagedPlugIns/MeshCommands.rhp “MeshCommands” 8.27.25357.11372
/Applications/Rhino 8.app/Contents/Frameworks/RhCore.framework/Resources/ManagedPlugIns/RhinoRenderCycles.rhp “Rhino Render” 8.27.25357.11372
/Applications/Rhino 8.app/Contents/Frameworks/RhCore.framework/Resources/ManagedPlugIns/RhinoCycles.rhp “RhinoCycles” 8.27.25357.11372
/Applications/Rhino 8.app/Contents/PlugIns/AnimationTools.rhp “AnimationTools” 8.27.25357.1002
/Applications/Rhino 8.app/Contents/PlugIns/SectionTools.rhp “SectionTools” 8.27.25357.1002
/Applications/Rhino 8.app/Contents/PlugIns/Displacement.rhp “Displacement” 8.27.25357.1002
/Applications/Rhino 8.app/Contents/PlugIns/PanelingTools.rhp “PanelingTools” 8.27.25357.1002
/Applications/Rhino 8.app/Contents/Frameworks/RhCore.framework/Resources/ManagedPlugIns/RhinoDLR_Python.rhp “IronPython” 8.27.25357.11372
/Applications/Rhino 8.app/Contents/Frameworks/RhCore.framework/Resources/ManagedPlugIns/GrasshopperPlugin.rhp “Grasshopper” 8.27.25357.11372
/Applications/Rhino 8.app/Contents/Frameworks/RhCore.framework/Resources/ManagedPlugIns/RhinoCodePlugin.rhp “RhinoCodePlugin” 8.27.25357.11372

If I’m not mistaken, the cycles compiler needs to un once to get the correct graphics card profiles for you machine. It can take a while to finish, but if you let it do so, it should be a one time thing and you should not see it again.

It works this way on a pc, I’m assuming its the same on a mac-

@nathanletwory can verify/ clarify.

Dear Kyle,
If you understand you well, with 1 time, you mean 1 time per session?
Or one time untill a next software update?

How long is a while?

  • I will restart Rhino and wait a while. let’s see what happens?
  • After running more then 12 minutes after the opening of the first screen (no files loaded!) I stopped it.
  • I will do a test with uninstall and another version.

Regards, eef

it should install the kernel and be done with it.

it is my understanding this can take 15-20 min on occasion.

I re-installed Rhino, Rhino 8 SR26 2025-12-15 (Rhino 8, 8.26.25349.19002 (the regular one).
Guess it was about 8 minutes or so then the MTLCompilerService was done :slight_smile:

Updated to latest version, after about 10-12 minutes the MTL was done. Issue solved.
Maybe mis-install or who knows :wink:

The compiler will abort if it is still running after 30 minutes. Compiling can take a while indeed. The compiler is started whenever

  • the GPU driver changes (on MacOS a system update, on Windows either system update on manual driver update)
  • the Cycles kernel source code is updated. In Rhino 8 it is going to be very rare at this point of the release cycle to see kernel source code changes.