Bisakah pesan lewat digunakan untuk redundansi CPU dan konstruk load-balancing

8

Dalam bare metal atau sistem tertanam jenis RTOS minimal dengan beberapa prosesor, mungkinkah menjalankan program yang identik pada setiap prosesor yang menggunakan Message Passing Interface (MPI) untuk memberikan keseimbangan beban dan juga redundansi jika terjadi kegagalan prosesor? Seperti mesin negara yang mengubah tindakan apa yang dilakukan CPU lain berdasarkan pesan yang dikirimkan, misalnya meminta prosesor lain untuk mengambil alih beberapa bagian dari loop sistem untuk menyeimbangkan beban atau mengirim pesan hidup berkala dan mengingat apa yang bertanggung jawab masing-masing CPU sejauh Redundansi CPU.

Dalam diagram contoh ini, bagian sebenarnya dari perulangan sistem penuh yang "terbuka" dapat berupa sistem yang berbeda. Tidak mungkin ada kerja sama hanya kemampuan untuk membuka dan atau menutup bagian-bagian dari loop sistem penuh yang berjalan pada setiap CPU dalam jenis multiprosesor asimetris yang sangat primitif. "Proses migrasi" ke CPU lain akan dipicu oleh permintaan CPU lain untuk membuka bagian dari loop sistem setelah CPU yang meminta menutup bagiannya, atau kurangnya respons dari CPU lain ketika ditanya apakah masih hidup untuk beberapa waktu .

masukkan deskripsi gambar di sini

Telah diusulkan sebagai solusi untuk kegagalan prosesor potensial dan solusi untuk load balancing karena kita tidak dapat port OS tertanam untuk benar-benar melakukan multiprocessing simetris atau asimetris pada papan kustom, dan sepertinya itu secara teori mungkin, tetapi desain yang sangat buruk ide. Juga, saya belum dapat menemukan pola desain atau algoritma untuk menggunakan pesan yang lewat dengan cara ini.

Beberapa latar belakang penting untuk keputusan rekayasa perangkat lunak: Sebuah proyek CubeSat siswa (tidak dinilai atau untuk kelas), kami memiliki tim pengembangan perangkat lunak kecil dengan sebagian besar siswa junior dengan sedikit atau tanpa pengetahuan tentang desain sistem operasi. Karena berbagai alasan kita tidak dapat melakukan salah satu dari banyak solusi dunia nyata yang telah saya baca. Ini kedengarannya seperti itu mungkin terdengar seperti itu akan memperkenalkan terlalu banyak kompleksitas untuk tim untuk berurusan dengan, dan bahkan jika itu dapat dilakukan akan menyebabkan desain yang mengerikan yang akan menyebabkan beberapa masalah yang mengubah CubeSat menjadi batu yang mengorbit.

Saya bahkan tidak yakin kita dapat mengimplementasikan pesan yang lewat dengan cara yang cukup andal untuk spacefairing, saya bahkan belum dapat menemukan protokol komunikasi siap produksi yang dapat digunakan untuk mengirim pesan di bus dengan OS kecil atau telanjang. logam seperti yang kita butuhkan. Tetapi saya juga ingin tahu apakah solusi yang diusulkan untuk migrasi proses, redundansi CPU, dan load balancing ini bahkan layak untuk sistem yang kritis terhadap keselamatan. Sepertinya itu bisa mengarah ke keadaan di mana dua CPU menjalankan "Proses" yang sama atau bagian dari loop program jika salah satu bangun itu akan sulit dideteksi.

8bit.wappen
sumber
Beberapa pertanyaan: (1) bagaimana data dikirimkan? apakah ada jaringan atau data yang lewat bus antar-prosesor? Sepertinya tidak semua prosesor dapat berbagi akses ke bank memori yang sama secara bersamaan, tidak seperti prosesor untuk keperluan umum (desktop / server). (2) bagaimana menangani peralatan (sensor dan aktuator) yang terprogram untuk satu prosesor?
rwong
1
Data harus diteruskan menggunakan UART atau I2C, jika kami menggunakan memori bersama, kami mungkin juga melakukan SMP, tetapi hal-hal yang saya baca tentang penerapan itu (lebih disukai daripada SPI) seperti hambatan memori bahkan tidak tercakup dalam kursus sistem operasi sarjana kami apalagi mutex, semaphore, dll. implementasi. Tim teknik kelistrikan dan komputer telah meyakinkan saya bahwa setiap CPU akan terhubung ke setiap perangkat periferal, tetapi desain papan hampir tidak lengkap.
8bit.wappen
Saya tidak melihat bagaimana Anda dapat mencapai redundansi CPU dan load balance pada saat yang sama. Jika Anda mendistribusikan tugas yang berbeda untuk setiap CPU, maka tidak ada redundansi (jika CPU gagal, ia mungkin berhenti merespons, tetapi kemungkinan besar itu hanya akan melakukan sesuatu secara acak, biasanya karena efek radiasi, tetapi tetap merespons). Untuk redundansi, semua tugas harus dijalankan di semua prosesor. Jika load balancing lebih penting daripada redundansi, maka skema Anda tampaknya cukup sederhana, saya hanya akan mengimplementasikan setiap bagian sebagai tugas yang berbeda daripada cabang-cabang tugas tunggal (dengan asumsi RTOS Anda multitasking).
André Sassi
@ AndréSassi: AFAICT Anda mulai dengan redundansi dan beberapa load-balancing, dan, jika ada yang salah dengan beberapa CPU, Anda memigrasi tugas ke CPU lain, menghasilkan beban per-CPU yang lebih tinggi, dan mungkin bahkan mengurangi throughput untuk yang lebih rendah- tugas prioritas, atau tingkat kesalahan non-kritis yang lebih tinggi. Ini masih lebih baik daripada gagal sepenuhnya.
9000
Apa keuntungan dari sistem ini daripada menjalankan semua tugas pada semua prosesor?
user253751

