Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 13 Next capture
2021 2022 2023
1 capture
13 Jun 22 - 13 Jun 22
sparklines
Close Help
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
  • Asset Store
  • Get Unity

UNITY ACCOUNT

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account
  • Blog
  • Forums
  • Answers
  • Evangelists
  • User Groups
  • Beta Program
  • Advisory Panel

Navigation

  • Home
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
    • Blog
    • Forums
    • Answers
    • Evangelists
    • User Groups
    • Beta Program
    • Advisory Panel

Unity account

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account

Language

  • Chinese
  • Spanish
  • Japanese
  • Korean
  • Portuguese
  • Ask a question
  • Spaces
    • Default
    • Help Room
    • META
    • Moderators
    • Topics
    • Questions
    • Users
    • Badges
  • Home /
avatar image
9
Question by kromenak · Jun 27, 2013 at 05:42 PM · iosperformanceprofileroverhead

What are causes of "Overhead" in Profiler?

I'm profiling a game on the iPhone4 and I'm finding the FPS is not so hot right now. I've been using the profiler to optimize draw calls and physics performance, but I'm seeing an item called "overhead" that is taking up a shockingly large percentage of my CPU time (~9ms when our total budget is 33ms per frame).

Unity's documentation doesn't explain what "overhead" is; does anyone have any insights? I had guessed it was like "base engine overhead", but it isn't contant and fluctuates based on the currently loaded level. And more importantly, does anyone know how to reduce the time taken up by overhead?

Comment
Add comment · Show 2
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users
avatar image Dolkar · Jun 27, 2013 at 06:03 PM 2
Share

Isn't that the overhead of the profiling process itself? That is, when you turn off the profiler, it will disappear?

avatar image kromenak · Jun 27, 2013 at 06:14 PM 0
Share

Ah, crazy, I think you're right! If I open the profiler window and connect/disconnect it from my iPhone over wi-fi, I can definitely see the FPS go down/up by ~10.

