Dummynet - привязка процесса к CPU0

  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '2:38554f72236c389224d866d05ab675e3' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: UPDATE cache_filter SET data = '<p class=\"rtejustify\">Разбирался на днях с производительностью сервера, который работал в роли маршрутизатора.</p>\n<p class=\"rtejustify\">Итак, что мы имеем в роли операционной системы:</p>\n<table border=\"1\" cellpadding=\"1\" cellspacing=\"1\" style=\"width:100%\">\n<tbody>\n<tr>\n<td># <strong>uname -rmo</strong><br />\n FreeBSD 8.4-RELEASE-p7 amd64</td>\n</tr>\n</tbody>\n</table>\n<p class=\"rtejustify\">Да, давно систему не обновляли... Ну и ладно.</p>\n<p class=\"rtejustify\">В ходе диагностики обнаружил одну странность. Процесс&nbsp;<strong>dummynet</strong> потреблял слишком много ресурсов. Согласно выводу <strong>top</strong>:</p>\n<table border=\"1\" cellpadding=\"1\" cellspacing=\"1\" style=\"width:100%\">\n<tbody>\n<tr>\n<td>&nbsp; &nbsp; 0 root &nbsp; &nbsp; &nbsp; -68 &nbsp; &nbsp;0 &nbsp; &nbsp; 0K &nbsp; 416K - &nbsp; &nbsp; &nbsp; 2 272:36 <span style=\"color:#FF0000\">24.45%</span> kernel{dummynet}</td>\n</tr>\n</tbody>\n</table>\n<p class=\"rtejustify\">Небольшое лирическое отступление...&nbsp;<strong>DUMMYNET</strong> - это системное средство, которое дает возможность управления сетевым трафиком, проходящим через различные сетевые интерфейсы, путем применения имитации различной ширины полосы пропускания, ограничения размера очереди, имитации задержек и потерь пакетов.</p>\n<p class=\"rtejustify\">На сетевых форумах уже стыкался с данной проблемой. Дело в том, что в 8-ой ветке <strong>FreeBSD</strong>, по умолчанию,&nbsp;системный тред <strong>dummynet</strong>,&nbsp;как и большинство других тредов, не привязан к конкретному <strong>CPU</strong>. Соответственно, планировщик перемещает его между ядрами процессора. А вот если &quot;привязать&quot; системный&nbsp;тред <strong>dummynet</strong> к <strong>CPU0</strong>, потребление ресурсов процессора тут же падает, при этом корректно выполняя все свои функции и задания.</p>\n<p class=\"rtejustify\">Ну что ж, воспользуемся советом и привяжем процесс к&nbsp;<strong>CPU0</strong>. Но не тут то было. Поскольку процесс системный, его <strong>PID</strong> равен 0. Необходимо узнать&nbsp;<strong>TID</strong> процесса, и уже его &quot;привязывать&quot;:</p>\n<table border=\"1\" cellpadding=\"1\" cellspacing=\"1\" style=\"width:100%\">\n<tbody>\n<tr>\n<td>\n<pre>\n# <strong>procstat -at | grep dummynet</strong>\n 0 <span style=\"color:#FF0000\">100098</span> kernel dummynet 1 16 sleep -</pre></td>\n</tr>\n</tbody>\n</table>\n<p class=\"rtejustify\"><strong>TID</strong>&nbsp;процесса в моем конкретном случае -&nbsp;100098. Вот его и нужно привязать, воспользовавшись возможностями утилиты&nbsp;<strong>cpuset</strong>.</p>\n<p class=\"rtejustify\">Чтобы в дальнейшем &quot;облегчить себе жизнь&quot;, набросаем небольшой скрипт <strong>cpuset_dummynet.sh</strong> следующего содержания:</p>\n<table border=\"1\" cellpadding=\"1\" cellspacing=\"1\" style=\"width:100%\">\n<tbody>\n<tr>\n<td style=\"background-color: rgb(51, 51, 51);\">\n<pre>\n<span style=\"color:#00FFFF\">#!/bin/sh\n\nAWK=/usr/bin/awk\nCPUSET=/usr/bin/cpuset\nGREP=/usr/bin/grep\nPROCSTAT=/usr/bin/procstat\n\nPROCESS=dummynet\n\nTID=`$PROCSTAT -at | $GREP $PROCESS |$AWK &#39;&quot;/$PROCESS/&quot; {print $2}&#39;`\n$CPUSET -l 0 -t $TID</span></pre></td>\n</tr>\n</tbody>\n</table>\n<p class=\"rtejustify\">После запуска скрипта, проверяем, что процесс&nbsp;dummynet действительно &quot;привязан&quot; к&nbsp;<strong>CPU0</strong>:</p>\n<table border=\"1\" cellpadding=\"1\" cellspacing=\"1\" style=\"width:100%\">\n<tbody>\n<tr>\n<td>\n<pre>\n# <strong>procstat -at | grep dummynet</strong>\n 0 100098 kernel dummynet <span style=\"color:#FF0000\">0</span> 16 sleep -</pre></td>\n</tr>\n</tbody>\n</table>\n<p>Проверяем нагрузку:</p>\n<table border=\"1\" cellpadding=\"1\" cellspacing=\"1\" style=\"width:100%\">\n<tbody>\n<tr>\n<td>0 root &nbsp; &nbsp; &nbsp; -68 &nbsp; &nbsp;0 &nbsp; &nbsp; 0K &nbsp; 416K - &nbsp; &nbsp; &nbsp; 0 279:33 &nbsp;<span style=\"color:#FF0000\">0.00%</span> kernel{dummynet}</td>\n</tr>\n</tbody>\n</table>\n<p>Последний штрих - прописать запуск скрипта в <strong>rc.local</strong> для автоматического запуска после перезагрузки системы.</p>\n', created = 1767308316, expire = 1767394716, headers = '', serialized = 0 WHERE cid = '2:38554f72236c389224d866d05ab675e3' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 112.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '2:1d7739bae4ea1507b4918a95efe1c64c' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: UPDATE cache_filter SET data = '<p>Интересно, таким образом можно ли повлиять на другие приложения, например squid?</p>\n', created = 1767308316, expire = 1767394716, headers = '', serialized = 0 WHERE cid = '2:1d7739bae4ea1507b4918a95efe1c64c' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 112.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '2:07243fc0252056071eaa62af8c18d662' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: UPDATE cache_filter SET data = '<p class=\"rtecenter\"><a class=\"thickbox\" href=\"/files/imagepicker/1/wake_up_ua.png\"><img alt=\"Вставай, Україно!\" class=\"imgp_img\" src=\"/files/imagepicker/1/thumbs/wake_up_ua.png\" style=\"height:200px; width:150px\" /></a></p>\n', created = 1767308316, expire = 1767394716, headers = '', serialized = 0 WHERE cid = '2:07243fc0252056071eaa62af8c18d662' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 112.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '3:cc913d232116f0426090404133377d88' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '2:d9a86123bfcbc57878743027b584400b' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: UPDATE cache_filter SET data = '<p class=\"rtecenter\"><a href=\"http://muff.kiev.ua/rss.xml\"><img alt=\"RSS\" width=\"160\" height=\"60\" src=\"http://muff.kiev.ua/files/muf-rss.png\" /></a></p>\n', created = 1767308316, expire = 1767394716, headers = '', serialized = 0 WHERE cid = '2:d9a86123bfcbc57878743027b584400b' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 112.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '3:39649256b636e3d5ded656bc52bd8c01' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
