[libvirt] [PATCH 8/8] qemu: set qemu process' RLIMIT_MEMLOCK when VFIO is used
Laine Stump
laine at laine.org
Fri Apr 26 00:50:31 UTC 2013
On 04/25/2013 06:14 PM, Eric Blake wrote:
> On 04/25/2013 11:57 AM, Laine Stump wrote:
>> VFIO requires all of the guest's memory and IO space to be lockable in
>> RAM. The domain's max_balloon is the maximum amount of memory the
>> domain can have (in KiB). We add a generous 1GiB to that for IO space
>> (still much better than KVM device assignment, where the KVM module
>> actually *ignores* the process limits and locks everything anyway),
>> and convert from KiB to bytes.
>>
>> In the case of hotplug, we are changing the limit for the already
>> existing qemu process (prlimit() is used under the hood), and for
>> regular commandline additions of vfio devices, we schedule a call to
>> setrlimit() that will happen after the qemu process is forked.
>> ---
>> src/qemu/qemu_command.c | 22 +++++++++++++++-------
>> src/qemu/qemu_hotplug.c | 24 +++++++++++++++++-------
>> 2 files changed, 32 insertions(+), 14 deletions(-)
>>
>> + /* VFIO requires all of the guest's memory to be
>> + * locked resident, plus some amount for IO
>> + * space. Alex Williamson suggested adding 1GiB for IO
>> + * space just to be safe (some finer tuning might be
>> + * nice, though).
>> + */
>> + virCommandSetMaxMemLock(cmd, ((unsigned long long)def->mem.max_balloon + (1024 * 1024)) * 1024);
> Worth wrapping the long line, perhaps at the + operator? Or even using
> a temporary:
> unsigned long long mem_kbytes = def->mem.max_balloon + (1024 * 1024);
> virCommandSetMaxMemLock(cmd, mem_kbytes * 1024);
I did the latter.
>
>> + virSetMaxMemLock(vm->pid,
>> + ((unsigned long long)vm->def->mem.max_balloon + (1024 * 1024)) * 1024);
> and again.
Same here.
> Line wrapping is trivial, though, so:
>
> ACK.
>
More information about the libvir-list
mailing list