Rating@Mail.ru
IPB
Etersoft - from Windows to Linux
Etersoft
решения для перехода
с Windows на Linux
Дружественные сайты: alv.me и Rus-Linux.net

Здравствуйте, гость ( Вход | Регистрация ) Поиск · 

 
Reply to this topic Start new topic
> производительность awk vs си
denel
bookmark
gyfbbdvkffmrljmmmwd
May 28 2017, в 09:53
Сообщение #1


Бывалый
Иконка группы

Сообщений: 443

Вставить имя   :   Цитата

ОС: Gentoo Linux
Город: Ишимбай

Группа: Участники

Автор темы
Доброго всем дня!
Что-то не могу окончательно разобраться: у чего производительность получится выше и ощутимо ли...
делаю
Код
tcpdump udp -i eth0 -n | \
grep --line-buffered \
'192\.168\.0\.2[501][206]\.12[43][40]:'| \
sed -e 's/.*\([0-5][0-9]\):\([0-5][0-9]\)\.//' | \
awk '{
   ipnum=0
   for (ipnum in ip) {
     if (ip[ipnum] == $5) break
     ipnum++
   }
   if (ip[ipnum] != $5) ip[ipnum]=$5
   a[ipnum]=$1
   b=( a[ipnum]-aold[ipnum] )
   if ((b>500000) || (b<0)) {
     print $1 >> ""ip[ipnum]
     aold[ipnum]=a[ipnum]
   }
   fflush()
}'

Таким образом awk распознаёт несколько адресов юникаст пакетов MPEG2, и раз в полсекунды примерно записывает что-то в файл, у которого в названии unicast ip-адрес. Если запись в файл перестаёт осуществляться в течение какого-то времени, другой скрипт бьёт тревогу о прекращении потока по данному юникаст адресу (по другим то адресам запись в файлы идёт). Система довольно слабенькая, пережившая уже несколько реинкарнаций, в связи с чем возникает потребность в максимальной оптимизации. Если написать то, что делает awk, программкой на си (пока не умею, но наверно смог бы осилить), будет ли производительность этого добра по-выше?
Go to the top of the page
 
+Quote Post
Bizdelnick
bookmark
gyfbbdvkffmrljmmmwd
May 28 2017, в 10:47
Сообщение #2


grammatikführer
Иконка группы

Сообщений: 12712

Вставить имя   :   Цитата

ОС: Debian GNU/Linux
Город: Санкт-Петербург

Группа: Модераторы разделов

Будет ли производительней — зависит исключительно от того, насколько хорошо сможете осилить. Но изменится ли от этого что-то в отношении производительности всего конвейера — совершенно отдельный вопрос, ответ на который можно получить только эмпирически.


--------------------
Пишите правильно:
в консоли
вкупе (с чем-либо)
в общем
вообще
в течение (часа)
команда
новичок
нюанс
приемлемо
проблема
пробовать
трафик
Go to the top of the page
 
+Quote Post
Bizdelnick
bookmark
gyfbbdvkffmrljmmmwd
May 28 2017, в 11:09
Сообщение #3


grammatikführer
Иконка группы

Сообщений: 12712

Вставить имя   :   Цитата

ОС: Debian GNU/Linux
Город: Санкт-Петербург

Группа: Модераторы разделов

Я бы начал с того, что уменьшил объём выхлопа tcpdump. Включите фильтрацию по хосту или сети, да и, как я понимаю, опцию -q можно использовать, если содержимое пакетов не важно. grep тогда станет не нужен.


--------------------
Пишите правильно:
в консоли
вкупе (с чем-либо)
в общем
вообще
в течение (часа)
команда
новичок
нюанс
приемлемо
проблема
пробовать
трафик
Go to the top of the page
 
+Quote Post
denel
bookmark
gyfbbdvkffmrljmmmwd
May 28 2017, в 12:51
Сообщение #4


Бывалый
Иконка группы

Сообщений: 443

Вставить имя   :   Цитата

ОС: Gentoo Linux
Город: Ишимбай

Группа: Участники

Автор темы
Цитата(Bizdelnick @ May 28 2017, в 13:47) *
Будет ли производительней — зависит исключительно от того, насколько хорошо сможете осилить. Но изменится ли от этого что-то в отношении производительности всего конвейера — совершенно отдельный вопрос, ответ на который можно получить только эмпирически.

То есть при использовании такого конвейера нет категоричной разницы между тем, что это обработка в awk с тем алгоритмом, что я задал, и программой на си? И соответственно будет категоричная разница между тем, что я написал в awk и тем, что я написал был далее.... | while read -a a; do .......; done ?
Go to the top of the page
 
+Quote Post
Bizdelnick
bookmark
gyfbbdvkffmrljmmmwd
May 28 2017, в 13:41
Сообщение #5


grammatikführer
Иконка группы

Сообщений: 12712

Вставить имя   :   Цитата

ОС: Debian GNU/Linux
Город: Санкт-Петербург

Группа: Модераторы разделов

Цитата(denel @ 28th May 2017 - в 12:51) *
То есть при использовании такого конвейера нет категоричной разницы между тем, что это обработка в awk с тем алгоритмом, что я задал, и программой на си?

