gnu parallel și gnu stow

46
GNU Parallel s , i GNU Stow Ziua Libert˘ at , ii Programelor s , i 30 de ani de GNU ˆ ın B˘ alt , i Radu Dumbr˘ aveanu Universitatea de Stat “A. Russo” din B˘ alt , i, Republica Moldova alt , i, 2013

Upload: radu-dumbraveanu

Post on 24-May-2015

186 views

Category:

Technology


3 download

DESCRIPTION

Sînt descrise programele libele GNU Parallel și GNU Stow (opțiuni, exemple de utilizare, contraexemple etc)

TRANSCRIPT

Page 1: GNU Parallel și GNU Stow

GNU Parallel s, i GNU StowZiua Libertat, ii Programelor s, i 30 de ani de GNU ın Balt, i

Radu Dumbraveanu

Universitatea de Stat “A. Russo” din Balt, i, Republica Moldova

Balt, i, 2013

Page 2: GNU Parallel și GNU Stow

GNU Parallel

GNU parallel este un program cu interfat, a ın linia de comanda(CLI) care permite utilizatorului executarea ın paralel a uneicomenzi sau a unui set de comenzi (script shell).

Sintaxa:

parallel [optiuni] [comanda [argumente]] < lista de argumente

sau

parallel [optiuni] [comanda [argumente]] ::: argumente

Page 3: GNU Parallel și GNU Stow

GNU Parallel

GNU parallel este un program cu interfat, a ın linia de comanda(CLI) care permite utilizatorului executarea ın paralel a uneicomenzi sau a unui set de comenzi (script shell).

Sintaxa:

parallel [optiuni] [comanda [argumente]] < lista de argumente

sau

parallel [optiuni] [comanda [argumente]] ::: argumente

Page 4: GNU Parallel și GNU Stow

Exemple clasice de utilizare

(echo ls; echo grep root /etc/passwd) | parallel

parallel traceroute ::: foss.org.my debian.org freenetproject.org

parallel −j0 ping −nc 3 ::: foss.org.my gnu.org freenetproject.org

find . −type f | parallel gzip

ls ∗.gz | parallel −X mv {} archive

Page 5: GNU Parallel și GNU Stow

Exemple clasice de utilizare

(echo ls; echo grep root /etc/passwd) | parallel

parallel traceroute ::: foss.org.my debian.org freenetproject.org

parallel −j0 ping −nc 3 ::: foss.org.my gnu.org freenetproject.org

find . −type f | parallel gzip

ls ∗.gz | parallel −X mv {} archive

Page 6: GNU Parallel și GNU Stow

Exemple clasice de utilizare

(echo ls; echo grep root /etc/passwd) | parallel

parallel traceroute ::: foss.org.my debian.org freenetproject.org

parallel −j0 ping −nc 3 ::: foss.org.my gnu.org freenetproject.org

find . −type f | parallel gzip

ls ∗.gz | parallel −X mv {} archive

Page 7: GNU Parallel și GNU Stow

Exemple clasice de utilizare

(echo ls; echo grep root /etc/passwd) | parallel

parallel traceroute ::: foss.org.my debian.org freenetproject.org

parallel −j0 ping −nc 3 ::: foss.org.my gnu.org freenetproject.org

find . −type f | parallel gzip

ls ∗.gz | parallel −X mv {} archive

Page 8: GNU Parallel și GNU Stow

Exemple clasice de utilizare

(echo ls; echo grep root /etc/passwd) | parallel

parallel traceroute ::: foss.org.my debian.org freenetproject.org

parallel −j0 ping −nc 3 ::: foss.org.my gnu.org freenetproject.org

find . −type f | parallel gzip

ls ∗.gz | parallel −X mv {} archive

Page 9: GNU Parallel și GNU Stow

Dificultat, i?

Lansarea oricarei comenzi ce cont, ine parallel se sfırs, es, te cumesajul de eroare:

The program ’parallel’ is currently not installed. You caninstall it by typing:sudo apt−get install moreutils

