通過 Threadripper/EPYC 系統中的核心禁用/重新啟用核心
作為我目前研究的一部分,我一直在進行測試,通過回顯
0
或模擬垂直縮放1
來禁用/重新啟用核心。/sys/devices/system/cpu/cpuN/online
使用 Kernel v4.4.0 (Ubuntu 16.04 LTS),這可以在多台 Xeon E3 機器上完美執行。最近,我有機會在 Ubuntu 16.04 上使用 v4.4.0 測試雙路 EPYC 7281 機器。在這些系統上禁用核心工作得很好。然而,當重新啟用它們時,lscpu 和 htop 將它們顯示為線上,但在我重新啟動機器之前,它們沒有再次安排任何工作,即當我對機器施加壓力時,htop 顯示只有尚未禁用的核心並在使用之前重新啟用。
換句話說:在 Xeon 機器上,我首先禁用除了核心 #0 之外的所有核心,然後再次重新啟用它們。之後,一切都像禁用核心之前一樣正常執行。在 EPYC 機器上,被禁用的核心再也不會被使用,即使在重新啟用它們之後,即使它們被 htop 和 lscpu 顯示為可用。
我不能再訪問 EPYC 機器來自己進一步測試(只有 2 週,並且不允許升級到更新的核心),但我們正在考慮購買新硬體,我需要了解 Threadripper/ EPYC(一般為 Zen)通常無法通過核心禁用/重新啟用核心,或者這是否只是一些奇怪的孤立問題。
我的問題是(是):
- 核心不能正常聯機是否是舊 4.4 的問題。核心,那麼如果我要升級到更新的核心,這個問題會得到解決嗎?不幸的是,我無法對此進行測試,因為我不再能夠訪問 EPYC 機器(否則,這篇文章將不會出現在這裡 :))。但是,我會完全控制我們的新硬體。因此,如果此問題由較新的核心修復,我會很高興。
- 如果不是因為核心版本,為什麼 EPYC 會以這種方式執行,我能做些什麼來解決這個問題?
我試圖尋找答案,但到目前為止還沒有找到任何結論性的東西,除了顯然自核心 v4.10 及更高版本以來,基於 Zen 的 CPU 顯然有很多更新檔。
我查看了這個連結,它提供了一些有關英特爾 CPU 的程序如何工作的詳細資訊,甚至連結到負責禁用核心的實際程式碼。不幸的是,這並沒有太大幫助,至少我沒有足夠的理解來回答我的問題。
這也無濟於事,因為我需要在執行時垂直擴展核心,而無需重新啟動。
我還在較新的核心中發現了一些對新電源管理系統的引用,但這超出了我的想像:-/
或者也許不是探勘和找到問題的根源,如果目前擁有帶有最新核心的 Threadripper 或 EPYC 系統的任何人都可以通過禁用/重新啟用核心然後載入它們來執行快速測試就足夠了它們是否被正確利用?
我非常感謝您對這個問題的任何見解和幫助!
如有必要,我會在這裡提供更多詳細資訊,我不知道還需要什麼來解釋這種行為。另外,這是提出這個問題的正確交流方式,還是您會推薦任何其他尋求幫助的方式?
好的,為了後代,我已經通過實驗找到了答案。
我的一位同事在使用核心 v4.15 的滿載 EPYC 7281 機器上進行了快速測試,禁用了 31/32 個核心並再次重新啟用它們。所有禁用的核心都被再次正確使用,所以我之前遇到的問題似乎已經消失了。
目前尚不清楚哪個版本包含此修復程序,或者是否有任何其他更改因素可能會影響此結果,但現在我相當確定擁有更新的核心可以讓基於 Zen 的 CPU 上的核心禁用/啟用沒有問題。