Kami menjalankan proses waktu-nyata pada kernel non-waktu-nyata (CentOS 6), dan ini mungkin tidak akan berubah.
Kami memiliki aplikasi video streaming yang membutuhkan sekitar 500 MB / s lalu lintas PCIe dari FPGA khusus secara terus menerus selama 1,5 jam setiap kalinya. Aplikasi berfungsi dengan baik - sebagian besar waktu. Namun, kami mengalami situasi di mana tampaknya kernel berhenti merespons untuk melayani permintaan PCIe atau memori hingga 500 milidetik sekaligus. Ini tampaknya terjadi selama file burst IO dari utas lainnya. Saya merasa tidak mungkin untuk mencoba mereplikasi masalah ini dengan hanya melakukan banyak file dummy IO dari ruang pengguna saat aplikasi utama sedang berjalan.
Apakah ada cara untuk memaksa (mensimulasikan) "pembekuan" global dari kernel Linux (khususnya, menghentikan PCIe atau semua akses memori DDR3 atau sesuatu seperti itu) sehingga kita dapat mereproduksi masalah ini?
Kami memiliki buffering hingga 10 milidetik diimplementasikan sekarang ke dalam memori FPGA internal, tetapi itu tidak cukup. Kita dapat buffer ke FPGA DDR3 dan kemudian membuang ke host, tetapi kita perlu metode untuk menguji fitur baru ini di bawah tekanan.
Kami tidak ingin kernel membeku atau mengunci secara permanen. Kami ingin kemampuan untuk mengatur interval waktu.
Saya mencari sesuatu di sepanjang baris penulisan nilai-nilai ajaib untuk /proc/sys/vm
sementara yang membuat sistem hampir merangkak, dan kemudian kembali kembali setelah beberapa ratus milidetik, tetapi melihat sejumlah cara yang mungkin untuk memecahkannya bukan untuk pemula seperti saya ( https://www.kernel.org/doc/Documentation/sysctl/vm.txt ). Mungkin numactl
sihir?
Jawaban:
Salah satu opsi untuk melakukan tes cepat dapat menggunakan kernel yang diaktifkan KGDB dan menghentikan kernel secara manual dan menguji, lihat tautan ini .
Pada catatan lain, hal-hal yang saya ingat yang dapat menyebabkan Anda berhenti:
cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_transition_latency
nilainya dalam ns (4000 di AMD FX saya (tm) -8120 Prosesor Delapan-Inti) seharusnya tidak menjadi masalah, tetapi periksacat /sys/module/pcie_aspm/parameters/policy
)/sys/bus/pci/devices/$DEVICE/power/control
sumber
kdb
alih-alihkgdb
melakukan hal yang sama? Saya tidak pernah menggunakan keduanya. Apakah ini seperti urutan perintah "Stop-A" pada workstation Sun tadi? Jika saya hanya melakukan SysRq-g cepat, lalu ketik "pergi", akankah saya memiliki probabilitas tinggi untuk tidak merusak sistem? (ref: kernel.org/pub/linux/kernel/people/jwessel/kdb/… )Bisakah kita memiliki detail lebih lanjut tentang bagaimana aplikasi Anda berkomunikasi dengan FPGA? Apakah itu aplikasi yang membaca buffer dari FPGA, atau FPGA yang mengirim interupsi ke kernel (seperti kartu jaringan)?
Saya berharap untuk membuka blok / char di / dev dan kemudian berkomunikasi dengannya. Ini berarti ia menggunakan driver untuk melakukan komunikasi antara aplikasi dan file / dev / XXX.
Saya ingin memiliki output
cat /proc/interrupts
:;lsmod
;ls -al /dev/yourmod
Inilah idenya:
Harap berikan semua informasi yang Anda temukan berguna.
sumber
Tidak yakin apakah itu membantu. Tetapi jika Anda dapat menulis modul kernel yang memanggil
suspend
fungsi modul kernel perangkat lain, itu mungkin dilakukan.Setiap perangkat PCI dapat ditangguhkan sesuai dengan file header http://www.cs.fsu.edu/~baker/devices/lxr/http/source/linux/include/linux/pci.h#L479
Sebagai contoh, inilah fungsi menangguhkan Intel e1000 NIC http://www.cs.fsu.edu/~baker/devices/lxr/http/source/linux/drivers/net/e1000e/netdev.c#L4643
Dari apa yang saya ingat, fungsi ini terutama digunakan ketika sistem beralih ke hibernasi, driver perangkat perlu menyimpan status yang sedang berjalan dan mematikannya sendiri.
sumber
Saya pikir Anda berpikir di jalur yang salah. Tujuan Anda jelas.
Caranya bukan menghentikan proses yang lain tetapi memberikan proses utama Anda mendekati prioritas penjadwalan waktu-nyata. Gunakan yang bagus untuk proses ruang pengguna penting Anda untuk itu.
Masalah yang lebih sulit adalah penanganan interupsi PCIe, yang berada di ruang kernel.
Karena perangkat keras terlibat, Anda harus mulai melihat lebih dekat pada jalur PCIe yang terlibat di mainboard Anda dan bagaimana hal itu mungkin terhubung ke soket CPU tertentu.
irqbalance biasanya bekerja dengan baik di sini, tetapi Anda mungkin mengonfigurasi bahaviour sesuai dengan kebutuhan Anda.
sumber