Jawaban:

1

Pertanyaan-pertanyaan luar biasa karena saya benar-benar mengerjakannya di pertengahan tahun 90-an. Pesawat luar angkasa itu mahal dan sulit untuk memodifikasi perangkat lunak sekali di orbit. Saya memikirkan varian masalah ini ketika memikirkan bagaimana sumber daya perangkat lunak pesawat ruang angkasa dapat mengalokasikan kembali berdasarkan perubahan persyaratan misi. Sejauh yang kami bawa di lab (VxWorks):

  1. Perkirakan beban tugas untuk yang esensial untuk setiap prosesor sesuai persyaratan.
  2. Perkirakan beban Tugas untuk tugas sub tugas yang ditetapkan. Ini adalah konfigurasi baru yang diinginkan berdasarkan pada penyediaan tugas yang diperlukan per prosesor yang diperlukan untuk memenuhi persyaratan misi yang paling penting. Pada dasarnya apa yang Anda tidak bisa hidup tanpanya.
  3. Untuk setiap prosesor, kami sekarang memiliki model penugasan misi utama dan varian-varian daripadanya berdasarkan kondisi pemrosesan lain, kami mungkin harus beralih ke secepat mungkin. Ini adalah adaptasi terencana yang sederhana. Tidak ada yang istimewa, hanya set model tugas yang berbeda yang masuk dan keluar untuk beberapa rangsangan. Penyeimbangan beban dalam eksperimen saya pada dasarnya sudah direncanakan sebelumnya. Kami menggunakan penjadwalan RMA dasar untuk operasi ini. Pada dasarnya ini adalah saklar konteks besar pada tingkat model penugasan sistem yang luas.

Di Stasiun Program pembaruan di bawah RTOS. Pada dasarnya pasang satu set tugas baru, hubungkan jaringan antrian dan mulai aliran data lagi.
Jadi, dalam implementasi sederhana ini kami menangguhkan atau menghapus beberapa tugas dan mengizinkan orang lain untuk menjalankan. Kami mengambil sedikit lebih jauh dalam apa yang kami sebut teknik "Transplantasi Jantung". Ini untuk pembaruan perangkat lunak stasiun. Kami dapat memutuskan dan merutekan ulang jaringan antrian dalam model penugasan. Pada dasarnya lepaskan tugas dan hilangkan jika diinginkan, matikan antrian dan hubungkan kembali tugas baru (jantung) dan arteri (jaringan antrian). Kami melakukan sedikit waktu bermain ini pada 1995/96. Saya tidak hanya ingin kemampuan untuk menambahkan fungsionalitas tetapi untuk menghapus yang tidak diperlukan karena memori adalah sumber daya yang sangat terbatas. Tidak tahu banyak tentang MPI, saya tidak pernah menggunakannya. Apakah itu deterministik? Menggunakan teori informasi, Anda tidak perlu banyak mengirim sinyal agar tetap hidup. Gunakan bit minimal. Info paling umum seperti "tetap hidup" hanya membutuhkan satu bit, benar atau salah. Peristiwa yang terjadi dengan probabilitas jauh lebih rendah membutuhkan lebih banyak bit untuk diwakili. Hilangkan semua overhead perangkat lunak yang Anda bisa. Ikuti prinsip KISS (Keep It Simple..Stupid!).

Sekarang semacam proteksi radiasi. Proyek siswa berarti kemungkinan terbang CMOS. Paling tidak saya akan menempatkan pemeriksaan CRC pada memori dan menjalankan pengawas untuk menangkap kesalahan seperti radiasi hangup melakukan hal-hal aneh pada elektronik. Efek gangguan peristiwa tunggal dapat dikurangi dengan menggunakan CRC pada memori. Penguncian membutuhkan reset daya.

Saya menyarankan mencoba sesuatu seperti FreeRTOS dan melihat fitur apa yang dapat Anda tekuk. Ruang adalah lingkungan yang sangat menantang. Selamat bersenang-senang.

Vimyixen
sumber