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.