Jsem postgraduální student a skupina, ve které pracuji, udržuje cluster Linux. Každý uzel klastru má svůj vlastní místní disk, ale tyto místní disky jsou relativně malé a nejsou vybaveny automatickým zálohováním. Skupina tedy vlastní souborový server s mnoha TB úložného prostoru. Jsem relativní Linuxový nováček, takže si nejsem jistý, jaké jsou specifikace souborového serveru z hlediska rychlosti, síťových schopností atd. Ze zkušenosti vím, že místní disky jsou z hlediska I / O výrazně rychlejší než souborový server. . Asi tucet lidí používá souborový server.

Použití cp ke zkopírování souboru ~ 20 GB ze souborového serveru na jeden z místních disků trvá v průměru v reálném čase přibližně 11,5 minut (podle time). Vím, že tato cp operace není příliš efektivní, protože (1) time mi říká, že systémový čas pro takovou kopii je pouze ~ 45 sekund; a protože (2) při zkoumání top během kopírování % CPU je poměrně nízká (kontrolou, průměrně 0-10% ).

Kopírování stejného ~ 20 GB souboru z jedné složky na místním disku do jiné složky na stejném místním disku trvá cp méně času – přibližně 9 minut v reálném čase (~ 51 sekund v systémovém čase, podle time). Zdá se tedy, že souborový server je podle očekávání o něco pomalejší než místní disk, ale možná ne výrazně pomalejší. Překvapuje mě, že kopírování z lokálního na stejný lokální není rychlejší než 9 minut.

Musím zkopírovat ~ 200 velkých souborů – každý ~ 20 GB – ze souborového serveru na jeden z místních disků. Moje otázka tedy zní: Existuje rychlejší alternativa ke kopírování velkých souborů v systému cp? (Nebo jsou v cp nějaké příznaky, které bych mohl použít, které by zrychlilo kopírování?) I kdybych mohl z této doby kopírování nějak oholit minutu, nesmírně pomozte.

Jsem si jistý, že kupuji nové a rychlejší hardwarové disky, ale k těmto zdrojům nemám přístup. Také nejsem správce systému – jsem pouze (nováček) – – takže nemám přístup k podrobnějším informacím o zatížení, které je na discích. Vím, že i když asi tucet lidí denně používá souborový server, jsem jediný člověk, který používá tento konkrétní uzel / místní disk.

Komentáře

  • To činí kolem 29 MB / s, což je docela rychlé, pokud se mě zeptáte. ‚ Nemyslím si, že existuje ‚ žádný příkaz, který to urychlí, “ úzké místo “ je s největší pravděpodobností a) síť nebo b) souborový server.
  • tink je 100% správný. Nikdy jsem neviděl nic, co by to mohlo zlepšit, ‚. Jediná věc, kterou jsem ‚ udělal v minulosti, je komprimovat data před jejich odesláním, ale to znamená, že ‚ znovu přidáte čas s kroky komprese a dekomprese, ale někdy to ‚ stojí za to, pokud jsou data vhodným kandidátem ke kompresi!
  • Můžete také vyzkoušet dd a rsync k porovnání, který z nich funguje ve vašem prostředí rychleji
  • @Salton Díky. Ještě jsem nezkusil dd, ale zkusil jsem rsync. Skutečný čas byl přibližně 11,5 minut a systémový čas přibližně 1,5 minuty, podle time.
  • I ‚ m překvapen, nikdo nepoukázal na to, že kopie místního disku na místní disk by mohla být zefektivněna tím, že bude připojeno více disků. Kopírování z /dev/sda1 do /dev/sdb1 bude rychlejší než kopírování z jednoho místa na /dev/sda1 do jiného umístění na /dev/sda1 nebo do jiného oddílu na /dev/sda, protože pevný disk nevyhrál ‚ t musí dělat další hledání mezi čtením a zápisem (za předpokladu tradičních pevných disků s rotujícími disky a pohyblivými hlavami; SSD je samozřejmě jiný).

