如何提升虛擬機(jī)性能?除了綁核還有它可以!

第一章 大頁內(nèi)存與小頁內(nèi)存

1.1 小頁內(nèi)存

在Linux系統(tǒng)中,默認(rèn)情況下,內(nèi)存管理器將物理內(nèi)存劃分為小頁(4KB)或大頁(2MB或1GB)的大小。Linux內(nèi)核會根據(jù)需要分配和釋放內(nèi)存,以確保系統(tǒng)的穩(wěn)定性和性能。

在默認(rèn)情況下,Linux系統(tǒng)會使用小頁內(nèi)存。小頁內(nèi)存管理器能夠更好地處理內(nèi)存碎片,但是在處理大量內(nèi)存時,可能會導(dǎo)致性能下降。

1.2 大頁內(nèi)存

大頁內(nèi)存是一種更高效的內(nèi)存分配方式,它將物理內(nèi)存劃分為更大的內(nèi)存頁,通常是2MB或1GB。相比之下,小頁內(nèi)存通常是4KB。

大頁內(nèi)存可以提高系統(tǒng)的性能,因為它減少了內(nèi)存管理器的負(fù)擔(dān)。大頁內(nèi)存還可以減少缺頁中斷的數(shù)量,從而提高系統(tǒng)的響應(yīng)速度。

但是,使用大頁內(nèi)存需要更多的物理內(nèi)存,并且在處理小量的內(nèi)存時可能會浪費內(nèi)存。此外,大頁內(nèi)存的分配和釋放需要更長的時間,因為它們的大小更大。

1.3 舉個栗子

舉個例子,假設(shè)系統(tǒng)需要為一個應(yīng)用程序分配1GB內(nèi)存,如果使用小頁內(nèi)存,系統(tǒng)將需要分配262144個4KB頁。在這種情況下,內(nèi)存管理器將需要處理262144個頁表,這會導(dǎo)致CPU的負(fù)載增加,并且可能會導(dǎo)致較高的延遲。

相比之下,使用大頁內(nèi)存可以減少系統(tǒng)的頁表數(shù)量,從而降低內(nèi)存管理器的負(fù)擔(dān)。例如,如果使用2MB的大頁內(nèi)存,系統(tǒng)將只需要分配512個頁表,這將顯著減少CPU的負(fù)載和響應(yīng)時間。

另外,小頁內(nèi)存還可能會導(dǎo)致內(nèi)存碎片問題。當(dāng)系統(tǒng)分配和釋放大量小頁內(nèi)存時,可能會產(chǎn)生很多碎片,這會使內(nèi)存管理器更難以找到連續(xù)的可用內(nèi)存塊,從而降低性能。

因此,在大量使用內(nèi)存時,使用大頁內(nèi)存可以提高系統(tǒng)的性能和響應(yīng)速度。

第二章 如何配置虛擬機(jī)使用大頁內(nèi)存

2.1 Fusionsphere OpenStack中配置

