znaczacy > comp.os.* > comp.os.linux

Wojciech Waga aka wojek (07.12.2010, 16:12)
Witam,

mam skrypt ktry robi cos takiego:

for ((i=0; i<=100000; i++));
do
cat ${i}.txt >> wynik
done;

plikw jest ok. 1mln, kazdy ma < 20bajtw i cala akcja trwa bardzo
dlugo. Czy ktos ma pomysl jak moznaby to przyspieszyc? W szczeglnosci
jaki system plikw ma najlepsza wydajnosc dla malych pliczkw?

tmpfs: - przyspieszyl, ale mam za malo pamieci na to
noatime: +

mam do dyspozycji 4 pendrive z ktrych moznaby zrobic RAID, pytanie czy
warto.

pozdrawiam i dziekuje za odpowiedzi
Wojtek
Stachu 'Dozzie' K. (07.12.2010, 16:17)
On 2010-12-07, Wojciech Waga aka wojek <na> wrote:
> Witam,
> mam skrypt ktry robi co takiego:
> for ((i=0; i<=100000; i++));
> do
> cat ${i}.txt >> wynik
> done;
> plikw jest ok. 1mln, kady ma < 20bajtw i caa akcja trwa bardzo
> dugo. Czy kto ma pomys jak monaby to przyspieszy? W szczeglnoci
> jaki system plikw ma najlepsz wydajno dla maych pliczkw?


Odpieprzy si od systemu plikw i uruchamia cat dla wielu plikw
naraz. Zabierasz si do rozwizania od dupy strony nawet nie
zdiagnozowawszy problemu.
Kamil Joca (07.12.2010, 16:20)
Wojciech Waga aka wojek <na> writes:

[..]
> noatime: +
> mam do dyspozycji 4 pendrive z ktrych monaby zrobi RAID, pytanie
> czy warto.


A co w rodzaju (zakadam e te pliki s w jakim katalogu i maj
"numeryczne" pocztki)
ls |sort -n |xargs cat >>wynik

KJ
Kamil Joca (07.12.2010, 16:22)
kjonca (Kamil Joca) writes:

> Wojciech Waga aka wojek <na> writes:
> A co w rodzaju (zakadam e te pliki s w jakim katalogu i maj
> "numeryczne" pocztki)
> ls |sort -n |xargs cat >>wynik


Sorry, napisaem bez sensu. Ale xargs bym uy ...
KJ
Wojciech Waga aka wojek (07.12.2010, 16:25)
Stachu 'Dozzie' K. pisze:
> On 2010-12-07, Wojciech Waga aka wojek <na> wrote:
> Odpieprzy si od systemu plikw i uruchamia cat dla wielu plikw
> naraz. Zabierasz si do rozwizania od dupy strony nawet nie
> zdiagnozowawszy problemu.


Podaem wersj uproszczon skryptu, nie ma moliwoci wywoania cat dla
wielu plikw na raz.

pozdr.
w.
Wojciech Waga aka wojek (07.12.2010, 16:37)
Cze,

dziki za odpowied. Chyba jednak bez penej wersji skryptu si nie obdzie:

#!/bin/bash

RECOMB1=`LC_ALL=C seq -f'%0.3f' 0 0.001 1`
RECOMB2=`LC_ALL=C seq -f'%0.3f' 0 0.001 1`

FILENAME=imageBig
FILENAMER=imageBigR
FILENAMEB=imageBigB

for img in 100 050 030;
do

echo "P3" > ${FILENAME}${img}.ppm
echo -n `echo $RECOMB2 | wc -w` >> ${FILENAME}${img}.ppm
echo -n " " >> ${FILENAME}${img}.ppm
echo `echo $RECOMB1 | wc -w` >> ${FILENAME}${img}.ppm
echo 255 >> ${FILENAME}${img}.ppm

cp ${FILENAME}${img}.ppm ${FILENAMER}${img}.ppm
cp ${FILENAME}${img}.ppm ${FILENAMEB}${img}.ppm

for i in $RECOMB1;
do
for j in $RECOMB2;
do
FILE1="datatmp/r${i}_r${j}_pb2_00${img}000c";

