ক্যাপাসিটি হল কিছু রিসোর্সের মোট পরিমাণ (CPU, GPU, ইত্যাদি) একটি ডিভাইস কিছু সময় ধরে রাখে। এই পৃষ্ঠাটি বর্ণনা করে যে কীভাবে সক্ষমতা-সম্পর্কিত জ্যাঙ্ক সমস্যাগুলি সনাক্ত করা যায় এবং সমাধান করা যায়।
রাজ্যপাল প্রতিক্রিয়া জানাতে ধীর
জ্যাঙ্ক এড়াতে, সিপিইউ ফ্রিকোয়েন্সি গভর্নরকে ফার্স্ট ওয়ার্কলোডগুলিতে দ্রুত প্রতিক্রিয়া জানাতে সক্ষম হতে হবে। বেশিরভাগ UI অ্যাপ একই মৌলিক প্যাটার্ন অনুসরণ করে:
- ব্যবহারকারী পর্দা পড়ছেন।
- ব্যবহারকারী স্ক্রীন স্পর্শ করে: একটি বোতাম, স্ক্রোল ইত্যাদি ট্যাপ করে।
- স্ক্রীন স্ক্রল, কার্যকলাপ পরিবর্তন, বা ইনপুট প্রতিক্রিয়া কোনো উপায়ে অ্যানিমেট.
- নতুন বিষয়বস্তু প্রদর্শিত হওয়ার সাথে সাথে সিস্টেম শান্ত হয়ে যায়।
- ব্যবহারকারী স্ক্রীন পড়তে ফিরে যায়।
পিক্সেল এবং নেক্সাস ডিভাইসগুলি স্পর্শে CPU ফ্রিকোয়েন্সি গভর্নর (এবং সময়সূচী) আচরণ পরিবর্তন করতে টাচ বুস্ট প্রয়োগ করে। উচ্চ ঘড়ির ফ্রিকোয়েন্সি (যা ডিভাইসটিকে স্পর্শে ফ্রেম ড্রপ করতে পারে) ধীরগতির র্যাম্প এড়াতে, টাচ বুস্ট সাধারণত CPU-তে একটি ফ্রিকোয়েন্সি ফ্লোর সেট করে যাতে স্পর্শে প্রচুর পরিমাণে CPU ক্ষমতা উপলব্ধ থাকে। একটি মেঝে স্পর্শ করার পরে কিছু সময় স্থায়ী হয় (সাধারণত প্রায় দুই সেকেন্ড)।
পিক্সেল অতিরিক্ত টাচ বুস্ট সিগন্যাল হিসাবে এনার্জি অ্যাওয়ার শিডিউলিং (ইএএস) দ্বারা প্রদত্ত শিডিটিউন সিগ্রুপও ব্যবহার করে: শীর্ষ অ্যাপগুলি দ্রুত চালানোর জন্য পর্যাপ্ত CPU ক্ষমতা পান তা নিশ্চিত করতে শিডিটিউনের মাধ্যমে অতিরিক্ত ওজন পায়। Nexus 5X এবং 6P-এ Kryo CPU সহ পিক্সেলের তুলনায় ছোট এবং বড় CPU ক্লাস্টারের (যথাক্রমে A53 এবং A57) মধ্যে পারফরম্যান্সের ব্যবধান অনেক বেশি। আমরা দেখতে পেয়েছি যে ছোট CPU ক্লাস্টারটি মসৃণ UI রেন্ডারিংয়ের জন্য সর্বদা পর্যাপ্ত ছিল না, বিশেষত ডিভাইসে ধাঁধাঁর অন্যান্য উত্স প্রদত্ত।
তদনুসারে, Nexus 5X এবং 6P-এ, টাচ বুস্ট ফোরগ্রাউন্ড অ্যাপগুলিকে বড় কোরে যাওয়ার সম্ভাবনা তৈরি করার জন্য শিডিউলারের আচরণকে সংশোধন করে (এটি ধারণাগতভাবে CPU ফ্রিকোয়েন্সির ফ্লোরের মতো)। ফোরগ্রাউন্ড অ্যাপগুলিকে বড় CPU ক্লাস্টারে স্থানান্তরিত করার জন্য শিডিউলার পরিবর্তন না করে, যতক্ষণ না সময়সূচী একটি বড় CPU কোরে থ্রেডের ভারসাম্য লোড করার সিদ্ধান্ত নেয় ততক্ষণ পর্যন্ত ফোরগ্রাউন্ড অ্যাপগুলির রেন্ডার করার জন্য অপর্যাপ্ত CPU ক্ষমতা থাকতে পারে। টাচ বুস্টের সময় শিডিউলারের আচরণ পরিবর্তন করে, একটি UI থ্রেড অবিলম্বে একটি বড় কোরে চালানোর এবং জ্যাঙ্ক এড়ানোর সম্ভাবনা বেশি এবং এটিকে সর্বদা একটি বড় কোরে চালানোর জন্য বাধ্য না করে, যা পাওয়ার খরচের উপর মারাত্মক প্রভাব ফেলতে পারে।
থার্মাল থ্রটলিং
থার্মাল থ্রটলিং ঘটে যখন ডিভাইসটিকে তার সামগ্রিক তাপীয় আউটপুট কমাতে হবে, সাধারণত CPU, GPU, এবং DRAM ঘড়ি হ্রাস করে সঞ্চালিত হয়। আশ্চর্যজনকভাবে, এটি প্রায়শই জ্যাঙ্কের পরিণতি ঘটায় কারণ সিস্টেমটি আর একটি নির্দিষ্ট সময়ের মধ্যে রেন্ডার করার জন্য পর্যাপ্ত ক্ষমতা প্রদান করতে সক্ষম নাও হতে পারে। থার্মাল থ্রটলিং এড়ানোর একমাত্র উপায় হল কম শক্তি ব্যবহার করা। এটি করার অনেক উপায় নেই, তবে অতীতের SOC গুলির সাথে আমাদের অভিজ্ঞতার উপর ভিত্তি করে, সিস্টেম বিক্রেতাদের জন্য আমাদের কয়েকটি সুপারিশ রয়েছে৷
প্রথমত, ভিন্নধর্মী CPU আর্কিটেকচারের সাথে একটি নতুন SOC তৈরি করার সময়, CPU ক্লাস্টারগুলির কর্মক্ষমতা/W কার্ভগুলি ওভারল্যাপ নিশ্চিত করুন। সমগ্র প্রসেসরের জন্য সামগ্রিক কর্মক্ষমতা/W বক্ররেখা একটি অবিচ্ছিন্ন লাইন হওয়া উচিত। পারফ/ডব্লিউ বক্ররেখার বিচ্ছিন্নতা সময়সূচী এবং ফ্রিকোয়েন্সি গভর্নরকে একটি কাজের চাপের প্রয়োজন অনুমান করতে বাধ্য করে; জ্যাঙ্ক প্রতিরোধ করতে, সময়সূচী এবং ফ্রিকোয়েন্সি গভর্নর কাজের চাপকে প্রয়োজনের চেয়ে বেশি ক্ষমতা দেওয়ার পক্ষে ভুল করে। এর ফলে অত্যধিক শক্তি খরচ হয়, যা থার্মাল থ্রটলিংয়ে অবদান রাখে।
দুটি CPU ক্লাস্টার সহ একটি অনুমানমূলক SOC কল্পনা করুন:
- ক্লাস্টার 1, ছোট ক্লাস্টার, ঘড়ির উপর নির্ভর করে একটি থ্রুপুট বেঞ্চমার্কে 100-300mW এবং স্কোর 100-300 এর মধ্যে ব্যয় করতে পারে।
- ক্লাস্টার 2, বড় ক্লাস্টার, ঘড়ির উপর নির্ভর করে একই থ্রুপুট বেঞ্চমার্কে 1000 থেকে 1600mW এবং 800 থেকে 1200 এর মধ্যে স্কোর করতে পারে।
এই বেঞ্চমার্কে, একটি উচ্চ স্কোর দ্রুত হয়। ধীরগতির চেয়ে বেশি আকাঙ্খিত না হলেও, দ্রুত == বেশি শক্তি খরচ৷
শিডিউলকারী যদি বিশ্বাস করে যে একটি UI ওয়ার্কলোডের জন্য সেই থ্রুপুট বেঞ্চমার্কে 310 স্কোরের সমতুল্য প্রয়োজন, জ্যাঙ্ক এড়ানোর জন্য এর সর্বোত্তম বিকল্প হল সবচেয়ে কম ফ্রিকোয়েন্সিতে বড় ক্লাস্টার চালানো, উল্লেখযোগ্য শক্তি নষ্ট করা। (এটি cpuidle আচরণ এবং নিষ্ক্রিয় হওয়ার দৌড়ের উপর নির্ভর করে; ক্রমাগত পারফ/W বক্ররেখা সহ SOCs এর জন্য অপ্টিমাইজ করা সহজ।)
দ্বিতীয়ত, cpusets ব্যবহার করুন। আপনি আপনার কার্নেলে এবং আপনার BoardConfig.mk
এ cpusets সক্রিয় করেছেন তা নিশ্চিত করুন। আপনাকে অবশ্যই আপনার ডিভাইস-নির্দিষ্ট init.rc
এ প্রকৃত cpuset অ্যাসাইনমেন্ট সেট আপ করতে হবে। কিছু বিক্রেতারা তাদের BSP-তে এই অক্ষম রেখে দেন এই আশায় যে তারা শিডিউলারের আচরণকে প্রভাবিত করতে অন্যান্য ইঙ্গিত ব্যবহার করতে পারে; আমরা মনে করি এর কোন মানে নেই। CPUs-এর মধ্যে লোডের ভারসাম্য নিশ্চিত করার জন্য cpusets এমনভাবে কাজ করে যা ব্যবহারকারী আসলে ডিভাইসে কী করছে তা প্রতিফলিত করে।
অ্যাক্টিভিটি ম্যানেজার সেই অ্যাপগুলির আপেক্ষিক গুরুত্বের (শীর্ষ, অগ্রভাগ, ব্যাকগ্রাউন্ড) উপর ভিত্তি করে বিভিন্ন সিপিসেটে অ্যাপগুলিকে বরাদ্দ করে, আরও গুরুত্বপূর্ণ অ্যাপগুলি সিপিইউ কোরে আরও অ্যাক্সেস পায়। এটি ফোরগ্রাউন্ড এবং শীর্ষ অ্যাপগুলির জন্য পরিষেবার গুণমান নিশ্চিত করতে সহায়তা করে।
cpusets সমজাতীয় CPU কনফিগারেশনের জন্য উপযোগী, কিন্তু আপনি cpusets সক্রিয় ছাড়া ভিন্ন ভিন্ন CPU কনফিগারেশন সহ একটি ডিভাইস পাঠানো উচিত নয়। ভিন্নধর্মী CPU কনফিগারেশনে কিভাবে cpusets ব্যবহার করতে হয় তার জন্য Nexus 6P একটি ভালো মডেল; আপনার নিজের ডিভাইসের কনফিগারেশনের ভিত্তি হিসাবে এটি ব্যবহার করুন।
cpusets পটভূমির থ্রেডগুলিকে নিশ্চিত করার মাধ্যমে পাওয়ার সুবিধা প্রদান করে যেগুলি কর্মক্ষমতা-সমালোচনামূলক নয়, কখনই বড় CPU কোরের সাথে ভারসাম্যপূর্ণ লোড হয় না, যেখানে তারা ব্যবহারকারীর দ্বারা অনুভূত সুবিধা ছাড়াই উল্লেখযোগ্যভাবে বেশি শক্তি ব্যয় করতে পারে। এটি থার্মাল থ্রটলিং এড়াতেও সাহায্য করতে পারে। যদিও থার্মাল থ্রটলিং একটি ধারণক্ষমতার সমস্যা, থার্মাল থ্রটলিং করার সময় জিটার উন্নতি UI কার্যক্ষমতার উপর একটি বড় প্রভাব ফেলে। সিস্টেমটি 60FPS রেন্ডার করার ক্ষমতার কাছাকাছি চলার কারণে, এটি একটি ড্রপ ফ্রেম তৈরি করতে কম ঝাঁকুনি নেয়।