Multi-core dan kecepatan penyalinan

4

Yang ingin saya lakukan adalah menyalin 500 ribu file.

Saya ingin menyalin di dalam server dari satu tujuan ke yang lain. Ini mencakup sebagian besar email banyak file kecil.

Lebih dari 23 GB saja tetapi membutuhkan waktu sangat lama (lebih dari 30 menit dan belum selesai), perintah cp linux juga hanya menggunakan 1 CPU.

Jadi jika saya skrip untuk menggunakan beberapa cps, apakah itu membuatnya lebih cepat.

Sistem adalah 16 core, Ram 16 GB, Driver 15K (SATA 15000 RPM).

Apa pilihan lain?

Saya percaya tarring dan untaring akan memakan waktu lebih lama dan tidak akan menggunakan multi-core ..

Phyo Arkar Lwin
sumber
1
lihat jawaban saya untuk pertanyaan ini mengapa menyalin banyak file memerlukan banyak disk I / O: superuser.com/questions/344534/…
sawdust

Jawaban:

6

Kemacetan Anda adalah kecepatan hard-drive. Multi-core tidak dapat mempercepat ini.

Pubby
sumber
Perangkat keras . ketika diuji dengan hdpram ia mengembalikan 278MB / s apakah Anda yakin tentang ini? seharusnya hanya membutuhkan 100 detik untuk menyalin file 23GB. Jadi menggunakan mulitiple CP dalam progam multi-threading tidak akan meningkatkan ini juga?
Phyo Arkar Lwin
1
Tidak, tidak. Hambatannya hampir pasti adalah kecepatan baca / tulis media fisik itu sendiri kecuali jika Anda menggunakan perangkat tingkat perusahaan.
Shinrai
@ V3ss0n Saya tahu bahwa hard drive bukan akses acak, yang mencegahnya diakses secara paralel.
Pubby
2
@ Pubby8 - Umm, HDD adalah perangkat akses acak (di tingkat blok / sektor). Ini sering dibandingkan dengan pita (misalnya pita magnetik) yang merupakan perangkat blok sekuensial. Saya menduga Anda mencoba untuk menyatakan bahwa perangkat biasa hanya dapat melakukan satu operasi I / O pada suatu waktu. Ada hewan bernama dual-port disk drive yang dapat melakukan dua operasi sekaligus, tetapi ada masalah sistem file yang membuat ini agak rumit.
serbuk gergaji
Yang ingin saya pastikan adalah, ada program yang saya buat dengan python, yang mengekstraksi teks dari berbagai format file menggunakan berbagai jenis parser (doc, pdf, eml, dll) ke dalam basis data untuk pengindeksan dan pencarian selanjutnya. Pada awalnya skrip hanya proses tunggal, dan setelah membuatnya multi-proses menggunakan modul multiprocessing (Fork tingkat tinggi, sehingga sama seperti forking) itu meningkatkan kecepatan secara signifikan. Tapi itu hanya bekerja dengan baik hingga 4 proses, pada 6 proses IO Stall dan benar-benar memperlambat, dan bahkan membekukan seluruh proses kadang-kadang.
Phyo Arkar Lwin
3

Menyalin satu file besar lebih cepat daripada memindahkan banyak file kecil karena ada banyak latensi dengan pengaturan dan penghancuran setiap operasi - juga disk dan OS dapat melakukan banyak baca-depan dengan satu file besar. Jadi tarring terlebih dahulu akan membuatnya lebih cepat. Meskipun begitu Anda memperhitungkan waktu yang dibutuhkan untuk tar, itu mungkin tidak mempercepat terlalu banyak.

Perhatikan bahwa Anda hanya membaca dari satu disk, sehingga memparalelkan panggilan Anda ke disk sebenarnya dapat memperlambat segalanya, di mana ia mencoba untuk melayani beberapa file sekaligus.

Paul
sumber
1
Bukankah tarring mengharuskan membaca semua file, membuat tar, menghapus file asli, dan kemudian membuat salinannya? Sepertinya itu akan memakan waktu lebih lama.
Pubby
Ya pasti - saya setuju dengan jawaban Anda, saya hanya memberikan beberapa informasi tambahan. Mengingat bahwa salinan tersebut tampaknya sedang berlangsung pada saat OP menulis pertanyaan, itu tampaknya merupakan latihan pengumpulan informasi. Akan ada situasi di mana tarring pertama dapat memberikan kinerja keseluruhan yang lebih baik.
Paul
0

Meskipun pertanyaannya sudah cukup lama, saya pikir cara terbaik adalah dengan zip menggunakan multi-core seperti lbzip2 dan pbzip2. Transfer file yang dikompresi dan dekompres menggunakan multi-core. Anda dapat menemukan tentang perintah di Internet.

Dharma
sumber
Bisakah Anda jelaskan mengapa ini membutuhkan lebih sedikit sumber daya disk? (yang kemungkinan adalah hambatannya).
Hennes