if [ ! -f $FILE1 ];
then
FILE2="data/r${i}_r${j}_pb2_00${img}000c";
if [ ! -f $FILE2 ]; then
echo -n "0 0 0 " >> ${FILENAME}${img}.ppm
echo -n "0 0 0 " >> ${FILENAMER}${img}.ppm
echo -n "0 0 0 " >> ${FILENAMEB}${img}.ppm
else
cat $FILE2 | head -n80 | awk '{x=x+$1; y=y+1;}
END{printf("%1.0f ",(255*(x/y)/4096))}' > $FILE1
cat $FILE2 | tail -n384 | head -n240 | awk '{x=x+$1;
y=y+1;} END{printf("0 %1.0f ",(255*(x/y)/4096))}' >> $FILE1
cat $FILE1 >> ${FILENAME}${img}.ppm
cat $FILE1 | cut -d' ' -f1 >> ${FILENAMER}${img}.ppm
echo " 0 0 " >> ${FILENAMER}${img}.ppm
echo " 0 0 " >> ${FILENAMEB}${img}.ppm
cat $FILE1 | cut -d' ' -f3 >> ${FILENAMEB}${img}.ppm
fi;
else
cat $FILE1 >> ${FILENAME}${img}.ppm
cat $FILE1 | cut -d' ' -f1 >> ${FILENAMER}${img}.ppm
echo " 0 0 " >> ${FILENAMER}${img}.ppm
echo " 0 0 " >> ${FILENAMEB}${img}.ppm
cat $FILE1 | cut -d' ' -f3 >> ${FILENAMEB}${img}.ppm
fi;
done;
done;

Problem polega na tym, e nie wszystkie pliki s wic nie mog da cat
na wszystkim bo mi si obrazek rozjedzie. Ale przysza mi taka myl,
eby zrobi brakujce pliki z odpowiedni treci i potem podmienia na
pene a catowa wszystko. Sprawdz to dzisiaj.

pozdrawiam
Wojtek
Stachu 'Dozzie' K. (07.12.2010, 16:40)
On 2010-12-07, Wojciech Waga aka wojek <na> wrote:
> Stachu 'Dozzie' K. pisze:
> Podaem wersj uproszczon skryptu, nie ma moliwoci wywoania cat dla
> wielu plikw na raz.


To *ujwi co ci naprawd spowalnia wykonanie. I to wcale niekoniecznie
musi to by system plikw, co wida na powyszym przykadzie.
Mariusz Kruk (07.12.2010, 16:46)
epsilon$ while read LINE; do echo \>"$LINE"; done < "Wojciech Waga aka wojek"
>Podaem wersj uproszczon skryptu, nie ma moliwoci wywoania cat dla
>wielu plikw na raz.


Co to znaczy "nie ma"? Problemem u Ciebie nie jest "wydajno FS", tylko
narzut na tworzenie i zamykanie procesw.

#v+
poznojuz:~> ls test | wc -l
10000
poznojuz:~> time find test -type f -exec cat {} \;
1.212u 3.412s 0:04.77 96.8% 0+0k 0+1256io 0pf+0w
poznojuz:~> time find test -type f -exec cat {} +
0.004u 0.040s 0:00.04 100.0% 0+0k 0+0io 0pf+0w
#v-

Widzisz rnic?
Mariusz Kruk (07.12.2010, 16:49)
epsilon$ while read LINE; do echo \>"$LINE"; done < "Wojciech Waga aka wojek"
>Problem polega na tym, e nie wszystkie pliki s wic nie mog da cat
>na wszystkim bo mi si obrazek rozjedzie. Ale przysza mi taka myl,
>eby zrobi brakujce pliki z odpowiedni treci i potem podmienia na
>pene a catowa wszystko. Sprawdz to dzisiaj.


A moe, zamiast catowa, zrobi while read echo? cat jest zewntrzny,
podana trjca to builtiny.
Albo wrcz przepisa to po ludzku na siakiego pythona?
Mikolaj Machowski (07.12.2010, 18:55)
Wojciech Waga aka wojek napisal:
> cat $FILE2 | head -n80 | awk '{x=x+$1; y=y+1;}
> END{printf("%1.0f ",(255*(x/y)/4096))}' > $FILE1


Teoretycznie cat head awk mozna zastapic tylko awkiem. 1 proces zamiast
3.

> cat $FILE1 | cut -d' ' -f1 >> ${FILENAMER}${img}.ppm


Podobnie w tej sytuacji.

Nie zebym ja wiedzial jak :) ale awk ma wszystkie funkcje
a oszczedzasz na I/O.

m.
Jan Stoek (08.12.2010, 23:58)
Po gbokim namyle Wojciech Waga aka wojek napisa w wtorek, 7
grudnia 2010 15:37:

> dziki za odpowied. Chyba jednak bez penej wersji skryptu si nie
> obdzie:
> #!/bin/bash


A nie lepiej byo to napisa w PERL-u? Nie do, e odpalasz jeden
proces zamiast kilkunastu milionw, to jeszcze mona pomyle o
zmianie struktury danych i trzymaniu ich wszystkich w jakiej mega
tablicy w pamici wirtualnej (jeli si zmieci). A nawet jeli nie,
to oszczdnoci na samym zarzdzaniu procesami powinny by
gigantyczne.
Podobne wtki