Negatif menjalankan proses dengan prioritas waktu nyata?


9

Apakah ada kerugian dari proses yang berjalan dengan prioritas waktu nyata ( chrt -f 99)?

Hipotesis saya adalah bahwa ini dikombinasikan dengan afinitas akan memastikan bahwa setiap pra-emption proses saya minimal dan karenanya jitter (khususnya latensi jaringan) akan diminimalkan - ini tidak akan membantu dengan latensi keseluruhan, tetapi pada saat ini saya lebih khawatir dengan jitter.

(Kernel: 2.6.16 / 3.0)


2
Ini terlihat bermanfaat untuk Anda: Bagaimana mengurangi jitter untuk Java?
ire_and_curses

@ire_and_curses, saat ini proses berjalan pada inti yang terisolasi itu sendiri (setidaknya utas pemrosesan utama), namun interupsi tidak dijadwalkan pada inti yang sama (tidak dapat melakukan ini karena ada beberapa proses serupa mengandalkan antarmuka jaringan yang sama ), ini lebih dari upaya terakhir. Frekuensi APIC menarik, saya belum pernah melihat ini sebelumnya.
Nim

Jawaban:


4

Kelemahan paling langsung dari menjalankan proses realtime adalah bahwa proses tersebut dapat dengan mudah menghabiskan setiap proses lainnya pada sistem. Hasil dari sudut pandang Anda adalah bahwa komputer benar-benar tidak responsif terhadap keyboard, mouse, dan mungkin jaringan, selama proses waktu nyata menggunakan CPU. Ini bisa terjadi jika ada yang salah dan prosesnya menjadi infinite loop, atau bahkan sementara jika proses memulai perhitungan berjalan lama tanpa menunggu input secara berkala. (Jadi, misalnya, jangan jalankan SETI @ home dengan prioritas waktu nyata.)

Proses single-threaded tunggal pada multi-core CPU cenderung menyebabkan masalah ini karena ada core lain yang dapat digunakan proses prioritas rendah. Tetapi jika proses itu menciptakan proses anak, mereka akan mewarisi prioritas waktu nyata yang sama, sehingga hal-hal dapat di luar kendali jika Anda tidak hati-hati.

The sched_setscheduler(2)Halaman manusia memiliki nasihat yang baik:

Karena nonblocking infinite loop dalam proses yang dijadwalkan di bawah SCHED_FIFO atau SCHED_RR akan memblokir semua proses dengan prioritas yang lebih rendah selamanya, pengembang perangkat lunak harus selalu tetap tersedia di konsol, sebuah shell yang dijadwalkan dengan prioritas statis yang lebih tinggi daripada aplikasi yang diuji. Ini akan memungkinkan penghentian darurat dari aplikasi real-time teruji yang tidak memblokir atau menghentikan seperti yang diharapkan. Lihat juga deskripsi batas sumber daya RLIMIT_RTTIME di getrlimit (2).

Itu harus menjadi shell pada konsol - bukan di bawah Xterm, kecuali jika Anda ingin memberikan semua prioritas realtime X juga.


Ya - ini adalah masalah utama yang tampaknya saya temui. Pendek membaca kode kernel untuk menentukan semua proses yang perlu memiliki prioritas yang lebih tinggi, satu-satunya pilihan adalah kelaparan semua orang lain selain dari proses saya dan kemudian memindahkan apa pun yang memerlukan segala bentuk io ke core lain ... hmmm. ..
Nim
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.