1、如果想在Fusionsphere中使用大頁內(nèi)存,需要在CPS中進(jìn)行配置(https://方向代理地址:8890)2、選擇“配置 > 內(nèi)核參數(shù)”,在配置內(nèi)核參數(shù)頁面開啟自動大頁內(nèi)存并設(shè)置大頁內(nèi)存的大小即可(一般會設(shè)置為1024M即1G),開啟后需要重啟主機(jī)生效。

重啟后可查看內(nèi)核參數(shù)主機(jī)組的生效情況,也可以登陸某臺主機(jī),使用以下方式查看:

查看/proc/meminfo文件:


    cat?/proc/meminfo

    • 在輸出中查找“HugePages_Total”和“Hugepagesize”字段。如果這些字段存在,則表示系統(tǒng)開啟了大頁內(nèi)存,并且“Hugepagesize”字段將顯示大頁的大小。
    • 例如,以下是包含“HugePages_Total”和“Hugepagesize”字段的示例輸出:

    MemTotal:???????131881008?kB
    MemFree:????????115646736?kB
    MemAvailable:???124197000?kB
    Buffers:???????????32000?kB
    Cached:??????????8918052?kB
    SwapCached:????????????0?kB
    Active:??????????9229648?kB
    Inactive:????????4845996?kB
    Active(anon):????4443312?kB
    Inactive(anon):??1104812?kB
    Active(file):????4786336?kB
    Inactive(file):??3741184?kB
    Unevictable:???????????0?kB
    Mlocked:???????????????0?kB
    SwapTotal:???????8388604?kB
    SwapFree:????????8388604?kB
    Dirty:???????????????496?kB
    Writeback:?????????????0?kB
    AnonPages:???????5395160?kB
    Mapped:??????????1392456?kB
    Shmem:???????????1182520?kB
    KReclaimable:????1077360?kB
    Slab:????????????1306016?kB
    SReclaimable:????1077360?kB
    SUnreclaim:???????228656?kB
    KernelStack:???????19296?kB
    PageTables:????????47668?kB
    NFS_Unstable:??????????0?kB
    Bounce:????????????????0?kB
    WritebackTmp:??????????0?kB
    CommitLimit:????74977308?kB
    Committed_AS:???10219164?kB
    VmallocTotal:???34359738367?kB
    VmallocUsed:??????726788?kB
    VmallocChunk:???34358939728?kB
    HardwareCorrupted:?????0?kB
    AnonHugePages:???2064384?kB
    ShmemHugePages:????????0?kB
    ShmemPmdMapped:????????0?kB
    HugePages_Total:????1024
    HugePages_Free:??????1024
    HugePages_Rsvd:?????????0
    HugePages_Surp:?????????0
    Hugepagesize:???????2048?kB
    DirectMap4k:?????4112384?kB
    DirectMap2M:???131072000?kB
    DirectMap1G:?????????0?kB

    在這個示例中,輸出中包含“HugePages_Total”和“Hugepagesize”字段,表示系統(tǒng)開啟了大頁內(nèi)存,大頁大小為2048KB。

    如果“HugePages_Total”字段為0,則表示系統(tǒng)未開啟大頁內(nèi)存。

    總之,要查看系統(tǒng)是否開啟了大頁內(nèi)存以及大頁大小,可以查看/proc/meminfo文件并查找“HugePages_Total”和“Hugepagesize”字段。如果這些字段存在,則表示系統(tǒng)開啟了大頁內(nèi)存,并且“Hugepagesize”字段將顯示大頁的大小。

    3、創(chuàng)建規(guī)格時,設(shè)置對應(yīng)的大頁內(nèi)存大小即可。

    2.2 KVM虛擬機(jī)配置

    要配置KVM虛擬機(jī)使用大頁內(nèi)存,需要執(zhí)行以下步驟:

    1. 確認(rèn)主機(jī)支持大頁內(nèi)存:運(yùn)行以下命令檢查主機(jī)是否支持大頁內(nèi)存:
    grep?-E?'(vmx|svm)'?/proc/cpuinfo

    如果輸出中包含“vmx”或“svm”,則表示主機(jī)支持大頁內(nèi)存。

    1. 配置主機(jī)使用大頁內(nèi)存:運(yùn)行以下命令以啟用大頁內(nèi)存:
    echo?1?>?/sys/kernel/mm/transparent_hugepage/enabled
    echo?always?>?/sys/kernel/mm/transparent_hugepage/defrag

    這將啟用大頁內(nèi)存并啟用自動碎片整理。

    1. 配置KVM虛擬機(jī)使用大頁內(nèi)存:在創(chuàng)建虛擬機(jī)時,使用以下命令配置虛擬機(jī)使用大頁內(nèi)存:
    virt-install?--name?myvm?--ram?4096?--memorybacking?hugepages=yes?--vcpus?2?--cdrom?/path/to/iso?--disk?path=/var/lib/libvirt/images/myvm.img,size=20?--network?default?--graphics?vnc

    這將創(chuàng)建一個名為“myvm”的虛擬機(jī),該虛擬機(jī)使用4GB RAM,2個CPU,20GB磁盤空間和默認(rèn)網(wǎng)絡(luò),同時啟用大頁內(nèi)存。

    對于已存在的虛擬機(jī),可以修改其xml文件使其使用大頁內(nèi)存。要在XML文件中配置KVM虛擬機(jī)使用大頁內(nèi)存,需要將以下配置添加到XML文件中:

    <memoryBacking>
    ??<hugepages/>
    </memoryBacking>

    具體來說,可以使用以下步驟在XML文件中配置大頁內(nèi)存:

    1. 打開XML文件并定位到<memory>元素。

    2. 在元素內(nèi)部添加以下代碼:

    <memoryBacking>
    ??<hugepages/>
    </memoryBacking>

    1. 保存XML文件并使用virsh define命令重新定義虛擬機(jī)。

    例如,以下是一個XML文件的示例,其中包含配置大頁內(nèi)存的代碼:

    <domain?type='kvm'>
    ??<name>myvm</name>
    ??<memory?unit='KiB'>4194304</memory>
    ??<vcpu?placement='static'>2</vcpu>
    ??<os>
    ????<type?arch='x86_64'?machine='pc-i440fx-2.10'>hvm</type>
    ????<boot?dev='hd'/>
    ??</os>
    ??<devices>
    ????<disk?type='file'?device='disk'>
    ??????<driver?name='qemu'?type='qcow2'/>
    ??????<source?file='/var/lib/libvirt/images/myvm.img'/>
    ??????<target?dev='vda'?bus='virtio'/>
    ????</disk>
    ????<interface?type='network'>
    ??????<mac?address='52:54:00:2a:2c:6e'/>
    ??????<source?network='default'/>
    ??????<model?type='virtio'/>
    ????</interface>
    ??</devices>
    ??<memoryBacking>
    ????<hugepages/>
    ??</memoryBacking>
    </domain>

    在這個示例中,<memoryBacking>元素包含<hugepages/>元素,表示該虛擬機(jī)將使用大頁內(nèi)存。

    總之,要在XML文件中配置KVM虛擬機(jī)使用大頁內(nèi)存,只需要在<memoryBacking>元素中添加<hugepages/>元素即可。

    2.3 Nova創(chuàng)建虛擬機(jī)時配置

    nova?boot?--flavor?<flavor_id>?--image?<image_id>?--nic?net-id=<network_id>?--availability-zone?<availability_zone>?--key-name?<key_name>?--config-drive?true?--block-device-mapping?vda=<volume_id>:::0?--hints?large_page=true?<vm_name>

    其中,--hints large_page=true參數(shù)啟用大頁內(nèi)存。


    第三章 總結(jié)

    使用大頁內(nèi)存可以提高系統(tǒng)的性能,但需要更多的物理內(nèi)存。要配置KVM虛擬機(jī)使用大頁內(nèi)存,需要在主機(jī)上啟用大頁內(nèi)存,并在創(chuàng)建虛擬機(jī)時啟用大頁內(nèi)存。

    如果您喜歡我的文章,歡迎關(guān)注我的同名公眾號哦~

    本文使用 文章同步助手 同步

    ?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
    【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
    平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

    相關(guān)閱讀更多精彩內(nèi)容

    友情鏈接更多精彩內(nèi)容