Alder Lake + Win 11 =效率更提升?

作者 : 黃燁鋒,EE Times China

從Intel、微軟透露的資訊可知的是,Alder Lake + Windows 11,實現了硬體級的調度回饋機制,與此同時Windows 11能夠基於這種回饋來實現完全「動態」的調度…

Intel今年Q4準備要推的第12代Core處理器,會同時採用兩種不同的核心——Intel稱其為P-core和E-core,分別對應於性能核心與效率核心;事實上,與Arm大小核心(big.LITTLE或DynamiQ)的思路類似。

不過在一顆處理器上採用不同的核心,對調度來說又可能造成相當大的難題。到底哪些任務放到P-core或大核心上執行,哪些放在E-core或小核心上執行,何時做遷移,很多時候並不是個簡單的事情——而且這非常影響用戶的使用體驗。這就非常考驗作業系統的scheduler本領有多高強了。

前不久的Intel Architecture Day上,一方面是Intel強調了自己的Intel Thread Director機制,可輔助作業系統調度決策——不過可能特指Windows 11;另一方面則是微軟為Intel站台,提到Windows 11對於Intel Thread Director的支援,以及在scheduler方面與Intel之間的合作。

上周Intel在中國追加了一場媒體答疑專場,也再度談到了Intel Thread Director。趁此機會,從高抽象層級來談談這種調度決策方案;順帶也聊聊Arm在這個問題上的一些過往。

 

 

Arm歷史上的兩次重要轉變

Arm起家於低功耗應用,雖然這兩年在高性能領域也多有滲透,不過Arm的小核心IP理念始終是「循序執行」指令。而亂序執行固然能夠提升性能,但它需要耗費更多的電路邏輯來實現亂序,電晶體和互連數量都會大幅增加,功耗亦隨之上升。

Arm最初在設計big.LITTLE大小核心方案的時候,就是基於循序執行更節能,亂序執行性能更強但功耗也高這一邏輯。於是順序小核心用來節能,亂序大核心則用於提升性能。蘋果的處理器雖然也基於Arm指令集,但在大小核設計上就不是這麼做的了。

雖然本文沒有仔細考察Arm歷史上的調度機制變遷,不過至少有兩次方向的重要轉變值得一提;而且Linux、Google、晶片廠商、OEM在這其中也做出了相當多的探索和改進。

 

 

早年Arm給過一張big.LITTLE設計不同處理器核心的實施方案,其一是以大核心叢集和小核心叢集為單位的整組遷移——這種方案是最暴力的,作業系統scheduler一次只能看到一個叢集。同一時間只能有一個叢集是活躍狀態,負載不是在大核心叢集,不然就是在小核心叢集。早年的三星Exynos和Nvidia Tegra就是這麼做。

 

後來發展出了in-kernel switcher,也就是上圖中間的CPU Migration,一個大核心和一個小核心成對。作業系統scheduler可以看到4個處理器對,同一時間每一對就只有一個核心可以處在活躍狀態——也就是整顆處理器同一時間只有一半的核心是工作的。

 

近代比較具有代表性的是GTS (global task scheduling),或者也叫HMP (heterogeneous multi-processing)——作業系統scheduler能夠看到所有的處理器核心,任意時間它們都能啟動。當然這只是個大方向的切分,其中還有很多轉變細節。

 

採用完整GTS調度方案的應該是海思Kirin 920時期的榮耀6手機(2014年)。在Linux Kernel 3.8之後,融入了一種針對每個scheduler entity (一個進程或進程的一個Cgroup)進行持續負載追蹤的機制——名為per-entity load tracking (PELT),這是GTS的核心所在。在此之前(Linux Kernel 3.7和更早版本) CFS (completely fair scheduler)是基於per-run-queue佇列追蹤。具體的這裡不展開,不過per-entity load tracking應該算是比較大的一次轉變。

 

 

GTS事實上是Arm和Linaro共同開發,這類機制也算是晶片生態中非常重要的組成部分。PELT有三個最主要的控制參數,上閾值、下閾值(由核心scheduler定義的值)和平均負載週期(決策制定的時間視窗),如果某個任務負載超過上閾值,則遷往大核心叢集;掉落到下閾值,則回到小核心叢集。這裡的某些參數應該是由OEM決定,比如說對負載做平均的時間視窗,華為當初定了16ms,而三星則選擇了32ms。

這種方案的一大問題是,scheduler事實上完全不清楚,在不同核心之間做執行緒遷移時,硬體的功耗情況如何。比如說有少量的高負載執行緒,從大核心叢集遷往小核心叢集,後又遷回大核心。從直覺來看,大核心叢集可以在一段時間內休息,還能關掉L2 cache節能,但對核心叢集做重複、高頻的開關操作,其實際功耗,可能會比單純讓這些負載一直待在大核心上更高。