Odpovědět

% CPU by mělo být během kopírování nízké. CPU řekne diskovému řadiči, že „chytí data ze sektorů X – Y do vyrovnávací paměti v Z“. Pak to jde a dělá něco jiného (nebo spí, pokud nic jiného není). Hardware spustí přerušení, když jsou data v paměti. Poté jej CPU musí několikrát zkopírovat a řekne síťové kartě „přenášet pakety na paměťových místech A, B a C“. Pak se vrací k tomu, že dělá něco jiného.

Vytlačujete ~ 240 Mbps.Na gigabitové LAN byste měli být schopni dělat alespoň 800 Mbps, ale:

  1. To sdílí každý, kdo používá souborový server (a možná i spojení mezi přepínači atd.)
  2. To je omezeno rychlostí, kterou dokáže souborový server zvládnout zápis, přičemž mějte na paměti, že jeho šířku pásma I / O disku sdílí každý, kdo jej používá.
  3. Neuvedli jste, jak přistupujete k souborovému serveru (NFS, CIFS (Samba), AFS atd.). Možná budete muset vyladit připojení k síti, ale u všeho, co je nedávné, jsou výchozí hodnoty obvykle docela rozumné.

Chcete-li vyhledat úzké místo, iostat -kx 10 bude užitečným příkazem. „Ukáže vám využití na místních pevných discích. Pokud to můžete spustit na souborovém serveru, řekne vám, jak je souborový server zaneprázdněn.

Obecným řešením bude zrychlete toto úzké místo, na které samozřejmě nemáte rozpočet. Existuje však několik zvláštních případů, kdy můžete najít rychlejší přístup:

  • Pokud jsou soubory komprimovatelné, a máte rychlý procesor, provádění minimální komprese za chodu může být rychlejší. Něco jako lzop nebo možná gzip --fastest.
  • Pokud měníte jen pár bitů sem a tam a poté odesíláte soubor zpět, bude posílání delt mnohem rychlejší. Bohužel rsync zde opravdu nepomůže, protože k nalezení delty bude nutné přečíst soubor na obou stranách. Místo toho potřebujete něco, co sleduje deltu při změně souboru … Většina přístupů je zde specifická pro konkrétní aplikaci. Je ale možné, že byste něco mohli vybavit, např. Mapovačem zařízení (viz zcela nový cíl dm-era ) nebo btrfs.
  • Pokud kopírujete stejná data na více strojů, můžete je použít jako udpcast a odeslat je na všechny počítače najednou.

A, protože si všimnete, že nejste sysadmin, hádám, že to znamená, že máte sysadmina. Nebo alespoň někoho odpovědného za & síť souborového serveru. Pravděpodobně byste se ho měli zeptat / oni / oni, měli by být mnohem více obeznámeni se specifiky vašeho nastavení. Vaši administrátoři by měli být alespoň schopni vám říci, jakou přenosovou rychlost můžete rozumně očekávat.

Komentáře

  • +1 pro iostat -kx 10 🙂

odpověď

Může to být možná rychlejší alternativa a nebudete dva dny ucpávat síť: Vezměte jeden nebo dva velké disky USB (pokud máte USB 3) nebo FireWire, připojte je k na server a zkopírujte soubory na disk. Přeneste disk do místního počítače. Zkopírujte soubory do zařízení.

Komentáře

Odpovědět

Pokud máte přímý přístup SSH (nebo SFTP) (zeptejte se svého sysadmina), můžete použít scp s kompresí (-C):

scp -C you@server:/path/to/yourfile . 

To je samozřejmě užitečné pouze v případě, že je soubor komprimovatelný, a to bude vyžadovat více času CPU, protože bude používat šifrování (protože je to přes SSH) a komprimovat.

