È ansible forzare un’applicazione Java esistente per utilizzare non più di x core?

Stiamo analizzando i programmi Java esistenti. Sono applicazioni threaded progettate per beneficiare di CPU multi-core. Vorremmo misurare l’effetto del numero di core sulla velocità di esecuzione, ma non siamo disposti (e non possiamo) a cambiare il codice di queste applicazioni.

Certo, potremmo testare il software su macchine diverse, ma questo è costoso e complicato. Preferiremmo avere una soluzione software.

Nota: si può presumere che la piattaforma di test sia Windows, Linux o Mac. Idealmente, vorremmo essere in grado di eseguire i test su una di queste piattaforms.

Si chiama impostazione affinità CPU, ed è un’impostazione del sistema operativo per i processi, non specifici per Java.

Su Linux: http://www.cyberciti.biz/tips/setting-processor-affinity-certain-task-or-process.html

Su Windows: http://www.addictivetips.com/windows-tips/how-to-set-process-affinity-to-an-application-in-windows/

Su Mac non sembra ansible impostarlo: https://superuser.com/questions/149312/how-to-set-processor-affinity-on-os-x

Capovolgere il problema; invece di capire come limitare l’applicazione a utilizzare solo core su una macchina m core, capire come assicurarsi che ci siano solo n core disponibili per l’applicazione. Potresti scrivere un programma molto semplice che mangia un core facendo qualcosa come while (true); e avviare mn istanze di quel programma in esecuzione con la massima priorità, garantendo in tal modo che il proprio codice abbia solo n core disponibili.

In alternativa, se il BIOS o il sistema operativo consente la distriggerszione dei core della CPU, funziona anche. So che gli strumenti di CHUD su Mac OS X erano soliti farlo, ma non ho toccato quegli strumenti sin dall’era G5, quindi potrebbe non funzionare più.