AnandTech早年在評測Galaxy Note 4 (Exynos 5433)的時候就曾吐槽過GTS,評價軟體是big.LITTLE技術的「阿基里斯之踵」,嚴重限制了其潛力。加上當時三星還加了提頻機制,降低了遷移的閾值,使功耗問題進一步惡化。另外還有一些問題,比如PELT機制的特性,決定了它對於執行緒在小核心與大核心間遷移,有比較久的延遲。

 

 

當時有更多的晶片廠商在這個問題上有過一些探索,比如高通在Snapdragon 810時期推行某種「基於視窗」的系統——這種機制對任務的多個最近歷史的非空視窗進行追蹤,同時查看近期的最大值,來查看是否有任務會突然需要大量的CPU資源。如此一來,某個執行緒在空閒、高負載狀態之間的切換,所需的等待週期會短很多。

高通這一時期的方案和GTS在很多組成部分上都還是比較類似,不過的確存在著不少改良,包括基於每瓦性能對執行緒在大核心之間做遷移,還有對於執行緒遷移功耗的感知能力等,這些都是原GTS機制所沒有的。另外也包括引導CPU頻率governor,在做任務遷移後,提升核心效率等。

高通在big.LITTLE方面的探索,以前還是走在Arm前方。Arm這一時期的Energy Aware Scheduling (EAS)方案尚未真正實現商用,同期主線核心,EAS並未得到普遍支持。晶片廠商在調度問題上都有各自的魔改解決方案,似乎最晚是到2019年2月,Arm開發者社區發佈文章談到Linux 5.0主線融入了EAS調度方案,這應該算是Arm的又一次重要轉向。Android-3.18核心開始,EAS得到支持。

EAS讓Linux scheduler對核心之間的功耗/性能區別有感知。EAS以CPU能耗模型,來最佳化工作負載的調度。對應的能耗模型為scheduler提供CPU拓撲的抽象可視性,基於該能耗模型,EAS也能夠預測在某個CPU上執行任務的能耗的影響,決策實現能耗最小化。

另外EAS也和DVFS子系統作了比較緊密的關聯——governor也利用負載追蹤參數來決策CPU的頻率變化。這種程度的關聯配合,就讓EAS能夠估算任務遷移,對於系統能耗的影響,將這方面的能耗加入到遷移決策流程中,是早期GTS的一大軟肋。

 

 

上圖是在Arm Juno R0平台用EAS方案,使用RT-App (一個負載生成器),主要傾向於考察能耗,並以Hackbench作為性能基準測試。這其中還是能夠看到顯著差異,主要表現在能耗上。

Intel與微軟的攜手嘗試

從上文可看出,big.LITTLE為代表的不同核心構成相同處理器的結構,在調度機制上是經過了多代演進。

Alder Lake的誕生,也需要Intel和微軟配合打造「混合架構」處理器的調度機制(雖然更早的Lakefield也已經有了這方面的需求;微軟和高通現在應該也有這塊的合作)。PC平台以前對於功耗還不像手機那麼敏感,但隨著Arm開始在PC市場大展身手,尤其蘋果M1的問世說明像筆記型電腦這類形態的裝置,對低功耗的追求也可以很高。所以Alder Lake的一個重要組成部分就是E-core效率核心。

這一代E-core架構的思路和Arm的循序執行小核可不一樣。E-core (Gracemont)的整體運算力與效率甚至比幾年前的Skylake還要領先很多。當年Arm的難題現在也擺在了Intel的面前,Intel的解決方案是Intel Thread Director。

Intel在本次追加的答疑專場中提到,「以前Windows 10是怎麼做的呢?當時是P-core最強大,有遊戲要執行時就讓P-core來做,有背景(後台)任務要執行時,就讓E-core來做——可省電。後台的工作有可能是備份資料、掃毒等。這是非常直覺的判斷方法。」

筆者認為,Windows 10的機制應該也絕對不會這麼簡單。在Lakefield之時,微軟和Intel應該就已經有這方面的合作了。基於Intel對E-core的定位,E-core實際上和Arm那邊的小核心還是很不一樣,而強調其「吞吐」、「多執行緒」執行效率。E-core不是「弱核心」,或者不只是專注於低功耗的概念。

微軟Windows核心團隊開發經理Mehmet Iyigun先前曾說:「要做出決策,scheduler需要考慮一些因素,諸如執行緒優先順序、所屬應用,以及應用是在前台還是後台。」這段話應該能表現出Windows 10在考察因素方面的單一性。

「直到現在為止,scheduler對於跑在執行緒上的工作負載,都還是沒有可視性的:無論是複製記憶體、回檔迴圈還是執行複雜運算。」Iyigun說,「如此一來,當高性能核心供不應求時,後續做出的決策就可能不是最佳的,因為scheduler不清楚究竟誰最能從高性能核心收益。」

 

 

這一例跑的是典型的媒體、內容創作型軟體,綠色框表示大部分執行標量指令,藍色表示大部分執行向量指令;他們都被放在了P-core;青色表示幕後工作,這些執行緒放到了E-core上。

