
On Mon, Apr 30, 2007 at 06:42:01PM +0100, Richard W.M. Jones wrote:
Attached are the args (*_args) and return structures (*_ret) for all the calls covered by the remote protocol, that is to say everything except Save, Restore and CoreDump (see previous email).
The only problem area are the upper limits imposed on the lengths of various strings and arrays. The upper limits seem to be required for safely decoding messages from untrusted sources. Some of them however would impose limits on such things as the number of CPUs supported, and perhaps those limits are too low (or too high)? I don't really have any experience of the sort of huge machines that people might be running libvirt on.
SGI did a preso at the Xen summit about their 1024 CPU monster ia64 box. So given that such a thing already exists, we need biggger to account for future developments. One thing I'm not clear - are these limits actually applied at the protocol level, or is the protocol completely variable length and these limits enforced during decoding ? If the latter, then this isn't so critical to get perfect, because we can do updates without breaking back-compat.
/*----- Data types. -----*/
/* Maximum total message size (serialised). */ const REMOTE_MESSAGE_MAX = 262144;
/* Length of long, but not unbounded, strings. * This is an arbitrary limit designed to stop the decoder from trying * to allocate unbounded amounts of memory when fed with a bad message. */ const REMOTE_STRING_MAX = 65536;
/* A long string, which may NOT be NULL. */ typedef string remote_nonnull_string<REMOTE_STRING_MAX>;
/* A long string, which may be NULL. */ typedef remote_nonnull_string *remote_string;
/* This just places an upper limit on the length of lists of * domain IDs which may be sent via the protocol. */ const REMOTE_DOMAIN_ID_LIST_MAX = 4096;
On Xen, domain id is a 16 bit quantity. How many concurrent guests should we account for ?
/* Upper limit on lists of domain names. */ const REMOTE_DOMAIN_NAME_LIST_MAX = 256;
However many active guests we support, we need to match that, since every active guest has a config file somewhere.
/* Upper limit on cpumap (bytes) passed to virDomainPinVcpu. */ const REMOTE_CPUMAP_MAX = 256;
Guess this should be 1/8 of number of CPUs we support. So this gives us 2048 currently.
/* Upper limit on number of info fields returned by virDomainGetVcpus. */ const REMOTE_VCPUINFO_MAX = 2048;
So this is basically the max # of VCPUs we support. 2048 sounds like way more than enough for virtual CPUs, since one huge machines the ratio of phys / virt CPUs is likely to be quite large.
/* Upper limit on cpumaps (bytes) passed to virDomainGetVcpus. */ const REMOTE_CPUMAPS_MAX = 16384;
This needs to be based off # phys * # vcpus we support from the earlier two constants for consistency.
/* Upper limit on lists of network names. */ const REMOTE_NETWORK_NAME_LIST_MAX = 256;
Reasonable. I wonder what max # of bridge devices Linux supports is. Dan. -- |=- Red Hat, Engineering, Emerging Technologies, Boston. +1 978 392 2496 -=| |=- Perl modules: http://search.cpan.org/~danberr/ -=| |=- Projects: http://freshmeat.net/~danielpb/ -=| |=- GnuPG: 7D3B9505 F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 -=|