Saya dapat ssh ke mesin jarak jauh yang memiliki 64 core. Katakanlah saya perlu menjalankan 640 skrip shell secara paralel pada mesin ini. Bagaimana saya melakukan ini?
Saya dapat melihat memisahkan 640 skrip menjadi 64 grup masing-masing dari 10 skrip. Bagaimana saya kemudian menjalankan masing-masing kelompok ini secara paralel , yaitu satu kelompok pada masing-masing salah satu inti yang tersedia.
Apakah naskah formulir
./script_A &
./script_B &
./script_C &
...
di mana script_A
berkorespondensi dengan kelompok pertama, script_B
dengan kelompok kedua dll, sudah cukup?
Skrip dalam satu grup yang berjalan pada satu inti boleh dijalankan secara berurutan, tapi saya ingin grup dijalankan secara paralel di semua core.
parallelism
Tom
sumber
sumber
Jawaban:
Ini terlihat seperti pekerjaan untuk gnu parallel:
Keuntungannya adalah bahwa Anda tidak harus mengelompokkan skrip Anda dengan core,
parallel
akan melakukannya untuk Anda.Tentu saja, jika Anda tidak ingin menjaga sesi SSH saat skrip berjalan, Anda harus menggunakan
nohup
atauscreen
sumber
parallel
paket. Terima kasih`bash -c
mungkin tidak dibutuhkan:parallel ::: ./script*
. Dengan 640 skrip, kemungkinan mereka sangat mirip (mis. Hanya argumen yang berbeda). Untuk itu pertimbangkan untuk menggunakan GNU Parallel secara langsung untuk mengatur argumen ini dan menggunakan satu skrip.Itu akan bekerja selama Anda tidak perlu memantau output dan Anda baik-baik saja membiarkan sesi ssh Anda terbuka selama skrip berjalan. Jika salah satu dari itu tidak benar, saya akan merekomendasikan menggunakan
screen
dengan banyak tab. Anda bisa melakukan sesuatu sepertisumber
nohup
mungkin akan bekerja, saya hanya lebih akrab denganscreen
dan memiliki lebih banyak fungsi yang mungkin bermanfaat bagi Anda.Untuk memulai dan mengelola sejumlah besar pekerjaan skrip, Anda akan memerlukan semacam perangkat lunak manajemen untuk mengontrol penggunaan sumber daya (CPU, memori, prioritas), melihat status pekerjaan (tunggu, tunda, jalankan, selesai).
Grid engine dibuat untuk itu, misalnya, Sun Grid Engine ( http://wiki.gridengine.info/wiki/index.php/Main_Page ) atau Open Grid Scheduler ( http://gridscheduler.sourceforge.net/ ). Anda perlu administrator untuk menginstal perangkat lunak yang tepat sebelum Anda dapat memulai. Administrator mungkin senang melakukannya, daripada melihat ratusan proses berjalan pada mesin, dan tidak memiliki kendali atas mereka.
Secara umum, admin menentukan berapa slot mesin yang dapat dibagi, dan Anda mengirimkan pekerjaan ke antrian dan menentukan berapa slot yang ingin dikonsumsi oleh mesin, mesin grid akan memantau keseluruhan penggunaan sistem, dan menjalankan pekerjaan sesuai dengan kebijakan antrian yang ditentukan oleh admin. mis. tidak lebih dari x pekerjaan dapat berjalan pada saat yang sama, dll. sisa pekerjaan akan berada dalam antrian dalam keadaan menunggu, dan dirilis setelah pekerjaan sebelumnya selesai.
sumber
Anda dapat mencoba shell yang didistribusikan. Unduh dari: http://sourceforge.net/projects/dsh/
sumber
Saya telah melakukan ini pada beberapa kesempatan dan biasanya hanya memutar skrip saya sendiri untuk melakukan pekerjaan dengan kontrol pekerjaan. Secara umum, jika Anda memiliki nama semua skrip yang ingin Anda jalankan dalam sebuah file, solusinya seperti:
Ini kekuatan kasar, tetapi efektif. Plus Anda tidak perlu perangkat lunak tambahan seperti paralel ditambahkan ke sistem Anda.
Masalah besar adalah bahwa perintah tunggu akan menunggu skrip paling lambat untuk selesai, yang dapat membuang waktu. Saya telah membuat skrip untuk menangani situasi ini, tetapi skrip ini menjadi lebih kompleks seperti yang Anda bayangkan. Jika semua skrip Anda berjalan dalam jumlah waktu yang sama, ini berfungsi dengan baik.
Masalah lain adalah Anda mungkin harus menyetel MAX_PROCS untuk menentukan kinerja terbaik.
Tentu saja, jumlah koneksi ssh bisa menjadi berat. Dalam hal ini, cukup pindahkan skrip ini ke host jarak jauh dan ubah baris "ssh ..." untuk menjalankan skrip secara langsung.
sumber