Nu urmat, i acesta indicat, ie; comanda parallel din pachetulmoreutils este cu totul altceva.

Page 10: GNU Parallel și GNU Stow

Dificultat, i?

Lansarea oricarei comenzi ce cont, ine parallel se sfırs, es, te cumesajul de eroare:

The program ’parallel’ is currently not installed. You caninstall it by typing:sudo apt−get install moreutils

Nu urmat, i acesta indicat, ie; comanda parallel din pachetulmoreutils este cu totul altceva.

Page 11: GNU Parallel și GNU Stow

Dificultat, i?

Lansarea oricarei comenzi ce cont, ine parallel se sfırs, es, te cumesajul de eroare:

The program ’parallel’ is currently not installed. You caninstall it by typing:sudo apt−get install moreutils

Nu urmat, i acesta indicat, ie; comanda parallel din pachetulmoreutils este cu totul altceva.

Page 12: GNU Parallel și GNU Stow

Modalitat, i de instalare

Putem instala parallel ın felul urmator:

1 sudo apt−get install parallel

sau

1 wget ftp://ftp.gnu.org/gnu/parallel/parallel−20130922.tar.bz22 tar xf parallel−20130922.tar.bz23 cd parallel−201309224 ./configure5 make6 make install

20130922 = versiunea parallel din 22.09.2013

Page 13: GNU Parallel și GNU Stow

Modalitat, i de instalare

Putem instala parallel ın felul urmator:

1 sudo apt−get install parallel

sau

1 wget ftp://ftp.gnu.org/gnu/parallel/parallel−20130922.tar.bz22 tar xf parallel−20130922.tar.bz23 cd parallel−201309224 ./configure5 make6 make install

20130922 = versiunea parallel din 22.09.2013

Page 14: GNU Parallel și GNU Stow

Modalitat, i de instalare

Putem instala parallel ın felul urmator:

1 sudo apt−get install parallel

sau

1 wget ftp://ftp.gnu.org/gnu/parallel/parallel−20130922.tar.bz22 tar xf parallel−20130922.tar.bz23 cd parallel−201309224 ./configure5 make6 make install

20130922 = versiunea parallel din 22.09.2013

Page 15: GNU Parallel și GNU Stow

Modalitat, i de instalare

Daca nu sıntet, i root atunci:creat, i dosarele ~/bin s, i ~/share apoi

1 wget ftp://ftp.gnu.org/gnu/parallel/parallel−20130922.tar.bz22 tar xf parallel−20130922.tar.bz23 cd parallel−201309224 ./configure −−prefix=$HOME5 make6 make install

Page 16: GNU Parallel și GNU Stow

Modalitat, i de instalare

Sau daca dorit, i sa utilizat, i parallel fara a-l instala (de exemplupentru a experimenta):

1 wget http://git.savannah.gnu.org/cgit/parallel.git/plain/src/parallel2 chmod 755 parallel3 cp parallel sem4 mv parallel sem ˜/bin/

parallel este un script Perl, nu ai ce compila.Mai multa informat, ie pehttps://github.com/razrichter/gnu_parallel.

Page 17: GNU Parallel și GNU Stow

Modalitat, i de instalare

Sau daca dorit, i sa utilizat, i parallel fara a-l instala (de exemplupentru a experimenta):

1 wget http://git.savannah.gnu.org/cgit/parallel.git/plain/src/parallel2 chmod 755 parallel3 cp parallel sem4 mv parallel sem ˜/bin/

parallel este un script Perl, nu ai ce compila.Mai multa informat, ie pehttps://github.com/razrichter/gnu_parallel.

Page 18: GNU Parallel și GNU Stow

Dificultat, i?

Lansarea oricarei comenzi ce cont, ine parallel se sfırs, es, te cumesajul de eroare:

1 /bin/bash: {}: command not found

sau

1 /bin/bash: :::: command not found

Solut, ii:

I adaugat, i opt, iunea --gnu (parallel --gnu ...);

I sau sudo rm /etc/parallael/config;

I sau http://stackoverflow.com/questions/16448887/

gnu-parallel-not-working-at-all

Page 19: GNU Parallel și GNU Stow

Dificultat, i?

Lansarea oricarei comenzi ce cont, ine parallel se sfırs, es, te cumesajul de eroare:

1 /bin/bash: {}: command not found

sau

1 /bin/bash: :::: command not found

Solut, ii:

I adaugat, i opt, iunea --gnu (parallel --gnu ...);

I sau sudo rm /etc/parallael/config;

I sau http://stackoverflow.com/questions/16448887/

gnu-parallel-not-working-at-all

Page 20: GNU Parallel și GNU Stow

Dificultat, i?

Lansarea oricarei comenzi ce cont, ine parallel se sfırs, es, te cumesajul de eroare:

1 /bin/bash: {}: command not found

sau

1 /bin/bash: :::: command not found

Solut, ii:

I adaugat, i opt, iunea --gnu (parallel --gnu ...);

I sau sudo rm /etc/parallael/config;

I sau http://stackoverflow.com/questions/16448887/

gnu-parallel-not-working-at-all

Page 21: GNU Parallel și GNU Stow

Dificultat, i?

Lansarea oricarei comenzi ce cont, ine parallel se sfırs, es, te cumesajul de eroare:

1 /bin/bash: {}: command not found

sau

1 /bin/bash: :::: command not found

Solut, ii:

I adaugat, i opt, iunea --gnu (parallel --gnu ...);

I sau sudo rm /etc/parallael/config;

I sau http://stackoverflow.com/questions/16448887/

gnu-parallel-not-working-at-all

Page 22: GNU Parallel și GNU Stow

Exemple de utilizare (divizarea fis, ierelor mari pe blocuri)

cat fisiermare.sql | parallel −k −−pipe grep −i ”text”

cat bigfiledump.sql | parallel −k −−pipe −−block 2M \grep −i ”text”

cat bigfiledump.sql | parallel −k −−pipe −−block 2M \−−sshlogin server.example.com,server2.example.net \grep −i ”text”

Page 23: GNU Parallel și GNU Stow

Exemple de utilizare (divizarea fis, ierelor mari pe blocuri)

cat fisiermare.sql | parallel −k −−pipe grep −i ”text”

cat bigfiledump.sql | parallel −k −−pipe −−block 2M \grep −i ”text”

cat bigfiledump.sql | parallel −k −−pipe −−block 2M \−−sshlogin server.example.com,server2.example.net \grep −i ”text”

Page 24: GNU Parallel și GNU Stow

Modalitat, i de transmitere a parametrilor

Cum transmitem parametrii la comanda care trebuie executata ınparalel?

1) Prin intrarea standard:

1 seq 5 | parallel echo

2 13 24 35 46 5

Page 25: GNU Parallel și GNU Stow

Modalitat, i de transmitere a parametrilor

Cum transmitem parametrii la comanda care trebuie executata ınparalel?1) Prin intrarea standard:

1 seq 5 | parallel echo

2 13 24 35 46 5

Page 26: GNU Parallel și GNU Stow

Modalitat, i de transmitere a parametrilor

Accesul la parametri:

1 seq 5 | parallel echo ”parm={}”

2 param=13 param=24 param=35 param=46 param=5

Page 27: GNU Parallel și GNU Stow

Modalitat, i de transmitere a parametrilor

Mai mult, i parametri deodata:

1 seq 10 | parallel −X echo

2 1 2 3 4 53 6 7 8 9 10

Page 28: GNU Parallel și GNU Stow

Modalitat, i de transmitere a parametrilor

2) Prin fis, iere:

1 parallel wget < adresse.lst

1 cat adrese.lst

2 foss.org.my3 debian.org4 freenetproject.org

Page 29: GNU Parallel și GNU Stow

Modalitat, i de transmitere a parametrilor

3) Prin linia de comanda:

1 parallel echo ::: 1 2 3 4

1 12 23 34 4

sau

1 parallel unzip ::: ./∗.zip

Page 30: GNU Parallel și GNU Stow

Modalitat, i de transmitere a parametrilor

3) Prin linia de comanda:

1 parallel echo ::: 1 2 3 4

1 12 23 34 4

sau

1 parallel unzip ::: ./∗.zip

Page 31: GNU Parallel și GNU Stow

Specificarea numarul de procese paralele

1) Numarul de procese = numarul de procesoare:

1 seq 10 20 | parallel −j+0 sleep

1 ps f −o pid,command

2 PID COMMAND3 31379 −bash4 32270 \ ps f −o pid,command5 30463 −bash6 30579 \ mc7 30581 \ bash −rcfile .bashrc8 32239 \ /usr/bin/perl −w /usr/bin/parallel −j+0 sleep9 32268 \ sleep 10

10 32269 \ sleep 11

Page 32: GNU Parallel și GNU Stow

Specificarea numarul de procese paralele

2) Numarul maximal de procese, explicit:

1 seq 10 20 | parallel −j 5 sleep

1 ps f −o pid,command

2 PID COMMAND3 31379 −bash4 32523 \ ps f −o pid,command5 30463 −bash6 30579 \ mc7 30581 \ bash −rcfile .bashrc8 32487 \ /usr/bin/perl −w /usr/bin/parallel −j 5 sleep9 32518 \ sleep 10

10 32519 \ sleep 1111 32520 \ sleep 1212 32521 \ sleep 1313 32522 \ sleep 14

Page 33: GNU Parallel și GNU Stow

Specificarea numarul de procese paralele

3) Numarul de sarcini per procesor, explicit:

1 $ seq 10 20 | parallel −j 150% sleep

1 ps f −o pid,command

2 PID COMMAND3 31379 −bash4 32636 \ ps f −o pid,command5 30463 −bash6 30579 \ mc7 30581 \ bash −rcfile .bashrc8 32602 \ /usr/bin/perl −w /usr/bin/parallel −j 150% sleep9 32632 \ sleep 10

10 32633 \ sleep 1111 32634 \ sleep 12

Page 34: GNU Parallel și GNU Stow

Contraexemplu

1 cd dosarcu66925fisiere2 /usr/bin/time cp −r ∗ /tmp

3 1.77user 49.62system 6:49.01elapsed 12%CPU4 7692784inputs+7367600outputs (0major+320minor)

1 cd dosarcu66925fisiere2 ls . | /usr/bin/time parallel −j+0 cp −r {} /tmp

3 2.40user 37.61system 6:30.38elapsed 10%CPU4 7402904inputs+7367600outputs (21major+27017minor)

1 cd dosarcu66925fisiere2 ls . | /usr/bin/time parallel −j 150% cp −r {} /tmp

3 2.51user 50.74system 12:55.95elapsed 6%CPU4 7579504inputs+7367608outputs (27major+28524minor)

Page 35: GNU Parallel și GNU Stow

Contraexemplu

1 cd dosarcu66925fisiere2 /usr/bin/time cp −r ∗ /tmp

3 1.77user 49.62system 6:49.01elapsed 12%CPU4 7692784inputs+7367600outputs (0major+320minor)

1 cd dosarcu66925fisiere2 ls . | /usr/bin/time parallel −j+0 cp −r {} /tmp

3 2.40user 37.61system 6:30.38elapsed 10%CPU4 7402904inputs+7367600outputs (21major+27017minor)

1 cd dosarcu66925fisiere2 ls . | /usr/bin/time parallel −j 150% cp −r {} /tmp

3 2.51user 50.74system 12:55.95elapsed 6%CPU4 7579504inputs+7367608outputs (27major+28524minor)

Page 36: GNU Parallel și GNU Stow

Contraexemplu

1 cd dosarcu66925fisiere2 /usr/bin/time cp −r ∗ /tmp

3 1.77user 49.62system 6:49.01elapsed 12%CPU4 7692784inputs+7367600outputs (0major+320minor)

1 cd dosarcu66925fisiere2 ls . | /usr/bin/time parallel −j+0 cp −r {} /tmp

3 2.40user 37.61system 6:30.38elapsed 10%CPU4 7402904inputs+7367600outputs (21major+27017minor)

