全部產品
Search
文件中心

Alibaba Cloud Linux:ARM64中開啟kdump時記憶體訪問效能最佳化介紹及使用說明

更新時間:Oct 31, 2024

在Linux kernel中使用kdump,可以在發生核心Panic等異常時儲存執行現場,捕獲記憶體中的資訊,從而協助開發人員或管理員分析崩潰原因。使用kdump功能時,需要在系統啟動時預留一定量記憶體,且這部分記憶體不會被常規進程使用。您可以通過在核心啟動參數中增加crashkernel參數來自訂預留記憶體大小。本文將介紹在Alibaba Cloud Linux 3 64位 ARM架構下的kdump記憶體訪問效能最佳化及使用說明。

使用限制

如需使用kdump記憶體訪問效能最佳化功能,您的執行個體鏡像必須滿足以下要求:

  • 執行個體使用的作業系統必須為Alibaba Cloud Linux 3 64位 ARM版。

  • 核心版本必須為5.10.134-17.2及以上版本。

最佳化介紹

問題描述

在Alibaba Cloud Linux 3 64位 ARM版本的核心環境中,如果在支援DMA和DMA32的記憶體地區內預留crashkernel記憶體,將會導致核心中的線性映射區使用小頁映射。這一機制旨在通過/sys/kernel/kexec_crash_size動態調整crashkernel記憶體大小,但會導致基於線性映射區地址訪問記憶體時效能的降低。

最佳化說明

為避免上述原因導致的kdump記憶體訪問效能問題,目前預設為kdump服務較早預留crashkernel記憶體,並儘可能建立大頁映射,以提升使用線性映射地址訪問記憶體的效率。該最佳化功能已預設開啟,無需手動進行設定。

如何關閉kdump記憶體訪問效能最佳化功能

如果您的業務情境不需要使用該記憶體訪問效能最佳化功能,您可以按照以下步驟進行操作,以關閉kdump記憶體訪問效能最佳化功能。該操作僅關閉kdump記憶體訪問最佳化功能,kdump服務不受影響。

  1. 運行以下命令,為核心啟動參數中增加defer_reserve_crashmem參數,以關閉kdump記憶體訪問效能最佳化功能。

    sudo grubby --update-kernel="/boot/vmlinuz-$(uname -r)" --args="defer_reserve_crashmem"
    說明

    如果關閉了kdump記憶體訪問效能最佳化功能,想要再次啟用該最佳化功能,可以運行以下命令sudo grubby --update-kernel="/boot/vmlinuz-$(uname -r)" --remove-args="defer_reserve_crashmem",此命令將重新啟用該最佳化功能。隨後,請運行sudo reboot命令重啟執行個體,以使配置生效。

  2. 運行以下命令,重啟執行個體使配置生效。

    警告

    重啟執行個體將導致您的執行個體暫停運行,這可能引發業務中斷和資料丟失。因此,建議您在執行此操作之前備份關鍵資料,並選擇在非業務高峰期進行。

    sudo reboot
  3. 運行以下命令,查看核心啟動命令是否已增加相應配置。

    grep defer_reserve_crashmem /proc/cmdline

    回顯結果樣本如下,表明核心啟動參數添加成功。

    image

常見問題

如何為kdump配置預留低位址區段crashkernel記憶體位址

問題現象

在Alibaba Cloud Linux 3 64位 ARM版本中使用crashkernel功能時,發現預留的記憶體起始地址超過4 GB。

可能原因

kernel啟動參數crashkernel中未指定預留的記憶體起始地址,導致選擇的預留記憶體起始地址超過4 GB。

解決方案

如果您遇到上述問題,可以通過在設定crashkernel記憶體大小時增加offset參數,以指定從低位址區段的起始地址預留記憶體空間,從而解決該問題。具體操作如下。

方式一:按位移量方式設定offset

  1. 運行以下命令,為核心啟動參數crashkernel增加offset參數。本樣本中,預留記憶體大小設定為320M,起始地址設定為0x40000000。在實際使用中,您需根據自身情況進行相應替換。

    sudo grubby --update-kernel="/boot/vmlinuz-$(uname -r)" --args="crashkernel=320M@1024M"
  2. 運行以下命令,重啟執行個體使配置生效。

    警告

    重啟執行個體將導致您的執行個體暫停運行,這可能引發業務中斷和資料丟失。因此,建議您在執行此操作之前備份關鍵資料,並選擇在非業務高峰期進行。

    sudo reboot
  3. 運行以下命令,查看核心啟動命令是否已增加相應配置,樣本中使用步驟1中添加的crashkernel=320M@1024M作為關鍵字,在實際使用中,您需根據自身情況進行相應替換。

    grep "crashkernel=320M@1024M" /proc/cmdline

    回顯資訊樣本如下,表明核心啟動參數添加成功。

    image

方式二:按記憶體量方式設定offset

  1. 運行以下命令,為核心啟動參數crashkernel增加offset參數,本樣本中,依據記憶體大小區間設定不同的預留記憶體大小,起始地址設定為0x40000000。在實際使用中,您需根據自身情況進行相應替換。

    sudo grubby --update-kernel="/boot/vmlinuz-$(uname -r)" --args="crashkernel=crashkernel=0M-2G:0M,2G-64G:256M,64G-:384M@1024M"
  2. 運行以下命令,重啟執行個體使配置生效。

    警告

    重啟執行個體將導致您的執行個體暫停運行,這可能引發業務中斷和資料丟失。因此,建議您在執行此操作之前備份關鍵資料,並選擇在非業務高峰期進行。

    sudo reboot
  3. 運行以下命令,查看核心啟動命令是否已增加相應配置。本樣本中使用步驟1中添加的crashkernel=0M-2G:0M,2G-64G:256M,64G-:384M@1024M作為關鍵字,在實際使用中,您需根據自身情況進行相應替換。

    grep "crashkernel=0M-2G:0M,2G-64G:256M,64G-:384M@1024M" /proc/cmdline

    回顯資訊樣本如下,表明核心啟動參數添加成功。

    image

相關文檔

有關如何配置crashkernel,請參見crashkernel配置說明