X-Git-Url: https://gapil.gnulinux.it/gitweb/?a=blobdiff_plain;f=prochand.tex;h=b879a1da05fbe55e448c0a223b838e1f1f45fc9f;hb=a3df9fa27dd8d5fa867160ffa9060e497077c784;hp=cd5c04bd7fa5b8a7f6b4b178ab3865b69e3fddb3;hpb=61cc85db35ce7af082bcad07d0e05beb2ee92f26;p=gapil.git diff --git a/prochand.tex b/prochand.tex index cd5c04b..b879a1d 100644 --- a/prochand.tex +++ b/prochand.tex @@ -2085,14 +2085,16 @@ compila con il flag \cmd{-ansi}, scrivere codice portabile. -\section{La gestione della priorità di esecuzione} +\section{La gestione della priorità dei processi} \label{sec:proc_priority} In questa sezione tratteremo più approfonditamente i meccanismi con il quale lo \itindex{scheduler} \textit{scheduler} assegna la CPU ai vari processi attivi. In particolare prenderemo in esame i vari meccanismi con cui viene gestita l'assegnazione del tempo di CPU, ed illustreremo le varie funzioni di -gestione. +gestione. Tratteremo infine anche le altre priorità dei processi (come quelle +per l'accesso a disco) divenute disponibili con i kernel più recenti. + \subsection{I meccanismi di \textit{scheduling}} \label{sec:proc_sched} @@ -2971,14 +2973,50 @@ non avranno alcun risultato effettivo. \itindend{CPU~affinity} -%TODO trattare le priorità di I/O -% vedi man ioprio_set e Documentation/block/ioprio.txt - \subsection{Le priorità per le operazioni di I/O} \label{sec:io_priority} -Una delle +A lungo l'unica priorità usata per i processi è stata quella relativa +all'assegnazione dell'uso del processore. Ma il processore non è l'unica +risorsa che i processi devono contendersi, un'altra, altrettanto importante +per le prestazioni, è quella dell'accesso a disco. Per questo motivo sono +stati introdotti diversi \textit{I/O scheduler} in grado di distribuire in +maniera opportuna questa risorsa ai vari processi. Fino al kernel 2.6.17 era +possibile soltanto differenziare le politiche generali di gestione, scegliendo +di usare un diverso \textit{I/O scheduler}; a partire da questa versione, con +l'introduzione dello scheduler CFQ (\textit{Completely Fair Queuing}) è +divenuto possibile, qualora si usi questo scheduler, impostare anche delle +diverse priorità di accesso per i singoli processi.\footnote{al momento + (kernel 2.6.31), le priorità di I/O sono disponibili soltanto per questo + scheduler.} + +La scelta dello scheduler di I/O si può fare in maniera generica a livello di +avvio del kernel assegnando il nome dello stesso al parametro +\texttt{elevator}, mentre se ne può indicare uno per l'accesso al singolo +disco scrivendo nel file \texttt{/sys/block/\textit{dev}/queue/scheduler} +(dove \texttt{\textit{dev}} è il nome del dispositivo associato al disco); gli +scheduler disponibili sono mostrati dal contenuto dello stesso file che +riporta fra parentesi quadre quello attivo, il default in tutti i kernel +recenti è proprio il \texttt{cfq},\footnote{nome con cui si indica appunto lo + scheduler \textit{Completely Fair Queuing}.} che supporta le priorità; per i +dettagli sulle caratteristiche specifiche degli altri scheduler, la cui +discussione attiene a problematiche di ambito sistemistico, si consulti la +documentazione nella directory \texttt{Documentation/block/} dei sorgenti del +kernel. + +Una volta che si sia impostato lo scheduler CFQ ci sono due specifiche system +call, specifiche di Linux, che consentono di leggere ed impostare le priorità +di I/O.\footnote{se usate in corrisponenza ad uno scheduler diverso il loro + utilizzo non avrà alcun effetto.} Dato che non esiste una interfaccia +diretta nelle librerie del C per queste due funzioni occorrerà invocarle +tramite la funzione \func{syscall} (come illustrato in +sez.~\ref{sec:intro_syscall}). + +Lo scheduler CFQ prevede la presenza di tre diverse classi, e ricalcando i +concetti dello scheduler della CPU, +%TODO trattare le priorità di I/O +% vedi man ioprio_set e Documentation/block/ioprio.txt %TODO trattare le funzionalità per il NUMA % vedi man numa e le pagine di manuale relative @@ -3192,7 +3230,8 @@ varie funzioni di libreria, che sono identificate aggiungendo il suffisso % LocalWords: infop ALL WEXITED WSTOPPED WNOWAIT signo CLD EXITED KILLED page % LocalWords: CONTINUED sources forking Spawned successfully executing exiting % LocalWords: next cat for COMMAND pts bash defunct TRAPPED DUMPED Killable PR -% LocalWords: SIGKILL static RLIMIT preemption PREEMPT VOLUNTARY IDLE +% LocalWords: SIGKILL static RLIMIT preemption PREEMPT VOLUNTARY IDLE RTPRIO +% LocalWords: Completely Fair compat Uniform %%% Local Variables: %%% mode: latex