What's new

Apple M3

But the Performance Monitor in Logic only shows the amount of used cores, not what kind of cores are used, right?
No - it shows the cores allocated to audio processing, not just those actually in use. Notice in my screenshots the cores are showing no activity (no plugins loaded) but the number of allocated cores/columns changes based on how I configure the audio settings - 6 columns vs 12 columns.

It doesn't distinguish between P and E cores, but those additional 6 cores shown when I force the config to all 12 cores ARE the E-cores. I did extensive testing on my first M1 back in 2020 (as did many folks) to understand how this worked.

The punch line is just leave it on Automatic. Using the E-cores might result in more tracks, but only if the tracks Logic decides to put on those cores are light in CPU. If a heavy Kontakt instrument track gets put there, you may get an overload message in Logic even though the P-cores are not maxed out.

In my testing with high numbers of light-CPU tracks, using the E-cores will result in higher track counts. But in real life it is usually worse because of the unpredictability of how Logic does thread scheduling.

BTW these examples were done on my 14" M3Pro MBP - 12 cores, 6P + 6E.
 
Using the Logic Performance Monitor tells the tale.

This was hashed out extensively back in 2020/2021 when the M1 stuff appeared.
I believe you (i.e. the second sentence I quoted), but the Performance Monitor is showing processing threads, not CPU. There has to be a lot of correlation, but I don't think each thread is assigned to one core. Am I wrong?
 
I don't believe the logic performance monitor is showing individual threads. There are way more than a handful of threads and as you say there is not a one to one relationship between threads and physical cores. The caption under the meter display - "Processing Threads" - is, I believe not literally meaning each column is a thread. Apple's own support document states "Processing Threads: Shows the amount of CPU and RAM processing power Logic Pro is using on the available cores in your Mac. Each core in your Mac has its own meter." (emphasis is mine).

https://support.apple.com/en-us/108295
 
the Performance Monitor is showing processing threads, not CPU. There has to be a lot of correlation, but I don't think each thread is assigned to one core. Am I wrong?
You're not wrong: it's displaying threads rather than cores. Logic tells the OS that it's using those threads for real-time audio processing, though, so the OS is fairly likely to schedule them as if they're pinned to a performance core each - especially when fully loaded. I say "as if they're pinned" because many things can upset this plan: e.g. plugins/processes demanding realtime CPU without coordinating with Logic; or the OS withdrawing performance cores owing to overheating.

The other reason it's useful to remember "threads" rather than "cores" is because those bars display an estimate of total audio processing capacity, so it's a combination of CPU+memory+disk throughput. For sampled instruments, I/O can be the limiting factor, so you might see those bars maxing out even when your CPU is almost idle.
 
The caption under the meter display - "Processing Threads" - is, I believe not literally meaning each column is a thread. Apple's own support document states "Processing Threads: Shows the amount of CPU and RAM processing power Logic Pro is using on the available cores in your Mac. Each core in your Mac has its own meter." (emphasis is mine).

https://support.apple.com/en-us/108295

A friend used to work on the Logic manual. I'll ask him whether he wrote that and whether the words are literal.
 
I don't believe the logic performance monitor is showing individual threads. There are way more than a handful of threads and as you say there is not a one to one relationship between threads and physical cores. The caption under the meter display - "Processing Threads" - is, I believe not literally meaning each column is a thread. Apple's own support document states "Processing Threads: Shows the amount of CPU and RAM processing power Logic Pro is using on the available cores in your Mac. Each core in your Mac has its own meter." (emphasis is mine).

https://support.apple.com/en-us/108295
It's only displaying a bar for the top-level audio processing threads, even though there may be 100s of other (mostly idle) threads attached to the DAW. Logic's docs/captions use "thread" and "core" interchangeably in various places - plus a caveat for hyperthreading - but these meters are only very rough guide to performance. For those purposes, it's good enough to treat those N processing threads as equivalent to N cores.

There should be a tool that monitors the OS and will show how many processes and threads are active for each application.
There are many. 'htop' does a fairly good job, e.g.
 
One can see the number of Logic threads in Apple's Activity Monitor, right? Looking at a small project I have open right now, Logic is listed with 38 threads, while AUHosting Service (Logic Pro) is listed with 175.


