GPU Virtualization isn't here yet. At least not properly. VMWare Workstation has it as an experimental feature.
As for the rest of it - Are you able to dedicate a piece of hardware to be a VM host, or does this need to run on top of your existing operating system?
If you're dedicating some hardware, then Citrix XenServer or VMWare ESXi are excellent, comparable choices, and both are free. ESXi has a web interface which can be used for console access to VMs, and will work fine over the 'net.
If you can only run VMs on top of an existing Windows/Linux installation as you'll be using it for other tasks, then it depends on your choice of OS. VMWare Workstation is a good choice, but not free.
I would suggest right away using MySQL 5.5 with the following:
innodb_file_per_table <- always enable this
innodb_io_capacity=65536
innodb_read_io_threads=64
innodb_write_io_threads-64
query_cache_size=0 (Default : Disbale your query cache)
Until MySQL 5.5 gets mature, do not use the multiple buffer pools.
How much RAM you need depends on two(2) things
For MyISAM, this query shows the key buffer size your system should be set to
SELECT CONCAT(CEILING(ndxsum/POWER(1024,2)),'M') RecommendedKeyBufferSize FROM (SELECT SUM(index_length) ndxsum FROM information_schema.tables WHERE engine='MyISAM' and table_schema NOT IN ('information_schema','mysql')) A;
For InnoDB, this query shows the innodb buffer pool size your system should be set to
SELECT CONCAT(CEILING(innodbsum/POWER(1024,2)),'M') RecommendedInnoDBBufferPoolSize FROM (SELECT SUM(data_length+index_length) innodbsum FROM information_schema.tables WHERE engine='InnoDB') A;
To get a complete picture of what you have as far MySQL Data, run this query:
SELECT DBName,CONCAT(LPAD(FORMAT(SDSize/POWER(1024,pw),3),17,' '),' ',SUBSTR(' KMGTP',pw+1,1),'B') "Data Size",CONCAT(LPAD(FORMAT(SXSize/POWER(1024,pw),3),17,' '),' ',SUBSTR(' KMGTP',pw+1,1),'B') "Index Size",CONCAT(LPAD(FORMAT(STSize/POWER(1024,pw),3),17,' '),' ',SUBSTR(' KMGTP',pw+1,1),'B') "Total Size" FROM (SELECT IFNULL(DB,'All Databases') DBName,SUM(DSize) SDSize,SUM(XSize) SXSize,SUM(TSize) STSize FROM (SELECT table_schema DB,data_length DSize,index_length XSize,data_length+index_length TSize FROM information_schema.tables WHERE table_schema NOT IN ('mysql','information_schema','performance_schema')) AAA GROUP BY DB WITH ROLLUP) AA,(SELECT 3 pw) BB ORDER BY (SDSize+SXSize);
Set (SELECT 0 pw) BB For Bytes
Set (SELECT 1 pw) BB For KiloBytes
Set (SELECT 2 pw) BB For MegaBytes
Set (SELECT 3 pw) BB For GigaBytes
Set (SELECT 4 pw) BB For TeraBytes
Set (SELECT 5 pw) BB For PetaBytes (email me if you start using this)
The maximum key_buffer_size is 4GB, so do not surpass this.
The maximum innodb_buffer_pool_size should be 75-80% or installed RAM
Always set innodb_log_file_size to 25% of innodb_buffer_pool_size
The maximum innodb_log_file_size is 2047M (InnoDB will not work with 2G or 2048M, you can check the MySQL source code)
With these things in mind, you should be able to forecast the settings you need in /etc/my.cnf and for your hardware.
Give it a Try !!!
Best Answer
Virtual servers take advantage of the fact that most servers do not run at capacity for any length of time, and cpu cycles / memory can be shared. Therefore, it REALLY depends on how busy your virtual machines are.
It also depends on which virtual environment you are using, as to how well it can share memory. (I seem to recall that when I experimented with XEN there was no memory sharing at all - but I think that has now changed).
A development environment is a perfect place to get your feet wet with a virtual environment, and it's real handy to be able to "create a new server" in about 5 minutes if it is needed (even allowing you to over-allocate your resources temporarily in a pinch).
By way of example, we can host approximately 100 virtual machines using VMWare Infrastructure on 5 physical servers. Each of these physical machines has 4 dual core Xeon 2.6Ghz CPUs, 16Gb Ram, and 8 - Gigabit nics. (so an average of 20 VMs on each of these). We find our biggest limitation to be the amount of available memory.
I can say that having worked in a virtual environment for several years now, I wouldn't want to go back.
Hope this helps.