नेटवर्क स्विच को किसने मारा? 'Hubris bug' की कहानी
(cliffle.com)Hubris bug की कहानी: नेटवर्क स्विच को किसने मारा?
-
Hubris क्या है?
- Hubris गहराई से embedded systems के लिए एक operating system है, जिसे ऐसे computers के लिए डिज़ाइन किया गया है जिन्हें आम तौर पर computer के रूप में नहीं पहचाना जाता, जैसे कि keyboard के अंदर का computer.
- इसे Oxide Rack में बड़े processors को शुरू करने के लिए ज़रूरी सभी काम संभालने हेतु विकसित किया गया था.
- Hubris काफ़ी अनोखा है, और इस कहानी से जुड़े हिस्सों को नीचे समझाया गया है.
-
अपराध स्थल
- Oxide के network switch firmware पर काम करने वाले सहयोगी Arjen Roodselaar power sequencing और clock configuration में बदलावों का परीक्षण कर रहे थे.
- एक छोटे बदलाव के बाद अचानक switch चालू होना बंद हो गया.
- firmware का कुछ हिस्सा जवाब दे रहा था, लेकिन power supply sequence संभालने वाला महत्वपूर्ण हिस्सा रुका हुआ था.
-
सीमित RAM से ज़्यादा हासिल करना
- Hubris चलाने वाले सस्ते microcontrollers में RAM और flash बहुत सीमित होती है.
- Hubris कई अलग-अलग compile किए गए programs से बना है, जिन्हें tasks कहा जाता है, इसलिए इसकी resource requirements दूसरे operating systems की तुलना में थोड़ी अधिक हैं.
- सहयोगी Matt Keeter ने हाल ही में system को और स्मार्ट बनाया ताकि वह कई power-of-two regions का उपयोग करके tasks को जितना संभव हो उतना अच्छी तरह पैक करने की कोशिश करे.
-
धुआँ छोड़ती बंदूक
- Arjen ने Humility नाम के Hubris debugger का उपयोग करके fail हुए network switch की जाँच की.
humility tasksकमांड का उपयोग करके उन्होंने processor पर चल रहे tasks की सूची और उनकी status information निकाली.- उन्होंने पाया कि power sequencing संभालने वाला task memory fault के कारण 115 बार restart हो चुका था.
-
Hubris IPC में Rust borrow को tasks के बीच बढ़ाना
- Hubris tasks IPC के ज़रिए एक-दूसरे को messages भेज सकते हैं.
- ये messages function calls की तरह दिखते और काम करते हैं.
- जब कोई task memory को दूसरे task को borrow पर देता है, तो उसे ऐसी memory borrow पर देने की कोशिश नहीं करनी चाहिए जिसका वह वास्तव में मालिक नहीं है.
-
जब features हमला करते हैं
- दो features मिलकर bug बन सकते हैं.
- task packing build system में अवसरवादी तरीके से काम करती है.
- अगर task A का आकार थोड़ा बदल जाए, तो असंबंधित task B की MPU region boundary की स्थिति भी खिसक सकती है.
-
अंदर से फ़ोन आ रहा है!
- memory protection algorithm को बदलने की ज़रूरत थी.
- borrowed memory को MPU region के पार जाने की अनुमति देनी थी.
-
Hubris के साथ fail होना
- system fail होने पर कई बुरी चीज़ें नहीं हुईं.
- खराब हुए network switch को 3 घंटे में ठीक किया जा सका.
- fault isolation, fail-safe behavior, safe shared memory, kernel-debugger co-design, design और implementation की सादगी, और टीम का क़रीबी non-hierarchical integration—इन सबने मदद की.
GN⁺ की राय
- यह लेख Hubris नाम के operating system में आए एक bug को खोजने और हल करने की प्रक्रिया के ज़रिए दिखाता है कि जटिल systems में भी मज़बूत software design कितना महत्वपूर्ण है.
- bug को खोजने और ठीक करने की प्रक्रिया software engineering की जटिल समस्याओं को सुलझाने में teamwork और प्रभावी debugging tools के महत्व को रेखांकित करती है.
- यह दिखाता है कि Hubris जैसे systems का उपयोग करते समय system isolation और fault handling capabilities कितनी महत्वपूर्ण होती हैं. इससे system stability और maintainability में काफ़ी सुधार हो सकता है.
- यह लेख यह भी दिखाता है कि Rust जैसी safe programming language का उपयोग करके memory safety कैसे सुनिश्चित की जा सकती है और bugs को कैसे कम किया जा सकता है. Rust का उपयोग करने वाले systems में इस तरह के bugs कम ही होते हैं, और यह दिखाता है कि Rust की memory safety guarantees व्यवहार में कितनी प्रभावी हैं.
- समान capabilities वाले अन्य projects या products में seL4, FreeRTOS, Zephyr आदि शामिल हैं, जो अलग-अलग उद्देश्यों और विशेषताओं वाले embedded system operating systems हैं.
- Hubris जैसे systems अपनाते समय memory constraints, task management, और IPC mechanism के design जैसे कारकों पर विचार करना चाहिए. ऐसे systems चुनने के फ़ायदे मज़बूत system design और safe memory management में हैं, जबकि कमियाँ system complexity और learning curve हो सकती हैं.
1 टिप्पणियां
Hacker News की राय
Hubris kernel code review
जॉब विज्ञापन की प्रशंसा
Code review और सुझाव
TaskDesc::regionsdocumentation string में जोड़ना बेहतर होगा।Debugging प्रक्रिया का मूल्यांकन
Oxide टीम की संस्कृति में रुचि
संबंधित जानकारी का लिंक
Debugging के दौरान होने वाली समस्या से सहमति
Hardware handling पर सुझाव
Oxide के काम की प्रशंसा
ऑपरेटिंग सिस्टम के नाम पर प्रतिक्रिया