[linux-l] Re: find(1) mit und ohne xargs(1)

Oliver Bandel oliver at first.in-berlin.de
Di Okt 11 01:20:12 CEST 2005


On Mon, Oct 10, 2005 at 03:30:32PM +0000, Rocco Rutte wrote:
> Hi,
> 
> * Oliver Bandel [05-10-10 17:16:33 +0200] wrote:
> >On Mon, Oct 10, 2005 at 02:54:09PM +0000, Rocco Rutte wrote:
> 
> >Was find(1) angeht: das könnte man vielleicht mal redesignen? ;-)
> 
> Siehe unten.
> 
> >>$ time find . -type f -exec chmod 600 {} ";"
> >>find . -type f -exec chmod 600 {} ";"  0.40s user 2.93s system 65% cpu  
> >>5.082 total
> 
> Was hier besonders zu beachten ist, ist, dass fast die gesamte Laufzeit 
> im Kernel verbracht wird. Ich spekuliere mal, dass nicht das Finden der 
> Dateien auf der Platte so lange dauert, sondern für jede gefundene einen 
> fork() machen zu müssen, der relativ teuer ist.

ICh dachte in Linux sind forks garnicht so teuer... COW und so...


> Forks braucht man ja 
> öfter aber wie bei -exec eben meist nicht so viele auf einmal, dass das  
> aufs Tempo drückt. D.h. find(1) kann im Prinzip nichts dafür, weil das 
> Betriebssystem hier viel unnötige Arbeit leisten muss, was mit xargs 
> genau umgangen werden kann. In einer de-Newsgroup gab es IIRC schon 
> richtige Schlammschlachten, die -exec den Tod wünschten...

Naja, ok, exec wörtlich genommen meint dann wohl fork/exec?!

Man könnte doch ggf. auch find so umprogrammieren, daß es sich die
Pipe und das xargs intern selbst zusammen baut, statt immer fork/exec
zu nutzen. Aber vielleicht ist es garnicht fork/exec, das wäre ja schon
recht performance-schonend, verglichen mit sachen a la system oder so...
...system ruft IMHO immer auch die Shell auf, die dann erst das Programm
ausführt => also richtig krasser Overhead.
fork/exec sollte da flotter sein.
Naja, und pipe-Konzepte möglicherweise noch schneller?
(Kommt wohl immer drauf an, was die jew. aufgerufenen Programme
an Anforderungen haben (lesen die z.B. überhaupt aus der Pipe? (usw.)).

Gruß,
   Oliver



Mehr Informationen über die Mailingliste linux-l