অ্যান্ড্রয়েড পারফরম্যান্স বাড়ানোর ওপর অনেকে ইন্সট্রাকশনাল গাইড লিখেছে, এবং সামগ্রিক অপ্টিমাইজেশন টিপস দিয়েছে। उनमें से কিছু বৈধ, আর অন্যগুলো শুধু তত্ত্বের ওপর ভিত্তি করে, বা অ্যান্ড্রয়েড সিস্টেমের পুরনো অপারেশনাল মেথডের ওপর, অথবা পুরোপুরি নানসেন্স। এতে রয়েছে সওয়্যাপ রিকমেন্ডেশন, build.prop-এ ভ্যালু যোগ করা, এবং লিনাক্স কার্নেলে ভেরিয়েবল পরিবর্তন।
এমনকি "অপ্টিমাইজেশন স্ক্রিপ্ট"-এর噸 টন আছে, সব-ইন-ওয়ান ফ্ল্যাশেবল .zip যা দাবি করে পারফরম্যান্স, ব্যাটারি লাইফ, এবং অন্যান্য জিনিস উল্লেখযোগ্যভাবে বাড়াবে। কিছু টুইক আসলে কাজ করতে পারে, কিন্তু অধিকাংশই শুধু প্লেসিবো ইফেক্ট, অথবা বদতর, আসলে আপনার ডিভাইসে নেতিবাচক প্রভাব ফেলে।
এই মানে নয় যে লোকেরা ইচ্ছাকৃতভাবেই নেֆেরিয়াস স্ক্রিপ্ট রিলিজ করছে - প্লে স্টোরে নিশ্চিতভাবেই বগাস পেইড অ্যাপ আছে, কিন্তু অ্যান্ড্রয়েড ফোরামে রিলিজ হওয়া অপ্টিমাইজেশন স্ক্রিপ্ট সাধারণত ভালো উদ্দেশ্যে রিলিজ হয়, শুধু ঘটনাটি হলো ডেভেলপার ভুল তথ্য পেয়ে থাকেন, বা সিম্পলি বিভিন্ন অপ্টিমাইজেশন টুইক এক্সপেরিমেন্ট করছেন। দুর্ভাগ্যবশত, একটি স্নোবল ইফেক্ট ঘটে, বিশেষ করে "অল-ইন-ওয়ান" অপ্টিমাইজেশন স্ক্রিপ্টে। টুইকের একটি ছোট হাতফুল আসলে কিছু করতে পারে, যখন স্ক্রিপ্টের অন্য একটি সেট টুইক সম্পূর্ণ কিছুই করবেনা - তবুও এই স্ক্রিপ্টগুলো ম্যাজিক বুলেট হয়ে পাস ডাউন হয়, বিনা কোনো আসল তদন্তের যে কী কাজ করে, এবং কী কাজ করে না।
অতএব, অনেক অল-ইন-ওয়ান অপ্টিমাইজেশন স্ক্রিপ্ট একই মেথড ব্যবহার করছে, जिनमें से কিছু সম্পূর্ণ পুরনো বা দীর্ঘমেয়াদে ক্ষতিকর। সারসংক্ষেপে, অধিকাংশ "অল-ইন-ওয়ান" অপ্টিমাইজেশন স্ক্রিপ্ট কিছুই নয় ব 放送ে একসাথে ফেলা রিকমেন্ডেড টিউনিং, কোনো স্পষ্ট ধারণা নেই কীভাবে বা কেন এই অপ্টিমাইজেশন "কাজ করে" - ব্যবহারকারীরা স্ক্রিপ্ট ফ্ল্যাশ করে, এবং দাবি করে তাদের পারফরম্যান্স হঠাৎ দ্রুত হয়েছে (যখন আসলে, এটা সবচেয়ে সম্ভবত তাদের ডিভাইস রিবুট করার অত্যন্ত সাধারণ কাজ ছিল যাতে পারফরম্যান্স বাড়ল, কারণ ডিভাইসের র্যামের সবকিছু ক্লিন আউট হয়ে যায়)।
এই Appuals এক্সক্লूसিভ আর্টিকেলে, আমরা "অ্যান্ড্রয়েড পারফরম্যান্স অপ্টিমাইজ করার" সবচেয়ে সাধারণ কিছু রিকমেন্ডেশন হাইলাইট করব, এবং কি সেগুলো শুধু মিথ্যা, অথবা ডিভাইস পারফরম্যান্সের জন্য একটি বৈধ টুইক।
Swap (সওয়্যাপ)
মিথ্যার তালিকার শীর্ষে আছে অ্যান্ড্রয়েড সওয়্যাপ - যা অ্যান্ড্রয়েড অপ্টিমাইজেশন হিসেবে ভাবা হয়ে থাকা די абсурড। সওয়্যাপের মূল উদ্দেশ্য হলো পেজিং ফাইল তৈরি এবং সংযোগ করা, যা মেমরিতে স্টোরেজ স্পেস ফ্রি করবে। এটি কাগজে শুনতে যুক্তিসঙ্গত লাগে, কিন্তু এটি আসলে একটি সার্ভার-এর জন্য প্রযোজ্য, যার তোমার কাছে почти কোনো ইন্টারঅ্যাক্টিভিটি নেই।
যখন আপনি আপনার অ্যান্ড্রয়েড ফোনের সওয়্যাপ নিয়মিত ব্যবহার করবেন, তবে এটি ক্যাশের বাইরে স্লিপ করার জিনিস থেকে উদ্ভূত ভয়ংক ল্যাগের দিকে পরিচালিত করবে। কল্পনা করুন, উদাহরণস্বরূপ, একটি অ্যাপ্লিকেশন একটি গ্রাফিক্স ডিসপ্লে করার চেষ্টা করে, যা সওয়্যাপে স্টোর করা আছে, যা এখন ডিস্ক রি-লোড করতে বাধ্য হল অন্য একটি অ্যাপ্লিকেশনের সাথে ডেটা সওয়্যাপ করে স্পেস ফ্রি করার পর। এটি খুব গোছানো।
কিছু অপ্টিমাইজেশন এন্ডুশিয়াস্ট বলতে পারেন যে সওয়্যাপ তাদের কোনো সমস্যা দেনি, কিন্তু পারফরম্যান্স বুস্ট দিচ্ছে সওয়্যাপ নয় - এটা হলো বিল্ট-ইন অ্যান্ড্রয়েড মেকানিজম lowmemorykiller, যা নিয়মিত ফুলে যাওয়া, হাই-প্রায়রিটি প্রসেস যা ব্যবহার হচ্ছে না সেগুলো কিল করে। LMK লো-মেমরি কন্ডিশন হ্যান্ডল করার জন্য ডিজাইন করা হয়েছিল, kswapd প্রসেস থেকে ইনভোক হয়, এবং সাধারণত ইউজার স্পেস প্রসেস কিল করে। এটি OOMkiller (out-of-memory killer)-এর থেকে ভিন্ন, কিন্তু এটি আলাদা টপিক।
পয়েন্ট হলো, উদাহরণস্বরূপ, ১GB র্যামের একটি ডিভাইস কখনো সওয়্যাপে প্রয়োজনীয় পারফরম্যান্স ডেটা পায় না, এবং তাই অ্যান্ড্রয়েডে সওয়্যাপ একদম প্রয়োজন নেই। এর ইমপ্লিমেন্টেশন শুধু ল্যাগ দিয়ে ভরা আছে এবং পারফরম্যান্স অপ্টিমাইজ করার বদলে ক্ষয় দিকে নিয়ে যায়।
zRAM - পুরনো এবং আর কার্যকর নয়
zRAM ডিভাইস অপ্টিমাইজেশনের জন্য একটি প্রমাণিত এবং কার্যকর মেথড, পুরনো ডিভাইসের জন্য - চিন্তা করুন কিটক্যাট-ভিত্তিক ডিভাইস যা শুধু ৫১২ MB র্যামের ওপর অপারেট করে। যেটা কিছু লোক এখনও zRAM টুইক অপ্টিমাইজেশন স্ক্রিপ্টে অন্তর্ভুক্ত করে, বা zRAM কে আধুনিক অপ্টিমাইজেশন টুইক হিসেবে রিকমেন্ড করে, তা মানুষ সাধারণত লেটেস্ট অপারেশনাল প্রোটোকল ফলো করে না তার উদাহরণ।
zRAM এন্ট্রি-লেভেল বাজেট-রেঞ্জ মাল্টি-কোর SoCs-এর জন্য উদ্দেশ্য ছিল, যেমন MTK চিপসেট এবং ৫১২ MB র্যাম ব্যবহারকারী ডিভাইস। খুব সস্তা চাইনিজ ফোন, বেসিক্যালি। zRAM মূলত কर्नেলকে এনক্রিপশন স্ট্রিমের মাধ্যমে আলাদা করে।
যখন zRAM ব্যবহার করা হয় পুরনো ডিভাইসে যেগুলো সিঙ্গেল কোর, এমনকি যদি zRAM সে ডিভাইসগুলোর জন্য রিকমেন্ড করা হয়, তবুও বড় পরিমাণ ল্যাগ আপনaturen। এটি KSM টেকনোলজির (Kernel Same Page Merging) সাথে ও হয় যা আइডেন্টিক্যাল মেমরি পেজ কম্বাইন করে স্পেস ফ্রি করার চেষ্টা করে। এটি গুগল দ্বারা রিকমেন্ড করা হলেও, পুরনো ডিভাইসে এটি বড় ল্যাগের দিকে নিয়ে যায়, কারণ liên tục সক্রিয় কোর থ্রেড মেমরি থেকে ডুপ্লিকেট পেজ খুঁজে বের করার জন্য চলমান থাকে। বেসিক্যালি, অপ্টিমাইজেশন টুইক চালানোর চেষ্টা ডিভাইসকে আরও ধীর করে দিচ্ছে, אירোনিক্যালি।
Seeder - অ্যান্ড্রয়েড ৩.০-এর পর থেকে পুরনো
অ্যান্ড্রয়েড ডেভেলপারদের মধ্যে সবচেয়ে বিতর্কিত অপ্টিমাইজেশন টিপস중에 একটি হলো seeder, এবং আমরা নিশ্চিত কেউ আমাদের এই টপিকে ভুল প্রুভ করতে পারেন - কিন্তু প্রথমে seeder-এর ইতিহাস পরীক্ষা করতে হবে।
হ্যাঁ, খুব পুরনো অ্যান্ড্রয়েড ডিভাইস-এ ইনস্টলেশনের পর ভালো অ্যান্ড্রয়েড পারফরম্যান্সের ব্যাপারে প্রচুর রিপোর্ট আছে। যাইহোক, মানুষ যেকোনো কারণে মনে করে এর মানে এটি আধুনিক অ্যান্ড্রয়েড ডিভাইস-ও প্রযোজ্য, যা সম্পূর্ণ абসার্ড। Seeder এখনও মেইনটেইন হচ্ছে এবং "আধুনিক" ল্যাগ রিডাকশন টুল হিসেবে অফার করা হচ্ছে, এটি মিসইনফরমেশন উদাহরণ - যদিও এটি Seeder-এর ডেভেলপারের ফল্ট নয়, কারণ তাদের প্লে স্টোর পেজটাও নোট করে যে Seeder অ্যান্ড্রয়েড ৪.০+ এর পর কম কার্যকর। যাইহোক, যেকোনো কারণে, Seeder আধুনিক অ্যান্ড্রয়েড সিস্টেমের জন্য "রিকমেন্ডেড টুইক" লিস্টে এখনও পপ আপ করে।
Seeder মূলত অ্যান্ড্রয়েড ৩.০-এ একটি বাগ ঠিক করে যেখানে অ্যান্ড্রয়েড রানটাইম সক্রিয়ভাবে /dev/random/ ফাইলটি ব্যবহার করত এনট্রপি পাওয়ার জন্য। /dev/random/ বাফার অস্থির হয়ে যেত, এবং সিস্টেম ব্লক হয়ে যেত যতক্ষণ না এটি প্রয়োজনীয় ডেটার পরিমাণ পূরণ করে - চিন্তা করুন অ্যান্ড্রয়েড ডিভাইসের বিভিন্ন সেন্সর এবং বাটন ছোট ছোট জিনিস।
Seeder-এর লেখক লিনাক্স-ডেমন rngd নিল, এবং অ্যান্ড্রয়েডের inastroil-এর জন্য কম্পাইল করলেন যাতে এটি র্যান্ডম ডেটা একটি অনেক দ্রুত এবং প্রেডিক্টেবল /dev/urandom পাথওয়ে থেকে নেয়, এবং সেকেন্ডে একবার dev/random-এ মার্জ করে, /dev/random/-কে épuised হওয়া দেয় না। এতে একটি অ্যান্ড্রয়েড সিস্টেম ফলাফলপন্ত হয় যেটি এনট্রপির অভাব অনুভব করে না, এবং অনেক স্মুথ পারফর্ম করে।
গুগল অ্যান্ড্রয়েড ৩.০-এর পর এই বাগ ঠিক করে দিয়েছে, যাইহোক, যেকোনো কারণে, Seeder এখনও আধুনিক অ্যান্ড্রয়েড পারফরম্যান্স অপ্টিমাইজেশনের জন্য "রিকমেন্ডেড টুইক" লিস্টে পপ আপ করে। আরও, Seeder অ্যাপের কিছু аналগ আছে যেমন sEFix যেগুলো Seeder-এর ফাংশনালিটি অন্তর্ভুক্ত করে, একই rngd বা অল্টারনেটিভ haveged ব্যবহার করে, অথবা শুধু /dev/urandom এবং /dev/random-এর মধ্যে একটি সিমলিংক। এটি আধুনিক অ্যান্ড্রয়েড সিস্টেমের জন্য একদম নিরর্থক।
কারণ এটি নিরর্থক কারণ নতুন অ্যান্ড্রয়েড ভার্সন /dev/random/ তিনটি মূল কম্পোনেন্টে ব্যবহার করে - libcrypto, SSL কানেকশন এনক্রিপশন, SSH কি জেনারেট করার জন্য ইত্যাদি। WPA_supplication/hostapd যা WEP/WPA কি জেনারেট করে, এবং অবশেষে, EXT2/EXT3/EXT4 ফাইল সিস্টেম তৈরি করার সময় আইডি জেনারেট করার জন্য কিছু লাইব্রেরি।
তাই যখন Seeder বা Seeder-ভিত্তিক এনহ্যান্সমেন্ট আধুনিক অ্যান্ড্রয়েড অপ্টিমাইজেশন স্ক্রিপ্টে অন্তর্ভুক্ত থাকে, তবে যা ঘটে তা হলো ডিভাইস পারফরম্যান্সে অবনতি, কারণ rngd লগাতার ডিভাইসকে জেগিয়ে রাখে এবং সিপিইউ ফ্রিকোয়েন্সি বাড়ায়, যা অবশ্যই ব্যাটারি কনসাম্পশনে নেতিবাচক প্রভাব ফেলে।
Odex
অ্যান্ড্রয়েড ডিভাইসের স্টক ফার্মওয়্যার প্রায়শই odex করে। এর মানে হলো অ্যান্ড্রয়েড অ্যাপের স্ট্যান্ডার্ড প্যাকেজ APK ফরম্যাটে, /system/app/ এবং /system/priv-app/-এ পাওয়া যায়, একই ফাইলনেমের সাথে .odex এক্সটেনশন। odex ফাইলগুলোে অপ্টিমাইজড বাইটকোড অ্যাপ্লিকেশন থাকে যেগুলো ইতিমধ্যে ভ্যালিডেটর এবং অপ্টিমাইজার ভার্চুয়াল মেশিনের মাধ্যমে পাস করেছে, তারপর dexopt টুল ব্যবহার করে একটি আলাদা ফাইলে রেকর্ড করা হয়েছে।
তাই odex ফাইলগুলো ভার্চুয়াল মেশিন অফলোড করার জন্য এবং odex করা অ্যাপ্লিকেশনের দ্রুত লঞ্চ অফার করার জন্য বানানো হয়েছে - নकारাত্মক দিক, ODEX ফাইলগুলো ফার্মওয়্যার মডিফিকেশন বাধা দেয়, এবং আপডেটের সাথে সমস্যা সৃষ্টি করে, তাই এই কারণেই অনেক কাস্টম ROM যেমন LineageOS ODEX ছাড়া বিতরণ করা হয়।
ODEX ফাইল জেনারেট করা হয় বিভিন্ন পদ্ধতিতে, যেমন Odexer Tool ব্যবহার করে - সমস্যা হলো এটি পুরোপুরি প্লেসিবো ইফেক্ট। যখন আধুনিক অ্যান্ড্রয়েড সিস্টেম /system ডিরেক্টরিতে odex ফাইল খুঁজে পায় না, তবে সিস্টেম সেগুলো আসলে তৈরি করে এবং /system/dalvik-cache/ ডিরেক্টরিতে রাখে। এটি ঠিক সেই জিনিস যা ঘটে যখন, উদাহরণস্বরূপ, আপনি একটি নতুন অ্যান্ড্রয়েড ভার্সন ফ্ল্যাশ করেন এবং এটি কিছুক্ষণ "Busy, Optimizing Applications" মেসেজ দিয়ে থাকে।
Lowmemorykiller টুইকস
অ্যান্ড্রয়েডে মাল্টিটাস্কিং অন্যান্য মোবাইল অপারেটিং সিস্টেম থেকে ভিন্ন হয় এই মানে যে এটি একটি ক্লাসিক্যাল মডেলের ওপর ভিত্তি করে যেখানে অ্যাপ্লিকেশনগুলো ব্যাকগ্রাউন্ডে শান্তভাবে কাজ করে, এবং ব্যাকগ্রাউন্ড অ্যাপের সংখ্যায় কোনো রিস্ট্রিকশন নেই (যদি ডেভেলপার অপশনে একটি সেট করা থাকে, তবে এটি সাধারণত সুপারিশ করা হয় না) - আরও, ব্যাকগ্রাউন্ড এক্সিকিউশনে ট্রানজিশনের ফাংশনালিটি বন্ধ হয় না, যদিও সিস্টেম লো মেমরি সিচুয়েশনে ব্যাকগ্রাউন্ড অ্যাপ কিল করার অধিকার রাখে (আমরা আগে lowmemorykiller এবং out-of-memory killer সম্পর্কে আলোচনা করেছি এই গাইডে)।
lowmemorykiller মেকানিজমে ফিরে যাই, অ্যান্ড্রয়েড সীমিত মেমরি এবং সওয়্যাপ-পার্টিশনের অভাবেও অপারেট করতে পারে। ব্যবহারকারী অ্যাপ্লিকেশন লঞ্চ করতে এবং স্যুইচ করতে পারবেন, এবং সিস্টেম অনইউজড ব্যাকগ্রাউন্ড অ্যাপ সাইলেন্টলি কিল করবে অ্যাক্টিভ টাস্কের জন্য মেমরি ফ্রি করার চেষ্টায়।
এটি অ্যান্ড্রয়েডের আরম্ভিক দিনে অত্যন্ত উপকারী ছিল, যদিও যেকোনো কারণে এটি টাস্ক-কিলার অ্যাপের আকারে জনপ্রিয় হয়েছে, যা সাধারণত লাভের চেয়ে ক্ষতিকর। টাস্ক-কিলার অ্যাপ vagy নির্দিষ্ট ইন্টারভালে জেগে ওঠে, বা ব্যবহারকারী চালায়, এবং বড় পরিমাণ র্যাম ফ্রি করে দেখায়, যা ইতিবাচক হিসেবে দেখা হয় - বেশি ফ্রি র্যাম মানে দ্রুত ডিভাইস, ঠিক না? অ্যান্ড্রয়েডের সাথে এটি ঠিক নয়, যাইহোক।
বাসতবে, বড় পরিমাণ ফ্রি র্যাম আসলে আপনার ডিভাইসের পারফরম্যান্স এবং ব্যাটারি লাইফের জন্য ক্ষতিকর হতে পারে। যখন অ্যাপগুলো অ্যান্ড্রয়েডের র্যামে স্টোর করা থাকে, তবে সেগুলো কল আপ করা, লঞ্চ করা, ইত্যাদি অনেক সহজ। অ্যান্ড্রয়েড সিস্টেম অ্যাপে স্যুইচ করার জন্য অনেক রিসোর্স দেবার প্রয়োজন নেই, কারণ সেটি ইতিমধ্যে মেমরিতে আছে।
এই কারণে, টাস্ক-কিলার আগের মতো জনপ্রিয় নয়, যদিও অ্যান্ড্রয়েড নবিশরা এখনও যেকোনো কারণে তাদের ওপর নির্ভর করে (তথ্যের অভাব, দুর্ভাগ্যবশত)। দুর্ভাগ্যবশত, একটি নতুন ট্রেন্ড টাস্ক-কিলারের স্থানে এসেছে, lowmemorykiller মেকানিজম টিউনিংর ট্রেন্ড। এটি উদাহরণস্বরূপ MinFreeManager অ্যাপ, এবং মূল আইডিয়া হলো সিস্টেম ব্যাকগ্রাউন্ড অ্যাপ কিল শুরু করার আগে র্যাম ওভারহেড বাড়ানো।
যেমন, স্ট্যান্ডার্ড র্যাম বর্ডারে অপারেট করে - ৪, ৮, ১২, ২৪, ৩২, এবং ৪০ MB, এবং যখন ৪০ MB ফ্রি স্টোরেজ স্পেস পূরণ হয়, মেমরিতে লোড করা ক্যাশড অ্যাপগুলোのうち একটা চালু নয় কিন্তু লোড করা আছে সেটি টার্মিনেট হবে।
বাসতবে, অ্যান্ড্রয়েড সবসময় কমপক্ষে ৪০ MB উপলব্ধ মেমরি রাখবে, যা একটা অ্যাপ্লিকেশন বরাদ্দ করার জন্য যথেষ্ট lowmemorykiller তার ক্লিনআপ প্রসেস শুরু করার আগে - যাতে অ্যান্ড্রয়েড সবসময় যেন উপলব্ধ র্যামের সর্বোচ্চ পরিমাণ ব্যবহার করে ব্যবহারকারীর অভিজ্ঞতাকে বাধা দিয়ে বিনা।
দুর্ভাগ্যবশত, কিছু হোমব্রু এন্ডুশিয়াস্ট রিকমেন্ড करना শুরু করল যে মানটি বাড়িয়ে দিয়ে, উদাহরণস্বরূপ, ১০০ MB করা যাক LMK কিক ইন করার আগে। এখন ব্যবহারকারী আসলে র্যাম হারাবে (১০০ - ৪০ = ৬০), তাই এই স্পেস ব্যবহার করে ব্যাক-এন্ড অ্যাপ স্টোর করার বদলে, সিস্টেম এই পরিমাণ মেমরি ফ্রি রাখবে, একদম কোনো উদ্দেশ্য ছাড়া।
LKM টিউনিং উপকারী হতে পারে খুব পুরনো ডিভাইসের জন্য যেগুলোতে ৫১২ র্যাম, কিন্তু তাদের কে मालিক হবে? ২GB আধুনিক "বাজেট রেঞ্জ", এমনকি ৪GB র্যাম ডিভাইস "মিডল-রেঞ্জ" হিসেবে দেখা হচ্ছে এই দিনে, তাই LMK টুইকস আসলে পুরনো এবং беспোল।
I/O টুইকস
অ্যান্ড্রয়েডের অনেক অপ্টিমাইজেশন স্ক্রিপ্টে আপনি প্রায়শই টুইক পাবেন যা I/O সাবসিস্টেম এড্রেস করে। উদাহরণস্বরূপ, ThunderBolt! স্ক্রিপ্টে নজর দিন, যাতে এই লাইনগুলো আছে:
echo 0 > $i/queue/rotational; echo 1024 > $i/queue/nr_requests;
প্রথম লাইন I/O স্কেডুলারকে SSD-র সাথে ডিল করার ইনস্ট্রাকশন দেবে, এবং দ্বিতীয়টি I/O কিউর সর্বোচ্চ আকার ১২৮ থেকে ১০২৪-এ বাড়াবে - কারণ $i ভেরিয়েবলটি /sys-এ ব্লক ডিভাইসের ট্রির পাথ ধারণ করে, এবং স্ক্রিপ্টটি লুপে চলে।
তারপর, CFQ স্কেডুলার সম্পর্কিত একটি লাইন পাওয়া যায়:
echo 1 > $i/queue/iosched/back_seek_penalty; echo 1 > $i/queue/iosched/low_latency; echo 1 > $i/queue/iosched/slice_idle;
এটি পরে আরও লাইনগুলো ফলো করে যা অন্যান্য প্ল্যানারের সাপেক্ষে, কিন্তু অবশেষে, প্রথম দুটি কমান্ড নিরর্থক কারণ:
একটি আধুনিক লিনাক্স কার্নেল ডিফল্টরূপে বুঝতে পারে এটি কোন ধরনের স্টোরেজ মিডিয়ার সাথে কাজ করছে।
একটি লম্বা ইনপুট-আউটপুট কিউ (যেমন ১০২৪) আধুনিক অ্যান্ড্রয়েড ডিভাইসে বেকার, আসলে ডেস্কটপেও বেকার - এটি শুধু হেভি ডিউটি সার্ভার-এ রিকমেন্ড করা হয়। আপনার ফোন হেভি ডিউटी লিনাক্স সার্ভার নয়।
একটি অ্যান্ড্রয়েড ডিভাইসের জন্য, ভার্চুয়ালি কোনো অ্যাপ্লিকেশন প্রায়োরিটাইজড নেই ইনপুট-আউটপুটে এবং কোনো মেকানিক্যাল ড্রাইভার নেই, তাই সেরা প্ল্যানার হলো noop / FIFO-কিউ, তাই এই ধরনের স্কেডুলার "টুইক" I/O সাবসিস্টেমের জন্য কিছুই স্পেশাল বা অর্থবহ করছে না। আসলে, সেই সব মাল্টি-স্ক্রিন লিস্ট কমান্ডগুলো একটি সিম্পল সাইকেল দ্বারা ভালো রিপ্লেস করা যায়:
for i in /sys/block/mmc*; do echo noop > $i/queue/scheduler echo 0 > $i/queue/iostats done
এটি I/O পরিসংখ্যানের সংচয় থেকে সব ড্রাইভের জন্য noop স্কেডুলার ইनेবল করবে, যা পারফরম্যান্সে ইতিবাচক প্রভাব ফেলতে পারে, যদিও খুব ছোট এবং почти নগণ্য।
পারফরম্যান্স স্ক্রিপ্টে পাওয়া যাওয়া আরেকটি বেকার I/O টুইক হলো এসডি কার্ডের জন্য বেড়ানো রিড-অহেড ভ্যালু ২MB পর্যন্ত। রিড-অহেড মেকানিজম হলো মিডিয়া থেকে ডেটা আগে পড়ার জন্য, অ্যাপ্লিকেশন সেই ডেটা অ্যাক্সেস করার অনুরোধ করার আগে। বেসিক্যালি, কার্নেল চেষ্টা করবে ভবিষ্যতে কোন ডেটা প্রয়োজন হবে তা বুঝতে, এবং সেটি প্রি-লোড করবে র্যামে, যা এইভাবে রিটার্ন টাইম কমাতে পারে। এটি কাগজে খুব ভালো শোনা হলেও, রিড-অহেড অ্যালগরিদম অধিকাংশ সময় ভুল, যা সম্পূর্ণ অপ্রয়োজনীয় ইনপুট-আউটপুট অপারেশনের দিকে নিয়ে যায়, কথা বكي হাই র্যাম কনসাম্পশনের কথা বলার নেই।
১ - ৮ MB-এর মধ্যে হাই রিড-অহেড ভ্যালু RAID-অ্যারেতে রিকমেন্ড করা হয়, কিন্তু অ্যান্ড্রয়েড ডিভাইসের জন্য, ডিফল্ট ভ্যালু ১২৮ KB রেখে দেয়া সেরা।
ভার্চুয়াল মেমরি ম্যানেজমেন্ট সিস্টেম টুইকস
আরেকটি সাধারণ "অপ্টিমাইজেশন" টেকনিক হলো ভার্চুয়াল মেমরি ম্যানেজমেন্ট সাবসিস্টেম টিউন করা। এটি সাধারণত শুধু দুটি কার্নেল ভেরিয়েবল টার্গেট করে, vm.dirty_background_ratio এবং vm.dirty_ratio, যা "গ 저지" ডেটা স্টোর করার জন্য বাফারের আকার অ্যাডজাস্ট করার জন্য। গ 저지 ডেটা সাধারণত वो ডেটা যা ডিস্কে লেখা হয়েছে, কিন্তু এখনও মেমরিতে আছে এবং ডিস্কে লেখার জন্য অপেক্ষা করছে।
Linux ডিস্ট্রো এবং অ্যান্ড্রয়েড উভয়ে VM ম্যানেজমেন্ট সাবসিস্টেমের টিপিক্যাল টুইক ভ্যালু হয়:
vm.dirty_background_ratio = 10 vm.dirty_ratio = 20
এটা যা করার চেষ্টা করে সেটি হলো যখন গ 저지 ডেটা বাফার টোটাল র্যামের ১০% হয়, তখন এটি pdflush ফ্লো জেগিয়ে ডেটা ডিস্কে লেখা শুরু করে - যদি ডেটা রেকর্ড করার অপারেশন খুব ইনটেন্স হয়, বাফার বেড়তে থাকবে, এবং যখন এটি উপলব্ধ র্যামের ২০% এ পৌঁছাবে, সিস্টেম সিনক্রোনাস মোডে সাবসিকোয়েন্ট রাইট অপারেশনে স্যুইচ করবে - প্রি-বাফার ছাড়া। এর মানে ডিস্কে লেখার কাজ করছে অ্যাপ্লিকেশন ব্লক হবে, যতক্ষণ না ডেটা ডিস্কে লেখা হয় (AKA 'lag')।
আপনার বুঝতে হবে যে যদি বাফার সাইজ ১০% পর্যন্ত না পৌঁছায়, সিস্টেম ৩০ সেকেন্ডের পর স্বয়ংক্রিয়ভাবেই pdflush কিক ইন করবে। ১০/২০ এর কম্বিনেশন খুব যুক্তিসঙ্গত, উদাহরণস্বরূপ ১GB র্যামের ডিভাইসে এটি সমান ১০০/২০০MB র্যাম, যা বার্স্ট রেকর্ডের ক্ষেত্রে যথেষ্ট যেখানে স্পীড প্রায়শই সিস্টেম NAND-মেমরি বা এসডি-কার্ডের রেকর্ড স্পীডের নিচে থাকে, যেমন অ্যাপ ইনস্টল করার সময় বা কম্পিউটার থেকে ফাইল কপি করার সময়।
যেকোনো কারণে, স্ক্রিপ্ট লেখকরা এই মানকে আরও বাড়িয়ে নেওয়ার চেষ্টা করে, অবশ্যভাবী রেটে। উদাহরণস্বরূপ, Xplix অপ্টিমাইজেশন স্ক্রিপ্টে ৫০/৯০ পর্যন্ত রেট পাওয়া যায়।
sysctl -w vm.dirty_background_ratio=50 sysctl -w vm.dirty_ratio=90
১ GB মেমরির ডিভাইসে, এটি গ 저지 বাফারের লিমিট সেট করে ৫০০/৯০০ MB, যা অ্যান্ড্রয়েড ডিভাইসের জন্য সম্পূর্ণ বেকার, কারণ এটি শুধু নিরંતর ডিস্কে রেকর্ডিং আন্ডার কাজ করবে - কিছু যা শুধু হেভি লিনাক্স সার্ভারে ঘটে।
ThunderBolt! স্ক্রিপ্ট আরও যুক্তিসঙ্গত ভ্যালু ব্যবহার করে, কিন্তু সামগ্রিকভাবে, এটি এখনো বিশুদ্ধ নিরর্থক:
if [ "$mem" -lt 524288 ];then sysctl -w vm.dirty_background_ratio=15; sysctl -w vm.dirty_ratio=30; elif [ "$mem" -lt 1049776 ];then sysctl -w vm.dirty_background_ratio=10; sysctl -w vm.dirty_ratio=20; else sysctl -w vm.dirty_background_ratio=5; sysctl -w vm.dirty_ratio=10; fi;
প্রথম দুটি কমান্ড ৫১২ MB র্যামের স্মার্টফোনের ওপর চলে, দ্বিতীয়টি - ১ GB-এর সাথে, এবং অন্যান্য - ১ GB-এর বেশি। কিন্তু আসলে ডিফল্ট সেটিংস পরিবর্তন করার একটিমাত্র কারণ হলো - একটি খুব ধীর ইন্টারন্যাল মেমরি বা মেমরি কার্ড বিশিষ্ট ডিভাইস। এই ক্ষেত্রে ভেরিয়েবলগুলোর মান ছড়িয়ে দেয়া যুক্তিসঙ্গত, অর্থাৎ, এমন কিছু করা:
sysctl -w vm.dirty_background_ratio=10 sysctl -w vm.dirty_ratio=60
তখন, একটি সার্জ সিস্টেম রাইট অপারেশন, ডিস্কে ডেটা রেকর্ড করার ছাড়া, শেষ পর্যন্ত সিনক্রোনাস মোডে স্যুইচ করবে না, যা অ্যাপ্লিকেশনকে রেকর্ডিং করার সময় ল্যাগ কমাতে দেবে।
অতিরিক্ত বেকার টুইকস এবং পারফরম্যান্স টিউনিং
অনেক আরও "অপ্টিমাইজেশন" আছে বাইরে যা আসলে কিছুই করে না। অধিকাংশই কোনো ইফেক্ট ফেলে না, আর অন্যগুলো কিছু দিকের পারফরম্যান্স উন্নত করতে পারে, যখন ডিভাইস অন্যান্য দিকে degrade করে (সাধারণত এটি পারফরম্যান্স vs ব্যাটারি ড্রেন-এ সিমटে যায়)।
এখানে কিছু অতিরিক্ত জনপ্রিয় অপ্টিমাইজেশন যা উপকারী হতে পারে বা নাও হতে পারে, অ্যান্ড্রয়েড সিস্টেম এবং ডিভাইসের ওপর নির্ভর করে।
- Acceleration - পারফরম্যান্স উন্নত করার ছোট acceleration এবং undervolting - একটু ব্যাটারি বাঁচায়।
- Database Optimization - তত্ত্বে এটি উপকারী হওয়া উচিত ডিভাইস পারফরম্যান্সে, কিন্তু এটি সন্দেহজনক।
- Zipalign - אירোনিক্যালি, বিল্ট-ইন অ্যান্ড্রয়েড SDK ফিচার APK-ফাইলের কন্টেন্ট অ্যালাইনমেন্টের 불구ে, স্টোরে অনেক সফটওয়ার পাওয়া যায় যা zipalign-এর মাধ্যমে ট্রান্সমিট করা হয়নি।
- অপ্রয়োজনীয় সিস্টেম সার্ভিস ডিসেবল করা, অনইউজড সিস্টেম এবং সেলডম-ইউজড থার্ড-পার্টি অ্যাপ্লিকেশন রিমুভ করা। বেসিক্যালি, ব্লোটওয়্যার আনইনস্টল করা।
- নির্দিষ্ট ডিভাইসের জন্য অপ্টিমাইজেশন সহ কাস্টম কার্নেল (আরেকবার, সব কার্নেল সমান ভালো নয়)।
- ইতিমধ্যে বর্ণিত I/O স্কেডুলার noop।
- Saturation algorithm TCP Westwood - ডিফল্ট অ্যান্ড্রয়েড Cubic-এর চেয়ে বেতার নেটওয়ার্কে আরও কার্যকর, কাস্টম কার্নেলে উপলব্ধ।
বেকার build.prop সেটিংস
XDA Developers ফোরামের LaraCraft304 একটি স্টাডি করেছেন এবং পেয়েছেন যে /system/build.prop সেটিংসের একটি প্রশংসাযোগ্য সংখ্যা যা "এক্সপার্ট"রা ব্যবহার করার জন্য রিকমেন্ড করে, সোর্স AOSP এবং CyanogenMod-এ অস্তিত্বে নেই। এখানে তালিকা:
ro.ril.disable.power.collapse ro.mot.eri.losalert.delay ro.config.hw_fast_dormancy ro.config.hw_power_saving windowsmgr.max_events_per_sec persist.cust.tel.eons ro.max.fling_velocity ro.min.fling_velocity ro.kernel.checkjni dalvik.vm.verify-bytecode debug.performance.tuning video.accelerate.hw ro.media.dec.jpeg.memcap ro.config.nocheckin profiler.force_disable_ulog profiler.force_disable_err_rpt ersist.sys.shutdown.mode ro.HOME_APP_ADJ