Good to hear that the overhead is not something to worry about in non-profiling scenarios; it is kind of hard to realize it correlates to the profiler though (especially since you don't know its there unless you measure it :P). It would be great it Unity made that description a bit better!

Anyway, thanks for that. If you'd like an answer credit, just type that out as an answer and I can accept it.

1 Reply

· Add your reply
  • Sort: 
avatar image
30
Best Answer

Answer by David-Berger · Sep 01, 2014 at 01:44 PM

Short Overview: The Overhead presents usually vsync. especially on iOS where you can not turn of vsync. Profiling overhead might be included too, but usually it isn't that big (for actual builds), also if you are GPU bound, then it might appear as overhead, but more often you will see it under Camera.Present. 9ms might be perfectly fine for vsync.

  • In the Profiler, the Overhead is the total frame time minus the duration of everything else that is actively measured.

  • It's usually related to the internal processing of the scene. The complexer the scene, the more Overhead it will produce.

  • It also accounts for the vertical synchronization, that can be set to a fixed duration with Application.targetFrameRate.

  • Issues that could cause Overhead spikes are Memory warnings - When iOS throws memory warnings that increases the app Overhead. Thus when the iOS player constantly crosses the memory warning line, that will cause lots of large Overhead spikes. Use Instruments Activity Monitor to visualize these warnings as flags on top of the timeline.

The complexity of the scene doesn't refer directly to the amount of objects that compose it, but to the processing in general. If you have lots of objects, processing all of them will take more time than just a few. But more important the different engine subsystem tasks on those objects (in this case, tasks that are not being actively measured in the Profiler) will be added to this complexity increasing the Overhead. Depending on the work performed this increase could be significative or not. So it's not possible for us to provide statistics on the complexity of the scene, it depends on many factors.

The Profiler's hierarchy is populated with the processes that most probably will consume important resources, but there will still remain lots of hidden tasks. In order to find what is adding more complexity or processing to the scene, you could remove or change "aspects" of the scene, one by one, then profile and see how that affects the Overhead. With aspects I mean groups of objects that are processed by some subsystem, i.e. 3D or 2D physics, navmesh, sprites, lighting, scripts and plugins, rendering, GUI, audio or video, particles, etc. The aspects could include settings used by the subsystems. You might find one of these is considerably affecting the performance, and then you can optimize it.

You can also check your project against some of these general performance tips/considerations that our Support team has compiled, and that might help reducing the Overhead as well:

  • FPS is determined by CPU and GPU usage.

  • CPU : Physics, Game code, Skinning (when not done in GPU), Particles, Raycasting (Flares)

  • GPU : Fillrate, Shaders, Drawcalls, Image Effects.

  • Garbage Collection.

  • Remove all empty event callbacks (OnGUI, LateUpdate, Update, etc) from scripts.

  • Increase the fixedTimeStep (Physics timestep) to reduce the number of time physics simulation is updated.

  • Set the Maximum Allowed Timestep in the Time manager to cap the time spent on physics in the worst case scenario.

  • All static moving objects must remain static in the game. If you need to alter them in any way (change size, position, orientation, disable/enable) you should make them Kinematic * Rigibodies.

  • For each Flare in your scene Unity performs a Raycast from the Camera position. Make sure only the Flares that should be active are enabled in the scene.

  • Remove all unneeded curves (e.g A curve with a constant scale of 1,1,1.) and redundant keyframes from your AnimationClips.

  • Use QualitySettings to match the hardware of the device. Try reducing Anti Aliasing, reducing the Shadow distance, and changing the max LOD values.

  • Uncompressed AudioClips require less CPU for playback. Use this setting for small clips that don't use too much space in memory.

  • Use HashSet instead of Lists if you need to use Find or Contains every frame. It is a data structure designed for quick searching.

  • Cache references instead of performing unnecessary searches.

  • Avoid using multiple cameras if possible. Having a second camera will unfortunately have the implication that the culler has to process the scene twice - even if you set a different * layer for one of the cameras.

  • Use ParticleSystems for rendering sprites and billboards (e.g grass)

  • If you are need to constantly modify a mesh, make sure to call MarkDynamic() on the mesh to allow Unity to optimize the mesh for frequent changes.

  • Reduce memory allocations to reduce GC hiccups. Use the GC Alloc column in the Profiler to find code allocating memory.

  • Using object pooling for ephemeral objects is faster than creating and destroying them, because it makes memory allocation simpler and removes dynamic memory allocation * overhead (mono needs to look at the state of the memory to allocate) and Garbage Collection, or GC.

  • Use System.RuntimeMethodHandle.GetFunctionPointer to pre-jit functions.

  • If you have a scaled meshcollider the mesh collider will be baked on the main thread which can stall your game. Avoid doing that. (4.0)

  • AwakeFromLoad can be very expensive and stall the main thread.

Comment
Add comment · Show 8 · Share
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users
avatar image Shrikky23 · Oct 07, 2013 at 09:10 AM 0
Share

Yes even i wnt to know this, moreover the "Others" section in GPU usage also needs some explanation

avatar image ayalasan · May 05, 2015 at 01:50 PM 0
Share

@Shrikky23 for me it's the same, the "Others" section is pretty high above all others sections, consu$$anonymous$$g around 70% of the whole CPU cycle.

Does anybody know what the CPU>Others section refers to? Is there any way of dissecting it?

avatar image David-Berger ♦♦ · May 13, 2015 at 01:58 PM 0
Share

I updated my explanation with more details. Basically rewritten, so you might dive into the information.

avatar image eheimburg · Jul 05, 2015 at 07:15 AM 0
Share

Figured I'd add a cause of "overhead" that left me stumped for a while. If you're inspecting a complicated game object (or one with a complex editor script), the time spent rendering the Inspector window will show up as Overhead in the profiler.

avatar image David-Berger ♦♦ · Jul 06, 2015 at 03:06 PM 0
Share

Yes, if you want to profile your data properly you need to profile the standalone, not the editor.

avatar image PabloUnityArgentina David-Berger ♦♦ · Nov 13, 2015 at 04:37 AM 0
Share

Thank you very much $$anonymous$$ Berger!!

Show more comments

Your answer

Hint: You can notify a user about this post by typing @username

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Follow this Question

Answers Answers and Comments

21 People are following this question.

avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image

Related Questions

Profiler does not show objects when hooked to an iPad 1 Answer

Windows Phone 8 Overhead - Crawling 2 Answers

Moving Colliders giving me Physics.simulate spikes in Profiler 2 Answers

Huge Overhead with Empty Scene on iOS? 0 Answers

ios 64bit overhead spike after update unity5 0 Answers


Enterprise
Social Q&A

Social
Subscribe on YouTube social-youtube Follow on LinkedIn social-linkedin Follow on Twitter social-twitter Follow on Facebook social-facebook Follow on Instagram social-instagram

Footer

  • Purchase
    • Products
    • Subscription
    • Asset Store
    • Unity Gear
    • Resellers
  • Education
    • Students
    • Educators
    • Certification
    • Learn
    • Center of Excellence
  • Download
    • Unity
    • Beta Program
  • Unity Labs
    • Labs
    • Publications
  • Resources
    • Learn platform
    • Community
    • Documentation
    • Unity QA
    • FAQ
    • Services Status
    • Connect
  • About Unity
    • About Us
    • Blog
    • Events
    • Careers
    • Contact
    • Press
    • Partners
    • Affiliates
    • Security
Copyright © 2020 Unity Technologies
  • Legal
  • Privacy Policy
  • Cookies
  • Do Not Sell My Personal Information
  • Cookies Settings
"Unity", Unity logos, and other Unity trademarks are trademarks or registered trademarks of Unity Technologies or its affiliates in the U.S. and elsewhere (more info here). Other names or brands are trademarks of their respective owners.
  • Anonymous
  • Sign in
  • Create
  • Ask a question
  • Spaces
  • Default
  • Help Room
  • META
  • Moderators
  • Explore
  • Topics
  • Questions
  • Users
  • Badges