shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script] performance


From: Julio C. Neves
Subject: Re: [shell-script] performance
Date: Fri, 25 Apr 2014 10:35:33 -0300

Fala Alysson,
não tinha visto o seu post e tb acabei de escrever para a lista sobre fechar a saída de erros, mas diferentemente de vc, acho que fechando a saída, vc melhora um pouquinho o seu tempo, desde que o volume de IO seja grande.

Abcs,
Julio
@juliobash
Próximos cursos de Shell
Cidade         Local Período
Rio de Janeiro EDX 26-30/05
Dou treinamento de shell em qualquer cidade.
Para mais detalhes, me mande um e-mail.



Em 24 de abril de 2014 20:20, Alysson Gonçalves de Azevedo <address@hidden> escreveu:
 

Tem também a opção de fechar o output usado '2>&-', mas acho que não vai dar diferença de performance.



Alysson Gonçalves de Azevedo

"Anarcho-syndicalism is a way of preserving freedom." - Monty Python


Em 24 de abril de 2014 20:11, Alfredo Casanova <address@hidden> escreveu:
 

Data written to /dev/null doesn't go anywhere. Since it isn't written to any file, there is no file size to have any impact on.

If a program writes to /dev/null, the system call takes place. But the system call returns almost immediately without writing the data anywhere. So there is I/O from the application's point of view, but not from the hardware's point of view.

Nobody but you can know whether the tiny cost of writing to /dev/null is too much. If you're concerned, benchmark.

Achei na net esses dias

Em 24/04/2014 17:59, "Adauto Santos" <address@hidden> escreveu:

 

Caros,
fiz tudo o que foi sugerido, e não mudou o cenário com relação ao tempo.
Uma tentativa que fiz na surdina foi comentar a linha
"$@ 2> /dev/null" da função Comando, e o tempo de execução caiu vertiginosamente.
Sabem me dizer se quando "jogo" uma informação para o /dev/null, de alguma forma é acessado o disco ?
Se for isso, matamos o problema!

ARQUIVO_LOG="fire.log"
PROC="Forward-Lan"

Comando()
{
    #$@ 2> /dev/null
    if [ $? != 0 ]
    then
        echo $PROC ` date "+%d/%m/%Y %H:%M:%S"` $@ >> $ARQUIVO_LOG
        RET_COMANDO="ERRO:Comando(s) Invádo(s). Verifique o Log";
    fi
}

#Comando="/bin/echo"
RET_COMANDO="OK";

for I in `seq 1 255`
do
    Comando iptables -A FORWARD -s 100.100.100.$I -j ACCEPT
    Comando iptables -D FORWARD -s 100.100.100.$I -j ACCEPT
done


Adauto Santos





Em Quinta-feira, 24 de Abril de 2014 16:39, Julio C. Neves <address@hidden> escreveu:
 
Ou usando o builtin coproc que foi implementado no bash 4.0

Abcs,
Julio
@juliobash
Próximos cursos de Shell
Cidade         Local Período
Rio de Janeiro EDX 26-30/05
Dou treinamento de shell em qualquer cidade.
Para mais detalhes, me mande um e-mail.


Em 24 de abril de 2014 15:39, Leslie Watter <address@hidden> escreveu:
 
Oi Adauto,

Tem mais uma alternativa, rodar os comandos em paralelo com o parallel


seq 1 255 | parallel -j 255 iptables  -A FORWARD -s 100.100.100.{} -j ACCEPT 

isso deve ser mais rápido que rodar comando a comando, uma vez que ele roda em paralelo com 255 jobs 

[]s

LEslie



2014-04-24 15:15 GMT-03:00 Ernander (Nander) <address@hidden>:
 
Sei que não é o Foco, mas ja pensou Em Buscar essas Regras de um banco de DADOS?






Em 24 de abril de 2014 15:12, Adauto Santos <address@hidden> escreveu:

 
Olá Leslie,

na realidade não é esse o caso. Tenho um script desses em produção pelo qual tem mais de 8.000 linhas de regra de firewall e como o negócio está cada vez maior, todo o restart de chain que faço, principalmente o forward, demora muito.

Fiz esse trecho de script bem simplificado apenas para enviar pro grupo.

Grato pela sugestão

Abraços!

Adauto

Em Quinta-feira, 24 de Abril de 2014 9:49, Leslie Watter <address@hidden> escreveu:
 

Oi,


On Wed, Apr 23, 2014 at 5:03 PM, Adauto Santos <address@hidden> wrote:
 
Caros, tenho o script abaixo:

ARQUIVO_LOG="fire.log"
PROC="Forward-Lan"

Comando()
{
    $@ 2> /dev/null
    if [ $? != 0 ]
    then
        echo $PROC ` date "+%d/%m/%Y %H:%M:%S"` $@ >> $ARQUIVO_LOG
        RET_COMANDO="ERRO:Comando(s) Invádo(s). Verifique o Log";
    fi
}

Comando="/bin/echo"
RET_COMANDO="OK";

for I in `seq 1 255`
do

    $Comando iptables -A FORWARD -s 100.100.100.$I -j ACCEPT
    $Comando iptables -D FORWARD -s 100.100.100.$I -j ACCEPT

done


E quando o executo dessa forma, ecoando na tela, tenho esse resultado:

# time ./teste.sh

real    0m0.546s
user    0m0.096s
sys     0m0.407s

Se mudo o trecho do for para essa forma:

#Comando="/bin/echo"
RET_COMANDO="OK";

for I in `seq 1 255`
do

    Comando iptables -A FORWARD -s 100.100.100.$I -j ACCEPT
    Comando iptables -D FORWARD -s 100.100.100.$I -j ACCEPT

done

Obtenho esse resultado:

# time ./teste.sh

real    0m2.513s
user    0m0.307s
sys     0m2.056s

Pergunto, é possível deixá-lo mais performático?


Porque vc não muda o comando do iptables pra fazer de uma vez tudo o que vc precisa?


troque o for com os comandos do iptables 
for ...
 Comando iptables -A FORWARD -s 100.100.100.$I -j ACCEPT
....
done


Por 

iptables -A FORWARD -s 100.100.100.0/24 -j ACCEPT
iptables -D FORWARD -s 100.100.100.0/24  -j ACCEPT

Veja a notação CIDR no comando :-)


[]s

LEslie








--
Leslie H. Watter






reply via email to

[Prev in Thread] Current Thread [Next in Thread]