অডিও লেটেন্সিতে অবদানকারী

এই পৃষ্ঠাটি আউটপুট লেটেন্সিতে অবদানকারীদের উপর ফোকাস করে, কিন্তু একই ধরনের আলোচনা ইনপুট লেটেন্সির ক্ষেত্রে প্রযোজ্য।

অনুমান করা হচ্ছে অ্যানালগ সার্কিট্রি উল্লেখযোগ্যভাবে অবদান রাখে না, তাহলে অডিও লেটেন্সিতে প্রধান পৃষ্ঠ-স্তরের অবদানকারীরা হল:

  • আবেদন
  • পাইপলাইনে বাফারের মোট সংখ্যা
  • প্রতিটি বাফারের আকার, ফ্রেমে
  • অ্যাপ প্রসেসরের পরে অতিরিক্ত লেটেন্সি, যেমন ডিএসপি থেকে

অবদানকারীদের উপরোক্ত তালিকা যতটা সঠিক হতে পারে, এটি বিভ্রান্তিকরও। কারণ হল বাফার গণনা এবং বাফার আকার একটি কারণের চেয়ে বেশি প্রভাব ফেলে। সাধারণত যা ঘটে তা হল একটি প্রদত্ত বাফার স্কিম বাস্তবায়িত এবং পরীক্ষা করা হয়, কিন্তু পরীক্ষার সময়, একটি অডিও আন্ডাররান বা ওভাররান "ক্লিক" বা "পপ" হিসাবে শোনা যায়। ক্ষতিপূরণ দিতে, সিস্টেম ডিজাইনার তারপর বাফার আকার বা বাফার সংখ্যা বৃদ্ধি করে। এটি আন্ডাররান বা ওভাররানগুলিকে নির্মূল করার পছন্দসই ফলাফল দেয়, তবে এটির দেরী বৃদ্ধির অবাঞ্ছিত পার্শ্ব প্রতিক্রিয়াও রয়েছে। বাফার আকার সম্পর্কে আরও তথ্যের জন্য, ভিডিওটি দেখুন অডিও লেটেন্সি: বাফারের আকার

একটি ভাল পদ্ধতি হল আন্ডাররান এবং ওভাররানের কারণগুলি বোঝা এবং তারপরে সেগুলি সংশোধন করা। এটি শ্রবণযোগ্য আর্টিফ্যাক্টগুলিকে সরিয়ে দেয় এবং এমনকি ছোট বা কম বাফারগুলিকে অনুমতি দিতে পারে এবং এইভাবে বিলম্ব কমাতে পারে।

আমাদের অভিজ্ঞতায়, আন্ডাররান এবং ওভাররানের সবচেয়ে সাধারণ কারণগুলির মধ্যে রয়েছে:

  • লিনাক্স সিএফএস (সম্পূর্ণভাবে ন্যায্য সময়সূচী)
  • SCHED_FIFO সময়সূচী সহ উচ্চ-অগ্রাধিকার থ্রেড
  • অগ্রাধিকার বিপরীত
  • দীর্ঘ সময় নির্ধারণের বিলম্ব
  • দীর্ঘস্থায়ী বাধা হ্যান্ডলার
  • দীর্ঘ বিরতি নিষ্ক্রিয় সময়
  • শক্তি ব্যবস্থাপনা
  • নিরাপত্তা কার্নেল

Linux CFS এবং SCHED_FIFO সময়সূচী

Linux CFS একটি সাধারণ CPU রিসোর্স ভাগ করে নেওয়া প্রতিযোগিতামূলক কাজের চাপের জন্য ন্যায্যভাবে ডিজাইন করা হয়েছে। এই ন্যায্যতা একটি থ্রেড চমৎকার পরামিতি দ্বারা প্রতিনিধিত্ব করা হয়. চমৎকার মান -19 (সর্বনিম্ন সুন্দর, বা সর্বাধিক CPU সময় বরাদ্দ) থেকে 20 (সবচেয়ে সুন্দর, বা সর্বনিম্ন CPU সময় বরাদ্দ) পর্যন্ত। সাধারণভাবে, প্রদত্ত সুন্দর মান সহ সমস্ত থ্রেড প্রায় সমান CPU সময় পায় এবং সংখ্যাগতভাবে কম সুন্দর মান সহ থ্রেডগুলি আরও CPU সময় পাওয়ার আশা করা উচিত। যাইহোক, CFS শুধুমাত্র অপেক্ষাকৃত দীর্ঘ সময়ের পর্যবেক্ষণে "ন্যায্য"। স্বল্পমেয়াদী পর্যবেক্ষণ উইন্ডোতে, CFS অপ্রত্যাশিত উপায়ে CPU সম্পদ বরাদ্দ করতে পারে। উদাহরণস্বরূপ, এটি সিপিইউকে সংখ্যাগতভাবে কম সুন্দরতার সাথে একটি থ্রেড থেকে একটি সংখ্যাগতভাবে উচ্চ সুন্দরতার সাথে একটি থ্রেডে নিয়ে যেতে পারে। অডিওর ক্ষেত্রে, এটি একটি আন্ডাররান বা ওভাররান হতে পারে।