Версия для печатиОтправить другуPDF version

Разбирался на днях с производительностью сервера, который работал в роли маршрутизатора.

Итак, что мы имеем в роли операционной системы:

# uname -rmo
FreeBSD 8.4-RELEASE-p7 amd64

Да, давно систему не обновляли... Ну и ладно.

В ходе диагностики обнаружил одну странность. Процесс dummynet потреблял слишком много ресурсов. Согласно выводу top:

    0 root       -68    0     0K   416K -       2 272:36 24.45% kernel{dummynet}

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

На сетевых форумах уже стыкался с данной проблемой. Дело в том, что в 8-ой ветке FreeBSD, по умолчанию, системный тред dummynet, как и большинство других тредов, не привязан к конкретному CPU. Соответственно, планировщик перемещает его между ядрами процессора. А вот если "привязать" системный тред dummynet к CPU0, потребление ресурсов процессора тут же падает, при этом корректно выполняя все свои функции и задания.

Ну что ж, воспользуемся советом и привяжем процесс к CPU0. Но не тут то было. Поскольку процесс системный, его PID равен 0. Необходимо узнать TID процесса, и уже его "привязывать":

# procstat -at | grep dummynet
    0 100098 kernel           dummynet           1   16 sleep   -

TID процесса в моем конкретном случае - 100098. Вот его и нужно привязать, воспользовавшись возможностями утилиты cpuset.

Чтобы в дальнейшем "облегчить себе жизнь", набросаем небольшой скрипт cpuset_dummynet.sh следующего содержания:

#!/bin/sh

AWK=/usr/bin/awk
CPUSET=/usr/bin/cpuset
GREP=/usr/bin/grep
PROCSTAT=/usr/bin/procstat

PROCESS=dummynet

TID=`$PROCSTAT -at | $GREP $PROCESS |$AWK '"/$PROCESS/" {print $2}'`
$CPUSET -l 0 -t $TID

После запуска скрипта, проверяем, что процесс dummynet действительно "привязан" к CPU0:

# procstat -at | grep dummynet
    0 100098 kernel           dummynet           0   16 sleep   -

Проверяем нагрузку:

0 root       -68    0     0K   416K -       0 279:33  0.00% kernel{dummynet}

Последний штрих - прописать запуск скрипта в rc.local для автоматического запуска после перезагрузки системы.

Ваша оценка: Нет Средняя: 5 (1 голос)

Re: Dummynet - привязка процесса к CPU0

Интересно, таким образом можно ли повлиять на другие приложения, например squid?

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".

Вставай, Україно!

Литература

Вирус отличается от антивирус тем, что распространяется бесплатно.