Gerçek zamanlı olmayan bir çekirdekte (CentOS 6) gerçek zamanlı bir süreç yürütüyoruz ve bu muhtemelen değişmeyecek.
Bir seferde 1,5 saat boyunca sürekli olarak özel bir FPGA'dan yaklaşık 500 MB / s PCIe trafiği gerektiren bir akış video uygulamamız var. Uygulama oldukça iyi çalışıyor - çoğu zaman. Ancak, çekirdeğin bir seferde 500 milisaniyeye kadar PCIe veya bellek isteklerine hizmet vermeyi yanıtlamayı bıraktığı göründüğü durumlar oldu. Bu başka bir iş parçacığından gelen bursty dosya GÇ sırasında gerçekleşiyor gibi görünüyor. Ben ana uygulama çalışırken sadece kullanıcı alanından kukla dosya IO bir sürü yaparak bu sorunu çoğaltmak için imkansız buldum.
Bu sorunu yeniden üretebilmemiz için Linux çekirdeğinin küresel bir “donmasını” (özellikle, PCIe veya tüm DDR3 bellek erişimlerini veya bunun gibi bir şeyi durdurma) zorlamanın (simüle etmenin) bir yolu var mı?
Şu anda dahili FPGA belleğe 10 milisaniyeye kadar tamponlama uyguladık, ancak bu yeterli değil. FPGA DDR3'e arabelleğe alabilir ve daha sonra ana bilgisayara dökebiliriz, ancak bu yeni özelliği baskı altında test etmek için bir yönteme ihtiyacımız var.
Çekirdeğin donmasını veya kalıcı olarak kilitlenmesini istemiyoruz. Zaman aralığını ayarlama yeteneği istiyoruz.
/proc/sys/vm
Geçici olarak sihirli değerler yazma çizgisi boyunca bir şey arıyorum , bu da sistemi neredeyse tarar ve birkaç yüz milisaniyeden sonra geri döner, ancak kırmanın olası yollarının sayısına bakmak benim gibi bir acemi için değil ( https://www.kernel.org/doc/Documentation/sysctl/vm.txt ). Belki biraz numactl
sihir?