processamento paralelo lendo a partir de um arquivo em um loop

1

Script PCAP.

Eu tenho um servidor com 32 processadores e preciso maximizar esse script para utilizar esses processadores. Atualmente, o programa tshark usa apenas 1 processador, portanto, preciso executar várias instâncias de tshark ao mesmo tempo. Atualmente, o loop definido no script abaixo faz 1 pcap de cada vez, o que é muito lento. Eu preciso executar até 15 tshark s ao mesmo tempo, mas não mais do que isso até que o loop chegue ao final do arquivo.

Essencialmente, o script lê determinados arquivos pcap e lista os pcaps em um arquivo de texto e, em seguida, usa tshark para filtrar e, em seguida, mescla usando mergecap .

Neste exemplo, existem 5 arquivos pcap para filtrar.

  1. full_cap_1589
  2. full_cap_1590
  3. full_cap_1591
  4. full_cap_1592
  5. full_cap_1593
#!/bin/bash
# Test Script to parse pcap files
#DATE='date |awk '{print $2}''
set -x


echo "Start Time -  Month/Day TIME example: 07/19 08:00"

read -e date1

echo "End Time - Month/Day TIME example 07/19 08:35"

read -e date2

echo "What IP address to filter on?"

read -e ip

echo $ip

FIND='find /mnt/pcap/captures/ -type f -newermt "$date1" ! -newermt "$date2" | cut -c20-40 > /home/username/loading_dock/load.txt'

#for full_caps in "${FIND[@]}"

for i in 'cat /home/username/loading_dock/load.txt'

do

  tshark -r /mnt/pcap/captures/$i "-Y ip.addr == $ip" -w /home/username/loading_dock/$i.pcap


done

mergecap -w /home/username/loading_dock/*.pcap -w /home/username/test1.pcap

rm -rf /home/username/loading_dock/*.pcap
rm -f /home/username/loading_dock/load.txt

exit 0
    
por backspin 19.07.2017 / 20:38

1 resposta

1

Você pode usar o GNU Parallel:

parallel -j15 tshark -r /mnt/pcap/captures/{} \'"-Y ip.addr == $ip"\' -w /home/username/loading_dock/{}.pcap :::: /home/username/loading_dock/load.txt

O GNU Parallel é um paralelizador geral e facilita a execução de trabalhos em paralelo na mesma máquina ou em várias máquinas para as quais você tem acesso ssh.

Se você tem 32 tarefas diferentes que você quer rodar em 4 CPUs, uma forma direta de paralelizar é rodar 8 tarefas em cada processador:

O

GNUParallelgeraumnovoprocessoquandoumtermina-mantendoasCPUsativaseeconomizandotempo:

Instalação

Por razões de segurança, você deve instalar o GNU Parallel com seu gerenciador de pacotes, mas se o GNU Parallel não estiver empacotado para sua distribuição, você pode fazer uma instalação pessoal, que não requer acesso root. Isso pode ser feito em 10 segundos ao fazer isso:

(wget -O - pi.dk/3 || curl pi.dk/3/ || fetch -o - http://pi.dk/3) | bash

Para outras opções de instalação, consulte o link

Saiba mais

Veja mais exemplos: link

Assista aos vídeos de introdução: link

Percorra o tutorial: link

Inscreva-se na lista de e-mail para obter suporte: link

    
por 20.07.2017 / 08:01