Zmiana priorytetu procesu funkcją renice

0

Witam,
zmieniam w interpretorze poleceń priorytety procesów, tj. np renice 19 PID , czyli ustawiam proces o ID PID na watosc 19 ( działąjący najwolnej). Wiem, że domyślna wartość nice to 0, zakres wartości to -20 do 19, gdzie większa wartość = mniejszy prorytet.

Chciałbym napisać skrypt w shellu, który uruchomi mi 2 przykładowe procesy, to mogą być np 2 kolejne skrypty, z których każdy będzie wykonywał 'coś' , zmienie priorytet jednego z nich na 19, czyli na najwolniejszy i chciałbym zaobserwować efekt tego. Próbowałem tak, że jeden skrypt w pętli nieskonczonej dodawał liczby i wyswietlal w terminalu 1 2 3 4 co 1 sek, drugi 2 4 8 16 co 1 sek, ale po zmianie prorytetu oba działały tak samo szybko. Nie wiem na czym to zademostrować. Proszę o pomoc.

0
misiek123 napisał(a):

Próbowałem tak, że jeden skrypt w pętli nieskonczonej dodawał liczby i wyswietlal w terminalu 1 2 3 4 co 1 sek, drugi 2 4 8 16 co 1 sek, ale po zmianie prorytetu oba działały tak samo szybko. Nie wiem na czym to zademostrować. Proszę o pomoc.

Procesor to masz taktowany z częstotliwością nie większą niż jakieś pewnie z 5Hz, tak? I skrypty pewnie w bash napisałeś, z jakimś sleep?

0
#! /bin/bash

i=0

while true; do
  sleep 1
  ((i++))
  echo $i
  done;

dodanie znacznika <code class="bash"> - @furious programming

0

@misiek123 no ale taki kod nic ci nie da. sleep nie jest "aktywny". Jak masz sleep to oddajesz procesor. Wywal tego sleepa tak żeby CPU leciało na 100% i zobacz efekty ;] Przy czym jak masz więcej rdzeni to może się okazać że musisz odpalić więcej takich skryptów bo inaczej scheduler systemowy pośle je na osobne rdzenie i tyle.

0

2750 michal 20 0 17720 1196 1004 R 50 0.0 1:33.84 pro1.sh
2810 michal 20 0 17720 1204 1004 R 50 0.0 1:30.43 pro2.sh
2686 michal 20 0 17720 1196 1004 S 48 0.0 2:23.81 pro2.sh
2685 michal 20 0 17720 1204 1004 R 46 0.0 2:29.77 pro1.sh
2556 michal 39 19 17720 1200 1004 R 44 0.0 3:23.19 pro2.sh
2877 michal 20 0 17720 1200 1004 R 40 0.0 0:39.60 pro1.sh
2940 michal 20 0 17720 1200 1004 R 20 0.0 0:13.18 pro2.sh

To jest efekt, jak widac proces ktorego nice ustawilem na 19 wcale nie jest na kocu listy co mnie niepokoi ( ma 44% CPu, gdy np 20 % ma proces o nice równym 0 )

0

Skrypty bash nie obciążą Ci procesora równomiernie w czasie. Napisz jakiś prosty programik liczący coś nieskończenie, skompiluj, i taki uruchamiaj. Albo uruchom jakąś konwersję dużej liczby dużych obrazów do wielkiego nietypowego formatu, kilkukrotnie, i to obserwuj.

0

Wynik z testowanego na szybko programiku o treści:

#include <iostream>

using namespace std;

int main()
{
        while (1==1)
        for (int i=0; i<1000; i++)
        {
                int u = i % 2;
        }
        return 0;
}
 

PID | USER | PR | NI | VIRT | RES | SHR | S | %CPU | %MEM | TIME+ | COMMAND
18729 | root | 1 | -19 | 11788 | 920 | 784 | R | 99.5 | 0.0 | 1:29.30 | a.out
18730 | root | 20 | 0 | 11788 | 920 | 784 | R | 49.8 | 0.0 | 0:37.01 | a.out
18731 | root | 20 | 0 | 11788 | 920 | 784 | R | 48.8 | 0.0 | 0:35.15 | a.out
18728 | root | 39 | 19 | 11788 | 920 | 784 | R | 1.0 | 0.0 | 0:41.90 | a.out

Jak widać to renice jakoś działa...

1

Sprawdziłem jeszcze na "nie-roocie", wygląda to tak:

PID | USER | PR | NI | VIRT | RES | SHR | S | %CPU | %MEM | TIME+ | COMMAND
29490 | user | 20 | 0 | 12344 | 1012 | 864 | R | 95,9 | 0,0 | 0:41.58 | a.out
29452 | user | 20 | 0 | 12344 | 1012 | 864 | R | 95,0 | 0,0 | 1:30.29 | a.out
29428 | user | 27 | 7 | 12344 | 1012 | 864 | R | 78,5 | 0,0 | 1:59.12 | a.out
29489 | user | 20 | 0 | 12344 | 1012 | 864 | R | 75,6 | 0,0 | 0:49.49 | a.out
29454 | user | 35 | 15 | 12344 | 1012 | 864 | R | 12,6 | 0,0 | 1:08.98 | a.out

Jak rozumiem zrobiłeś tak:

  1. uruchomiłeś linuksa (najlepiej w trybie konsoli)
  2. skompilowałeś programik, sprawdziłeś, że ma +x i da się uruchomić z konsoli
  3. uruchomiłeś programik (./a.out +ENTER), wcisnąłeś ctrl+z , potem wpisałeś bg ENTER i posłałeś tym program w tło
  4. krok 3 powtórzyłeś kilkukrotnie (co najmniej tyle, ile masz rdzeni w procesorze, a najlepiej dwa razy tyle :) )

?

1 użytkowników online, w tym zalogowanych: 0, gości: 1