Администрирование ОС Solaris

Приоритеты процессов, настройка таблиц диспетчера


Настройка таблиц диспетчера памяти (о них речь шла в лекции 7) производится в три этапа:

  • вывод существующей таблицы в текстовый файл;
  • редактирование этого файла;
  • загрузка новой таблицы диспетчера в ядро.
  • Работа по выводу и загрузке таблиц осуществляется с помощью программы dispadmin.

    Попробуем модифицировать таблицу диспетчера для класса разделения времени так, чтобы ни один процесс не получил приоритета 59 и ни один процесс не лишился этого приоритета, если мы его присвоим. Это может быть полезно в тех случаях, когда какие-то задачи надлежит вручную запускать с повышенным приоритетом. Конечно, это привнесет несправедливость в таблицу приоритетов нашей системы, и слепо следовать нашему тестовому примеру не стоит.

    Посмотрим, как сейчас себя ведут наши процессы:

    top last pid: 825; load averages: 0.05, 0.11, 0.12 20:35:24 68 processes: 67 sleeping, 1 on cpu CPU states: 99.8% idle, 0.2% user, 0.0% kernel, 0.0% iowait, 0.0% swap Memory: 128M real, 12M free, 206M swap in use, 387M swap free PID USERNAME LWP PRI NICE SIZE RES STATE TIME CPU COMMAND 825 root 1 59 0 2260K 1340K cpu 0:00 0.61% top 345 root 1 59 0 57M 8648K sleep 1:37 0.35% Xsun 470 root 4 49 0 141M 55M sleep 2:11 0.28% soffice.bin 622 root 1 59 0 15M 2928K sleep 0:02 0.03% dtterm 461 root 1 49 0 15M 1864K sleep 0:03 0.00% dtterm 654 root 15 19 10 79M 10M sleep 0:08 0.00% java 434 root 5 59 0 22M 4060K sleep 0:04 0.00% dtwm 652 root 1 49 0 24M 3784K sleep 0:01 0.00% sdtimage 435 root 1 49 0 16M 1216K sleep 0:00 0.00% dtfile 672 root 1 49 0 4728K 740K sleep 0:00 0.00% bash 427 root 1 49 0 18M 0K sleep 0:00 0.00% dtsession 467 root 1 49 0 4728K 0K sleep 0:00 0.00% bash 650 root 1 49 0 3460K 0K sleep 0:00 0.00% more 649 root 1 49 0 3356K 0K sleep 0:00 0.00% sh 634 root 1 49 0 3304K 0K sleep 0:00 0.00% man Пример 11.2. Таблица приоритетов

    Теперь пусть приоритет 59 может получить только та программа, которой мы это разрешим, а все остальные по умолчанию не могут.

    Для этого предварительно модифицируем таблицу диспетчера так, чтобы ни один процесс не получил приоритета 59.
    Вначале выведем текущую таблицу приоритетов:

    dispadmin -c TS -g > prior

    Файл prior выглядит так:

    # Time Sharing Dispatcher Configuration RES=1000 # ts_quantum ts_tqexp ts_slpret ts_maxwait ts_lwait PRIORITY LEVEL 200 0 50 0 50 # 0 200 0 50 0 50 # 1 200 0 50 0 50 # 2 200 0 50 0 50 # 3 200 0 50 0 50 # 4 200 0 50 0 50 # 5 200 0 50 0 50 # 6 200 0 50 0 50 # 7 200 0 50 0 50 # 8 200 0 50 0 50 # 9 160 0 51 0 51 # 10 160 1 51 0 51 # 11 160 2 51 0 51 # 12 160 3 51 0 51 # 13 160 51 0 51 # 14 160 5 51 0 51 # 15 160 6 51 0 51 # 16 160 7 51 0 51 # 17 160 8 51 0 51 # 18 160 9 51 0 51 # 19 120 10 52 0 52 # 20 120 11 52 0 52 # 21 120 12 52 0 52 # 22 120 13 52 0 52 # 23 120 14 52 0 52 # 24 120 15 52 0 52 # 25 120 116 52 0 52 # 26 120 117 52 0 52 # 27 120 118 52 0 52 # 28 120 19 52 0 52 # 29 80 20 53 0 53 # 30 80 21 53 0 53 # 31 80 22 53 0 53 # 32 80 23 53 0 53 # 33 80 24 53 0 53 # 34 80 25 54 0 54 # 35 80 26 54 0 54 # 36 80 27 54 0 54 # 37 80 28 54 0 54 # 38 80 29 54 0 54 # 39 40 30 55 0 55 # 40 40 31 55 0 55 # 41 40 32 55 0 55 # 42 40 33 55 0 55 # 43 40 34 55 0 55 # 44 40 35 56 0 56 # 45 40 36 57 0 57 # 46 40 37 58 0 58 # 47 40 38 58 0 58 # 48 40 39 58 0 59 # 49 40 40 58 0 59 # 50 40 41 58 0 59 # 51 40 42 58 0 59 # 52 40 43 58 0 59 # 53 40 44 58 0 59 # 54 40 45 58 0 59 # 55 40 46 58 0 59 # 56 40 47 58 0 59 # 57 40 48 58 0 59 # 58 20 49 59 32000 59 # 59 Пример 11.3. Файл prior



    Теперь мы его изменяем так, как нам надо, и он становится иным (показаны только измененные последние две строки):

    # ts_quantum ts_tqexp ts_slpret ts_maxwait ts_lwait PRIORITY LEVEL 40 48 58 32000 58 # 58 20 59 59 0 59 # 59

    Загружаем этот файл, запустив

    dispadmin -c TS -s prior

    Смотрим вывод top:

    last pid: 836; load averages: 0.14, 0.14, 0.13 20:43:48 68 processes: 66 sleeping, 1 running, 1 on cpu CPU states: 94.8% idle, 5.0% user, 0.2% kernel, 0.0% iowait, 0.0% swap Memory: 128M real, 10M free, 204M swap in use, 389M swap free PID USERNAME LWP PRI NICE SIZE RES STATE TIME CPU COMMAND 470 root 4 49 0 141M 57M sleep 2:34 7.64% soffice.bin 345 root 1 59 0 56M 7228K sleep 1:46 0.86% Xsun 836 root 1 59 0 2260K 1336K cpu 0:00 0.77% top 622 root 1 59 0 15M 2972K sleep 0:02 0.03% dtterm 672 root 1 48 0 4728K 1176K sleep 0:00 0.03% bash 654 root 15 49 0 79M 11M run 0:08 0.02% java 461 root 1 49 0 15M 1924K sleep 0:03 0.02% dtterm 434 root 5 59 0 22M 4084K sleep 0:04 0.00% dtwm 652 root 1 49 0 24M 3784K sleep 0:01 0.00% sdtimage 435 root 1 49 0 16M 1216K sleep 0:00 0.00% dtfile 427 root 1 49 0 18M 0K sleep 0:00 0.00% dtsession 467 root 1 49 0 4728K 0K sleep 0:00 0.00% bash 650 root 1 49 0 3460K 0K sleep 0:00 0.00% more 649 root 1 49 0 3356K 0K sleep 0:00 0.00% sh 634 root 1 49 0 3304K 0K sleep 0:00 0.00% man Пример 11.4.


    Вывод команды top

    Те процессы, которые по- прежнему имеют приоритет 59, можно перезапустить. Выявим их по команде

    ps -ecL | grep 59

    остановим и перезапустим. Кроме того, можно регулировать приоритет процесса напрямую с помощью команды priocntl, как показано ниже. Понизим на 20 единиц приоритет всех процессов в классе разделения времени:

    priocntl -s -c TS -p -20

    Снова запускаем top:

    last pid: 987; load averages: 0.00, 0.03, 0.07 21:00:41 66 processes: 65 sleeping, 1 on cpu CPU states: 99.4% idle, 0.0% user, 0.6% kernel, 0.0% iowait, 0.0% swap Memory: 128M real, 6188K free, 202M swap in use, 391M swap free PID USERNAME LWP PRI NICE SIZE RES STATE TIME CPU COMMAND 984 root 1 58 0 2260K 1336K cpu 0:00 0.11% top 345 root 1 58 0 56M 7184K sleep 1:52 0.07% Xsun 622 root 1 58 0 15M 3500K sleep 0:03 0.02% dtterm 470 root 4 48 0 141M 57M sleep 2:40 0.00% soffice.bin 654 root 15 58 0 79M 13M sleep 0:08 0.00% java 434 root 5 58 0 22M 4360K sleep 0:04 0.00% dtwm 461 root 1 58 0 15M 2628K sleep 0:03 0.00% dtterm 652 root 1 58 0 24M 5312K sleep 0:01 0.00% sdtimage 349 root 7 39 6 4532K 704K sleep 0:00 0.00% mibiisa 212 root 18 49 3 2872K 720K sleep 0:00 0.00% nscd 435 root 1 58 0 16M 1908K sleep 0:00 0.00% dtfile 436 root 1 58 0 16M 1864K sleep 0:00 0.00% sdtperfmeter 427 root 1 58 0 18M 1368K sleep 0:00 0.00% dtsession 672 root 1 58 0 4732K 1196K sleep 0:00 0.00% bash 276 root 1 58 0 2068K 580K sleep 0:00 0.00% xntpd Пример 11.5. Вывод команды top

    Настройку диспетчерских таблиц следует проводить с осторожностью. Неверные действия могут привести к потере устойчивости и неполадкам в работе производственной системы. Тестируйте внимательно!


    Содержание раздела