Re Apple's AU Hosting Service, from another forum:
"Do the entries in activity monitor say "AUHostingService (Logic Pro)" or "AUHostingCompatibilityService (Logic Pro)"?

If it's the former, then you're already running in Native mode. You're only in Rosetta if the second version appears."

Also: "Logic running natively on AS runs AU plugins in separate processes to Logic itself - hence why you're seeing the HostingService entries. This is so if one plugin crashes, it shouldn't take the entire DAW with it."
 
It clearly states that each meter (column) represents a core. Each meter shows the cumulative thread load on that core.
Yes, I did read your quote!

Well, my friend - who didn't write that, it turns out - pointed out the [probably obvious to other people, just not me] difference between Logic's Performance Meters and the ones in Activity Monitor: the Logic ones display Logic, the Activity Monitor ones show Logic + whatever else is running on your machine.
 
Also: "Logic running natively on AS runs AU plugins in separate processes to Logic itself - hence why you're seeing the HostingService entries. This is so if one plugin crashes, it shouldn't take the entire DAW with it."
Yes, that's been an important feature for a while.
 
  • Like
Reactions: Vik
It clearly states that each meter (column) represents a core. Each meter shows the cumulative thread load on that core.
The manual uses both "core" and "thread" in different places. Luckily, it hardly matters, since - and I can't emphasise this enough - the bar chart is a *very, very* rough approximation of reality. The number of bars in the meter does relate to cores in the machine, but only because Logic's UI uses the core counts to decide which settings to offer you. "Automatic" offers you 1 thread per P-core, and those will usually be run on the P-cores preferentially. "Maximum" offers you 1 thread/P- or E- core. Logic could offer even more threads and it'd still work; it chooses not to because performance would always be worse.

After that, let go of any notion that those meters represent CPU load, let alone load on any specific core.

Here's what the meters do tell you:
For each "thread", its meter bar tells you how much real-world time is left over after processing its share of your project's audio.

I gave more details in this post, so re-using those numbers: if it takes 10.5ms to produce 21ms of audio, then that thread's bar will show 50%. It will show the same thing regardless of whether it spent 10.5ms getting data from the disk, or 10.5ms crunching numbers on the CPU, or spent some of that time getting bumped to a different core halfway through.

So it's really no good for investigating hardware, but it's very useful for Logic users: "50%" tells them that - whatever they're doing - they can do roughly the same again before their system overloads. "CPU usage/load" - which is an ill-defined concept usually based on "CPU resident time" - wouldn't be anywhere near as helpful, unless you have a lot of technical data and do a fair bit of maths.
 
"Automatic" offers you 1 thread per P-core, and those will usually be run on the P-cores preferentially.
So, with 12+4 cores, and 36 Logic threads + 175 cores assigned to "AUHosting Service (Logic Pro)", and mainly one thread per P-core: how is this distributed?
 
So, with 12+4 cores, and 36 Logic threads + 175 cores assigned to "AUHosting Service (Logic Pro)", and mainly one thread per P-core: how is this distributed?
Most of those threads will probably lie dormant for most of the time. Just because a thread exists, it doesn't mean it has anything to do, or that it'll be scheduled for execution. You can see this by looking at the changes in total CPU time for Logic/AUHostingService's constituent threads. This information isn't available in Activity Monitor, but you can see the change in total CPU time billed to each thread by running this command before/after Logic playback, and comparing the results:
ps vMp `pgrep Logic AUHostingService`
(Note #1: those are backticks, not single-quotes; Note #2: Logic has to be running for this to work; Note #3: threads get allocated when projects, plugins etc get loaded - sometimes later - so you want to make sure that's finished before taking an initial sample.)
 
Last edited:
... you can see the change in total CPU time billed to each thread by running this command before/after Logic playback, and comparing the results:
ps vMp `pgrep Logic AUHostingService`
(Note: those are backticks, not single-quotes.)
ps vMp `pgrep Logic AUHostingService`
ps: option requires an argument -- p
usage: ps [-AaCcEefhjlMmrSTvwXx] [-O fmt | -o fmt] [-G gid[,gid...]]
[-u]
[-p pid[,pid...]] [-t tty[,tty...]] [-U user[,user...]]
ps [-L]
 
Top Bottom