ऑडियो के इंतज़ार के समय पर असर डालने वाले फ़ैक्टर

इस पेज पर, आउटपुट में लगने वाले इंतज़ार के लिए ज़िम्मेदार चीज़ों के बारे में बताया गया है. हालांकि, इनपुट में लगने वाले इंतज़ार के लिए भी यही बातें लागू होती हैं.

यह मानते हुए कि एनालॉग सर्किट का योगदान काफ़ी नहीं है, तो ऑडियो में लगने वाले विलंब में ये मुख्य वजहें होती हैं:

  • आवेदन सबमिट करना
  • पाइपलाइन में बफ़र की कुल संख्या
  • हर बफ़र का साइज़, फ़्रेम में
  • ऐप्लिकेशन प्रोसेसर के बाद, अतिरिक्त इंतज़ार का समय, जैसे कि डीएसपी से

योगदान देने वालों की ऊपर दी गई सूची भले ही सटीक हो, लेकिन यह गुमराह करने वाली भी है. इसकी वजह यह है कि बफ़र की संख्या और साइज़, इफ़ेक्ट के तौर पर कारण से ज़्यादा काम करते हैं. आम तौर पर, किसी बफ़र स्कीम को लागू करके उसकी जांच की जाती है. हालांकि, जांच के दौरान, ऑडियो के कम या ज़्यादा चलने की वजह से "क्लिक" या "पॉप" जैसी आवाज़ सुनाई देती है. इसके बाद, सिस्टम डिज़ाइनर, बफ़र साइज़ या बफ़र की संख्या बढ़ा देता है, ताकि इस कमी को पूरा किया जा सके. इससे, वीडियो के चलने में लगने वाले समय में कमी आती है. हालांकि, इससे रिस्पॉन्स में लगने वाले समय में भी बढ़ोतरी होती है. बफ़र साइज़ के बारे में ज़्यादा जानने के लिए, यह वीडियो देखें ऑडियो में लगा समय: बफ़र साइज़.

बेहतर तरीका यह है कि कम और ज़्यादा चलने की वजहों को समझा जाए और फिर उन्हें ठीक किया जाए. इससे, सुनाई देने वाले आर्टफ़ैक्ट हट जाते हैं. साथ ही, कम या कम बफ़र का इस्तेमाल किया जा सकता है. इससे, इंतज़ार का समय कम हो जाता है.

हमारे हिसाब से, वीडियो के कम या ज़्यादा चलने की सबसे सामान्य वजहें ये हैं:

  • Linux CFS (पूरी तरह से फ़ेयर शेड्यूलर)
  • SCHED_FIFO शेड्यूलिंग की सुविधा वाली, ज़्यादा प्राथमिकता वाली थ्रेड
  • प्राथमिकता में बदलाव
  • शेड्यूल करने में लगने वाला लंबा समय
  • लंबे समय तक चलने वाले इंटरप्ट हैंडलर
  • लंबे समय तक 'परेशान न करें' मोड को बंद करने का समय
  • पावर मैनेजमेंट
  • सिक्योरिटी कर्नेल

Linux CFS और SCHED_FIFO शेड्यूलिंग

Linux CFS को एक ही सीपीयू संसाधन को शेयर करने वाले, एक-दूसरे से प्रतिस्पर्धा करने वाले वर्कलोड के लिए डिज़ाइन किया गया है. इस फ़ेयरनेस को हर थ्रेड के लिए nice पैरामीटर से दिखाया जाता है. 'अच्छा' वैल्यू की सीमा -19 (सबसे खराब या सीपीयू का सबसे ज़्यादा समय) से लेकर 20 (सबसे अच्छा या सीपीयू का सबसे कम समय) तक होती है. आम तौर पर, एक ही नीस वैल्यू वाली सभी थ्रेड को लगभग बराबर सीपीयू समय मिलता है. साथ ही, संख्या के हिसाब से कम नीस वैल्यू वाली थ्रेड को ज़्यादा सीपीयू समय मिलता है. हालांकि, सीएफ़एस का इस्तेमाल सिर्फ़ लंबे समय तक निगरानी करने के लिए किया जाता है. कम समय के लिए निगरानी करने पर, सीएफ़एस सीपीयू संसाधन को अनचाहे तरीके से असाइन कर सकता है. उदाहरण के लिए, यह सीपीयू को संख्या के हिसाब से कम अच्छी क्वालिटी वाली थ्रेड से हटाकर, संख्या के हिसाब से अच्छी क्वालिटी वाली थ्रेड पर ले जा सकता है. ऑडियो के मामले में, इससे वीडियो के चलने का समय कम या ज़्यादा हो सकता है.

