openEuler資源利用率提升之道06:虛擬機器混部OpenStack排程
虛擬機器混合部署是指把對 CPU、IO、Memory 等資源有不同需求的虛擬機器通過排程方式部署、遷移到同一個計算節點上,從而使得節點的資源得到充分利用。
虛擬機器混合部署的場景有多種,比如通過動態資源排程滿足節點資源的動態調整;根據使用者使用習慣動態調整節點虛擬機器分佈等等。而虛擬機器高低優先順序排程也是其中的一種實現方法。在單機的資源排程分配上,區分出高低優先順序,即高優先順序虛機和低優先順序虛機發生資源競爭時,資源優先分配給前者,嚴格保障其 QoS。
在 OpenStack Nova 中引入虛擬機器高低優先順序技術,再配合 Skylark QoS 服務能力,可以一定程度上滿足虛擬機器的混合部署要求。
實現方案
在 Nova 的虛擬機器建立、遷移流程中引入高低優先順序概念,虛擬機器物件新增高低優先順序屬性。高優先順序虛擬機器在排程的過程中,會盡可能的排程到資源充足的節點,這樣的節點需要至少滿足記憶體不超賣、高優先順序虛擬機器所用 CPU 不超賣的要求。
使用者建立 flavor 或建立虛機時,可指定其優先順序屬性。但優先順序屬性不影響 Nova 現有的資源模型及節點排程策略,即 Nova 仍按正常流程選取計算節點及建立虛機。虛機高低優先順序特性主要影響虛機建立後單機層面的資源排程分配策略。高優先順序虛機和低優先順序虛機發生資源競爭時,資源優先分配給前者,嚴格保障其 QoS。
Nova 針對虛機高低優先順序特性有以下改變:
-
VM 物件和 flavor 新增高低優先順序屬性配置。同時結合業務場景,約束高優先順序屬性只能設定給綁核型別虛機,低優先順序屬性只能設定給非綁核類虛機。 -
對於具有優先順序屬性的虛機,需修改 libvirt XML 配置,讓單機上的 QoS 管理元件(名為 Skylark)感知,從而自動進行資源分配和 QoS 管理。 -
低優先順序虛機的綁核範圍有改變,以充分利用高優先順序虛機空閒的資源。
如何使用
準備
假設有如下一臺主機:
-
假設主機有 12 個 cpu core。
-
OS 是 openEuler 22.09,已安裝 Skylark 服務,且核心版本符合 Syklark 要求。
-
已基於 RPM 安裝部署好了 OpenStack Yoga 版本。
安裝
-
安裝 plugin
dnf install openstack-plugin-priority-vm
-
配置資料庫
nova-manage api_db sync
nova-manage db sync
3.重啟 nova 服務
systemctl restart openstack-nova-*
配置
-
修改 nova.conf
檔案
開啟/etc/nova/nova.conf
,修改[compute]
內的cpu_dedicated_set
、cpu_shared_set
和cpu_priority_mix_enable
,其中cpu_dedicated_set
表示高優先順序虛機使用的 CPU 核心,cpu_shared_set
指低優先順序虛機使用的 CPU 核心,cpu_priority_mix_enable
表示是否允許低優先虛機同時使用cpu_dedicated_set
的 CPU 核心,預設值是 False。
以此文章的主機為例,設定如下:
[compute]
cpu_dedicated_set=0-7
cpu_shared_set=8-11
cpu_priority_mix_enable=True
-
重啟 nova-compute 服務
systemctl restart openstack-nova-compute
使用
-
建立新的 flavor
openstack flavor create --ram 8192 --disk 50 --vcpus 8 --public --property hw:cpu_priority='low' low_prio
openstack flavor create --ram 8192 --disk 50 --vcpus 8 --public --property hw:cpu_priority='high' --property hw:cpu_policy='dedicated' high_prio
-
使用新 flavor 建立虛擬機器
openstack server create --flavor high_prio --image openEuler2203 --network private-network high_prio_test
openstack server create --flavor low_prio --image openEuler2203 --network private-network low_prio_test
檢查
使用virsh list
檢視虛機 id,然後使用virsh vcpuinfo
命令分別檢視兩個虛機,可以發現high_prio_test
的 CPU 與 0-7 號 CPU 一一繫結,low_prio_test
的 CPU 在 0-11 號 CPU 中範圍繫結。
總結
本特性的實現已釋出在 openEuler 22.09 創新版的 OpenStack Yoga 版本中,也會在即將釋出的 openEuler 22.03 LTS SP1 的 OpenStack Train 中整合。歡迎大家體驗,在 OpenStack SIG 中反饋問題、交流經驗。
加入我們
文中所述資源利用率提升技術,由 Cloud Native SIG、Kernel SIG、OpenStack SIG、Virt SIG 共同參與,其原始碼將在 openEuler 社群逐步開源。如果您對相關技術感興趣,歡迎您的圍觀和加入。您可以新增小助手微信,加入對應 SIG 微信群。
系列文章回顧
[1] openEuler 資源利用率提升之道 01 :概論 :http://mp.weixin.qq.com/s/x9sdogEslRJJ5mDbs5bxgQ
[2] openEuler 資源利用率提升之道 02 :典型應用下的效果 :http://mp.weixin.qq.com/s/anOTdRIufYaj5pl4hy1e_A
[3] openEuler 資源利用率提升之道 03 :rubik 混部引擎 :http://mp.weixin.qq.com/s/jJXeBCRM2k92rPqyA6SL-Q
[4] openEuler 資源利用率提升之道 04 :CPU 搶佔和 SMT 隔離控制 :http://mp.weixin.qq.com/s/8Odi24WjKAho8SYsYd7a1A
[5] openEuler 資源利用率提升之道 05 :虛擬機器混部介紹與功耗管理技術 :http://mp.weixin.qq.com/s/wXE5cpx2jBvXEISToqhW3Q
本文分享自微信公眾號 - openEuler(openEulercommunity)。
如有侵權,請聯絡 [email protected] 刪除。
本文參與“OSC源創計劃”,歡迎正在閱讀的你也加入,一起分享。
- 玩轉機密計算從 secGear 開始
- openEuler資源利用率提升之道06:虛擬機器混部OpenStack排程
- openGauss Cluster Manager RTO Test
- JVM 鎖 bug 導致 G1 GC 掛起問題分析和解決【畢昇JDK技術剖析 · 第 2 期】
- 手把手帶你玩轉 openEuler | openEuler 的使用
- 681名學生中選!暑期2021開啟火熱“開源之夏”!
- 手把手帶你玩轉 openEuler | 初識 openEuler
- StratoVirt 中的 PCI 裝置熱插拔實現
- 使用 NMT 和 pmap 解決 JVM 資源洩漏問題
- JNI 中錯誤的訊號處理導致 JVM 崩潰問題分析
- Java Flight Recorder - 事件機制詳解
- 畢昇 JDK 8u292、11.0.11 釋出!
- StratoVirt 中的虛擬網絡卡是如何實現的?
- openEuler結合ebpf提升ServiceMesh服務體驗的探索
- 我的openEuler社群參與之旅
- StratoVirt 的中斷處理是如何實現的?
- 看看畢昇 JDK 團隊是如何解決 JVM 中 CMS 的 Crash
- 使用 perf 解決 JDK8 小版本升級後效能下降的問題【畢昇JDK技術剖析 · 第 1 期】
- 2021年畢昇 JDK 的第一個重要更新來了
- 漏洞盒子 × openEuler | 廣邀白帽共築安全的Linux開放應用生態