ARM64中開啟kdump時內(nèi)存訪問性能優(yōu)化介紹及使用說明
本文中含有需要您注意的重要提示信息,忽略該信息可能對您的業(yè)務(wù)造成影響,請務(wù)必仔細閱讀。
在Linux kernel中使用kdump,可以在發(fā)生內(nèi)核Panic等異常時保存執(zhí)行現(xiàn)場,捕獲內(nèi)存中的信息,從而協(xié)助開發(fā)者或管理員分析崩潰原因。使用kdump功能時,需要在系統(tǒng)啟動時預(yù)留一定量內(nèi)存,且這部分內(nèi)存不會被常規(guī)進程使用。您可以通過在內(nèi)核啟動參數(shù)中增加crashkernel參數(shù)來自定義預(yù)留內(nèi)存大小。本文將介紹在Alibaba Cloud Linux 3 64位 ARM架構(gòu)下的kdump內(nèi)存訪問性能優(yōu)化及使用說明。
使用限制
如需使用kdump內(nèi)存訪問性能優(yōu)化功能,您的實例鏡像必須滿足以下要求:
實例使用的操作系統(tǒng)必須為Alibaba Cloud Linux 3 64位 ARM版。
內(nèi)核版本必須為5.10.134-17.2及以上版本。
優(yōu)化介紹
問題描述
在Alibaba Cloud Linux 3 64位 ARM版本的內(nèi)核環(huán)境中,如果在支持DMA和DMA32的內(nèi)存區(qū)域內(nèi)預(yù)留crashkernel內(nèi)存,將會導(dǎo)致內(nèi)核中的線性映射區(qū)使用小頁映射。這一機制旨在通過/sys/kernel/kexec_crash_size
動態(tài)調(diào)整crashkernel內(nèi)存大小,但會導(dǎo)致基于線性映射區(qū)地址訪問內(nèi)存時性能的降低。
優(yōu)化說明
為避免上述原因?qū)е碌膋dump內(nèi)存訪問性能問題,目前默認為kdump服務(wù)較早預(yù)留crashkernel內(nèi)存,并盡可能建立大頁映射,以提升使用線性映射地址訪問內(nèi)存的效率。該優(yōu)化功能已默認開啟,無需手動進行設(shè)置。
如何關(guān)閉kdump內(nèi)存訪問性能優(yōu)化功能
如果您的業(yè)務(wù)場景不需要使用該內(nèi)存訪問性能優(yōu)化功能,您可以按照以下步驟進行操作,以關(guān)閉kdump
內(nèi)存訪問性能優(yōu)化功能。該操作僅關(guān)閉kdump內(nèi)存訪問優(yōu)化功能,kdump服務(wù)不受影響。
運行以下命令,為內(nèi)核啟動參數(shù)中增加
defer_reserve_crashmem
參數(shù),以關(guān)閉kdump
內(nèi)存訪問性能優(yōu)化功能。sudo grubby --update-kernel="/boot/vmlinuz-$(uname -r)" --args="defer_reserve_crashmem"
說明如果關(guān)閉了kdump內(nèi)存訪問性能優(yōu)化功能,想要再次啟用該優(yōu)化功能,可以運行以下命令
sudo grubby --update-kernel="/boot/vmlinuz-$(uname -r)" --remove-args="defer_reserve_crashmem"
,此命令將重新啟用該優(yōu)化功能。隨后,請運行sudo reboot
命令重啟實例,以使配置生效。運行以下命令,重啟實例使配置生效。
警告重啟實例將導(dǎo)致您的實例暫停運行,這可能引發(fā)業(yè)務(wù)中斷和數(shù)據(jù)丟失。因此,建議您在執(zhí)行此操作之前備份關(guān)鍵數(shù)據(jù),并選擇在非業(yè)務(wù)高峰期進行。
sudo reboot
運行以下命令,查看內(nèi)核啟動命令是否已增加相應(yīng)配置。
grep defer_reserve_crashmem /proc/cmdline
回顯結(jié)果示例如下,表明內(nèi)核啟動參數(shù)添加成功。
常見問題
如何為kdump配置預(yù)留低地址段crashkernel內(nèi)存地址
問題現(xiàn)象
在Alibaba Cloud Linux 3 64位 ARM版本中使用crashkernel功能時,發(fā)現(xiàn)預(yù)留的內(nèi)存起始地址超過4 GB。
可能原因
kernel啟動參數(shù)crashkernel中未指定預(yù)留的內(nèi)存起始地址,導(dǎo)致選擇的預(yù)留內(nèi)存起始地址超過4 GB。
解決方案
如果您遇到上述問題,可以通過在設(shè)置crashkernel內(nèi)存大小時增加offset參數(shù),以指定從低地址段的起始地址預(yù)留內(nèi)存空間,從而解決該問題。具體操作如下。
方式一:按偏移量方式設(shè)置offset
運行以下命令,為內(nèi)核啟動參數(shù)crashkernel增加offset參數(shù)。本示例中,預(yù)留內(nèi)存大小設(shè)置為320M,起始地址設(shè)定為0x40000000。在實際使用中,您需根據(jù)自身情況進行相應(yīng)替換。
sudo grubby --update-kernel="/boot/vmlinuz-$(uname -r)" --args="crashkernel=320M@1024M"
運行以下命令,重啟實例使配置生效。
警告重啟實例將導(dǎo)致您的實例暫停運行,這可能引發(fā)業(yè)務(wù)中斷和數(shù)據(jù)丟失。因此,建議您在執(zhí)行此操作之前備份關(guān)鍵數(shù)據(jù),并選擇在非業(yè)務(wù)高峰期進行。
sudo reboot
運行以下命令,查看內(nèi)核啟動命令是否已增加相應(yīng)配置,示例中使用步驟1中添加的
crashkernel=320M@1024M
作為關(guān)鍵字,在實際使用中,您需根據(jù)自身情況進行相應(yīng)替換。grep "crashkernel=320M@1024M" /proc/cmdline
回顯信息示例如下,表明內(nèi)核啟動參數(shù)添加成功。
方式二:按內(nèi)存量方式設(shè)置offset
運行以下命令,為內(nèi)核啟動參數(shù)crashkernel增加offset參數(shù),本示例中,依據(jù)內(nèi)存大小區(qū)間設(shè)置不同的預(yù)留內(nèi)存大小,起始地址設(shè)定為0x40000000。在實際使用中,您需根據(jù)自身情況進行相應(yīng)替換。
sudo grubby --update-kernel="/boot/vmlinuz-$(uname -r)" --args="crashkernel=crashkernel=0M-2G:0M,2G-64G:256M,64G-:384M@1024M"
運行以下命令,重啟實例使配置生效。
警告重啟實例將導(dǎo)致您的實例暫停運行,這可能引發(fā)業(yè)務(wù)中斷和數(shù)據(jù)丟失。因此,建議您在執(zhí)行此操作之前備份關(guān)鍵數(shù)據(jù),并選擇在非業(yè)務(wù)高峰期進行。
sudo reboot
運行以下命令,查看內(nèi)核啟動命令是否已增加相應(yīng)配置。本示例中使用步驟1中添加的
crashkernel=0M-2G:0M,2G-64G:256M,64G-:384M@1024M
作為關(guān)鍵字,在實際使用中,您需根據(jù)自身情況進行相應(yīng)替換。grep "crashkernel=0M-2G:0M,2G-64G:256M,64G-:384M@1024M" /proc/cmdline
回顯信息示例如下,表明內(nèi)核啟動參數(shù)添加成功。
相關(guān)文檔
有關(guān)如何配置crashkernel,請參見crashkernel配置說明。