हम एक गैर-वास्तविक समय कर्नेल (CentOS 6) पर एक वास्तविक समय की प्रक्रिया चला रहे हैं, और यह शायद बदलने वाला नहीं है।
हमारे पास एक स्ट्रीमिंग वीडियो एप्लिकेशन है जो एक समय में 1.5 घंटे के लिए लगातार कस्टम FPGA से PCIe ट्रैफिक के लगभग 500 एमबी / एस की आवश्यकता होती है। आवेदन बहुत अच्छी तरह से काम करता है - ज्यादातर समय। हालाँकि, हमारे पास ऐसी परिस्थितियाँ हैं जहाँ ऐसा प्रतीत होता है कि कर्नेल एक समय में 500 मिलीसेकंड तक की PCIe या मेमोरी रिक्वेस्ट का जवाब देना बंद कर देता है। ऐसा प्रतीत होता है कि किसी अन्य थ्रेड से बर्फ़ीली फ़ाइल IO के दौरान होती है। मैंने पाया है कि मुख्य एप्लिकेशन के चलने के दौरान उपयोगकर्ता स्थान से बहुत सारी डमी फ़ाइल IO द्वारा इस समस्या को दोहराने की कोशिश करना असंभव है।
क्या लिनक्स कर्नेल (विशेष रूप से, PCIe या सभी DDR3 मेमोरी एक्सेस या ऐसा कुछ रोकना) को वैश्विक "फ्रीज़" करने के लिए बाध्य करने (अनुकरण) करने का कोई तरीका है ताकि हम इस समस्या को पुन: उत्पन्न कर सकें?
हमारे पास अभी तक आंतरिक FPGA मेमोरी में लागू 10 मिलीसेकंड तक बफरिंग है, लेकिन यह पर्याप्त नहीं है। हम FPGA DDR3 को बफर कर सकते हैं और फिर मेजबान को डंप कर सकते हैं, लेकिन हमें ड्यूरेस के तहत इस नई सुविधा का परीक्षण करने के लिए एक विधि की आवश्यकता है।
हम कर्नेल को स्थिर या स्थायी रूप से लॉक नहीं करना चाहते हैं। हम समय अंतराल निर्धारित करने की क्षमता चाहते हैं।
मैं /proc/sys/vm
अस्थायी रूप से जादुई मूल्यों को लिखने की तर्ज पर कुछ खोज रहा हूं , जो सिस्टम को लगभग क्रॉल बनाता है, और फिर कुछ सौ मिलीसेकंड के बाद वापस लौटता है, लेकिन इसे तोड़ने के संभावित तरीकों की संख्या को देखना मेरे जैसे नौसिखियों के लिए नहीं है। https://www.kernel.org/doc/Documentation/sysctl/vm.txt )। शायद कुछ numactl
जादू?