设为首页 收藏本站
查看: 1531|回复: 0

[经验分享] [转] Hyper-V如何避免NUMA對效能上的影響

[复制链接]

尚未签到

发表于 2015-4-3 10:06:46 | 显示全部楼层 |阅读模式
本帖最后由 wuyvzhang 于 2016-8-2 17:25 编辑

  =========================================================   NUMA在一般人使用Hyper-V時,是一個非常容易被忽略的部份   它的設定,在這裡 DSC0000.jpg   而這項功能為何會有降低整體效能的可能?   這裡有一份電子報,有介紹何謂NUMA架構,可以參考一下這張圖片 DSC0001.gif      多核心計算環境—NUMA與CPUSET簡介      然而,這項技術,運用在虛擬化的主機時,如果是未經過計算的情況下,就有可能產生效能上的問題   因為,它在Hyper-V上運作會是像下圖   下面的圖片來源,是國外的IT人員的文章   下圖這樣的存取模式,在NUMA中又稱為本地端記憶體存取 DSC0002.png      然而,Virtual Machine在某些情況下,就會產生下圖的情況(像是Node1的Memory已經不足,而調用Node2的Memory)   又稱為非本地端記憶體存取 DSC0003.png      接下來的案例會展示這樣的一種情況   這是我這次測試的主機板Tyan S7016,是一個2 Socket Server 共18個DIMM DSC0004.jpg   CPU的實體配置是Intel E5620兩顆(E5620實體核心數是四核心,開啟HT後,一顆是八個執行緒)   而18個DIMM則是插滿DDR3 ECC 8GB   所以一共會有16個Processor、144GB的Memory DSC0005.jpg   所以,一個NUMA的節點將會是8個Processor、72GB的RAM      我們可以透過資料收集器,去得知目前的NUMA Node在Memory跟CPU的配置情況   ※分頁的大小是4KB,18,874,272個分頁(4KB/個),也就是71.99GB(少掉的那一點點應該是Hypervisor用掉了)   如果是18,874,368個分頁(4KB/個),就是剛好72GB DSC0006.jpg      然而Hyper-V在分配NUMA時,會自動盡可能的避免存取到非本地端記憶體的節點   一樣可以透過資料收集器,去取得目前虛擬機的NUMA配置節點,以及是否有用到非本地端記憶體   下圖就是一個使用到非本地端記憶體的案例(紅框處) DSC0007.jpg   藍框的部份,則是該Virtual Machine所使用的主要NUMA節點是NUMA Node 0,沒有使用到非本地端記憶體   綠框的部份,則是該Virtual Machine所使用的主要NUMA節點是NUMA Node 1,沒有使用到非本地端記憶體   紅框的部份,則是該Virtual Machine所使用的主要NUMA節點是NUMA Node 0,使用了約9G多的非本地端記憶體      上面這個案例,是我先將記憶體在NUMA Node 0已使用約43GB、NUMA Node 1則是使用60GB的情況(這是自動分配的使用狀況)   然後,在將ServiceVM00006這部Virtual Machine以40GB RAM啟動   因為沒有任何一個Node符合可以使用完全非本地端記憶體,所以就會產生這個問題   但是實際上,我這部機器如果照這樣的設定,將VM全開一定要用到NUMA非本地端記憶體嗎?      其實是不用到的,我們可以先依據NUMA節點的記憶體配置以及CPU配置,來評估要如何手動配置VM該屬於哪一個NUMA節點   我們可以透過這個PowerShell去指派哪些VM該用哪一個NUMA Node的資源去啟動   這個PowerShell的來源是微軟官方Virtual Machine開發團隊的MSDN Blog提供的,網址如下:      相信小弟人品的,就請自行取用吧 view source print?
01################################################
02# Developer: Anthony F. Voellm
03# : Taylor Brown
04# Copyright (c) 2008 by Microsoft Corporation
05# All rights reserved
06#
07# This is "demonstration" code and there are no
08# warrantees expressed or implied
09################################################
10
11
12
13# This script will set the Virtual Machine to run
14# on a specific NUMA node
15
16
17
18# Check command line arguments
19
20if (($args.length -lt 1) -or
21 (($args[0] -ne "/list") -and
22 ($args[0] -ne "/set") -and
23 ($args[0] -ne "/clear")) -or
24 (($args[0] -eq "/set") -and ($args.length -lt 3)) -or
25 (($args[0] -eq "/clear") -and ($args.length -lt 2))) {
26 Write-Host "numa.ps1 /list []"
27 Write-Host "numa.ps1 /set []"
28 Write-Host "numa.ps1 /clear []`n"
29 Write-Host "Options:"
30 Write-Host "`t/list - show configured VM's"
31 Write-Host "`t/set - set the NUMA node for the VM"
32 Write-Host "`t/clear - clear NUMA node seting for the VM"
33 exit;
34 }
35
36
37
38# just display VM's
39if ($args[0] -eq "/list") {
40 if ($args.length -gt 1) {
41 $HyperVHost = $args[1];
42 }
43 Get-WmiObject -Namespace 'root\virtualization' -Query "Select * From Msvm_ComputerSystem" | select ElementName
44 exit;
45}
46
47
48
49# Set or clear
50
51$HyperVHost = '.';
52if ($args[0] -eq "/set") {
53 if ($args.length -gt 3) {
54 $HyperVHost = $args[3];
55 }
56 $VMName = $args[1];
57 $RequiredNode = $args[2];
58} elseif ($args[0] -eq "/clear") {
59 if ($args.length -gt 2) {
60 $HyperVHost = $args[2];
61 }
62 $VMName = $args[1];
63}
64
65
66#Main Script Body
67$VMManagementService = Get-WmiObject -Namespace root\virtualization -Class Msvm_VirtualSystemManagementService -ComputerName $HyperVHost
68
69
70$Query = "Select * From Msvm_ComputerSystem Where ElementName='" + $VMName + "'"
71
72
73$SourceVm = Get-WmiObject -Namespace root\virtualization -Query $Query -ComputerName $HyperVHost
74
75
76
77$VMSettingData = Get-WmiObject -Namespace root\virtualization -Query "Associators of {$SourceVm} Where ResultClass=Msvm_VirtualSystemSettingData AssocClass=Msvm_SettingsDefineState" -ComputerName $HyperVHost
78
79
80
81if ($args[0] -eq "/set") {
82 $VMSettingData.NumaNodesAreRequired = 1
83 $VMSettingData.NumaNodeList = @($RequiredNode)
84} else {
85 $VMSettingData.NumaNodesAreRequired = 0
86}
87
88
89
90$VMManagementService.ModifyVirtualSystem($SourceVm, $VMSettingData.PSBase.GetText(1))
  將以上程式碼,儲存成numa.ps1   接著,就可以用PowerShell,使用numa.ps1指定Virtual Machine該在哪一個NUMA Node上   而不再是自動分配,避免有可能產生本地端記憶體不夠配置的問題   指令的範例:   .\numa.ps1 /List可以取得Virtual Machine的名稱   .\numa.ps1 /Set VirtualMachineName 0,則是將這部Virtual Machine指派給NUMA Node 0   .\numa.ps1 /Clear VirtualMachineName,則是恢復自動指派      指派完畢,都是需要將Virtual Machine關機後再開機才會生效。 SO娱乐城:真_人.足球.彩票齐全| 开户送10元.首存送58元.手机可投匸注任何游戏顶级信用匸提现即时到账SO.CC

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-53449-1-1.html 上篇帖子: RHEL 安装Hyper-V后,光驱丢失(/dev下没有cdrom)的解决方法 下篇帖子: Hyper-V最佳实践
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表