[Spice-devel] [spice v10 08/27] server: Add VP8 support to the GStreamer video encoder

Francois Gouget fgouget at codeweavers.com
Thu Mar 3 23:15:37 UTC 2016


On Thu, 3 Mar 2016, Christophe Fergeau wrote:
[...]
> > > +        if (system("egrep -l '^flags\\b.*: .*\\bht\\b' /proc/cpuinfo
> > > >/dev/null 2>&1") == 0) {
> > > +            /* Hyperthreading is enabled so divide by two to get the number
> > > +             * of physical cores.
> > > +             */
> > > +            physical_core_count = physical_core_count / 2;
> > > +        }
> > 
> > Or as you are using /proc/cpuinfo detect from it.
> > 
> > I'm not sure we should consider compatibility with other processors (like ARM).
> 
> In general, I don't think we want to silently use as many cores as
> possible for cpu intensive work. This will break down as soon as 2 VMs
> trigger the streaming code at the same time, they both will be trying to
> use all the available physical cores. Even with a single VM, it could
> use 4 vcpus and do CPU intensive tasks on some of them, thus the vp8
> encoder would fight for these resources.

I can certainly separate that part of the patch.

That said it's not because we tell the encoder that it can use all the 
cores that it will necessarily max them out. This will depend on the 
resolution and framerate of the stream.

Also x264enc will automatically use the optimal number of threads for 
its encoding needs. As soon as the resolution is high that's likely to 
be 2 or 4 cores and I don't think we should artificially restrict it.

But more importantly, I think we should let the kernel worry about 
scheduling.

What the video encoder should do is detect when the encoding is falling 
behind and reduce the stream's fps so it can keep up rather than produce 
frames that are already late. The GStreamer encoder already tweaks the 
fps as a way to quickly adjust the bitrate so this mechanism can 
probably be reused. This should solve both the case where the system is 
too slow to encode the stream, and the case where multiple encoders or 
other processes compete for CPU resources.


-- 
Francois Gouget <fgouget at codeweavers.com>


More information about the Spice-devel mailing list