Che cos'è la priorità e l'affinità di Windows e quali vantaggi offre?


9

Che cosa sono esattamente la priorità e l'affinità (disponibili in Task Manager) e per cosa vengono utilizzati:

Trovato in Task Manager

In quali situazioni dovrebbero / potrebbero essere utilizzate e quali vantaggi si ottengono durante la personalizzazione di queste impostazioni.

Risposte:


3

L'impostazione dell'affinità fa qualcosa, ma non vorrai mai usarla.

L'impostazione dell'affinità della CPU impone a Windows di utilizzare solo la CPU (o i core) selezionata. Se imposti l'affinità su una singola CPU, Windows eseguirà solo quell'applicazione su quella CPU, mai su nessun'altra.

Windows mette automaticamente le applicazioni in esecuzione sul processore meno occupato, quindi limitarlo a una singola CPU non consente a Windows di fare il suo lavoro. Anche se CPU / core 1 è occupato con altre applicazioni, Windows non sarà in grado di eseguire un'applicazione con affinità impostata su CPU / Core 2.

L'unico motivo per cui vorresti farlo è eseguire una vecchia applicazione che non funziona correttamente quando si esegue su un sistema multi-CPU / Core.


5
> non vorrai mai usarlo. Non vero. Se si dispone di un'applicazione a thread singolo, non è possibile utilizzare i thread / core della CPU nella massima misura e non c'è nulla che Windows possa fare per forzarla / ingannarla. Se hai due applicazioni a thread singolo, puoi dire a Windows di utilizzare ognuna un thread / core separato in modo che invece di avere l'utilizzo totale della CPU al passaggio del 50-75%, puoi massimizzarlo al 100% (ogni core utilizzato al massimo da un programma). Quindi sì, puoi davvero utilizzare l'impostazione, ma è uno scenario specifico che la maggior parte delle persone non conoscerà / realizzerà / avrà bisogno.
Synetech,

2
Se hai due applicazioni a thread singolo, Windows verrà eseguito ciascuna su un thread / core diverso e otterrai un utilizzo della CPU al 100% senza impostare l'affinità. Per testare ho appena eseguito 4 istanze di un singolo programma con thread sulla mia macchina a 4 core e ho ottenuto il 100% di utilizzo della CPU. Windows è abbastanza intelligente da programmare la CPU in modo efficiente.
shf301,

Immagino che dipenda dal sistema e / o dalla versione di Windows. L'ho visto (XP) passare con il mouse su entrambi i core al 50-75%, dove entrambi i processi erano impostati su entrambi i core e impostandoli manualmente al massimo la CPU.
Synetech,

@Synetech: sembra quasi impossibile. Avrebbe dovuto spostare i due processi da core a core, sempre entrambi contemporaneamente.
David Schwartz,

Un altro caso d'uso valido per questo: ci sono applicazioni che possono utilizzare tutte le CPU disponibili e possono impedire ad altri programmi di funzionare bene e / o far sì che il sistema operativo risponda molto lentamente all'input dell'utente. In questo caso, qualcuno potrebbe decidere di limitare tale applicazione a solo alcune delle CPU. Come sviluppatore, utilizzo spesso questa funzione quando eseguo il profiling delle mie applicazioni ad uso intensivo di CPU, poiché l'atto del profiling stesso richiede CPU.
Eyal Roth,

2

L'impostazione dell'affinità indica a quel processo su quali processori è autorizzato a funzionare.

Sebbene molto utile per alcuni casi di nicchia, l'utente medio probabilmente non dovrebbe scherzare con esso.

Ad esempio, se a un processo fosse consentito l'esecuzione del proprio core, potrebbe essere eseguito in (quasi) tempo reale senza che quelle 70 utility di Windows interrompano costantemente e scambino lo stack sul processore per il proprio intervallo di tempo. Le applicazioni in tempo reale erano qualcosa che Windows non avrebbe mai potuto fare prima che i sistemi multi-processore / multi-core entrassero in scena perché il sistema operativo avrebbe costantemente interrotto / scambiato le applicazioni per i propri scopi. Ciò può ora essere superato principalmente isolando l'applicazione in tempo reale da un processore, impedendo a tutte le altre applicazioni del sistema di utilizzare quel processore. Questo è un argomento di nicchia ma i sistemi come simulatori di volo (reali), automazione di fabbrica e sistemi di feedback di controllo dipendono dall'architettura in tempo reale per funzionare.

Le applicazioni a uso intensivo di processore (come le macchine virtuali) possono essere isolate nel proprio core in modo da poterle utilizzare senza trascinare il resto del sistema in una scansione. In teoria, un hypervisor in esecuzione su un processore che supporta l'interazione dell'hypervisor bare-metal può raggiungere prestazioni del processore pari al sistema operativo indipendente in esecuzione da solo (meno il processore necessario per eseguire il sistema operativo host). Ovviamente, in pratica anche una VM in esecuzione sul proprio core / processore isolato dovrà comunque accettare una piccola quantità di overhead dall'host del sistema operativo host.

Per le applicazioni che gestiscono una grande quantità di dati in flusso, isolare l'applicazione sul proprio processore (e potenzialmente utilizzando ancora più core) ridurrà lo scambio di cache.

Le applicazioni meno recenti che si rompono quando sono distribuite su più processori possono essere effettivamente limitate a un core / processore per risolvere il problema.