Komentáře

  • V tomto případě by bylo užitečné deaktivovat šifrování. Pamatujte, že se snažíme kopii zrychlit .
  • @lgeorget Mám podezření, že režie šifrování nebude ‚ t významná , vzhledem k tomu, jak pomalé jsou pevné disky. Zvažoval jsem přidání něčeho o -c none, ale to se zdá být nestandardní .
  • ‚ řešíme ~ 20G soubory, takže je docela neefektivní používat šifrování, pokud to není nutné.
  • @lgeorget Encryption může být udělal mnohem rychleji než propustnost, kterou ‚ získává, takže to ‚ nic nezpomalilo. Ale zdá se zbytečné projít SSH zde. Pokud potřebujete komprimaci, určitě existují i jiné nástroje?
  • @Thomas Výhodou SSH je, že pokud ‚ byste měli mít přístup ke vzdálenému serveru, pak ‚ téměř jistě běží SSH. Další možností by bylo komprimovat soubor lokálně, zkopírovat jej na server, poté ssh a dekomprimovat jej.

Odpověď

Vaše definice efektivního řešení je zpětná. Efektivnější implementace plýtvá méně času procesoru. Na lokální kopii dosahujete průměrné propustnosti asi 74 MB / s (čtení + zápis), což je zhruba stejně dobrá úroveň jako na jednom pevném disku.

Komentáře

  • Jejda.Když jsem řekl “ efektivní, “ jsem myslel “ rychle. “

Odpověď

cp implementace s největší pravděpodobností není překážkou. Zkuste sledovat využití IO pomocí iotop na serveru i uzlu clusteru. Tím získáte představu, kde můžete zlepšit výkon.

Dalším tipem je vyhnout se kopírování stejných dat ze stejného hostitele. Například pokud máte identický soubor 20G k distribuci ze souborového serveru přes síť do všech uzlů clusteru, bude to fungovat mnohem rychleji, než když budete kopírovat soubory způsobem peer-to-peer, spíše než mezi klienty typu každý server. Implementace je trochu komplikovanější, ale můžete se dokonce pokusit použít nějaký p2p z příkazové řádky, jako je hub pro přímé připojení.

Pokud je v rámci těchto souborů 20G některá část běžná a některé jsou specifické pro uzel clusteru, zvažte rozdělit na běžné a konkrétní části a poté distribuovat společnou část způsobem p2p.

Komentáře

  • Pokud ‚ Pokud používáte LAN, měli byste být schopni provádět multicast místo peer-to-peer. Což by mělo být rychlejší a menší zatížení sítě.

Odpověď

Povaha / obsah těchto souborů může něco změnit. Pochopil jsem, že je třeba zkopírovat 200 souborů, každý po 20 GB, z jednoho počítače do druhého. Je to tak?

Pokud jsou tyto soubory komprimovatelné nebo s podobnými / stejnými kousky, máte dva přístupy:

  • před kopírováním je zazipujte nebo vytvořte tunel mezi počítači se zapnutým zipem. Pokud je tedy síť úzkým hrdlem, bude to trochu faste r

  • pokud jsou soubory velmi podobné nebo pokud mezi nimi sdílíte některé části společného obsahu, zkuste použít rsync . „Strávím nějaký čas hledáním toho, co je mezi soubory běžné, a nebudeme to muset zkopírovat doslovně , protože to„ zrekonstruujeme podle toho, co je běžné “.

úprava

Budete tyto soubory muset mnohokrát kopírovat ?? (jako kopii -> použít tyto soubory -> změnit něco v souborech v počítači A -> zkopírovat soubory znovu do počítače B)

Pokud ano, rsync bude užitečný, protože se „pokusí zjistit, co je mezi verzemi stejné, a nekopíruje to, co se nemění.

A třetí metoda: pokud je výše uvedené správné (změny v souboru, pak všechny soubory zkopírujte znovu do druhého počítače), můžete zkusit binary diff pouze změna v druhém počítači, co bylo změněno v prvním počítači.

Odpověď

