Muitas vezes nosso PABX realiza milhões de gravações diárias, então colocamos aquele script bacana na
Cron para toda noite ficar lá se matando em converter arquivo por arquivo. Aqui vamos melhorar um pouco este processo, otimizando sua performance.
Eu criei um script bastante simplista para demostrar o funcionamento do PPSS, segue abaixo.
#!/bin/bash
#Script criado por Eduardo Lopes - 03/01/2013
#Diretório de origem e destino
SRC=$1
DST=$2
#Conversão em multi-thread ou não -> 0 - sim / 1 - não
CORE=$3
if [ $# -ne 3 ]
then
echo "=============================================
echo "Número de argumentos inválido"
echo "Você deve executar esse script da seguinte forma:"
echo "./wav2mp3 <DIRETORIO ORIGEM> <DIRETORIO DESTINO> <MULTI-THREAD (0-SIM/1-NÃO)> "
echo "=============================================
else
if [ $CORE -eq 0 ]
then
./ppss -d $SRC -c 'BASENAME=`basename "$ITEM" .wav`; lame --quiet --preset insane "$ITEM"
"$OUTPUT_DIR/$BASENAME.mp3"' -o $DST
elif [ $CORE -eq 1 ]
then
./ppss -d $SRC -c 'BASENAME=`basename "$ITEM" .wav`; lame --quiet --preset insane "$ITEM"
"$OUTPUT_DIR/$BASENAME.mp3"' -o $DST -p 1
else
echo "Valor para Multi-Thread deve ser: (0 - SIM ou 1 - NÃO)"
fi
fi
Obs.: O script utiliza o LAME para conversão, caso não o tenha instalado, pode ser adquirido pelo link:
Com esse script, podemos escolher o diretório de conversão (origem e destino) e ainda, se quisermos, utilizar de forma
multithread ou não. Somente criei dessa forma para comparar as execuções (tempo de processamento) entre as formas de processamento (multithread ou não). Irei utilizar 1 GB de gravação (aproximadamente 613 arquivos em WAV) em uma máquina Core i5 com 4GB de RAM e
Ubuntu 10.04.4.
Pode-se observar na documentação do PPSS que ele nos permite escolher diversos parâmetros, quantidade de núcleos etc. Eu estou utilizando ou 1 ou todos, nesse caso, os 4 disponíveis.
Abaixo o print da conversão em multithread, pode-se observar que o PPSS nos mostra até mesmo quantos arquivos deram falha ao converter.
O próprio PPSS gera uma diretório com diversos arquivos de log, com o nome de "ppss_dir" e dentro desse diretório, iremos encontrar:
# ls
INPUT_FILE-27823
job_log
LIST_OF_FAILED_ITEMS
LIST_OF_PROCESSED_ITEMS
NODE_STATUS
PPSS_ITEM_LOCK_DIR
PPSS_LOCAL_OUTPUT
PPSS_LOCAL_TMPDIR
ppss-log-27823.txt
E dentro de cada diretório/arquivo, temos os dados de quais arquivos deram falha, sucesso etc. Basta uma rápida visualizada e já verificamos a causa do erro no arquivo não convertido.
Podemos ainda verificar, na imagem acima, que a conversão desse 1 GB de arquivo demorou 1:42 min. Abaixo, temos a conversão com o PPSS, porém, agora sem utilizar o método de multithread, ou seja, arquivo por arquivo:
Podemos observar que tivemos também uma falha, da mesma forma que no método multithread (utilizei os mesmos arquivos WAV), porém, agora o tempo foi de 4:54 min, ou seja, mais de 3X o tempo. É obvio que o tempo de processamento será proporcional ao número de núcleos disponível, sendo assim, quanto mais, melhor.
Cabe lembrar que, quando utilizamos o processamento distribuído, a máquina não irá realizar as demais tarefas de forma performática, ou seja, poderá faltar recursos caso alguma tarefa "pesada" seja executada. É sempre bom avaliar quais processos devem ser executados em paralelo, o importante é aproveitar os recursos que dispomos!
É isso aí!
Viva o
Linux.