《Linux內存管理:實驗驅動的深度探索》【附錄】【實驗環境搭建 4】【Qemu 如何模擬numa架構】

我們在學習 linux 內核時,會涉及到很多 numa 的知識,那我們該如何在 qemu 中模擬這種情況,來配合我們的學習呢?

我們該如何模擬 如下的 numa 架構
在這里插入圖片描述

Qemu 模擬 NUMA 架構

-M virt,gic-version=3,virtualization=on,type=virt \
-cpu cortex-a57 -nographic -m 4G \
-smp cores=4,threads=1,sockets=2 \
-object memory-backend-ram,id=mem0,size=2G  \
-object memory-backend-ram,id=mem1,size=2G  \
-numa node,memdev=mem0,cpus=0-3,nodeid=0 \
-numa node,memdev=mem1,cpus=4-7,nodeid=1 \

1. 基礎虛擬化參數

-M virt,gic-version=3,virtualization=on,type=virt

  • -M virt: 指定機器類型為 virt,這是一個通用的虛擬平臺

  • gic-version=3: 使用 GICv3 (Generic Interrupt Controller version 3) 中斷控制器

  • virtualization=on: 啟用虛擬化支持

  • type=virt: 進一步指定虛擬平臺類型

2. CPU 配置

-cpu cortex-a57 -nographic -m 4G

  • -cpu cortex-a57: 模擬 ARM Cortex-A57 處理器

  • -nographic: 不使用圖形界面,直接輸出到控制臺

  • -m 4G: 為虛擬機分配 4GB 內存

3. SMP (對稱多處理) 配置

-smp cores=4,threads=1,sockets=2

  • cores=4: 每個 CPU socket 有 4 個核心

  • threads=1: 每個核心 1 個線程 (無超線程)

  • sockets=2: 2 個 CPU sockets

  • 總 CPU 數 = sockets × cores × threads = 2 × 4 × 1 = 8 個 CPU

4. 內存后端配置

-object memory-backend-ram,id=mem0,size=2G
-object memory-backend-ram,id=mem1,size=2G

  • 創建兩個內存后端對象:

    • mem0: 2GB RAM

    • mem1: 2GB RAM

  • 總共 4GB (2G + 2G) 內存,與 -m 4G 匹配

5. NUMA 配置

-numa node,memdev=mem0,cpus=0-3,nodeid=0
-numa node,memdev=mem1,cpus=4-7,nodeid=1

  • 定義兩個 NUMA 節點:

    • 節點 0:

      • 使用 mem0 內存后端 (2GB)

      • 關聯 CPU 0-3 (即第一個 socket 的 4 個核心)

      • 節點 ID 為 0

    • 節點 1:

      • 使用 mem1 內存后端 (2GB)

      • 關聯 CPU 4-7 (即第二個 socket 的 4 個核心)

      • 節點 ID 為 1

6. 這種配置的特點

  1. NUMA 特性:CPU 訪問本地節點內存比訪問遠程節點內存更快

  2. CPU 拓撲

    • Socket 0: CPU 0-3 (關聯 Node 0)

    • Socket 1: CPU 4-7 (關聯 Node 1)

  3. 內存分布:內存平均分布在兩個節點上,各 2GB

這種配置非常適合測試和開發 NUMA 相關的應用程序或內核功能,比如:

  • NUMA 感知的內存分配策略

  • 進程/線程綁定到特定 NUMA 節點

  • 內存訪問性能優化等

7. 可運行的配置如下:

/home/leo/data_4t/github/kernel_version/qemu-7.2.0-rc1/build/aarch64-softmmu/qemu-system-aarch64 \-nographic \-M virt,gic-version=3,virtualization=on,type=virt \-cpu cortex-a57 -nographic -m 4G \-smp cores=4,threads=1,sockets=2 \-object memory-backend-ram,id=mem0,size=2G  \-object memory-backend-ram,id=mem1,size=2G  \-numa node,memdev=mem0,cpus=0-3,nodeid=0 \-numa node,memdev=mem1,cpus=4-7,nodeid=1 \-kernel /home/leo/data_4t/github/kernel_version/linux-5.4/build/arch/arm64/boot/Image \-append "nokaslr root=/dev/ram init=/linuxrc console=ttyAMA0 console=ttyS0" \-initrd /home/leo/data_4t/github/kernel_version/initrd.ext4

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/900144.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/900144.shtml
英文地址,請注明出處:http://en.pswp.cn/news/900144.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