इसका सबसे आसान समाधान यह है कि बेहतर परफ़ॉर्मेंस वाले ऑडियो थ्रेड के लिए, सीएफ़एस का इस्तेमाल न करें. Android 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 को उन थ्रेड के लिए रिज़र्व करें जिनके पूरा होने की समयसीमा तय होती है. ये थ्रेड, ऑडियो थ्रेड की समयसीमा से कम समय में पूरे होते हैं. साथ ही, इनसे ऑडियो थ्रेड की शेड्यूलिंग में कोई रुकावट नहीं आती.

किराये की दर में लगातार बढ़ोतरी या गिरावट वाली शेड्यूलिंग

तय प्राथमिकताएं असाइन करने के सिद्धांत के बारे में ज़्यादा जानकारी के लिए, रेट-मोनोटोनिक शेड्यूलिंग (आरएमएस) वाला Wikipedia लेख पढ़ें. एक अहम बात यह है कि तय प्राथमिकताएं, समयसीमा के आधार पर तय की जानी चाहिए. साथ ही, कम समयसीमा वाली थ्रेड को ज़्यादा प्राथमिकताएं दी जानी चाहिए, न कि "ज़रूरत" के आधार पर. बिना समयसीमा वाली थ्रेड को, समयसीमा वाली थ्रेड के तौर पर मॉडल किया जा सकता है. इसके लिए, हर बार थ्रेड के चलने की ज़्यादा से ज़्यादा फ़्रीक्वेंसी और हर बार चलने पर ज़्यादा से ज़्यादा कैलकुलेशन का इस्तेमाल किया जाता है. अगर किसी नॉन-पीरियडिक थ्रेड को पीरियडिक थ्रेड के तौर पर मॉडल नहीं किया जा सकता (उदाहरण के लिए, यह हर बार अनलिमिटेड फ़्रीक्वेंसी या अनलिमिटेड कंप्यूटेशन के साथ चल सकता है), तो उसे कोई तय प्राथमिकता नहीं दी जानी चाहिए. ऐसा इसलिए, क्योंकि यह असल पीरियडिक थ्रेड की शेड्यूलिंग के साथ काम नहीं करेगा.

प्राथमिकता में बदलाव

प्रायॉरिटी इन्वर्ज़न रीयल-टाइम सिस्टम में गड़बड़ी का एक सामान्य मोड है. इसमें, ज़्यादा प्राथमिकता वाले टास्क को अनलिमिटेड समय के लिए ब्लॉक किया जाता है. ऐसा तब होता है, जब ज़्यादा प्राथमिकता वाले टास्क के लिए ज़रूरी संसाधन, कम प्राथमिकता वाले टास्क के पास हो. जैसे, म्यूटेक्स से सुरक्षित किया गया शेयर किया गया स्टेटस. इसे कम करने के तरीकों के बारे में जानने के लिए, "प्राथमिकता उलटने से बचना" लेख पढ़ें.

शेड्यूल करने में लगने वाला समय

शेड्यूलिंग में लगने वाला समय, वह समय होता है जो किसी थ्रेड के रन होने के लिए तैयार होने और कॉन्टेक्स्ट स्विच पूरा होने के बीच लगता है, ताकि थ्रेड असल में सीपीयू पर चल सके. लैटेंसी कम होने पर बेहतर होता है और दो मिलीसेकंड से ज़्यादा होने पर ऑडियो में समस्याएं आती हैं. शेड्यूल करने में ज़्यादा समय लगने की समस्या, मोड बदलने के दौरान सबसे ज़्यादा हो सकती है. जैसे, सीपीयू को चालू या बंद करना, सुरक्षा कर्नेल और सामान्य कर्नेल के बीच स्विच करना, फ़ुल पावर मोड से लो-पावर मोड पर स्विच करना या सीपीयू क्लॉक फ़्रीक्वेंसी और वोल्टेज में बदलाव करना.

रुक जाता है

कई डिज़ाइन में, सीपीयू 0 सभी बाहरी इंटरप्ट की सेवा करता है. इसलिए, लंबे समय तक चलने वाला इंटरप्ट हैंडलर, अन्य इंटरप्ट में देरी कर सकता है. खास तौर पर, ऑडियो डायरेक्ट मेमोरी ऐक्सेस (डीएमए) पूरा होने पर होने वाले इंटरप्ट में. जल्दी से काम पूरा करने और लंबे समय तक चलने वाले काम को किसी थ्रेड (सीएफ़एस थ्रेड या प्राथमिकता 1 वाली SCHED_FIFO थ्रेड) पर भेजने के लिए, इंटरप्ट हैंडलर डिज़ाइन करें.

