kernel selftest max_guest_memory_test fails when using more that 256 vCPUs

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi,

Recently I debugged a failure of this selftest and this is what is happening:

For each vCPU this test runs the guest till it does the ucall, then it resets
all the vCPU registers to their initial values (including RIP) and runs the guest again.
I don't know if this is needed.

What happens however is that ucall code allocates the ucall struct prior to calling the host,
and then expects the host to resume the guest, at which point the guest frees the struct.

However since the host manually resets the guest registers, the code that frees the ucall struct
is never reached and thus the ucall struct is leaked.

Currently ucall code has a pool of KVM_MAX_VCPUS (512) objects, thus if the test is run with more
than 256 vCPUs, the pool is exhausted and the test fails.

So either we need to:
  - add a way to manually free the ucall struct for such tests from the host side.
  - remove the manual reset of the vCPUs register state from this test and instead put the guest code
    in while(1) {} loop.

  - refactor the ucall code to not rely on a fixed pool of structs, making it possible to tolerate
    small memory leaks like that (I don't like this to be honest).


What do you suggest to do? (I will send a patch after I hear your opinion).

Best regards,
	Maxim Levitsky







[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux