Sunt student absolvent, iar grupul în care lucrez menține un cluster Linux. Fiecare nod al clusterului are propriul său disc local, dar aceste discuri locale sunt relativ mici și nu sunt echipate cu backup automat. Deci, grupul deține un server de fișiere cu multe TB de spațiu de stocare. Sunt un novice relativ la Linux, deci nu sunt sigur care sunt specificațiile serverului de fișiere în ceea ce privește viteza, capacitatea de rețea etc. Știu din experiență că discurile locale sunt semnificativ mai rapide decât serverul de fișiere în ceea ce privește I / O . Aproximativ o duzină de oameni folosesc serverul de fișiere.
Utilizarea cp
pentru a copia un fișier de ~ 20 GB de pe serverul de fișiere pe unul dintre discurile locale durează în medie aproximativ 11,5 minute în timp real (conform time
). Știu că această operațiune cp
nu este foarte eficientă deoarece (1) time
îmi spune că timpul de sistem pentru o astfel de copie este doar ~ 45 de secunde; și pentru că (2) când examinez top
în timpul copierii, % CPU este destul de scăzut (prin inspecție, aproximativ 0-10% în medie).
Utilizarea cp
pentru a copia același fișier de ~ 20 GB dintr-un folder de pe discul local într-un alt folder de pe același disc local necesită mai puțin timp – aproximativ 9 minute în timp real (~ 51 de secunde în timpul sistemului, conform time
). Deci, se pare că serverul de fișiere este ceva mai lent decât discul local, așa cum era de așteptat, dar poate nu semnificativ mai lent. Sunt surprins că copierea de la local la același local nu depășește 9 minute.
Am nevoie să copiez ~ 200 de fișiere mari – fiecare ~ 20 GB – de la serverul de fișiere pe unul dintre discurile locale. Deci, întrebarea mea este: Există o alternativă mai rapidă la cp
pentru copierea fișierelor mari în Linux? (Sau există semnalizări în cadrul cp
pe care le-aș putea folosi, care ar accelera copierea?) Chiar dacă aș putea cumva să scutesc un minut din acest timp de copiere, ajuta imens.
Sunt sigur că cumpărarea unor discuri hardware noi și mai rapide, dar nu am acces la astfel de resurse. De asemenea, nu sunt administrator de sistem – sunt doar un utilizator (începător) – – deci nu am acces la informații mai detaliate despre încărcarea pe discuri. Știu că, în timp ce aproximativ o duzină de persoane folosesc serverul de fișiere zilnic, sunt singura persoană care folosește acest nod / disc local.
Comentarii
Răspuns
Aceasta ar putea fi, posibil, o alternativă mai rapidă și nu veți înfunda rețeaua timp de două zile: luați unul sau două discuri USB mari (USB 3 dacă aveți) sau FireWire, conectați-le la pe server și copiați fișierele pe disc. Transportați discul pe mașina dvs. locală. Copiați fișierele pe aparat.
Comentarii
- Sneakernet ( en.wikipedia.org/ wiki / Sneakernet ) poate fi foarte rapid: nu subestimați niciodată lățimea de bandă a unui break plin de benzi care se aruncă pe autostradă.
Răspuns
Dacă aveți acces SSH direct (sau SFTP) (întrebați-vă administratorul), puteți utiliza scp
cu compresie (-C
):
scp -C you@server:/path/to/yourfile .
Desigur, acest lucru este util numai dacă fișierul este compresibil, iar acest lucru va folosi mai mult timp CPU, deoarece va folosi criptarea (deoarece este peste SSH) și comprimarea.
Comentarii
- În acest caz, ar fi util să dezactivați criptarea. Amintiți-vă că încercăm să facem copia mai rapidă .
- @lgeorget Bănuiesc că cheltuielile generale ale criptării nu vor fi ‘ t semnificative , având în vedere cât de lente sunt hard diskurile. Am luat în considerare adăugarea a ceva despre
-c none
, dar acel pare să nu fie standard . - ‘ ne ocupăm de fișiere ~ 20G, deci este destul de ineficient să folosim criptarea dacă nu este necesară.
- @lgeorget Criptarea poate fi făcut mult mai repede decât debitul pe care l-a ‘ obținut, așa că a „b9af5ea283”>
nu a încetinit nimic. Dar pare inutil să treci prin SSH aici. Dacă aveți nevoie doar de comprimare, cu siguranță există și alte instrumente?
ssh
și decomprimarea acestuia .. Răspuns
Definiția dvs. despre eficient este inversă. O implementare mai eficientă pierde mai puțin timpul procesării. Pe copia locală, calculați în medie aproximativ 74 MB / s de transfer (citire + scriere), ceea ce este la fel de bun pe cât va obține un singur hard disk.
Comentarii
- Hopa.Când am spus ” eficient, ” am vrut să spun ” rapid. ”
Răspuns
cp
implementarea nu este cel mai probabil un blocaj. Încercați să observați utilizarea IO prin iotop
atât pe server cât și pe nodul cluster. Acest lucru vă va oferi o idee unde puteți îmbunătăți performanța.
Un alt sfat este să evitați copierea acelorași date de la aceeași gazdă. De exemplu, dacă aveți un fișier 20G identic de distribuit de la serverul de fișiere prin rețea la toate nodurile clusterului, acesta va funcționa mult mai repede dacă copiați fișierele peer-to-peer, mai degrabă decât de la un server la toți clienții. Este puțin mai complicat de implementat, dar puteți încerca chiar să folosiți o linie de comandă p2p, cum ar fi hub-ul de conectare directă.
Dacă în acele fișiere 20G, o parte este comună, iar altele sunt specifice nodului cluster, luați în considerare împărțind-o în părți comune și specifice, apoi distribuie partea comună în mod p2p.
Comentarii
- Dacă ‘ reîntr-o rețea LAN, ar trebui să puteți face multicast în loc de peer-to-peer. Ceea ce ar trebui să fie mai rapid și mai puțin încărcat în rețea.
Răspuns
Natura / conținutul acelor fișiere pot face o diferență. Am înțeles că trebuie să copiați 200 de fișiere, de fiecare ~ 20 GB fiecare, de la un computer la altul , nu-i așa?
Dacă acele fișiere sunt comprimabile sau cu piese similare / identice, aveți două abordări:
-
zip-le înainte de copiere sau creați un tunel între computerele cu activare zip. Deci, dacă rețeaua este blocajul, va fi un pic faste r
-
dacă fișierele sunt foarte similare sau partajează unele conținuturi comune între ele, încercați să utilizați rsync . Va „petrece ceva timp găsind ceea ce este obișnuit printre fișiere și nu va trebui să îl copiați literal , deoarece îl va reconstrui pe baza a ceea ce este comun.
edit
Va trebui să copiați acele fișiere de multe ori ?? (cum ar fi o copie -> utilizați acele fișiere -> modificați ceva din fișiere în computerul A -> copiați fișierele din nou pe computerul B)
Dacă da, rsync va fi util, deoarece va încerca să detecteze ceea ce este egal între versiuni și nu va copia ceea ce este neschimbat.
Și o a treia metodă: dacă cele de mai sus sunt corecte (modificări ale fișierului, apoi copiați din nou toate fișierele pe al doilea computer) puteți încerca câteva binary diff
doar schimbați în al doilea computer ceea ce a fost schimbat în primul computer.
Răspundeți
Văd aici următoarele, criptarea nu este o idee bună, deoarece s-ar putea să crească cantitatea de date de transferat.
Dacă copiați între două sisteme, atunci blocajul este, desigur, t conexiunea între servere.
Dacă copiați local, uitați-vă la modul în care merge procesul, este SINGLE threaded, astfel utilitățile standard Linux folosesc:
- for all blocks in a file read a block write a block
NU există concurență la această operațiune.
Pentru a accelera lucrurile, puteți utiliza ceva de genul acesta:
buffer -i infile -o outfile -m size-of-shared-memory-default-1MByte
Consultați pagina de manual tampon (1) pentru mai multe informații.
Comanda tampon configurează două procese pentru a rula procesul de copiere simultan: unul pentru citire și celălalt pentru scriere și folosește un buffer de memorie partajată pentru a comunica datele între cele două procese. Bufferul de memorie partajată este bufferul tău circular clasic, care previne suprascrierea datelor nescrise și scrierea datelor deja scrise. Am folosit acest program pentru a reduce aproximativ 10-20% din timpul de copiere în transferurile de pe disc pe bandă.
Comentarii
- De fapt, există concurență în ” citiți un bloc / scrieți un bloc ” deoarece ” scrieți un bloc ” îl pune de fapt doar în buffer-ul ‘ s, iar nucleul gestionează scrierea blocului real în fundal (cel puțin, până când începeți să rămâneți fără memorie RAM). Sau dacă utilizați O_DSYNC / O_SYNC din anumite motive.
Răspuns
De ce nu încercați un algoritm de propagare P2P , dacă trebuie să vă actualizați întregul cluster în același timp?
https://github.com/lg/murder este ce folosește twitter
Există „s BTSync pe care le puteți încerca și dvs.
Răspundeți
Dacă copiați frecvent aceleași seturi de fișiere de pe computerul dvs. local pe server cu modificări minore aici și acolo. Puteți accelera transferul utilizând rsync sau un DVCS (de exemplu, hg sau git).
git sau hg pot urmări și detecta deltele și pot transfera doar deltele respective. În cazul utilizării unui git, deoarece ambele părți au un istoric complet al depozitului, a afla delta este foarte ieftin.
rsync folosește o formă de rulare a algoritmului de sumă de verificare pentru a detecta deltele fără știrea prealabilă a ceea ce este de cealaltă parte. Deși rsync necesită mai multă muncă pentru a calcula deltele, nu trebuie să stocheze întregul istoricul fișierelor.
Răspuns
S-ar putea să doriți să încercați să împachetați toate fișierele într-o singură arhivă (nu trebuie să fie comprimate). Din experiența mea, copierea acelei arhive este mai rapidă decât copierea unui număr mare de fișiere individuale
Comentarii
- Observație generică bună, dar așa cum spune întrebarea „~ 200 fișiere mari – fiecare ~ 20 GB”, nu cred că ‘ nu cred că acest lucru poate fi considerat un răspuns real la această problemă.
- @manatwork ah .. ‘ nu am citit clar. Am crezut că are 200 de fișiere în valoare totală de 20 GB
Răspuns
Încercați bbcp . Testarea în mediul nostru a arătat că cp avea un fel de construit în guvernator. Aveți grijă doar pentru că, atunci când îl scoateți pe guvernator, vă puteți reda linia serverului și puteți provoca o întrerupere. În cazul nostru, luam serverul offline pentru a face copia, deci mai rapid era mai bine. Acest timp de transfer îmbunătățit de câteva ore.
Răspuns
Asigurați-vă că ținta fișierele nu există înainte de copiere.
Uneori este surprinzător cât de mult este petrecut chiar și doar copierea pe aceeași gazdă (nu este implicată nicio rețea).
Vedeți răspunsul meu la o altă întrebare CP aici . Scurtă poveste, suprascrierea unui fișier existent este mult mai lentă decât trunchierea sau deconectarea acestuia mai întâi, și apoi copiere. Acesta din urmă este de 8 ori mai rapid pentru un fișier de 1,2 GB.
dd
șirsync
pentru a compara care funcționează mai repede în mediul dvs.dd
, dar am încercatrsync
. Timpul real a fost de aproximativ 11,5 minute, iar timpul sistemului a fost de aproximativ 1,5 minute, conformtime
./dev/sda1
la/dev/sdb1
va fi mai rapidă decât copierea dintr-o locație pe/dev/sda1
la o altă locație de pe/dev/sda1
sau altă partiție pe/dev/sda
deoarece hard disk-ul a câștigat ‘ t trebuie să fac căutări suplimentare între citiri și scrieri (presupunând că hard disk-urile tradiționale cu discuri rotative și capete în mișcare; SSD-ul este evident diferit). = „answer”>% CPU ar trebui să fie scăzut în timpul copierii. CPU îi spune controlerului de disc „preluați date din sectoarele X – Y în memoria tampon la Z”. Apoi merge și face altceva (sau doarme, dacă nu există altceva). Hardware-ul declanșează o întrerupere atunci când datele sunt în memorie. Apoi procesorul trebuie să-l copieze de câteva ori și spune cartelei de rețea „transmite pachete în locațiile de memorie A, B și C”. Apoi se întoarce la a face altceva.
Împingi ~ 240mbps.Pe o rețea LAN gigabit, ar trebui să puteți face cel puțin 800 Mbps, dar:
Pentru urmărirea blocajului,
iostat -kx 10
va fi o comandă utilă. Vă va arăta utilizarea pe hard disk-urile locale. Dacă puteți rula acest lucru pe serverul de fișiere, vă va spune cât de ocupat este serverul de fișiere.Soluția generală va fi să accelerați blocajul, pentru care, desigur, nu aveți bugetul. Dar există câteva cazuri speciale în care puteți găsi o abordare mai rapidă:
lzop
sau poategzip --fastest
.rsync
nu va ajuta cu adevărat aici, deoarece va trebui să citească fișierul de ambele părți pentru a găsi delta. În schimb, aveți nevoie de ceva care să țină evidența deltei pe măsură ce schimbați fișierul … Cele mai multe abordări de aici sunt specifice aplicației. Dar este posibil să puteți instala ceva cu, de exemplu, dispozitiv-mapper (consultați noul țintă dm-era ) sau btrfs.Și, întrucât observați că nu sunteți administratorul de sistem, presupun că asta înseamnă că aveți un administrator de sistem. Sau cel puțin cineva responsabil pentru rețeaua serverului de fișiere &. ei / ei, ar trebui să fie mult mai familiarizați cu specificul configurării dvs. Administratorii dvs. ar trebui cel puțin să vă poată spune la ce rată de transfer vă puteți aștepta în mod rezonabil.
Comentarii