[libvirt] [PATCH] kvm: maxVCPU runtime detection
Daniel P. Berrange
berrange at redhat.com
Fri Aug 22 13:27:58 UTC 2008
On Fri, Aug 22, 2008 at 03:16:42PM +0200, Guido G?nther wrote:
> Hi,
> with recent linux kernels we can detect the maximum number of virtual
> cpus at runtime via an ioctl. Possible patch attached. It does this on
> every call to qemudGetMaxVCPUs. Would you prefer something that does
> this only once in qemudStartup()?
> Cheers,
> -- Guido
>
> +dnl
> +dnl check for kvm headers
> +dnl
> +AC_CHECK_HEADERS([linux/kvm.h])
Hmm, I wonder if that's commonly installed by Fedora/Debian RPMs
for KVM....
It might be neccessary to just #define the IOCTL constant in
our own header files if its not available.
> @@ -72,6 +77,9 @@
> static int qemudShutdown(void);
> #endif
>
> +/* device for kvm ioctls */
> +#define KVM_DEVICE "/dev/kvm"
> +
> /* qemudDebug statements should be changed to use this macro instead. */
> #define DEBUG(fmt,...) VIR_DEBUG(__FILE__, fmt, __VA_ARGS__)
> #define DEBUG0(msg) VIR_DEBUG(__FILE__, "%s", msg)
> @@ -1768,6 +1776,29 @@ static const char *qemudGetType(virConnectPtr conn ATTRIBUTE_UNUSED) {
> return "QEMU";
> }
>
> +
> +static int kvmGetMaxVCPUs(void) {
> + int maxvcpus = 1;
> +
> +#if defined(KVM_CAP_NR_VCPUS)
> + int r, fd;
> +
> + fd = open(KVM_DEVICE, O_RDONLY);
> + if (fd < 0) {
> + qemudLog(QEMUD_WARN, _("Unable to open " KVM_DEVICE ": %s\n"), strerror(errno));
> + return maxvcpus;
> + }
> +
> + r = ioctl(fd, KVM_CHECK_EXTENSION, KVM_CAP_NR_VCPUS);
> + if (r > 0)
> + maxvcpus = r;
> +
> + close(fd);
> +#endif
> + return maxvcpus;
> +}
This is all very cool. IIRC Cole has some code which could guess
a reasonable maxvcpus from KVM version number which we could
potentially fallback to
Daniel
--
|: Red Hat, Engineering, London -o- http://people.redhat.com/berrange/ :|
|: http://libvirt.org -o- http://virt-manager.org -o- http://ovirt.org :|
|: http://autobuild.org -o- http://search.cpan.org/~danberr/ :|
|: GnuPG: 7D3B9505 -o- F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :|
More information about the libvir-list
mailing list