1 | \makeglossaries |
---|
2 | |
---|
3 | % ---------------------------------- |
---|
4 | % Acronyms |
---|
5 | \newacronym{api}{API}{Application Programming Interface} |
---|
6 | \newacronym{fifo}{FIFO}{First-In, First-Out} |
---|
7 | \newacronym{io}{I/O}{Input and Output} |
---|
8 | \newacronym{numa}{NUMA}{Non-Uniform Memory Access} |
---|
9 | \newacronym{prng}{PRNG}{Pseudo Random Number Generator} |
---|
10 | \newacronym{raii}{RAII}{Resource Acquisition Is Initialization} |
---|
11 | \newacronym{tls}{TLS}{Thread Local Storage} |
---|
12 | |
---|
13 | % ---------------------------------- |
---|
14 | % Definitions |
---|
15 | |
---|
16 | \longnewglossaryentry{thrd} |
---|
17 | {name={thread}} |
---|
18 | { |
---|
19 | Threads created and managed inside user-space. Each thread has its own stack and its own thread of execution. User-level threads are invisible to the underlying operating system. |
---|
20 | |
---|
21 | \textit{Synonyms : User threads, Lightweight threads, Green threads, Virtual threads, Tasks.} |
---|
22 | } |
---|
23 | |
---|
24 | \longnewglossaryentry{proc} |
---|
25 | {name={processor}} |
---|
26 | { |
---|
27 | |
---|
28 | } |
---|
29 | |
---|
30 | \longnewglossaryentry{rQ} |
---|
31 | {name={ready-queue}} |
---|
32 | { |
---|
33 | |
---|
34 | } |
---|
35 | |
---|
36 | \longnewglossaryentry{uthrding} |
---|
37 | {name={user-level threading}} |
---|
38 | { |
---|
39 | |
---|
40 | |
---|
41 | \textit{Synonyms : User threads, Lightweight threads, Green threads, Virtual threads, Tasks.} |
---|
42 | } |
---|
43 | |
---|
44 | \longnewglossaryentry{rmr} |
---|
45 | {name={remote memory reference}} |
---|
46 | { |
---|
47 | |
---|
48 | } |
---|
49 | |
---|
50 | % ---------------------------------- |
---|
51 | |
---|
52 | \longnewglossaryentry{hthrd} |
---|
53 | {name={hardware thread}} |
---|
54 | { |
---|
55 | Threads representing the underlying hardware directly, \eg the CPU core, or hyper-thread if the hardware supports multiple threads of execution per core. The number of hardware threads is considered to be always fixed to a specific number determined by the hardware. |
---|
56 | |
---|
57 | \textit{Synonyms : } |
---|
58 | } |
---|
59 | |
---|
60 | \longnewglossaryentry{kthrd} |
---|
61 | {name={kernel-level thread}} |
---|
62 | { |
---|
63 | Threads created and managed inside kernel-space. Each thread has its own stack and its own thread of execution. Kernel-level threads are owned, managed and scheduled by the underlying operating system. |
---|
64 | |
---|
65 | \textit{Synonyms : OS threads, Hardware threads, Physical threads.} |
---|
66 | } |
---|
67 | |
---|
68 | \longnewglossaryentry{fiber} |
---|
69 | {name={fiber}} |
---|
70 | { |
---|
71 | Fibers are non-preemptive user-level threads. They share most of the caracteristics of user-level threads except that they cannot be preempted by another fiber. |
---|
72 | |
---|
73 | \textit{Synonyms : Tasks.} |
---|
74 | } |
---|
75 | |
---|
76 | \longnewglossaryentry{job} |
---|
77 | {name={job}} |
---|
78 | { |
---|
79 | Unit of work, often sent to a thread pool or worker pool to be executed. Has neither its own stack nor its own thread of execution. |
---|
80 | |
---|
81 | \textit{Synonyms : Tasks.} |
---|
82 | } |
---|
83 | |
---|
84 | \longnewglossaryentry{pool} |
---|
85 | {name={thread-pool}} |
---|
86 | { |
---|
87 | Group of homogeneuous threads that loop executing units of works after another. |
---|
88 | |
---|
89 | \textit{Synonyms : } |
---|
90 | } |
---|
91 | |
---|
92 | \longnewglossaryentry{preemption} |
---|
93 | {name={preemption}} |
---|
94 | { |
---|
95 | Involuntary context switch imposed on threads at a given rate. |
---|
96 | |
---|
97 | \textit{Synonyms : None.} |
---|
98 | } |
---|
99 | |
---|
100 | |
---|
101 | |
---|
102 | \longnewglossaryentry{at} |
---|
103 | {name={fred}} |
---|
104 | { |
---|
105 | Abstract object representing an unit of work. Systems will offer one or more concrete implementations of this concept (\eg \gls{kthrd}, \gls{job}), however, most of the concept of schedulings are independent of the particular implementations of the work representation. For this reason, this document use the term \Gls{at} to mean any representation and not one in particular. |
---|
106 | } |
---|
107 | |
---|
108 | \longnewglossaryentry{atsched} |
---|
109 | {name={Scheduling a \gls{at}}} |
---|
110 | { |
---|
111 | Scheduling an \gls{at} refers to the act of notifying the scheduler that a task is ready to be ran. When representing the scheduler as a queue of tasks, scheduling is the act of pushing a task onto the end of the queue. This doesn't necesserily means the task will ever be allocated CPU time (\gls{atrun}), for example, if the system terminates abruptly, scheduled \glspl{at} will probably never run. |
---|
112 | |
---|
113 | \textit{Synonyms : None.} |
---|
114 | } |
---|
115 | |
---|
116 | \longnewglossaryentry{atrun} |
---|
117 | {name={Running a \gls{at}}} |
---|
118 | { |
---|
119 | Running an \gls{at} refers to the act of allocating CPU time to a task that is ready to run. When representing the scheduler as a queue of tasks, running is the act of poping a task from the front of the queue and putting it onto a \gls{proc}. The \gls{at} can than accomplish some or all of the work it is programmed to do. |
---|
120 | |
---|
121 | \textit{Synonyms : None.} |
---|
122 | } |
---|
123 | |
---|
124 | \longnewglossaryentry{atmig} |
---|
125 | {name={migration of \gls{at}}} |
---|
126 | { |
---|
127 | Migration refers to the idea of an \gls{at} running on a different worker/processor than the last time it was run. It is generally preferable to minimise migration as it incurs cost but any load balancing among workers requires some amount of migration. |
---|
128 | |
---|
129 | \textit{Synonyms : None.} |
---|
130 | } |
---|
131 | |
---|
132 | \longnewglossaryentry{atpass} |
---|
133 | {name={overtaking \gls{at}}} |
---|
134 | { |
---|
135 | When representing the scheduler as a queue of \glspl{at}, overtaking is the act breaking the FIFO-ness of the queue by moving a \gls{at} in front of some other \gls{at} when it arrived after. This remains true for schedulers that do not use a FIFO queue, when the order in which the \glspl{at} are \glslink{atsched}{scheduled} and \glslink{atrun}{run} in a different order. A \gls{at} is said to \emph{overtake} another if it is run \emph{before} but was \emph{scheduled} after the other \gls{at}. |
---|
136 | |
---|
137 | \textit{Synonyms : None.} |
---|
138 | } |
---|
139 | |
---|
140 | \longnewglossaryentry{atblock} |
---|
141 | {name={Blocking an \gls{at}}} |
---|
142 | { |
---|
143 | Blocking an abstract task refers to the act of taking a task that us running on a CPU off the CPU. Unless no other task is ready, this action is generally immediately followed by running an other task. |
---|
144 | |
---|
145 | \textit{Synonyms : None.} |
---|
146 | } |
---|
147 | |
---|
148 | \longnewglossaryentry{atcomplet} |
---|
149 | {name={Running to completion}} |
---|
150 | { |
---|
151 | Running to completion refers to the entire sequence of : being scheduled, running and blocking, for a given task. |
---|
152 | |
---|
153 | See also \gls{atsched}, \gls{atrun}, \gls{atblock} |
---|
154 | |
---|
155 | \textit{Synonyms : None.} |
---|
156 | } |
---|
157 | |
---|
158 | \longnewglossaryentry{load} |
---|
159 | {name={System Load}} |
---|
160 | { |
---|
161 | The load is refers to the rate at which \glspl{at} are \glslink{atsched}{scheduled} versus the rate at which they are \glslink{atrun}{run}. When \glspl{at} are being scheduled faster than they are run, the system is considered \emph{overloaded}. When \glspl{at} are being run faster than they are scheduled, the system is considered \emph{underloaded}. Conrrespondingly, if both rates are equal, the system is considered \emph{loaded}. Note that the system is considered loaded only of the rate at which \glspl{at} are scheduled/run is non-zero, otherwise the system is empty, it has no load. |
---|
162 | } |
---|
163 | |
---|