1 cd dosarcu66925fisiere2 ls . | /usr/bin/time parallel −j 150% cp −r {} /tmp

3 2.51user 50.74system 12:55.95elapsed 6%CPU4 7579504inputs+7367608outputs (27major+28524minor)

Page 37: GNU Parallel și GNU Stow

Adrese web

Pagina web

http://www.gnu.org/software/parallel

Manual s, i exemple

http://www.gnu.org/software/parallel/man.html

Surselehttp://savannah.gnu.org/git/?group=parallel

Page 38: GNU Parallel și GNU Stow

Adrese web

Tutorialehttp://savannah.gnu.org/projects/parallel

Video (partea I s, i II)

http://www.youtube.com/watch?v=OpaiGYxkSuQ

http://www.youtube.com/watch?v=P40akGWJ_gY

Miscelaneuhttp://static.usenix.org/publications/login/2011-02/pdfs/Tange.pdf

http://wiki.scinethpc.ca/wiki/images/7/7b/Tech-talk-gnu-parallel.pdf

http://www.luga.de/Angebote/Vortraege/GNU_Parallel_LIT_2011/GNU_

Parallel_LIT_2011.pdf

http://www.admin-magazine.com/HPC/Articles/

GNU-Parallel-Multicore-at-the-Command-Line-with-GNU-Parallel

Page 39: GNU Parallel și GNU Stow

Adrese web

Comparat, ie cu alte comenzi (xargs, find -exec, make -j etc)

http://www.gnu.org/software/parallel/man.html#summary_table

Page 40: GNU Parallel și GNU Stow

GNU Stow

GNU Stow este un caz particular de manager de pachete.

Instalare:

1 sudo apt−get install stow

Page 41: GNU Parallel și GNU Stow

Instalarea pachetelor

Cum instalam un pachet cu ajutorul lui GNU Stow?

1 sudo make install prefix=/usr/local/stow/numepachet2 cd /usr/local/stow3 sudo stow numepachet

Pachetele care nu folosesc GNU AutoConf pot sa nu accepteparametrul “prefix”, atunci este nevoie de modificari ın fis, ierulMakefile.

Page 42: GNU Parallel și GNU Stow

Instalarea pachetelor

Cum instalam un pachet cu ajutorul lui GNU Stow?

1 sudo make install prefix=/usr/local/stow/numepachet2 cd /usr/local/stow3 sudo stow numepachet

Pachetele care nu folosesc GNU AutoConf pot sa nu accepteparametrul “prefix”, atunci este nevoie de modificari ın fis, ierulMakefile.

Page 43: GNU Parallel și GNU Stow

Eliminarea pachetelor

1 cd /usr/local/stow/2 sudo stow −D numepachet

Page 44: GNU Parallel și GNU Stow

Exemplu: mai multe versiuni ale unuia s, i aceluias, i pachetın aceeas, i distribut, ie

Mai multe versiuni ale unuia s, i aceluias, i pachet ımpreuna.

1 cd numepachet−3.02 sudo make install prefix=/usr/local/stow/numepachet−3.0

3 cd numepachet−3.1−beta4 sudo make install prefix=/usr/local/stow/numepachet−3.1−beta

Page 45: GNU Parallel și GNU Stow

Exemplu: mai multe versiuni ale unuia s, i aceluias, i pachetın aceeas, i distribut, ie

Putem accesa fis, iere ambelor pachete prin

1 /usr/local/stow/numepachet−3.0/bin/fisierbinar

s, i

2 /usr/local/stow/numepachet−3.1−beta/bin/fisierbinar

Iar daca executam

1 cd /usr/local/stow2 sudo stow numepachet−3.0

atunci lansınd ın linia de comanda doar fisierbinar vom accesa/usr/local/stow/numepachet-3.0/bin/fisierbinar.

Page 46: GNU Parallel și GNU Stow

Adrese web

Pagina web

http://www.gnu.org/software/stow/

Manual s, i exemple

http://www.gnu.org/software/stow/manual/