Buongiorno a tutti,
ho un nodo fisico con queste caratteristiche:
CPU Intel Xeon L5640
Processor Sockets 2
Processor Cores per Socket 6
Logical Processors 24
Hyperthreadind Enabled
Nel nodo fisico attualmente ci sono 2 macchine virtuali. Una che usa pochissime risorse e un altra che dovrebbe usare il più possibile tutte le risorse rimanenti (è una macchina virtuale con un database sopra MySql 5.1).
Mysql 5.1 non è multicore quindi a livello della VM arriva a usare il 100% di un singolo core anche se il nodo fisico ha più potenza.
Come posso dargli più CPU?
Girando su internet pare che la variabile "cpuid.coresPerSocket" potrebbe aiutarmi. Che dite? Se dò un singolo core alla macchina ma poi metto "cpuid.coresPerSocket = 8" riesco così a sfruttare 8 core e farne vedere solo una alla VM?
Grazie
penso che con quel parametro puoi solo dare più core per un socket, quindi simulare un solo processore con tanti core (4, 6... come nel fisico).
Ma se l'applicazione usa comunque e sempre un solo core, non cambia niente, temo.
Ciao,
Se il mySQL è single thread, lavorerà solo su un core/cpu.
Non puoi farci nulla.
Ciao,
MySQL in se è multi-threaded, questo è sicuro. Può essere che le singole query che esegue non vengano splittate in multithread, ma su queste cose non sono espertissimo. Ma in se il core è sicuramente multithreaded....
Ciao,
Luca.
@Luca, il mio era un discorso generale sulle applicazioni single thread.
@foreach Il parametro di cui parli, serve a far diventare multi core la vCpu della VM.
Questo per sopperire alle limitazioni di alcuni software licenziati a socket.
http://kb.vmware.com/kb/1010184
Ciao
assunto che quello che volevi fare non si può sei sicuro che il collo di bottiglia sia la cpu? Rileggendo con calma il tuo post una cosa mi preoccupa: non citi la ram che di solito è la cosa più importante, assieme al tuning che è strettamente correlato.
Se ci illustri meglio il problema, il tipo di query che sono lente etc etc forse qualche idea ci viene. Un po' con mysql ci ho giocato...
Buondi
solitamente i DB lavorano molto in RAM, per essere piu veloci..
nn è che la cpu è utilizzata da altri processi?
stefano
Vi ringrazio per le risposte.
Il mio dubbio principale era proprio se possibile unire più core e farli vedere come uno solo alla VM.....
Risposta...non è possibile
Grazie per i consigli!
vSphere è un sistema di virtualizzazione (non di emulazione) e quindi esiste un legama 1=1 tra le cpu virtuali che dai alla VM e i core (o logical CPU se usi HT) fisici. Se vuoi usarecpu in parallelo devi dare più cpu alla VM, sarà poi cura del S.O. essere in grado di gestirle e delle tua applicazioni la capacità di poterle sfruttare. In fondo capiterebbe la stessa cosa se tu installassi la stessa applicazione (MySql) su un server fisico multicore.
Max
MySQL è multithreaded il problema è che le singole query non vengono spezzate ma eseguite da un singolo thread, morale della favola, devi cambiare le query per farle andare più veloci (o fare caching aggressivo in RAM), una alternativa è usare librerie come questa per gestire query parallele: http://code.google.com/p/shard-query/
Ciao a tutti,
scusate se mi attacco a un thread già aperto, ma la domanda che volevo fare proprio relativa al commento di un utente...
Quindi, se ho capito bene, in un'infrastruttura con HT a una vcpu corrisponde un processore logico? Interamente dedicato?
Ciao e grazie
Ciao,
una virtual cpu (vista dalla VM come un singolo core) corrisponde a un contesto di esecuzione in esecuzione su un core fisico (nel caso di HT abilitato e' in realta' un core logico).
Devi pero' pensare alla vCPU come a un processo che puo' essere in esecuzione, in ready, in wait...
Se hai una sola vCPU la tua VM avra' un solo contesto di esecuzione alla volta, per cui sara' schedulato su un singolo core, ma il core NON è dedicato a quella vCPU. Anzi, il contesto di esecuzione della tua vCPU puo' essere schedulato prima su un core e poi su un altro, in base alle decisioni dello scheduler di ESXi.
Il limite superiore e' che la tua vCPU richieda tutto un core: ESXi lascia "vedere" le cpu fisiche e non "spalma" su piu' core in parallelo la singola cpu.
Se hai ancora dubbi, chiedi (non e' detto che si stato chiarissimo )
Giuseppe
Ciao Giuseppe,
per prima cosa grazie per la pronta risposta...
Non mi è molto chiara, data la mia ignoranza, questa frase:
"Devi pero' pensare alla vCPU come a un processo che puo' essere in esecuzione, in ready, in wait..."
Inoltre in quest'altra "Se hai una sola vCPU la tua VM avra' un solo contesto di esecuzione alla volta, per cui sara' schedulato su un singolo core, ma il core NON è dedicato a quella vCPU" quando parli di singolo core (in caso di HT) ti riferisci sempre al processore logico?
Purtroppo, ribadisco, sono totalmente ignorante in materia...sto studiando i vari doc di vmware (tipo il resource management) ma alcune cose proprio non riesco a capirle (oltre a questa il concetto di virtualizzazione della ram software-based o hardware-based )
Ciao e grazie per la pazienza
(oltre a questa il concetto di virtualizzazione della ram software-based o hardware-based
magari puoi aprire un thread a parte, così viene più facile da ricercare per chi in futuro può essere interessato all'argomento
Grazie Tinto...
infatti non avevo intenzione di continuare la discussione qui...anche perchè si parla di CPU
Ciao,
se apri un nuovo topic riprendiamo il discorso li
Intanto ti segnalo questo documento: http://www.vmware.com/files/pdf/perf-vsphere-cpu_scheduler.pdf e' "datato" dato che si riferisce ancora alla versione 4, ma i concetti sono ancora validi.
Per le domande specifiche: si, quando parlo di core intendevo anche core logico in caso di HT attiva.
Per quanto riguarda "Devi pero' pensare alla vCPU come a un processo che puo' essere in esecuzione, in ready, in wait..." mi sto riferendo ai concetti di scheduling della cpu indipendemente dal contesto virtuale: e' un tema trattato normalmente nei corsi di sistemi operativi delle varie facolta' di informatica/ingegneria informatica. Se googli un po' troverai su vari siti universitari numerose presentazioni sull'argomento.
Non te ne segnalo una in particolare perche' il mio preferito resta il libro di Tanenbaum
Giuseppe
Di nuovo grazie Giuseppe...
Purtroppo come ti dicevo sono proprio le basi a mancarmi Vabbè cercherò di trovare qualcosa di "comprensibile" in rete...grazie ancora!!!
Se mi permetti un po’ di autopromozione, ti segnalo per la parte di gestione della memoria la mia serie di post di qualche tempo fa (riferiti alla 4.1, ma i concetti restano validi):
http://virtualbyte.wordpress.com/2010/11/08/la-gestione-della-memoria-in-vmware-esx-4-1-parte-1/
http://virtualbyte.wordpress.com/2010/11/16/la-gestione-della-memoria-in-vmware-esx-4-1parte-2/
http://virtualbyte.wordpress.com/2010/11/28/la-gestione-della-memoria-in-vmware-esx-4-1-parte-3/
Non ho mai fatto una serie di post per la gestione della cpu, magari potrebbe essere un’idea ☺
Giuseppe