Опубликован: 04.07.2008 | Уровень: специалист | Доступ: платный | ВУЗ: Европейский Университет в Санкт-Петербурге
Лекция 1:

Оптимизация работы процессов и управление ресурсами

Лекция 1: 12 || Лекция 2 >

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

Настройка таблиц диспетчера памяти осуществляется в три этапа:

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

Работа по выводу и загрузке таблиц осуществляется с помощью программы 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

А теперь пусть приоритет 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 4 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 16 52 0 52 # 26
120 17 52 0 52 # 27
120 18 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

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

# 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

Те процессы, которые по-прежнему имеют приоритет 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

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

Регулирование приоритетов

Регулировать приоритет процесса, как показано выше, можно с помощью команды priocntl. Ключ -s означает требование установить приоритет. Ключ -p позволяет задать относительное изменение приоритета, а для указания конкретного признака процесса (идентификатора и т.п.) следует использовать ключ -i (признак идентификатора обозначается pid, другие признаки поименованы в руководстве по priocntl ).

Например, для понижения приоритета процесса с PID, равным 200, используйте

priocntl -s -c TS -p –20 –i pid 200

Для вывода списка части процессов с заголовком вместе, применяйте POSIX-совместимую программу grep:

/usr/bin/ps -ecL |/usr/xpg4/bin/grep -E 'nscd|PID'

Оптимизация пейджинга и свопинга посредством настройки ядра

Алгоритм пейджинга и свопинга в Solaris предусматривает возможность явного указания границ свободной памяти в системе, по достижении которых начинается вначале активный пейджинг (выгрузка отдельных страниц), а при дальнейшем уменьшении свободной памяти – свопинг (выгрузка всех страниц процесса сразу).

Лекция 1: 12 || Лекция 2 >
Александр Тагильцев
Александр Тагильцев

Где проводится профессиональная переподготовка "Системное администрирование Windows"? Что-то я не совсем понял как проводится обучение.

Анатолий Натрусов
Анатолий Натрусов
Россия
Виктор Саркисов
Виктор Саркисов
Россия, Нижний Новгород, НГТУ, 2001