সুস্পষ্ট সমাধান হল উচ্চ-পারফরম্যান্স অডিও থ্রেডের জন্য CFS এড়ানো। Android 4.1 থেকে শুরু করে, এই ধরনের থ্রেডগুলি এখন CFS দ্বারা বাস্তবায়িত 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 রিজার্ভ করুন যেগুলি একটি নির্দিষ্ট সময়ের মধ্যে সম্পূর্ণ হওয়ার গ্যারান্টিযুক্ত, অডিও থ্রেডের সময়কালের চেয়ে কম সময়ের সাথে কার্যকর করা হয় এবং সময়সূচীতে হস্তক্ষেপ না করার জন্য পরিচিত। অডিও থ্রেড

হার-একঘেয়ে সময়সূচী

নির্দিষ্ট অগ্রাধিকারের নিয়োগের তত্ত্ব সম্পর্কে আরও তথ্যের জন্য, উইকিপিডিয়া নিবন্ধটি দেখুন রেট-একঘেয়ে শিডিউলিং (RMS)। একটি মূল বিষয় হল নির্দিষ্ট অগ্রাধিকারগুলি নির্দিষ্ট সময়ের উপর ভিত্তি করে কঠোরভাবে বরাদ্দ করা উচিত, অনুভূত "গুরুত্ব" এর উপর ভিত্তি করে নয়, স্বল্প সময়ের থ্রেডগুলিতে উচ্চতর অগ্রাধিকারগুলি বরাদ্দ করা উচিত। অ-পর্যায়ক্রমিক থ্রেডগুলিকে পর্যায়ক্রমিক থ্রেড হিসাবে মডেল করা যেতে পারে, কার্যকর করার সর্বাধিক ফ্রিকোয়েন্সি এবং প্রতি নির্বাহের সর্বাধিক গণনা ব্যবহার করে। যদি একটি অ-পর্যায়ক্রমিক থ্রেড একটি পর্যায়ক্রমিক থ্রেড হিসাবে মডেল করা না যায় (উদাহরণস্বরূপ এটি অসামঞ্জস্যপূর্ণ ফ্রিকোয়েন্সি বা সীমাহীন গণনা প্রতি এক্সিকিউটেশনের সাথে কার্যকর করতে পারে), তাহলে এটিকে একটি নির্দিষ্ট অগ্রাধিকার বরাদ্দ করা উচিত নয় কারণ এটি সত্য পর্যায়ক্রমিক থ্রেডের সময়সূচীর সাথে সামঞ্জস্যপূর্ণ হবে না। .

অগ্রাধিকার বিপরীত

প্রায়োরিটি ইনভার্সন হল রিয়েল-টাইম সিস্টেমের একটি ক্লাসিক ব্যর্থতা মোড, যেখানে একটি উচ্চ-অগ্রাধিকার টাস্ক একটি মিউটেক্সের মতো (শেয়ারড স্টেট দ্বারা সুরক্ষিত) একটি রিসোর্স রিলিজ করার জন্য একটি নিম্ন-অগ্রাধিকার টাস্কের জন্য অপেক্ষা করার জন্য একটি সীমাহীন সময়ের জন্য ব্লক করা হয়। এটি প্রশমিত করার কৌশলগুলির জন্য নিবন্ধটি দেখুন " অগ্রাধিকার বিপর্যয় এড়ানো "।

শিডিউলিং লেটেন্সি

শিডিউলিং লেটেন্সি হল যখন একটি থ্রেড চালানোর জন্য প্রস্তুত হয় এবং যখন ফলাফল প্রসঙ্গ সুইচ সম্পূর্ণ হয় যাতে থ্রেডটি আসলে একটি CPU-তে চলে। লেটেন্সি যত কম হবে তত ভালো এবং দুই মিলিসেকেন্ডের বেশি কিছু অডিওর জন্য সমস্যা সৃষ্টি করে। মোড ট্রানজিশনের সময় দীর্ঘ সময়সূচী লেটেন্সি ঘটতে পারে, যেমন একটি CPU আনা বা বন্ধ করা, একটি নিরাপত্তা কার্নেল এবং সাধারণ কার্নেলের মধ্যে স্যুইচ করা, সম্পূর্ণ পাওয়ার থেকে কম-পাওয়ার মোডে স্যুইচ করা, বা CPU ঘড়ির ফ্রিকোয়েন্সি এবং ভোল্টেজ সামঞ্জস্য করা .

বাধা দেয়

অনেক ডিজাইনে, CPU 0 সমস্ত বাহ্যিক বাধা প্রদান করে। তাই একটি দীর্ঘ-চলমান ইন্টারাপ্ট হ্যান্ডলার অন্যান্য বাধাগুলিকে বিলম্বিত করতে পারে, বিশেষ করে অডিও ডাইরেক্ট মেমরি অ্যাক্সেস (DMA) সমাপ্তি বাধা। দ্রুত শেষ করার জন্য এবং একটি থ্রেডের জন্য দীর্ঘ কাজ পিছিয়ে দেওয়ার জন্য বিঘ্নিত হ্যান্ডলারদের ডিজাইন করুন (বিশেষত একটি CFS থ্রেড বা SCHED_FIFO থ্রেড অগ্রাধিকার 1)।

