Nota: presumo che tu abbia un'unità disco rotante qui. Le metriche delle prestazioni in queste aree differiscono notevolmente per l'archiviazione a stato solido.
Mentre un'unità moderna può sostenere molte decine di Mbyte al secondo quando si eseguono letture e scritture di massa, entrambe le operazioni descritte coinvolgono almeno due posizioni sul disco, quindi sono coinvolti molti movimenti della testa. La latenza dei movimenti della testa ha un effetto enorme sul rendimento, perché ogni volta che l'unità ha bisogno di muovere le teste c'è un ritardo nel metterle effettivamente nel posto giusto, un ritardo in attesa che si stabilizzino, e poi un ritardo in attesa del giusto parte del disco per girare oltre. Questi ritardi sono piccoli sul proprio (nemmeno 10ns per movimento in media in media per la maggior parte delle unità moderne) ma se l'unità può spingere 100 Mbyte / sec in flusso completo di 10 ms ogni movimento spreca il tempo di 1 Mbyte di trasferimento dati. Con molto successo, l'unità può facilmente passare più tempo a spostare le teste di quante non passi effettivamente a leggere e scrivere dati (leggi per un paio di 10 ms, muovi la testa, leggi da lì per un po ', muovi la testa, scrivi per pochi ms, muovi la testa ...).
Mentre si deframmenta il disco, l'utility trascorre la maggior parte del tempo a leggere da un punto del disco e scrivere a un altro, un piccolo numero di blocchi alla volta. Estrarre il contenuto da un set di file protetto è ancora peggiore in quanto vi sono almeno due file da leggere (un file sorgente e uno o più file di parità) e il file di output in fase di scrittura. Anche solo una semplice operazione di copia su un file di grandi dimensioni ha l'effetto. Tutto ciò esclude i movimenti della testa necessari per mantenere aggiornate le strutture delle directory e le mappe dello spazio libero man mano che i blocchi vengono spostati e / oi file estesi. L'esecuzione di una macchina virtuale può essere altrettanto impegnativa a seconda di ciò che la VM sta facendo in quel momento (e la VM ridurrà la RAM disponibile sul computer host da utilizzare come cache / buffer che potrebbe peggiorare la situazione, e qualsiasi operazione di scrittura nella VM può essere molto più esigenti della stessa operazione sull'host direttamente, specialmente se si utilizzano unità virtuali "coltivabili").
Con tutto questo, se un'applicazione GUI deve richiedere anche un piccolo I / O, potrebbe essere messa in coda dietro a tutte le altre cose che stanno succedendo. A meno che l'applicazione sia completamente multi-thread, è probabile che causi il "blocco" in attesa che l'operazione di I / O venga completata, il che significa che non è in grado di rispondere a nessun messaggio (come "l'utente ha fatto clic qui") in la coda degli eventi di Windows fino a quando non arriva il suo turno. Più cose succedendo in una volta, peggio, e non la noterai nelle letture "CPU busy" perché la CPU non è occupato - è seduto in attesa di operazioni di I / O per completare la maggior parte del tempo in queste circostanze.
Se si dispone di due o più unità, è possibile ridurre notevolmente l'effetto che questo ha su di voi diffondendo il carico sulle unità. Se la VM è su un'unità separata dal sistema operativo principale, non competerà per la manutenzione I / O quando la macchina virtuale è occupata mentre l'host sta deframmentando la partizione di sistema. Inoltre, l'estrazione di un archivio da un'unità e la scrittura dell'output su un altro sarà notevolmente più veloce rispetto all'estrazione sulla stessa unità poiché l'operazione di lettura non è in competizione diretta con l'operazione di scrittura per il posizionamento della testina su un'unità.