Uwaga! Poniższe zadania trzeba wykonać na indywidualnych maszynach
wirtualnych, które dysponują tylko jedną jednostką centralną. W przeciwnym
przypadku należy użyć programu taskset
do ,,przypinania” procesu do
konkretnego CPU (zob. ostatnie zadanie wykorzystujące skrypt cfsctl
).
Jakie są dopuszczalne minimalne i maksymalne wartości priorytetów dla poszczególnych
klas szeregowania zadań? Zob. man chrt
.
Uruchom program stress -c 1 -t 300
i wykonaj następujące zadania:
sprawdź klasę szeregowania i prorytet tego zadania
zmień klasę szeregowania na SCHED_BATCH
zmień klasę szeregowania na SCHED_IDLE
zmień klasę szeregowania na SCHED_RR z priorytetem 99
Po każdej zmianie sprawdź, co pokazuje komenda chrt -p PID
.
Pobierz cpubound.c
i utwórz program
cpubound (gcc -lm cpubound.c -o cpubound
; ten program znajduje się
także w repozytorium /git/tm-scripts, w podkatalogu chrt). Czas wykonywania tego
programu można modyfikować poprzez argument wywołania (liczba
naturalna). Np.:
# time chrt -o 0 ./cpubound 1
# time chrt -o 0 ./cpubound 5
# time chrt -b 0 ./cpubound 5
Uwaga! W poniższych ćwiczeniach zamiast programu cpubound
można użyć
programu stress -c 1 -t <clock_time_in_secs>
.
Uruchom stress -c 1 -t 120
w klasie SCHED_OTHER i obserwuj faktyczny czas wykonania
programu cpubound
:
# time chrt -o 0 ./cpubound 10
# time chrt -b 0 ./cpubound 10
# time chrt -i 0 ./cpubound 10
Uruchom stress -c 1 -t 120
w klasie SCHED_BATCH i obserwuj faktyczny czas wykonania
programu cpubound
:
# time chrt -o 0 ./cpubound 10
# time chrt -b 0 ./cpubound 10
# time chrt -i 0 ./cpubound 10
Uruchom stress -c 1 -t 120
w klasie SCHED_IDLE i obserwuj faktyczny czas wykonania
programu cpubound
:
# time chrt -o 0 ./cpubound 10
# time chrt -b 0 ./cpubound 10
# time chrt -i 0 ./cpubound 10
Uruchom stress -c 1 -t 120
w klasie SCHED_OTHER i obserwuj faktyczny czas wykonania
programu cpubound
, który jest uruchamiany jako proces czasu rzeczywistego:
# time chrt -r|f 10 ./cpubound 50
Jak wpływa uruchamianie procesów czasu rzeczywistego na interaktywność pracy w systemie? Jakie konsekwencje dla systemu operacyjnego będzie miało zwiększanie priorytetu tego procesu do wartości 99? Czy można przy pomocy zadania SCHED_FIFO/SCHED_RR uruchomionego z priorytetem 99 zablokować działanie systemu operacyjnego?
Sprawdź wartość parametru jądra sched_rt_runtime_us
(sysctl -a | grep sched_rt_runtime_us
).
Co się zmienia, jeśli wartość tego parametru zostanie zmieniona na -1
(sysctl -w kernel.sched_rt_runtime_us=-1
)?
Sprawdź skutki wykonania komend: sysctl -w sched_rt_runtime_us=990000
oraz sysctl -w kernel.sched_rt_runtime_us=550000
.
W repozytorium /git/tm-scripts znajduje się skrypt cfsctl. Zapoznaj się z jego
działaniem, a w szczególności wykonaj testy od 0 do 7 (./cfsctl test[0-7]
) i
przeanalizuj otrzymane wyniki.