chrt

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).

  1. Jakie są dopuszczalne minimalne i maksymalne wartości priorytetów dla poszczególnych klas szeregowania zadań? Zob. man chrt.

  2. 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.

  3. 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>.

  4. 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
    
  5. 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
    
  6. 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
    
  7. 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
    
  8. 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.

    Zob. https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux_for_real_time/7/html/tuning_guide/real_time_throttling

  9. 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.