Saya mengembangkan sebuah algoritma untuk masalah yang cukup sulit dalam matematika yang kemungkinan akan membutuhkan beberapa bulan untuk menyelesaikannya. Karena saya memiliki sumber daya yang terbatas saja, saya memulai ini pada laptop Ubuntu 12.04 (x86) saya. Sekarang saya ingin menginstal beberapa pembaruan dan benar-benar me-restart laptop (pesan "tolong reboot" hanya mengganggu).
Apakah ada cara untuk menyimpan seluruh proses termasuk memori yang dialokasikan untuk kelanjutan setelah reboot?
Berikut ini beberapa informasi tentang proses yang mungkin Anda butuhkan. Silakan meminta informasi lebih lanjut jika diperlukan.
- Saya menyebut proses di terminal dengan perintah "
./binary > ./somefile &
" atau "time ./binary> ./somefile &", saya tidak bisa mengingatnya. - Ini mencetak beberapa informasi debug ke std :: cerr (tidak terlalu sering).
- Saat ini menggunakan sekitar 600,0 kiB dan meskipun ini akan meningkat, itu tidak mungkin meningkat dengan cepat.
- proses berjalan dengan prioritas normal
- kernelnya 3.2.0-26-generic-pae, cpu adalah AMD, sistem operasinya adalah Ubuntu 12.04 x86.
- ini berjalan sejak 9 hari dan 14 jam (terlalu lama untuk membatalkannya ;-))
Jawaban:
Solusi terbaik / paling sederhana adalah mengubah program Anda untuk menyimpan status ke file menggunakan kembali file itu untuk memulihkan proses.
Berdasarkan halaman wikipedia tentang snapshot aplikasi ada beberapa alternatif:
CONFIG_CHECKPOINT_RESTORE
diaktifkan.Ini sudah terlambat tetapi pendekatan lain yang lebih praktis adalah memulai proses Anda dalam VM khusus dan hanya menunda dan mengembalikan seluruh mesin Virtual. Bergantung pada hypervisor Anda, Anda juga dapat memindahkan mesin di antara berbagai host.
Untuk masa depan pikirkan tentang di mana Anda menjalankan proses yang sudah berjalan lama, bagaimana cara melumpuhkan mereka dan bagaimana menangani masalah, misalnya disk penuh, proses terbunuh, dll.
sumber
Cara yang cukup "murah" untuk melakukan ini adalah dengan melakukan pemrosesan dalam VM (misalnya, dengan VirtualBox). Sebelum Anda mematikan, tunda VM dan simpan negara. Setelah boot, pulihkan VM & status.
Ini memang memiliki kelemahan yaitu harus membunuh dan memulai kembali pekerjaan. Tetapi jika itu benar-benar akan berjalan selama beberapa bulan maka perbedaan sembilan hari menjadi sepele (peningkatan 5% selama 6 bulan).
Sunting: Saya baru menyadari bahwa Ulrich telah menyebut ini dalam nomor 4 yang tidak bernomor dalam daftarnya.
Saya masih mendorong Anda untuk mempertimbangkan ini sebagai pilihan, terutama karena tidak ada alternatif yang tampak seperti solusi yang kuat. Masing-masing memiliki alasan mengapa itu tidak berhasil.
Saya kira hal terbaik yang harus dilakukan adalah mencoba salah satunya dan jika tidak berhasil restart pekerjaan di VM.
sumber
Mengintip alat CryoPID .
Dari beranda: "CryoPID memungkinkan Anda untuk menangkap keadaan proses yang sedang berjalan di Linux dan menyimpannya ke file. File ini kemudian dapat digunakan untuk melanjutkan proses nanti, baik setelah reboot atau bahkan di komputer lain."
sumber
Jika pada akhirnya Anda perlu me-restart program Anda, saya akan mendorong Anda untuk meluangkan waktu menambahkan beberapa fitur ke kode Anda yang mungkin menghemat waktu Anda di masa depan.
Jika proses ini akan berjalan untuk waktu yang lama, bisa menyimpan seluruh kondisi proses saat Anda me-restart mesin mungkin tidak akan sangat membantu jika proses Anda macet saat sedang berjalan.
Saya akan mendorong Anda untuk memiliki output program Anda ke file "pos pemeriksaan" data. Data ini harus memadai sehingga program Anda dapat melanjutkan dari keadaan pada saat file pos pemeriksaan disimpan. Anda tidak perlu menyimpan seluruh proses, hanya snapshot dari variabel yang relevan yang digunakan dalam perhitungan Anda, cukup untuk perhitungan Anda untuk melanjutkan di mana ia tinggalkan. Kode Anda juga perlu menyertakan beberapa cara membaca data dari file ini untuk mendapatkan status permulaannya.
Anda dapat mengatur kode Anda sehingga saat Anda mengirim sinyal, ia menyimpan salah satu file pos pemeriksaan ini, sehingga Anda dapat menyimpan "keadaan" perhitungan Anda kapan saja.
Selain itu, dapat melihat bagaimana data berubah saat kalkulasi berlangsung mungkin menarik dengan sendirinya!
sumber