YOLOv12 從預訓練邁向自主訓練,第一步數據準備

視頻講解: YOLOv12 從預訓練邁向自主訓練,第一步數據準備 前面復現過yolov12,使用pre-trained的模型進行過測試,今天來講下如何訓練自己的模型,第一步先準備數據和訓練格式 https://gitcode.com/open-source-toolkit/…

Keil 5 找不到編譯器 Missing:Compiler Version 5 的解決方法

用到自記: 下載地址: Keil5 MDK541.zip ?編輯https://pan.baidu.com/s/1bOPsuVZhD_Wj4RJS90Mbtg?pwdMDK5 問題描述 沒有找到 compiler version5 : 1. 下載 Arm Compiler 5 也可以直接點擊下載文章開頭的文件。 2. 安裝 直接安裝在KEI…

結腸鏡3D視頻數據集-C3VD論文中文版

文章目錄 標題作者摘要一、介紹1.1. 相關工作1.1.1. 內鏡重建數據集1.1.2. 注冊真實和虛擬內窺鏡圖像1.1.3. 2D-3D注冊1.2. 貢獻 二、方法2.1. 幻影模型生產2.2. 數據采集2.3. 注冊流程概述2.3.1. 數據預處理2.3.2. 目標深度估計2.3.3. 渲染深度幀2.3.4. 邊緣損失和優化 2.4. 模…

hadoop 集群的常用命令

# 查看HDFS目錄內容 hadoop fs -ls /path # 創建目錄 hadoop fs -mkdir /path/to/dir # 上傳本地文件到HDFS hadoop fs -put localfile /hdfs/path # 下載HDFS文件到本地 hadoop fs -get /hdfs/path localfile # 查看文件內容 hadoop fs -cat /hdfs/path/file # 刪除文件/…

MaxEnt物種分布建模全流程;R+ArcGIS+MaxEnt模型物種分布模擬、參數優化方法、結果分析制圖與論文寫作

融合R語言的MaxEnt模型具有以下具體優勢: 數據處理高效便捷 📊強大的數據預處理功能:R語言提供了豐富的數據處理工具,能夠輕松完成數據清洗、篩選、轉換等操作,為MaxEnt模型提供高質量的輸入數據。 🌐自動…

Java基礎 4.4

