यह पृष्ठ आउटपुट विलंबता में योगदानकर्ताओं पर केंद्रित है, लेकिन एक समान चर्चा इनपुट विलंबता पर भी लागू होती है।
यह मानते हुए कि एनालॉग सर्किटरी महत्वपूर्ण योगदान नहीं देती है, तो ऑडियो विलंबता में प्रमुख सतह-स्तरीय योगदानकर्ता निम्नलिखित हैं:
- आवेदन
- पाइपलाइन में बफ़र्स की कुल संख्या
- प्रत्येक बफ़र का आकार, फ़्रेम में
- ऐप प्रोसेसर के बाद अतिरिक्त विलंबता, जैसे डीएसपी से
योगदानकर्ताओं की उपरोक्त सूची जितनी सटीक हो सकती है, उतनी ही भ्रामक भी है। कारण यह है कि बफ़र गिनती और बफ़र आकार किसी कारण से अधिक प्रभाव वाले होते हैं। आम तौर पर ऐसा होता है कि किसी दी गई बफ़र योजना को कार्यान्वित और परीक्षण किया जाता है, लेकिन परीक्षण के दौरान, एक ऑडियो अंडररन या ओवररन को "क्लिक" या "पॉप" के रूप में सुना जाता है। क्षतिपूर्ति करने के लिए, सिस्टम डिज़ाइनर बफ़र आकार या बफ़र गिनती बढ़ाता है। इससे अंडररन या ओवररन को खत्म करने का वांछित परिणाम मिलता है, लेकिन इसमें विलंबता बढ़ने का अवांछित दुष्प्रभाव भी होता है। बफ़र आकार के बारे में अधिक जानकारी के लिए, वीडियो ऑडियो विलंबता: बफ़र आकार देखें।
एक बेहतर तरीका अंडररन और ओवररन के कारणों को समझना और फिर उन्हें ठीक करना है। यह श्रव्य कलाकृतियों को समाप्त कर देता है और छोटे या कम बफ़र्स की भी अनुमति दे सकता है और इस प्रकार विलंबता को कम कर सकता है।
हमारे अनुभव में, अंडररन और ओवररन के सबसे सामान्य कारणों में शामिल हैं:
- लिनक्स सीएफएस (पूरी तरह से निष्पक्ष शेड्यूलर)
- SCHED_FIFO शेड्यूलिंग के साथ उच्च प्राथमिकता वाले थ्रेड
- प्राथमिकता उलटा
- लंबी शेड्यूलिंग विलंबता
- लंबे समय तक चलने वाले व्यवधान संचालक
- लंबा व्यवधान अक्षम समय
- ऊर्जा प्रबंधन
- सुरक्षा गुठली
लिनक्स सीएफएस और SCHED_FIFO शेड्यूलिंग
लिनक्स सीएफएस को एक सामान्य सीपीयू संसाधन साझा करने वाले प्रतिस्पर्धी कार्यभार के लिए निष्पक्ष होने के लिए डिज़ाइन किया गया है। यह निष्पक्षता प्रति-थ्रेड अच्छे पैरामीटर द्वारा दर्शायी जाती है। अच्छा मान -19 (सबसे कम अच्छा, या सबसे अधिक सीपीयू समय आवंटित) से लेकर 20 (सबसे अच्छा, या सबसे कम सीपीयू समय आवंटित) तक होता है। सामान्य तौर पर, किसी दिए गए अच्छे मान वाले सभी थ्रेड को लगभग समान CPU समय प्राप्त होता है और संख्यात्मक रूप से कम अच्छे मान वाले थ्रेड को अधिक CPU समय प्राप्त होने की उम्मीद करनी चाहिए। हालाँकि, सीएफएस केवल अवलोकन की अपेक्षाकृत लंबी अवधि में ही "निष्पक्ष" है। अल्पकालिक अवलोकन विंडो पर, सीएफएस अप्रत्याशित तरीकों से सीपीयू संसाधन आवंटित कर सकता है। उदाहरण के लिए, यह सीपीयू को संख्यात्मक रूप से कम सुंदरता वाले थ्रेड से संख्यात्मक रूप से उच्च सुंदरता वाले थ्रेड पर ले जा सकता है। ऑडियो के मामले में, इसका परिणाम अंडररन या ओवररन हो सकता है।
स्पष्ट समाधान उच्च-प्रदर्शन ऑडियो थ्रेड के लिए सीएफएस से बचना है। एंड्रॉइड 4.1 से शुरू होकर, ऐसे थ्रेड अब सीएफएस द्वारा कार्यान्वित SCHED_NORMAL
(जिसे SCHED_OTHER
भी कहा जाता है) शेड्यूलिंग नीति के बजाय SCHED_FIFO
शेड्यूलिंग नीति का उपयोग करते हैं।
SCHED_FIFO प्राथमिकताएँ
हालाँकि उच्च-प्रदर्शन ऑडियो थ्रेड अब SCHED_FIFO
उपयोग करते हैं, फिर भी वे अन्य उच्च प्राथमिकता SCHED_FIFO
थ्रेड के लिए अतिसंवेदनशील होते हैं। ये आम तौर पर कर्नेल वर्कर थ्रेड होते हैं, लेकिन SCHED_FIFO
नीति के साथ कुछ गैर-ऑडियो उपयोगकर्ता थ्रेड भी हो सकते हैं। उपलब्ध SCHED_FIFO
प्राथमिकताएं 1 से 99 तक होती हैं। ऑडियो थ्रेड प्राथमिकता 2 या 3 पर चलते हैं। इससे कम प्राथमिकता वाले थ्रेड के लिए प्राथमिकता 1 उपलब्ध रहती है, और उच्च प्राथमिकता वाले थ्रेड के लिए प्राथमिकता 4 से 99 तक उपलब्ध रहती है। हम अनुशंसा करते हैं कि जब भी संभव हो आप प्राथमिकता 1 का उपयोग करें, और उन थ्रेड्स के लिए प्राथमिकताएँ 4 से 99 आरक्षित रखें जो एक निश्चित समय के भीतर पूरा होने की गारंटी देते हैं, ऑडियो थ्रेड्स की अवधि से कम अवधि के साथ निष्पादित होते हैं, और शेड्यूलिंग में हस्तक्षेप नहीं करने के लिए जाने जाते हैं। ऑडियो थ्रेड्स का.
दर-मोनोटोनिक शेड्यूलिंग
निश्चित प्राथमिकताओं के असाइनमेंट के सिद्धांत पर अधिक जानकारी के लिए, विकिपीडिया लेख रेट-मोनोटोनिक शेड्यूलिंग (आरएमएस) देखें। एक मुख्य बिंदु यह है कि निश्चित प्राथमिकताओं को सख्ती से अवधि के आधार पर आवंटित किया जाना चाहिए, छोटी अवधि के थ्रेड्स को उच्च प्राथमिकताएं दी जानी चाहिए, न कि कथित "महत्व" के आधार पर। निष्पादन की अधिकतम आवृत्ति और प्रति निष्पादन अधिकतम गणना का उपयोग करके, गैर-आवधिक थ्रेड को आवधिक थ्रेड के रूप में मॉडल किया जा सकता है। यदि एक गैर-आवधिक थ्रेड को आवधिक थ्रेड के रूप में मॉडल नहीं किया जा सकता है (उदाहरण के लिए यह प्रति निष्पादन असीमित आवृत्ति या असीमित गणना के साथ निष्पादित हो सकता है), तो इसे एक निश्चित प्राथमिकता नहीं दी जानी चाहिए क्योंकि यह वास्तविक आवधिक थ्रेड के शेड्यूलिंग के साथ असंगत होगा .
प्राथमिकता उलटा
प्राथमिकता व्युत्क्रमण वास्तविक समय प्रणालियों का एक क्लासिक विफलता मोड है, जहां एक उच्च-प्राथमिकता वाले कार्य को असीमित समय के लिए अवरुद्ध कर दिया जाता है, कम-प्राथमिकता वाले कार्य के लिए एक संसाधन जैसे कि म्यूटेक्स (साझा राज्य द्वारा संरक्षित) को जारी करने की प्रतीक्षा की जाती है। इसे कम करने की तकनीकों के लिए लेख " प्राथमिकता व्युत्क्रम से बचना " देखें।
शेड्यूलिंग विलंबता
शेड्यूलिंग विलंबता वह समय है जब कोई थ्रेड चलने के लिए तैयार हो जाता है और जब परिणामी संदर्भ स्विच पूरा हो जाता है ताकि थ्रेड वास्तव में सीपीयू पर चले। विलंबता जितनी कम होगी उतना बेहतर होगा, और दो मिलीसेकंड से अधिक की कोई भी चीज़ ऑडियो के लिए समस्याएँ पैदा करती है। मोड ट्रांज़िशन के दौरान लंबी शेड्यूलिंग विलंबता होने की सबसे अधिक संभावना होती है, जैसे सीपीयू को ऊपर लाना या बंद करना, सुरक्षा कर्नेल और सामान्य कर्नेल के बीच स्विच करना, पूर्ण पावर से कम-पावर मोड में स्विच करना, या सीपीयू घड़ी आवृत्ति और वोल्टेज को समायोजित करना .
बीच में आता है
कई डिज़ाइनों में, CPU 0 सभी बाहरी व्यवधानों को सेवा प्रदान करता है। इसलिए एक लंबे समय तक चलने वाला इंटरप्ट हैंडलर अन्य इंटरप्ट में देरी कर सकता है, विशेष रूप से ऑडियो डायरेक्ट मेमोरी एक्सेस (डीएमए) पूरा करने में इंटरप्ट। शीघ्रता से समाप्त करने और लंबे कार्य को थ्रेड (अधिमानतः एक CFS थ्रेड या प्राथमिकता 1 का SCHED_FIFO
थ्रेड) के लिए स्थगित करने के लिए इंटरप्ट हैंडलर डिज़ाइन करें।
समान रूप से, सीपीयू 0 पर लंबी अवधि के लिए इंटरप्ट को अक्षम करने का परिणाम ऑडियो इंटरप्ट की सर्विसिंग में देरी के समान होता है। कर्नेल स्पिन लॉक की प्रतीक्षा करते समय आमतौर पर लंबी रुकावट अक्षमता होती है। यह सुनिश्चित करने के लिए कि वे बंधे हुए हैं, इन स्पिन तालों की समीक्षा करें।
शक्ति, प्रदर्शन और थर्मल प्रबंधन
पावर प्रबंधन एक व्यापक शब्द है जिसमें प्रदर्शन को अनुकूलित करते हुए बिजली की खपत की निगरानी और कम करने के प्रयास शामिल हैं। थर्मल प्रबंधन और कंप्यूटर कूलिंग समान हैं लेकिन अधिक गर्मी के कारण होने वाले नुकसान से बचने के लिए गर्मी को मापने और नियंत्रित करने का प्रयास करते हैं। लिनक्स कर्नेल में, सीपीयू गवर्नर निम्न-स्तरीय नीति के लिए जिम्मेदार है, जबकि उपयोगकर्ता मोड उच्च-स्तरीय नीति को कॉन्फ़िगर करता है। उपयोग की जाने वाली तकनीकों में शामिल हैं:
- गतिशील वोल्टेज स्केलिंग
- गतिशील आवृत्ति स्केलिंग
- गतिशील कोर सक्षम करना
- क्लस्टर स्विचिंग
- पावर गेटिंग
- हॉटप्लग (हॉटस्वैप)
- नींद के विभिन्न तरीके (रुकना, रुकना, निष्क्रिय करना, निलंबित करना, आदि)
- प्रक्रिया स्थानांतरण
- प्रोसेसर एफ़िनिटी
कुछ प्रबंधन कार्यों के परिणामस्वरूप "कार्य रुक सकता है" या ऐसे समय हो सकता है जब एप्लिकेशन प्रोसेसर द्वारा कोई उपयोगी कार्य नहीं किया जाता है। ये कार्य रुकावटें ऑडियो में हस्तक्षेप कर सकती हैं, इसलिए इस तरह के प्रबंधन को ऑडियो सक्रिय होने पर स्वीकार्य सबसे खराब स्थिति में काम रोकने के लिए डिज़ाइन किया जाना चाहिए। बेशक, जब थर्मल भगोड़ा आसन्न हो, तो स्थायी क्षति से बचना ऑडियो से अधिक महत्वपूर्ण है!
सुरक्षा गुठली
डिजिटल अधिकार प्रबंधन (डीआरएम) के लिए एक सुरक्षा कर्नेल उसी एप्लिकेशन प्रोसेसर कोर पर चल सकता है जो मुख्य ऑपरेटिंग सिस्टम कर्नेल और एप्लिकेशन कोड के लिए उपयोग किया जाता है। किसी भी समय जिसके दौरान एक सुरक्षा कर्नेल ऑपरेशन कोर पर सक्रिय होता है, प्रभावी रूप से उस सामान्य कार्य का ठहराव होता है जो सामान्य रूप से उस कोर पर चलता है। विशेष रूप से, इसमें ऑडियो कार्य शामिल हो सकता है। अपनी प्रकृति से, सुरक्षा कर्नेल का आंतरिक व्यवहार उच्च-स्तरीय परतों से अस्पष्ट होता है, और इस प्रकार सुरक्षा कर्नेल के कारण होने वाली कोई भी प्रदर्शन विसंगतियाँ विशेष रूप से हानिकारक होती हैं। उदाहरण के लिए, सुरक्षा कर्नेल ऑपरेशन आमतौर पर संदर्भ स्विच ट्रेस में दिखाई नहीं देते हैं। हम इसे "काला समय" कहते हैं - वह समय जो बीत चुका है फिर भी देखा नहीं जा सकता। ऑडियो सक्रिय होने पर सुरक्षा कर्नेल को स्वीकार्य सबसे खराब स्थिति में काम रोकने के लिए डिज़ाइन किया जाना चाहिए।