Google Pixel სმარტფონები ერთ-ერთი ყველაზე სწრაფი Android ტელეფონებია ბაზარზე. ენერგიის ინფორმირებულობის დაგეგმვა (EAS) ნაწილობრივ არის იმის მიზეზი, რომ ტელეფონი ასე გლუვია.
შორეულ წარსულში, როდესაც Linux იყო მხოლოდ იდეა Linus Torvalds-ის გონებაში, CPUs იყო ერთბირთვიანი ერთეულები, რომლებიც მოითხოვდნენ უზარმაზარ ენერგიას მცირე ენერგიისთვის. პირველი კომერციულად ხელმისაწვდომი პროცესორი, Intel 4004, მუშაობდა 740 kHz სიხშირით ერთ ბირთვზე. მაშინ არ იყო საჭირო დატვირთვის განრიგის საჭიროება. დატვირთვის განრიგი დაცული იყო ორბირთვიანი „ბეჰემოთებისთვის“, როგორიცაა IBM Power 4, რომელიც გამოვიდა რამდენიმე ათეული წლის შემდეგ. ისინი მუშაობდნენ ურჩხული 1.1 გჰც-დან 1.9 გჰც-მდე და საჭიროებდა პროგრამებს და სისტემას ამ ბირთვების სწორად გამოსაყენებლად. როგორ მივედით ამ მანქანებიდან პროგრამულ ალგორითმებამდე, რომელიც იყენებს მრავალ ბირთვს? შესაძლოა გსმენიათ ადრე ჩვენს ფორუმებზე Energy Aware Scheduling (EAS) შესახებ. ეს არის იმ მიზეზის ნაწილი, რის გამოც Google Pixel სმარტფონები ასე კარგად მუშაობენ. რა არის ასე კარგი EAS-ის შესახებ და როგორ მივედით აქამდე? სანამ ამის ახსნას შევძლებთ, უნდა ვისაუბროთ ლინუქსის დატვირთვის გრაფიკებზე.
Linux Load Schedulers-ის ევოლუცია
მრგვალი განრიგი
მრგვალი დამუშავება მარტივი ცნებაა ასახსნელად და გასაგებად, და კიდევ უფრო მარტივია მისი უარყოფითი მხარეების გასაგებად. Round-robin იყენებს დროის დანაწევრებას თითოეული პროცესისთვის დროის გასანაწილებლად. დავუშვათ, რომ ჩვენს კომპიუტერზე მუშაობს ოთხი პროცესი.
- პროცესი A
- პროცესი B
- პროცესი C
- პროცესი D
ახლა, მოდით, შევასრულოთ მრგვალი განრიგის სამუშაო. თითოეულ პროცესს გამოვყოფთ 100 მილიწამს (დროის დაჭრა) შემდეგზე გადასვლამდე. ეს ნიშნავს, რომ A პროცესს შეუძლია 100 მილიწამი დასჭირდეს დამუშავებას, შემდეგ ის გადადის B პროცესზე და ასე შემდეგ. თუ აპლიკაციის სამუშაოს 250 მილიწამი სჭირდება, მას ეს პროცესი 3-ჯერ უნდა გაიაროს, რომ დაასრულოს სამუშაო! ახლა გააფართოვეთ ეს სხვადასხვა ბირთვებზე, ისე, რომ პროცესი A და პროცესი B მიეკუთვნება ბირთვს 1-ს, ხოლო პროცესი C და პროცესის D-ს ენიჭება ბირთვს 2-ზე. ეს ჩაანაცვლა O(n) განრიგმა (რომელიც რბოლის მსგავსი იყო, მაგრამ ეპოქების გამოყენებით და დინამიური განაწილების საშუალებას იძლევა დრო), შემდეგ O(1) დაგეგმვა (მინიმიზირებული ზედნადები, პროცესის შეუზღუდავი მხარდაჭერა), შემდეგ საბოლოოდ სრულიად სამართლიანი განრიგი (CFS). CFS გაერთიანდა Linux kernel ვერსიაში 2.6.23 2007 წლის ოქტომბერში. მას შემდეგ ის კაპიტალურად გადაკეთდა და კვლავ რჩება Linux სისტემებში ნაგულისხმევი განრიგები.
სრულიად სამართლიანი განრიგი
Completely Fair Scheduler არსებობს Android-ში დაარსების დღიდან და გამოიყენება არა-დიდი. LITTLE მოწყობილობები. ის იყენებს ინტელექტუალურ ალგორითმს დამუშავების თანმიმდევრობის დასადგენად, გამოყოფილი დროისა და ა.შ. ეს არის კარგად შესწავლილი დაგეგმვის ალგორითმის სამუშაო განხორციელების მაგალითი, სახელწოდებით "შეწონილი სამართლიანი რიგი". ეს ძირითადად ფოკუსირებულია სისტემური პროცესებისა და სხვა მაღალი პრიორიტეტული პროცესების პრიორიტეტის მინიჭებაზე მანქანა. დიდზე რომ გაშვებულიყო. პატარა მოწყობილობა, ყველა ბირთვი აღიქმება როგორც თანაბარი. ეს ცუდია, რადგან დაბალი სიმძლავრის ბირთვები შეიძლება აიძულონ ინტენსიური აპლიკაციების გაშვება, ან კიდევ უფრო უარესი, პირიქით შეიძლება მოხდეს. მუსიკის მოსმენის დეკოდირება შეიძლება განხორციელდეს დიდ ბირთვზე, მაგალითად, ენერგიის მოხმარების უაზროდ გაზრდა. ამიტომ გვჭირდება ახალი გრაფიკი დიდისთვის. LITTLE, რომელსაც შეუძლია რეალურად ამოიცნოს და გამოიყენოს ბირთვების განსხვავება ენერგოეფექტური გზით. სწორედ აქ მოდის ჰეტეროგენული მრავალპროცესი (HMP), ჩატვირთვის სტანდარტული განრიგი, რომელიც ახლა მუშაობს Android ტელეფონების უმეტესობაზე.
ჰეტეროგენული მრავალპროცესირება
ეს არის სტანდარტული დატვირთვის გრაფიკი ნებისმიერი დიდისთვის. ბოლო წლებში გამოშვებული LITTLE მოწყობილობა, გარდა Google Pixel-ისა. HMP იყენებს დიდს. მცირე არქიტექტურა, დაბალი პრიორიტეტის, ნაკლებად ინტენსიური სამუშაოს დელეგირება პატარა ბირთვებზე, რომლებიც ნაკლებ ენერგიას მოიხმარენ. HMP არის "უსაფრთხო", სადაც მან იცის რა უნდა წავიდეს დიდ ბირთვებზე და რა უნდა წავიდეს პატარა ბირთვებზე, შეცდომების დაშვების გარეშე. ის უბრალოდ მუშაობს და მოითხოვს გაცილებით ნაკლებ ძალისხმევას განვითარების მხარეს დასაყენებლად, ვიდრე EAS-ის მსგავსი რამ, რომელსაც ჩვენ მომენტში შევეხებით. HMP არის მხოლოდ CFS-ის გაფართოება, რათა გააცნობიეროს იგი.
HMP არ იღებს გამოცნობებს და არც მომავალ პროცესებს პროგნოზირებს. ეს კარგია, მაგრამ ამიტომ მოწყობილობა არ შეიძლება იყოს ისეთივე თხევადი, როგორც EAS-ის ფუნქციონირება და ასევე ისიც, რომ ის მოიხმარს ოდნავ მეტ ბატარეას. ეს, ბოლოს და ბოლოს, მიგვიყვანს ენერგიის ინფორმირებულ განრიგამდე (EAS), რომელიც მე მტკიცედ მჯერა, რომ არის მომავალი ROM-ისა და ბირთვის განვითარებაში, რადგან უფრო მეტი OEM მიიღებს მას.
ენერგიის ინფორმირებულობის დაგეგმვა
ენერგიის ინფორმირებულობის დაგეგმვა (EAS) არის შემდეგი დიდი რამ, რაზეც საუბრობენ მომხმარებლები ჩვენს ფორუმებზე. თუ იყენებთ OnePlus 3-ს (ან Google Pixel-ს, ცხადია), ამის შესახებ ნამდვილად გსმენიათ ფორუმებზე. ის მეინსტრიმში შევიდა Qualcomm Snapdragon 845-ით, ასე რომ, თუ თქვენ გაქვთ ერთ-ერთი ასეთი მოწყობილობა, უკვე გაქვთ EAS ჩართული სმარტფონი. EAS ისეთი ბირთვების სახით, როგორიცაა RenderZenith და ROM-ები, როგორიცაა VertexOS და PureFusion იღებდნენ OnePlus 3-ის ფორუმებს თავის აყვავებაში. რა თქმა უნდა, Google Pixel-ს ასევე გააჩნია EAS. გაუმჯობესებული ბატარეის მუშაობის და უკეთესი შესრულების დაპირებებით, რა არის დაჭერა?
ენერგიის ინფორმირებულობის დაგეგმვა არც ისე მარტივია, როგორც უნივერსალური ყველა მოწყობილობისთვის, როგორიცაა CFS ან HMP. EAS მოითხოვს იმ პროცესორის გაგებას, რომელზედაც მუშაობს, ენერგეტიკული მოდელის საფუძველზე. ეს ენერგეტიკული მოდელები დამზადებულია ინჟინრების გუნდების მიერ, რომლებიც მუდმივად ამოწმებენ და მუშაობენ ოპტიმალური მუშაობისთვის. ვინაიდან Snapdragon 820 და 821 ძირითადად ერთნაირია, OnePlus 3-ის მორგებული ბირთვები იყენებს Google Pixel ენერგიის მოდელს. Snapdragon 845-ის მქონე მოწყობილობებს შეუძლიათ გამოიყენონ EAS, ხოლო OnePlus 6 გარკვეულწილად იყენებს. ის არ არის ისე მორგებული, როგორც Google Pixel მოწყობილობა იქნება, მაგრამ ის ასრულებს სამუშაოს. აი, მაგალითი იმისა, თუ როგორ, მიუხედავად იმისა, რომ OnePlus 6-ს აქვს უკეთესი პროცესორი EAS-ით, Pixel 2 XL მაინც უმკლავდება მას სირბილეში. ეს ორივე სურათი ჩვენიდანაა აღებული სიჩქარეზე ორიენტირებული მიმოხილვა OnePlus 6-ის.
თუ უჭირთ გრაფიკების გაგება, შეგიძლიათ გადახედოთ ქვემოთ მოცემულ სურათს მითითებისთვის. ყველაფერი, რაც აღემატება მწვანე ხაზს, მიუთითებს ჩამოვარდნილ ჩარჩოებზე და, უარეს შემთხვევაში, შესამჩნევ ჭუჭყს.
OnePlus 6 EAS-ის დანერგვა საინტერესოა, რადგან არ ჩანს სრულფასოვანი იმპლემენტაცია, როგორსაც იგივე SoC-ით Google Pixel-ზე ნახავთ. გრაფიკის რეგულირებასაც არ აქვს დიდი აზრი, ასე რომ, ალბათ, ეს ხსნის იმას, თუ რატომ არ არის ისეთი ეფექტური შესრულება, როგორც თქვენ მოელით. ის უკიდურესად კონსერვატიულია ენერგიის მოხმარებაში, სისტემა პრიორიტეტულად ანიჭებს დაბალი სიმძლავრის ბირთვებს სამუშაოების უმეტესობისთვის.
Tunables უბრალოდ პარამეტრების ერთობლიობაა, რომლებიც გადაეცემა CPU გუბერნატორს, რაც ცვლის გუბერნატორის რეაქციას გარკვეულ სიტუაციებზე სიხშირის თვალსაზრისით. შემდეგ განრიგი წყვეტს სად განათავსებს ამოცანებს სხვადასხვა პროცესორებზე. OnePlus 6-ის რეგულირება პრიორიტეტულად მინიჭებს მუშაობას დაბალი სიმძლავრის ბირთვებზე. ასევე არ შველის იმას, რომ Google Pixel 2-ს აქვს შეყვანის დიდი რაოდენობის გაძლიერება, რაც 8 ბირთვს მუდმივად ინახავს ონლაინ რეჟიმში. Google ასევე იყენებს ა შეწყვეტის ბალანსერი რაც ხელს უწყობს ჩარჩოს წვეთების მოცილებას და მუშაობის გაუმჯობესებას.
ასე რომ, როგორ მუშაობს EAS? რატომ არის ეს ასე ეფექტური მხოლოდ გარკვეულ პირობებში?
Energy Aware Scheduling წარმოგიდგენთ ენერგეტიკული მოდელის გამოყენების აუცილებლობას და, როგორც ზემოთ აღინიშნა, მოითხოვს უამრავ ტესტირებას და მუშაობას, რათა ის სრულყოფილი გახდეს. EAS ცდილობს გააერთიანოს ბირთვის სამი სხვადასხვა ძირითადი ნაწილი, რომლებიც ყველა დამოუკიდებლად მოქმედებენ და ენერგეტიკული მოდელი ეხმარება მათ გაერთიანებას.
- Linux-ის გრაფიკი (CFS, ზემოთ ნახსენები)
- Linux cpuidle
- Linux cpufreq
სამივე ნაწილის გაერთიანება გრაფიკის ქვეშ და მათი ერთად გამოთვლა იძლევა ენერგიის დაზოგვის პოტენციალს, რადგან მათი ერთად გაანგარიშება მათ საშუალებას აძლევს იყვნენ მაქსიმალურად ეფექტური. CPUIdle ცდილობს გადაწყვიტოს, როდის უნდა გადავიდეს CPU უმოქმედო რეჟიმში, ხოლო CPUFreq ცდილობს გადაწყვიტოს, როდის უნდა გაიზარდოს ან შეამციროს CPU. ორივე მოდულის მთავარი მიზანი ენერგიის დაზოგვაა. არა მხოლოდ ეს, ის შემდეგ კატეგორიზებს პროცესებს ოთხ ჯგუფად, ეს არის ზედა აპლიკაცია, სისტემის ფონი, წინა პლანი და ფონი. დამუშავებული ამოცანები მოთავსებულია ერთ-ერთ ამ კატეგორიაში, შემდეგ კი კატეგორიას ენიჭება CPU სიმძლავრე და სამუშაო დელეგირებულია სხვადასხვა CPU ბირთვზე. ტოპ-აპი არის დასრულების უმაღლესი პრიორიტეტი, რასაც მოჰყვება წინა პლანი, ფონი და შემდეგ სისტემური ფონი. ფონს ტექნიკურად იგივე პრიორიტეტი აქვს, როგორც სისტემურ ფონს, მაგრამ სისტემურ ფონს, როგორც წესი, აქვს წვდომა უფრო მცირე ბირთვებზე. ფაქტობრივად, Energy Aware Scheduling იღებს Linux-ის ბირთვის ძირითად ნაწილებს და აერთიანებს მას ერთ პროცესში.
მოწყობილობის გაღვიძებისას, EAS ირჩევს ბირთვს ყველაზე ზედაპირულ უმოქმედო მდგომარეობაში, რაც ამცირებს მოწყობილობის გასაღვიძებლად საჭირო ენერგიას. ეს ხელს უწყობს მოწყობილობის გამოყენებისას საჭირო სიმძლავრის შემცირებას, რადგან ის არ გააღვიძებს დიდ კლასტერს, თუ ეს არ არის საჭირო. დატვირთვის თვალყურის დევნება ასევე არის EAS-ის უკიდურესად მნიშვნელოვანი ნაწილი და არსებობს ორი ვარიანტი. "Per-Entity Load Tracking" (PELT) ჩვეულებრივ გამოიყენება დატვირთვის თვალყურის დევნებისთვის, შემდეგ ინფორმაცია გამოიყენება სიხშირეების გადასაწყვეტად და როგორ მოხდეს ამოცანების დელეგირება CPU-ზე. "Window-Assisted Load Tracking" (WALT) ასევე შეიძლება გამოყენებულ იქნას და არის ის, რაც გამოიყენება Google Pixel-ში. ბევრი EAS ROM ჩვენს ფორუმებზე, როგორიცაა VertexOS, ირჩევს WALT-ის გამოყენებას. ბევრი ROM გამოუშვებს ბირთვის ორ ვერსიას WALT ან PELT-ით, ამიტომ მომხმარებლის გადასაწყვეტია. WALT უფრო ადიდებული, CPU სიხშირის მაღალი პიკებით, ხოლო PELT ცდილობს დარჩეს უფრო თანმიმდევრული. დატვირთვის ტრეკერი რეალურად არ ახდენს გავლენას პროცესორის სიხშირეზე, ის უბრალოდ ეუბნება სისტემას რა არის CPU-ს გამოყენება. CPU-ს უფრო მაღალი გამოყენება მოითხოვს უფრო მაღალ სიხშირეს და ამიტომ PELT-ის თანმიმდევრული მახასიათებელია ის, რომ ის იწვევს CPU სიხშირის ნელა ზრდას ან შემცირებას. PELT მიდრეკილია CPU-ის უფრო მაღალი დატვირთვის შესახებ მოხსენებისკენ მიდრეკილებისკენ, ამიტომ შეიძლება უზრუნველყოს უფრო მაღალი შესრულება ბატარეის უფრო მაღალი ღირებულებით. ამ დროისთვის ნამდვილად ვერავინ იტყვის, თუ რომელი დატვირთვის თვალთვალის სისტემაა უკეთესი, თუმცა, რადგან დატვირთვის თვალთვალის ორივე მეთოდი მუდმივად იხვეწება და იხვეწება.
ნებისმიერ შემთხვევაში, აშკარაა, რომ დატვირთვის თვალთვალის მეთოდის მიუხედავად, ეფექტურობა იზრდება. ნებისმიერ პროცესორზე დავალებების დამუშავების ნაცვლად, ამოცანები ანალიზდება და ფასდება მისი გასაშვებად საჭირო ენერგიის რაოდენობა. ეს ჭკვიანური დავალების განთავსება ნიშნავს, რომ ამოცანები სრულდება ბევრად უფრო ეფექტური გზით, ხოლო სისტემა მთლიანობაში უფრო სწრაფად ხდება. EAS მიზნად ისახავს მაქსიმალურად გლუვი ინტერფეისის მიღებას მინიმალური ენერგიის მოხმარებით. აქ მოქმედებს სხვა გარე კომპონენტები, როგორიცაა schedtune.
Schedtune განისაზღვრება თითოეულ cgroup-ში ორი tunable-ით, რომლებიც უზრუნველყოფენ შესასრულებელ ამოცანებს უფრო დახვეწილ კონტროლს. ის აკონტროლებს არა მხოლოდ ამოცანების გავრცელებას მრავალ CPU-ზე, არამედ ასევე, თუ აღქმული დატვირთვა უნდა იყოს გაბერილი, რათა უზრუნველყოფილი იყოს დროისადმი მგრძნობიარე ამოცანების უფრო სწრაფად შესრულება. ამ გზით, წინა პლანზე აპლიკაციები და სერვისები, რომლებითაც მომხმარებელი სარგებლობს, არ შეანელებს და არ გამოიწვევს მუშაობის არასაჭირო პრობლემებს.
მიუხედავად იმისა, რომ ენერგეტიკული ინფორმირებულობის დაგეგმვა არის შემდეგი მნიშვნელოვანი რამ, ასევე შეიძლება ითქვას, რომ ის უკვე აქ არის და დიდი ხანია იყო. როდესაც უფრო და უფრო მეტი მოწყობილობა ხვდება მეინსტრიმში Energy Aware Scheduling-ით, აქ არის მობილური დამუშავების ეფექტურობის ახალი ხანა.
Round-Robin, CFS, HMP და EAS-ის დადებითი და უარყოფითი მხარეები
მიუხედავად იმისა, რომ ჩემი გრაფიკული უნარები დაბალია, მე შევკრიბე სურათი, რომელიც უნდა შეაჯამოს თითოეული ამ გრაფიკის დადებითი და უარყოფითი მხარეების შესახებ.
მინდა განსაკუთრებული მადლობა გადავუხადო XDA-ს აღიარებულ კონტრიბუტორს მუსტაფა ვაელი რომლის ახსნა-განმარტებები EAS-ის სხვადასხვა ასპექტების შესახებ დიდად დაეხმარა ამ სტატიის განხორციელებას. ასევე მინდა მადლობა გადავუხადო XDA-ს აღიარებულ დეველოპერს ჯოშუო, XDA აღიარებული დეველოპერი RenderBroken და Mostafa Wael მისი წერისთვის EAS-ზე. მათთვის, ვინც დაინტერესდა EAS-თან დაკავშირებული ნაწილებით, Linaro-ს აქვს ბევრი დოკუმენტაცია EAS-ზე, რომელთა წაკითხვაც შეგიძლიათ.