Se stavi eseguendo misurazioni delle prestazioni su una specifica applicazione, è quasi impossibile ottenere risultati coerenti su sistemi diversi a meno che tu non riesca a isolare il processo perché, altrimenti, non hai alcun controllo su quanto tempo il sistema operativo impiega la tua applicazione. Molte persone concordano sul fatto che la misurazione delle prestazioni di runtime non dia buoni risultati, ma quelle persone non hanno mai considerato che l'intervento del sistema operativo (che rende i risultati così incoerenti) possa essere limitato usando l'affinità.

Ci sono molti casi in cui l'affinità è vitale ma, se non sai cosa sono, probabilmente non ne avrai bisogno.


La cosa che rende l'affinità molto meno utile di quanto molti credano dovrebbe essere è questa: impostare l'affinità del processo su un sottoinsieme delle CPU disponibili. non chiude nient'altro da quelle CPU. Per fare ciò dovresti andare a tutti gli altri processi nel sistema per tenerli fuori dalla CPU che vuoi avere per te stesso. Non è quasi mai pratico.
Jamie Hanrahan,

È possibile utilizzare software di terze parti . Perché MS non include questa funzionalità per impostazione predefinita è oltre me.
Evan Plaice,

Perché, come ho scritto, non è poi così utile. Ed è molto soggetto a un uso improprio. In effetti, il solito risultato di essere troppo "creativi" con l'affinità è che le cose non funzionano quando altrimenti potrebbero esserlo. Di solito è meglio eseguire un thread diverso da quello che pensi sia la CPU preferita piuttosto che per niente (dopo aver impostato follemente l'affinità per negare l'accesso a CPU che altrimenti sarebbero inattive). Il meccanismo "processore ideale" predefinito di Windows e il meccanismo "processore precedente" garantiscono una buona coerenza della cache senza tale strumento contundente della maschera di affinità.
Jamie Hanrahan,

2

Questa è una funzione molto utile in alcuni scenari. Supponiamo che tu abbia un'applicazione multi-thread che tende a rimanere inattivo o a catturare in modo aggressivo il 100% di ogni CPU per diversi minuti, facendo ricerche, build, ecc. Chiamiamo questa applicazione "eclissi".

Diciamo anche che mentre lavori su questa applicazione, hai un sacco di altre applicazioni che hanno requisiti di CPU modesti, ma sono essenzialmente applicazioni in tempo reale. Ad esempio, mentre usi Eclipse e avvia casualmente build o esegue compilazioni gwt, stai anche utilizzando il tuo computer per riprodurre musica in streaming o eseguire ricerche in una finestra del browser (ad esempio, ricercando la causa di un problema di build) . Certo, non morirai se la tua musica salta o il tuo browser smette di rispondere, ma è fastidioso.

Ciò che l'affinità ti consente di fare è limitare la tua app di cpu eating a 7/8 core in modo che a tutti gli altri sia garantito l'accesso a una cpu relativamente inutilizzata e che tu non abbia costantemente a che fare con la balbuzie e le interruzioni all'usabilità di tutto il resto sul tuo computer mentre l'eclissi sta macinando via.


In questo caso sarebbe molto meglio impostare semplicemente il processo di hog della CPU su una priorità bassa.
Jamie Hanrahan,

1

Priorità più alta significa che l'elaborazione di un'attività sarà avvantaggiata rispetto alle attività a bassa priorità. Se stai eseguendo un'applicazione che ti richiede di essere molto reattivo e, ad esempio, una serie di altri processi non interattivi, le priorità possono garantire un'esperienza migliore con il tuo processo ad alta priorità.

Ad esempio: da Windows Vista, Windows Media Player ottiene automaticamente una priorità più elevata per garantire una riproduzione fluida e continua dei file multimediali, con solo il 20% circa del tempo di CPU disponibile per altri processi per impostazione predefinita. Questo è solo un esempio per aiutarti a capire quali priorità fanno. (Puoi leggere di più sulle priorità di Media Player in Vista su Technet .)

L'affinità soft o hard può aumentare la velocità di elaborazione in quanto la cache della CPU può contenere al suo interno resti del processo quando un processo è stato precedentemente interrotto e poi ripreso in un secondo momento.


Dolce grazie! Quindi qual è una buona guida per usare afinity?
James Mertz,


Una buona guida all'uso dell'affinità: "No".
Jamie Hanrahan,

Il "solo 20% di tempo CPU disponibile per altri processi" non è una descrizione accurata. L'implementazione effettiva è che un thread che accede allo scheduler della classe multimediale può essere eseguito fino all'80% di ogni intervallo di pianificazione nella classe di priorità in tempo reale. Non deve necessariamente usare così tanto, e se non lo fa. più del 20% sarà disponibile per altri thread.
Jamie Hanrahan,

1

Un esempio perfetto di ciò sono i vecchi giochi per computer (o altri software), specialmente quando i giochi a 32 bit (applicazioni) vengono emulati su un moderno computer a 64 bit. Impostando l'affinità per i vecchi giochi limitandoli a soli quattro core, spesso si possono evitare gli arresti anomali per consentire l'avvio dei giochi testardi. Alcuni motori di rendering utilizzati da vecchi giochi, editor video e software di grafica con accelerazione hardware o software CAD, non comprendono più di quattro core della CPU e si arrestano in modo anomalo quando vengono avviati.

Non sto creando un account solo per pubblicare questo, per trovarmi google 'kieseyhow'

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.