इसी तरह, सीपीयू 0 पर लंबे समय तक इंटरप्ट बंद करने से, ऑडियो इंटरप्ट की सेवा में देरी होती है. आम तौर पर, इंटरप्ट बंद होने में ज़्यादा समय तब लगता है, जब कर्नेल के स्पिन लॉक के लिए इंतज़ार किया जा रहा हो. इन स्पिन लॉक की समीक्षा करके पक्का करें कि वे सीमित हों.

पावर, परफ़ॉर्मेंस, और थर्मल मैनेजमेंट

पावर मैनेजमेंट एक ऐसा शब्द है जिसमें परफ़ॉर्मेंस को ऑप्टिमाइज़ करने के साथ-साथ, बिजली की खपत को मॉनिटर करने और उसे कम करने की कोशिशें शामिल होती हैं. थर्मल मैनेजमेंट और कंप्यूटर कूलिंग एक जैसे हैं. हालांकि, इनका मकसद गर्मी को मेज़र और कंट्रोल करना है, ताकि ज़्यादा गर्मी से होने वाले नुकसान से बचा जा सके. Linux kernel में, सीपीयू गवर्नर, कम-लेवल की नीति के लिए ज़िम्मेदार होता है. वहीं, उपयोगकर्ता मोड, हाई-लेवल की नीति को कॉन्फ़िगर करता है. इन तकनीकों का इस्तेमाल किया जाता है:

  • डाइनैमिक वोल्टेज स्केलिंग
  • डाइनैमिक फ़्रीक्वेंसी स्केलिंग
  • डाइनैमिक कोर चालू करना
  • क्लस्टर स्विचिंग
  • पावर गेटिंग
  • hotplug (hotswap)
  • स्लीप मोड के अलग-अलग विकल्प (रोकें, बंद करें, निष्क्रिय करें, निलंबित करें वगैरह)
  • प्रोसेस माइग्रेशन
  • प्रोसेसर अफ़िनिटी

मैनेजमेंट के कुछ ऑपरेशन की वजह से, "काम रुक सकता है" या ऐसे समय आ सकते हैं जब ऐप्लिकेशन प्रोसेसर कोई काम न कर रहा हो. काम के दौरान होने वाली रुकावटों से ऑडियो पर असर पड़ सकता है. इसलिए, ऑडियो चालू होने के दौरान, काम के दौरान होने वाली रुकावटों को मैनेज करने के लिए, सबसे खराब स्थिति को ध्यान में रखकर डिज़ाइन किया जाना चाहिए. बेशक, जब थर्मल रनअवे होने वाला हो, तो ऑडियो से जुड़ी समस्याओं को ठीक करने से ज़्यादा, डिवाइस को हमेशा के लिए होने वाले नुकसान से बचाना ज़्यादा ज़रूरी है!

सिक्योरिटी कर्नेल

डिजिटल राइट मैनेजमेंट (डीआरएम) के लिए सिक्योरिटी कर्नेल, उसी ऐप्लिकेशन प्रोसेसर कोर पर चल सकता है जिसका इस्तेमाल मुख्य ऑपरेटिंग सिस्टम कर्नेल और ऐप्लिकेशन कोड के लिए किया जाता है. जब भी किसी कोर पर सुरक्षा कर्नेल ऑपरेशन चालू होता है, तो उस कोर पर सामान्य तौर पर होने वाले काम में रुकावट आती है. खास तौर पर, इसमें ऑडियो वर्क शामिल हो सकता है. सुरक्षा कर्नेल के अंदरूनी व्यवहार को, ऊपरी लेयर से समझना मुश्किल होता है. इसलिए, सुरक्षा कर्नेल की वजह से परफ़ॉर्मेंस में होने वाली कोई भी गड़बड़ी, खास तौर पर नुकसान पहुंचाने वाली होती है. उदाहरण के लिए, आम तौर पर सुरक्षा कर्नेल के ऑपरेशन, कॉन्टेक्स्ट स्विच के ट्रेस में नहीं दिखते. हम इसे "डार्क टाइम" कहते हैं. यह वह समय होता है जो बीत जाता है, लेकिन जिसे मेज़र नहीं किया जा सकता. सिक्योरिटी कर्नेल को इस तरह से डिज़ाइन किया जाना चाहिए कि ऑडियो चालू होने पर, काम पूरी तरह से बंद न हो.