Utilizzare casi per avere priorità di process diverse per CPU e IO?

I processi Linux possono avere diverse priorità CPU e IO (nice and ionice).

Perché è necessario avere diverse priorità CPU e IO?

  • Reindirizzare un traffico specifico a un altro gateway
  • QoS - la width di banda separata in tutti gli IP durante un carico elevato
  • Qual è la migliore distro per ospitare una soluzione di virtualizzazione KVM
  • Come faccio a sapere cosa sta girando la mia unità?
  • Il gateway predefinito è in una substring diversa. Come configurare in RHEL6.2
  • Come accedere alla pagina web tramite il terminal?
  • C'è un uso reale del mondo per averli diversi?

    Quali sono i casi di utilizzo reale che hai trovato che hanno bisogno di diverse CPU e IO priorità? Come la priorità della CPU superiore alla normale ma inferiore alla priorità IO normale o viceversa.

  • la generazione di rrdgraph non riesce ad elevare il carico IO
  • Come mantenere la sottrazione del sottotracco (`rm -rf`) dall'affare di altri processi per il disco I / O?
  • È ansible assegnare una priorità piacevole e ionica a tutti gli script eseguiti dal demone cron?
  • Posso gettare il catrame senza ionica?
  • Come impostare la priorità i / o per i processi client nfs?
  • ignorato di idonee
  • One Solution collect form web for “Utilizzare casi per avere priorità di process diverse per CPU e IO?”

    Il comportmento predefinito di 'nice' è quello di regolare la priorità dell'applicazione 'io' anche quando cambia la simpaticità.

    Tutto ovviamente dipende dal carico di lavoro, ma uno degli aspetti chiave di qualsiasi sistema operativo è come assegna la propria risorsa e come gestisce la contesa .

    È effettivamente importnte capire quale bellezza fa perché quando sotto carico da processi concorrenti il ​​modo in cui il sistema operativo si comport può avere un impatto sul resto del tuo carico di lavoro.

    La contesa è la misura di come le applicazioni differenti competono per la stessa risorsa (come la CPU).

    Gestione del carico

    Da quando è stato introdotto il pianificatore del tutto giusto, il bello è solo un frontend alla clausola "peso" di each process. Quale può essere visto in proc.

    $ cat /proc/self/sched --------------------------------------------------------- ... se.load.weight : 1024 ... 

    Cambiare la nicchia semplicemente altera il peso:

     $ nice -n 5 cat /proc/self/sched --------------------------------------------------------- ... se.load.weight : 335 ... 

    La misura per la disputa della CPU è fatta dall'algorithm di pianificazione del tutto giusto. Ogni applicazione è assegnata un valore "peso" e in caso di tempo di CPU contendente, allora il tempo viene suddiviso tra i processi per il totale di tutti i processi contendenti per il tempo della CPU e assegnandoli il tempo di CPU più basso denominazione comune basato sul loro valore di peso.

    Se ho 3 applicazioni che vogliono utilizzare il tempo della CPU, per impostazione predefinita ricevono 1024 come peso normale. Se avessi un process con un bel +5 come sopra, tutti e tre i pesi sarebbero stati totali al 2383, il process niced avrebbe così ricevuto circa il 15% del tempo di CPU in un dato secondo se tutti e tre i processi chiedevano la CPU in quel secondo .

    Perché è necessario avere diverse priorità CPU e IO?

    La niceness sta giocando solo con ciò che deve fare quando il sistema è sotto carico, cioè – come il sistema operativo si taglia di volta in su tra i processi concorrenti definiti da qualunque fattore sia necessario.

    Come questo influisce su di te o è pertinente a te è vincolato da ciò che le consegne priorità diverse applicazioni hanno tra loro e il tempo di consegnare each applicazione dovrebbe avere.

    Niceness realmente fa solo qualcosa quando il sistema è sotto carico (c'è più roba che desidera attenzione che la CPU o il disco possono gestire). Insegna semplicemente al kernel come allocare risorse in queste circostanze.

    C'è un uso reale del mondo per averli diversi?

    Se si dispone di numerosi processi concorrenti o di lavoro che è più che può essere fatto dalla CPU, la niceness ti dà alcune garanzie relativamente stabili su quali lavori finisce prima. Questo può essere importnte per te se dite di produrre un rapporto che dovrebbe essere consegnato prima che un altro rapporto finisca.

    Su un sistema desktop, la niceness può essere ancora più importnte. Alcune applicazioni hanno un comportmento in tempo reale per cui essi vengono più svegliati durante il caricamento impedisce che i dati vengano bloccati. Per esempio, Pulseaudio rientra in questa categoria.

    Potrebbero essere richieste altre applicazioni per distribuire il lavoro per applicazioni dipendenti. Per esempio un sacco di richieste apache per dire un server SQL come MySQL potrebbe bloccarsi per un lungo periodo di tempo perché SQL isnt servire abbastanza veloce perché – dire che un altro rapporto sta competendo per il tempo CPU. Quindi non solo SQL è bloccato ma così è Apache. SQL può danneggiare talvolta perché spesso ci sono less fonti di lavoro rispetto ai thread Apache in concorrenza come un gruppo da pesare più favorevolmente da parte dello scheduler, in modo da dare più tempo di CPU a SQL evenso le cose.

    UpdateDB (un programma che indice i file) funziona tardi durante la notte ed è molto pesante a disco. Può essere utile ridurre la priorità di pianificazione degli IO in modo che altre applicazioni in quel momento ricevano priorità su qualcosa che non è altrettanto importnte nell'ordine delle cose.

    Quali sono i casi di utilizzo reale che hai trovato che hanno bisogno di diverse CPU e IO priorità?

    Pochissimi. La bellezza è troppo di un approccio più efficace. Di regola, mi import less circa quanto bene le applicazioni eseguono e più su come potrebbero eseguire male. Questo potrebbe suonare indietro in un primo momento, ma ho garanzie di fornitura di servizi per soddisfare che sono più importnti per me.

    Voglio la fiducia dire "la tua roba anche in un brutto giorno sarà fatta in X periodo". Se va più veloce, è solo un bonus.

    In genere iniziano a generare specifiche concordate come:

    • Tutte le applicazioni web sono garantite per completare le richieste in 0,3 secondi.
    • Tutte le richieste SQL su un sistema sono garantite per essere completate in 0,1 secondi.
    • L'applicazione web deve gestire non più di 50 IOPS e fornire file di 1k.
    • L'impronta di memory delle applicazioni web non è superiore a 250Mb.

    E disegnare i requisiti per incontrarsi come:

    • Tutte le richieste web devono essere completate in 0,05 secondi.
    • Tutte le richieste SQL devono essere completate in 0,02 secondi.
    • Dovrebbe essere sufficiente gestire tutte le richieste di memory.
    • I requisiti di IO devono essere soddisfatti.

    Fornire specifiche sono vere, posso quindi soddisfare questi obiettivi senza fare virtualizzazione, utilizzando l'approccio molto più efficiente dei gruppi di controllo.

    I gruppi di controllo mi permettono di garantire garanzie di livello del servizio abbastanza affidabili per l'allocazione delle risorse fornendo l'applicazione comport nei limiti specificati. Ciò significa che anche su un sistema sotto carico posso garantire la disponibilità di risorse per l'applicazione in questione e garantire spazio per altre applicazioni nella stessa casella!

    Se prendiamo il tuo esempio di CPU e IO. Ho fissato limiti che soddisfano tali requisiti:

     # cd /sys/fs/cgroup/blkio/apache # echo "253:0 100" >blkio.throttle.read_iops_device # echo "253:0 50" >blkio.throttle.write_iops_device # echo "253:0 102400" >blkio.throttle.read_bps_device 

    Quindi 100k byte per leggere di 100 iops.

     # cd /sys/fs/cgroup/cpu/apache # echo 1000000 >cpu.cfs_period_us # echo 60000 >cpu.cfs_quota_us 

    Di un periodo di tempo di 1 secondo, dare 0,06 secondi di CPU.

     # cd /sys/fs/cgroup/cpu/sql # echo 1000000 >cpu.cfs_period_us # echo 20000 >cpu.cfs_quota_us 

    Di un periodo di tempo di 1 secondo, dare 0.02 secondi di CPU.

    Fornire altri gruppi concorrenti non fanno nulla stupido, essere sotto carico è less importnte per la consegna dei servizi perché so come viene lanciata la CPU per each applicazione.

    I gruppi di controllo di questa natura sono ancora gli sforzi migliori, ma offrono molto più controllo su quel sforzo che la bellezza e la non ionicità.

    Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.