সমানভাবে, দীর্ঘ সময়ের জন্য CPU 0 তে বাধা নিষ্ক্রিয় করার ফলে অডিও ইন্টারাপ্টের সার্ভিসিং বিলম্বিত হয়। কার্নেল স্পিন লকের জন্য অপেক্ষা করার সময় সাধারণত দীর্ঘ বিরতি নিষ্ক্রিয় করার সময় ঘটে। এই স্পিন লকগুলি আবদ্ধ আছে তা নিশ্চিত করতে পর্যালোচনা করুন।

শক্তি, কর্মক্ষমতা, এবং তাপ ব্যবস্থাপনা

পাওয়ার ম্যানেজমেন্ট একটি বিস্তৃত শব্দ যা কর্মক্ষমতা অপ্টিমাইজ করার সময় বিদ্যুতের খরচ নিরীক্ষণ এবং হ্রাস করার প্রচেষ্টাকে অন্তর্ভুক্ত করে। তাপ ব্যবস্থাপনা এবং কম্পিউটার কুলিং একই রকম তবে অতিরিক্ত তাপের কারণে ক্ষতি এড়াতে তাপ পরিমাপ এবং নিয়ন্ত্রণ করার চেষ্টা করুন। লিনাক্স কার্নেলে, CPU গভর্নর নিম্ন-স্তরের নীতির জন্য দায়ী, যখন ব্যবহারকারী মোড উচ্চ-স্তরের নীতি কনফিগার করে। ব্যবহৃত কৌশল অন্তর্ভুক্ত:

  • গতিশীল ভোল্টেজ স্কেলিং
  • গতিশীল ফ্রিকোয়েন্সি স্কেলিং
  • গতিশীল কোর সক্রিয়
  • ক্লাস্টার সুইচিং
  • পাওয়ার গেটিং
  • হটপ্লাগ (হটসোয়াপ)
  • বিভিন্ন ঘুমের মোড (হল্ট, স্টপ, অলস, সাসপেন্ড ইত্যাদি)
  • প্রক্রিয়া মাইগ্রেশন
  • প্রসেসরের সখ্যতা

কিছু পরিচালন ক্রিয়াকলাপের ফলে "কাজের স্টপেজ" বা এমন সময় হতে পারে যখন অ্যাপ্লিকেশন প্রসেসর দ্বারা সঞ্চালিত কোনও দরকারী কাজ নেই। এই কাজের স্টপেজগুলি অডিওতে হস্তক্ষেপ করতে পারে, তাই অডিও সক্রিয় থাকাকালীন এই ধরনের পরিচালনা একটি গ্রহণযোগ্য সবচেয়ে খারাপ-কেস কাজের স্টপেজের জন্য ডিজাইন করা উচিত। অবশ্যই, যখন থার্মাল পলাতক আসন্ন, স্থায়ী ক্ষতি এড়ানো অডিওর চেয়ে বেশি গুরুত্বপূর্ণ!

নিরাপত্তা কার্নেল

ডিজিটাল রাইটস ম্যানেজমেন্ট (DRM) এর জন্য একটি নিরাপত্তা কার্নেল মূল অপারেটিং সিস্টেম কার্নেল এবং অ্যাপ্লিকেশন কোডের জন্য ব্যবহৃত একই অ্যাপ্লিকেশন প্রসেসর কোরে(গুলি) চলতে পারে। যেকোন সময় যখন একটি সিকিউরিটি কার্নেল অপারেশন একটি কোরে সক্রিয় থাকে তা কার্যকরভাবে সাধারণ কাজ বন্ধ করে দেয় যা সাধারণত সেই কোরে চলে। বিশেষ করে, এর মধ্যে অডিও কাজ অন্তর্ভুক্ত থাকতে পারে। এর প্রকৃতির দ্বারা, একটি নিরাপত্তা কার্নেলের অভ্যন্তরীণ আচরণ উচ্চ-স্তরের স্তরগুলি থেকে অস্পষ্ট, এবং এইভাবে একটি নিরাপত্তা কার্নেলের কারণে সৃষ্ট যেকোন পারফরম্যান্সের অসঙ্গতিগুলি বিশেষভাবে ক্ষতিকারক। উদাহরণস্বরূপ, নিরাপত্তা কার্নেল অপারেশনগুলি সাধারণত কনটেক্সট সুইচ ট্রেসে উপস্থিত হয় না। আমরা এই "অন্ধকার সময়" বলি — যে সময় অতিবাহিত হয় এখনও পর্যবেক্ষণ করা যায় না। অডিও সক্রিয় থাকাকালীন নিরাপত্তা কার্নেলগুলি একটি গ্রহণযোগ্য সবচেয়ে খারাপ-কেস কাজের স্টপেজের জন্য ডিজাইন করা উচিত।