而Windows 11導入了對於Intel Thread Director的支持。需要明確的是,Intel Thread Director主要是處理器這一側的硬體技術,而不是指作業系統scheduler,也不是一種完整的調度機制。它會監控指令組合、每個核心的當前狀態,以及細細微性的相關微架構的觀測。據說是Alder Lake為此整合了一個performance monitoring unit,透過它來即時監控處理器核心運作情況,如此一來作業系統就能利用這些資訊做調度決策了。

用Intel工程師的話來說,是作業系統能夠獲得「hint」,並基於此再做決策,明確某個任務該上P-core還是E-core。Intel Architecture Day上,其用戶端架構師Rajshree Chabukswar也提到,「傳統的作業系統,會基於有限的資訊做出決策,比如前台還是後台,而Thread Director是增加了新的維度。」

這次答疑會上,Intel提到Thread Director「彙報給作業系統的資訊很詳細,目前這個task已經做到了什麼程度、core耗電多少等,是指令層級的,哪些指令已經在執行的……沒有Intel Thread Director之前,不會彙報到這麼詳細。」

 

 

Iyigun則說:「有了Thread Director的回饋,Windows 11的執行緒scheduler就能更智慧地、基於工作負載,來動態挑選最合適的核心,獲得最佳效率和性能。即便所有的P-core都處在忙碌狀態,只要有新的執行緒在系統看來更適合放在P-core上,那麼P-core上原有的某個執行緒就會被替換下來。」

這其實也是Intel特別強調的Thread Director「動態」特性。比如所有P-core均處於忙碌狀態,但此時有個需要使用AI指令的AI執行緒對高性能提出需求。在這種情況下,Thread Director會向作業系統發出一個「hint」。與此同時Thread Director也會去發現,基於相對性能排序,是否存在一些候選執行緒,可以從P-core移往E-core,讓位於AI執行緒。

多提一句,這種「指令層級」或者基於(現有任務所需的)指令的調度(比如AI指令集對應的任務,應用於P-core),和前文提到Arm基於核心功耗、運算力需求,並設立相應閾值做調度的方式,可能是存在相當大的不同。

「這是我們這項技術動態特性的體現,讓所有軟體任務保持動態性。」Intel表示。不過,「動態」應該也是Arm那邊的目標之一,尤其節能、高效對Arm而言很重要。對Intel而言,可能與能效並重(或更重要)的,也在於不能犧牲性能。所以雙方在這種混合架構設計理念上,還是存在不少微妙差異。

另一點可表現「動態」這一特性的是,如果位於P-core上的某個執行緒進入回檔狀態、等待工作出現,那麼Thread Director也會將這個情況彙報給作業系統。這個執行緒也會被遷移到E-core。

Chabukswar事實上還在會上演示某些應用,所有執行緒在其執行過程中,會經歷多個階段。比如某些時刻向量執行緒、AI執行緒也會進入E-core——這是因為它們在某些階段會有一些標量指令。「動態特性,就是要將正確的執行緒,安排到正確的核心上,基於現有執行上下文。」他說。

所以從Intel、微軟透露的資訊可知的是,Alder Lake + Windows 11,實現了硬體級的調度回饋機制,與此同時Windows 11能夠基於這種回饋來實現完全「動態」的調度。這裡還有一些資訊沒有提到,比如從硬體層面對一個執行緒做profile,時延短至30μs,比傳統作業系統scheduler相同的結果快很多。

 

 

另外,Intel的P-core其實還支持超執行緒,這理論上應該給執行緒調度增加了難度。現在可知的是,針對某個應用,每個執行緒會首先考慮佔滿每個核心,包括P-core和E-core,隨後再考慮啟用P-core的超執行緒——據說可以實現相對更高的性能。所以E-core上或許也將能見到一些高性能需求負載。

最後值得一提的是,對於Windows 11而言,應用開發者可以透過新的API來指定其執行緒的QoS屬性,告知scheduler更傾向於P-core還是E-core。微軟強調了Windows 11中的各組成部分,比如Edge流覽器就已經應用了EcoQoS API。所以未來「最佳化好」的軟體,理論上能實現更高的效率提升。

另一個很多人關心的重點是,在未來的Alder Lake PC上,Windows 10是否在性能和效率上因此與Windows 11拉開差距,Intel在這個問題上的表態非常模糊。外媒之前有消息說Windows 10未來也會受惠於Thread Director,未知真假(畢竟Windows 11的升級重點之一就是不同核心的調度特性提升)。

其實基於Intel和微軟提供的這些資訊,筆者也拼不出調度策略更完整的版圖,只是聽Intel舉了一些例子;並談到Intel Thread Director的部分特點。而Intel Thread Director的實際效果如何,還是有待市場和用戶檢驗。

本文原刊登於EE Times China

 

 

 

 

 

 

加入我們官方帳號LINE@,最新消息一手掌握!

發表評論