Разница, конечно, есть, но можно и на си наворотить такого, что будет тормознее awk. А главное — непонятно, где именно бутылочное горлышка Вашего конвейера. На grep может валиться очень много ненужного мусора, и не исключено, что оптимизировать надо начинать с этого места, тем более что это проще.


--------------------
Пишите правильно:
в консоли
вкупе (с чем-либо)
в общем
вообще
в течение (часа)
команда
новичок
нюанс
приемлемо
проблема
пробовать
трафик
Go to the top of the page
 
+Quote Post
denel
bookmark
gyfbbdvkffmrljmmmwd
May 28 2017, в 21:09
Сообщение #6


Бывалый
Иконка группы

Сообщений: 443

Вставить имя   :   Цитата

ОС: Gentoo Linux
Город: Ишимбай

Группа: Участники

Автор темы
Цитата(Bizdelnick @ May 28 2017, в 16:41) *
Цитата(denel @ 28th May 2017 - в 12:51) *
То есть при использовании такого конвейера нет категоричной разницы между тем, что это обработка в awk с тем алгоритмом, что я задал, и программой на си?

Разница, конечно, есть, но можно и на си наворотить такого, что будет тормознее awk. А главное — непонятно, где именно бутылочное горлышка Вашего конвейера. На grep может валиться очень много ненужного мусора, и не исключено, что оптимизировать надо начинать с этого места, тем более что это проще.

я имею ввиду разницу в раз 50 хотябы smile.gif )))
Go to the top of the page
 
+Quote Post
Bizdelnick
bookmark
gyfbbdvkffmrljmmmwd
May 28 2017, в 23:25
Сообщение #7


grammatikführer
Иконка группы

Сообщений: 12712

Вставить имя   :   Цитата

ОС: Debian GNU/Linux
Город: Санкт-Петербург

Группа: Модераторы разделов

Давайте вернёмся к началу. Вы хотите оптимизировать конвейер из 4 команд. Результат даст только оптимизация самой медленной из них. Вы точно знаете, что узким местом является именно awk? Если нет, хоть на асме перепишите — результата не будет.


--------------------
Пишите правильно:
в консоли
вкупе (с чем-либо)
в общем
вообще
в течение (часа)
команда
новичок
нюанс
приемлемо
проблема
пробовать
трафик
Go to the top of the page
 
+Quote Post
denel
bookmark
gyfbbdvkffmrljmmmwd
May 31 2017, в 01:15
Сообщение #8


Бывалый
Иконка группы

Сообщений: 443

Вставить имя   :   Цитата

ОС: Gentoo Linux
Город: Ишимбай

Группа: Участники

Автор темы
Цитата(Bizdelnick @ May 29 2017, в 02:25) *
Давайте вернёмся к началу. Вы хотите оптимизировать конвейер из 4 команд. Результат даст только оптимизация самой медленной из них. Вы точно знаете, что узким местом является именно awk? Если нет, хоть на асме перепишите — результата не будет.

Я так полагаю по сравнению с тем, с чего начинал этот мониторинг, сейчас всё довольно неплохо смог оптимизировать
Код
tcpdump -u -i eth0 -n \
net 230.1.1.0/24 or host 192.168.0.206 \
or host 192.168.0.252 -t | \
awk '{
   if (($4 == "230.1.1.1.1240:") ||
       ($4 == "230.1.1.2.1235:") ||
       ($4 == "230.1.1.3.1234:") ||
       ($4 == "230.1.1.5.1346:") ||
       ($4 == "192.168.0.206.1234:") ||
       ($4 == "192.168.0.252.1234:")) {
     ipnum=0
     for (ipnum in ip) {
       if (ip[ipnum] == $4) break
       ipnum++
     }
     if (ip[ipnum] != $4) ip[ipnum]=$4
     a++
     if (a>1000) {
       d=0
       while (d<length(a)) {
         c[d]=1
         d++
       }
       a=0
     }
     if (c[ipnum] != 0) {
       print "1" >> ip[ipnum]
       c[ipnum]=0
       a=0
     }
   }
   fflush()
}'

tcpdump 1% CPU, awk 4% CPU
Если ещё уточнить свод адресов/портов tcpdump, работу awk можно ещё уменьшить. И это неплохой результат благодаря стремлению и советам. Начинал с того, что фильтровал grep, а awk всего на всего при каждом поступающем пакете по адресу записывал единицу в файл с названием этого адреса. В итоге при таком интенсивном вызове режима записи ФС, работа системы в целом очень ощутимо замедлялась. Вот на счёт условий tcpdump ещё не понял, можно ли в нём делать такие конструкции:
Код
( a == 1 && b == 2 ) || ( c == 3 && ( d == 4 || e == 5 ) )

Так же интересует, как узнать, на что тратит время процессора ядро. Вот я вижу, что top показывает usr 27%, а sys 16%, по usr даёт представление, что расходует время, а вот по sys пока вообще без понятия, как это увидеть. Наверно только прекращением выполнения тех или иных задач?
Go to the top of the page
 
+Quote Post

 Reply to this topic Start new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



RSS Текстовая версия Сейчас: 24th September 2017 - в 07:56




Rating@Mail.ru