How to fix 100% CPU on Pivos Xios

Pivox Xios Top

The Pivos is a cute little device.  It is more than capable of handling 1080p videos without using all of its CPU processing power.  It is more powerful than the Raspberry Pi and only consumes 6 watts of power, is completely silent and produces negligible heat.  If you use a skin that doesn’t feature a lot of motion or animation then it is a very capable device that you could run all day without issue.

The XBMC project started on the original XBOX which had a legacy rendering model in which every frame was rendered by the GPU, typically at 60 fps.  Rendering every frame, even if nothing is happening, can really tax a low-power device such as an old computer or even the Pivos Xios and Raspberry Pi.  In order to speed up the GUI you should enable Dirty Regions.

Dirty Regions refers to that the GPU will only render what is “dirty”, or what has changed on the screen.  Mode 1 or 2 will provide the greatest speedup, but may cause graphical “flicker” to appear on your screen.  Mode 3 can fix this, but won’t speed up the GUI. If your GUI is still slow after this tweak, then you may have to install a skin that uses little resources or disable animations (if your skin allows).

To fix this you need to edit the advancessettings.xml file in the XIOS.  Connect to your device using PuTTY and navigate to

$/.xbmc/…

<advancedsettings>
<gui>
<algorithmdirtyregions>1</algorithmdirtyregions>
<nofliptimeout>1000</nofliptimeout>
</gui>
</advancedsettings>

As mentioned above, try using modes 1 and 2 to speed things up, and if you don’t see any weird things on the screen then you’ll be fine.  If you do, try mode 3 to help reduce CPU load, but the cost will be that the GUI will be just as slow as before.  Here’s the technical stuff on each of the modes:

value result description
0 Off The entire viewport is always rendered
1 Union All dirty regions are grouped into the smallest possible rectangle.  This is typically the fastest mode for slower GPUs because it only makes one pass.
2 Cost reduction Each dirty region is presented separately, in as many passes as there are regions.
3 Whole Screen The entire screen is rendered if there are any dirty regions.  Combining this with nofliptimeout is a safe default for drivers that clear buffer contents (manifests as blinking or vibrating images).

If you want to completely disable nofliptimeout, then you can set its value to “-1”.


If your CPU is still at 100% after enabling this tweak (and rebooting), then you might try changing the VSYNC setting.  If your CPU is rendering each frame when it appears on your monitor, then the CPU won’t be locked into 60 refreshes a second.

If you go to the System > Hardware section, you can see how many FPS your device is rendering.  If this is significantly lower than 60fps and the CPU is completely tapped out, then you can try disablying VSYNC and/or match the video source to the framerate.

XBMC was originally developed on a console, hence the “Xbox” part of “Xbox Media Center”.  Because of this, the CPU had to run all the time to match up with the resolution.

You can change this by tweaking the settings, which may cause graphic anomalies as OpenGL flips its buffers.  You may be able to tweak this to 1 or 3, or may not experience any adverse affects at all.

You could also change the vsync to match the monitor, which may cause your TV to blank out whenever a movie is started or stopped, as XBMC changes the refresh rate to show what’s on the screen.

A video that is stuttering could also cause the CPU to max out at 100%.  You can also look at our guide on how to prevent video stuttering on the Xios.

Alan is a web architect, stand-up comedian, and your friendly neighborhood Grammar Nazi. You can stalk him on the Interwebs via Google+, Facebook and follow his ass on Twitter @ocmodshop.