1.方法快速入門 public class Method01 {//編寫一個main方法public static void main(String[] args) {//方法使用//1.方法寫好后,如果不去調用(使用),不會輸出Person p1 new Person();p1.speak();//調用方法 p1.cal01();//調用計算方法1p1.cal02(10);…

Tiktok矩陣運營中使用云手機的好處

Tiktok矩陣運營中使用云手機的好處 云手機在TikTok矩陣運營中能夠大幅提高管理效率、降低封號風險,并節省成本,是非常實用的運營工具。TikTok矩陣運營使用云手機有很多優勢,特別是對于需要批量管理賬號、提高運營效率的團隊來說。以下是幾個…

指針函數、函數指針和指針函數指針的全面總結

C中指針函數、函數指針和指針函數指針的全面總結 一、核心概念區別 概念本質聲明示例核心特征指針函數返回指針的函數int* func(int);函數定義,返回值是指針類型函數指針指向函數的指針int (*ptr)(int);變量,存儲函數地址指針函數指針指向指針函數的指…

CherryStudio MCP實戰(一)filesystem篇

隨著DeepSeek的爆火,各行各業都在圍繞著大模型尋找新質量生產力。簡單來說,DeepSeek像是人的大腦,他可以推理,幫你思考一些問題,但是具體要做一些事情的時候,他還需要“手腳”來協同。MCP(Model…

TCP基礎篇(一)

文章目錄 1.TCP 是如何保證可靠性的?2. 滑動窗口機制3 超時重傳4.TCP 報文格式5. 什么是 TCP 協議5.1 如何唯一確定一個 TCP 連接 6.TCP 三次握手過程6.1 可以兩次握手嗎? 7.TCP 的四次揮手7.1 為什么客戶端要等待2MSL? 8.linux 中查看 TCP 的連接9.TCP 為什么要有…

【Axure元件分享】時間范圍選擇器

時間范圍選擇器下拉選擇開始時間和結束時間,實現效果如下。 源文件截圖: 元件獲取方式:

大模型學習一:deepseek api 調用實戰以及參數介紹

一、說明 DeepSeek(杭州深度求索人工智能基礎技術研究有限公司)是一家專注于大語言模型(LLM)研發的中國創新型科技公司,成立于2023年7月17日,由幻方量化孵化。其核心產品包括開源推理模型DeepSeek-R1、多模…

【Linux網絡與網絡編程】03.UDP Socket編程

一、UDP Socket編程接口 // 創建套接字 int socket(int domain, int type, int protocol); // 參數: // domain:域(協議家族),這里使用 AF_INET 表示進行網絡編程 // type:網絡通信傳輸的類型&#xff0…

linux gcc

一、常用編譯選項 ?基本編譯 gcc [input].c -o [output] ?示例: gcc hello.c -o hello # 將 hello.c 編譯為可執行文件 hello ./hello # 運行程序 ?分步編譯 預處理:-E(生成 .i 文件) gcc -E hello.c -o hello…

若依框架二次開發——RuoYi-AI 集成本地大模型

文章目錄 前提條件1. RuoYi-AI 已成功部署并運行2. Ollama 本地大模型已安裝1. 配置本地大模型2. 切換至本地模型3. 開始對話總結本文將詳細介紹如何在 RuoYi-AI 中集成本地 Ollama 大模型,使系統能夠在 離線環境 下提供智能對話能力。 前提條件 在開始集成本地大模型之前,…

Flask學習筆記 - 模板渲染

Flask 模板渲染 模板是包含占位符的 HTML 文件 Flask 使用 Jinja2 模板引擎來處理模板渲染。模板渲染允許你將動態內容插入到 HTML 頁面中,使得應用能夠生成動態的網頁內容。 創建模板:將 HTML 文件放在 templates 文件夾中,使用 Jinja2 占…

解碼 from XXX import * - 導入的真相

文章目錄 前言一、 什么是 from XXX import *?二、基本用法:導入的實際效果三、默認行為:無 __all__ 的情況四、與直接運行 XXX.py 的對比示例模塊使用 from XXX import *直接運行 python example.py關鍵差異五、為什么需要注意 from XXX import *?最佳實踐六、實際應用場景…

JavaScript 中常見的鼠標事件及應用

JavaScript 中常見的鼠標事件及應用 在 JavaScript 中,鼠標事件是用戶與網頁進行交互的重要方式,通過監聽這些事件,開發者可以實現各種交互效果,如點擊、懸停、拖動等。 在 JavaScript 中,鼠標事件類型多樣&#xff0…

Nacos注冊中心AP模式核心源碼分析(單機模式)

文章目錄 概述一、客戶端啟動主線流程源碼分析1.1、客戶端與Spring Boot整合1.2、注冊實例(服務注冊)1.3、發送心跳1.4、拉取服務端實例列表(服務發現) 二、服務端接收請求主線流程源碼分析2.1、接收注冊請求2.1.1、初始化注冊表2…

prism WPF 模塊

模塊 DLL ModuleA 和 ModuleB 都要安裝 Prism.Unity 引用方式1 項目引用 直接 在引用中添加項目引用 App.xaml.cs 添加模塊 ConfigureModuleCatalog using ModuleA; using ModuleB; using Prism.Ioc; using Prism.Modularity; using Prism.Unity; using PrismWpfApp.ViewMo…