Vidím zde následující, šifrování není dobrý nápad, protože by to mohlo ZVÝŠIT množství přenesených dat.

Pokud kopírujete mezi dvěma systémy, pak je samozřejmě úzké místo t Spojení mezi servery.

Pokud kopírujete lokálně, podívejte se, jak tento proces probíhá, je to SINGLE threaded, tedy standardní linuxové nástroje používají:

- for all blocks in a file read a block write a block 

S touto operací NENÍ souběžnost.

Chcete-li věci urychlit, můžete použít něco podobného:

 buffer -i infile -o outfile -m size-of-shared-memory-default-1MByte 

Další informace najdete na stránce manuálu bufferu (1).

Příkaz bufferu nastavuje dva procesy pro souběžné spuštění procesu kopírování: jeden pro čtení a druhý pro zápis a ke komunikaci dat mezi těmito dvěma procesy používá vyrovnávací paměť sdílené paměti. Vyrovnávací paměť sdílené paměti je vaše klasická kruhová vyrovnávací paměť, která zabraňuje přepsání nenapsaných dat a zápisu již zapsaných dat. Tento program jsem použil k odříznutí přibližně 10–20% času kopírování při přenosu z disku na pásku.

Komentáře

  • Ve skutečnosti existuje souběžnost v “ čtení bloku / zápis bloku “ protože “ zápis bloku “ ve skutečnosti to vloží do vyrovnávací paměti jádra ‚ a jádro zvládne zápis skutečného bloku na pozadí (alespoň, dokud začít docházet RAM). Nebo pokud z nějakého důvodu používáte O_DSYNC / O_SYNC.

Odpověď

Proč nezkusit algoritmus šíření P2P , pokud potřebujete aktualizovat celý svůj klastr současně?

https://github.com/lg/murder je jaké twitter používá

Můžete také vyzkoušet BTSync .

Odpovědět

Pokud často kopírujete stejné sady souborů z místního počítače na server s malými změnami sem a tam. Přenos můžete urychlit pomocí rsync nebo DVCS (např. Hg nebo git).

git nebo hg mohou sledovat a detekovat delty a přenášet pouze tyto delty. V případě použití git, protože obě strany mají plnou historii úložiště, je zjištění delty velmi levné.

rsync používá k detekci delt formu algoritmu průběžného kontrolního součtu bez předchozí znalosti toho, co je na druhé straně. Výpočet delt rsnc sice vyžaduje více práce, ale nemusí ukládat celý historie souborů.

Odpovědět

Možná budete chtít zkusit zabalit všechny soubory do jednoho archivu (nemusí být komprimován). Podle mých zkušeností je kopírování jednoho archivu rychlejší než kopírování velkého počtu jednotlivých souborů.

Komentáře

  • Dobré obecné pozorování, ale jak říká otázka „~ 200 velkých souborů – každý ~ 20 GB“, nevěřím, ‚ že to lze považovat za skutečnou odpověď na tento problém.
  • @manatwork ah .. nečetl jsem ‚ jasně. Myslel jsem, že má 200 souborů o celkové velikosti 20 GB

Odpověď

Zkuste bbcp . Testování v našem prostředí odhalilo, že cp má něco o f zabudovaný regulátor. Jen buďte opatrní, protože když sundáte guvernéra, můžete svůj server přesměrovat a způsobit výpadek. V našem případě jsme kvůli kopírování přepínali server do režimu offline, takže rychlejší bylo lepší. Tím se zlepšila doba přenosu o několik hodin.

Odpověď

Ujistěte se, že cíl soubory před kopírováním neexistují.

Někdy je překvapivé, kolik času stráví i jen kopírování na stejného hostitele (není zapojena žádná síť).

Viz moji odpověď na další otázku CP zde . Stručně řečeno, přepsání existujícího souboru je mnohem pomalejší než jeho zkrácení nebo první odpojení, a poté kopírování. Ten je u souboru 1,2 GB 8krát rychlejší.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *