iOS stops run my code on Performance Core

My app uses CoreML to run neural network (CoreML use CPU for most layers). Some time my performance is very good but after 30 seconds speed become slowly (fps is much less). I profiled it and found, that iOS use performance core for my app at the beginning. After 30 seconds it stops use Performance cores and starts use efficient cores (them frequency is less). You may see to on the screenshot.

qos of my queue is .userInitiated. Also I tried .userInteractive, but is don't change anything. I assume that it is cores planning feature of iOS. But I cannot find any information about it.

Is there documentation, which describe this behavior? Can I say iOS use performance core for my app all the time? I use iPhone XR with iOS 14.7.1.

We are running into the same issue:

  • everything runs fine under high load for 45s (very deterministically)
  • All threads get bumped from Performance Cores to Efficient Cores for 5-10s
  • All threads come back to Performance Cores.

We have a few C++ threads (which we manually mark as .userInteractive using pthread_set_qos_class_self_np) and Swift queues (which when created are marked as qos: .userInteractive).

We only seem to get this issue when running on A12 Bionic devices (iPad Min 5th Generation, iPad 8th generation). Looks like the OP also is using an A12 Bionic device (iPhone XR).

We don't experience on older chips (A10X) or newer (A14).

Any ideas?

iOS stops run my code on Performance Core
 
 
Q