[libvirt] [BUG] mlock support breakage

Luiz Capitulino lcapitulino at redhat.com
Mon Mar 13 16:35:42 UTC 2017


On Mon, 13 Mar 2017 16:08:58 +0000
"Daniel P. Berrange" <berrange at redhat.com> wrote:

> On Mon, Mar 13, 2017 at 11:58:24AM -0400, Luiz Capitulino wrote:
> > 
> > Libvirt commit c2e60ad0e51 added a new check to the XML validation
> > logic where XMLs containing <memoryBacking><mlocked/> must also
> > contain <memtune><hard_limit>. This causes two breakages where
> > working guests won't start anymore:
> > 
> > 1. Systems where mlock limit was set in /etc/security/limits.conf  
> 
> I'm surprised if that has any effect, unless you were setting it
> against the root user.
> 
> The limits.conf file is loaded by PAM, and when libvirtd spawns
> QEMU, PAM is not involved, so limits.conf will never be activated.
> 
> This is why libvirt provides max_processes/max_files/max_core
> settings in /etc/libvirt/qemu.conf - you can't set those in
> limits.conf and have them work - unless you set them against
> root, so libvirtd itself got the higher limits which are then
> inherited by QEMU. 

My quick test seemed to work, but I may have declared success
before the guest had time to crash. I'll double check this,
but we agree about the best way to fix it.

> >  2. Drop change c2e60ad0e51 and automtically increase memory
> >     locking limit to infinity when seeing <memoryBacking><locked/>
> > 
> >    pros: make all cases work, no more <hard_limit> requirement
> > 
> >    cons: allows guests with <locked/> to lock all memory
> >          assigned to them plus QEMU allocations. While this seems
> >          undesirable or even a security issue, using <hard_limit>
> >          will have the same effect  
> 
> I think this is the only viable approach, given that no one can
> provide a way to reliably calculate QEMU peak memory usage.
> Unless we want to take guest RAM + $LARGE NUMBER - eg just blindly
> assume that 2 GB is enough for QEMU working set, so for an 8 GB
> guest, just set  10 GB as the limit.

Better to set it to infinity and be done with it.

> > Lastly, <locked/> doesn't belong to <memoryBacking>, it should
> > be in <memtune>. I recommend deprecating it from <memoryBacking>
> > and adding it where it belongs.  
> 
> We never make these kind of changes in libvirt XML. It is sub-optimal
> location, but it has no functional problem, so there's no functional
> benefit to moving it and clear backcompat downsides.

Fine with me.




More information about the libvir-list mailing list