【我所認知的BIOS】-->MTRR (MEMORY TYPE RANGE REGISTERS)

MTRR:内存类型范围寄存器详解
MTRR(Memory Type Range Registers)是一种机制,用于确定系统内存中物理内存段的类型,以优化CPU对不同内存的处理。MTRR包括固定和可变范围寄存器,允许软件配置内存类型,如RAM、ROM和帧缓冲。CPUID指令可用于识别MTRR支持,IA32_MTRR_DEF_TYPE MSR和IA32_MTRRCAP MSR等寄存器用于设置和获取内存区域属性。MTRR通过优化内存类型提高系统性能,尤其对特定设备如帧缓冲的处理。

【我所認知的BIOS】-->MTRR

MEMORY TYPE RANGE REGISTERS

By LightSeed

2009-9-27  

1MTRR的概念

内存类型范围寄存器(MTRRs,翻译过来真别扭,后面都以MTRR直接来说了)提供了一种机制,这种机制其实就是确定在系统内存中物理一段内存的类型。这个类型其实是正对CPU来说的,见图1

 

1 内存的类型

这些类型,其实是告訴CPU在解析或者说操作内存的时候应该用什么手段。就这么简单。为什么要这样做呢?一般情况下,内存都是应该是被设置为有cache来帮助CPU操作内存的,这样的话整个系统的效率就会比较高。但是某些设备所使用的内存却比较特殊,比如说Frame buffer就是一种很好的例子。那么软件(一般情况下是BIOS)就需要配置CPU的相关寄存来申明那些范围的内存在处理的时候需要做什么样的动作(这就是类型)。总的来说它们允许CPU优化不同类型的内存如RAMROM和帧缓冲内存(frame buffer),内存操作映射I / O设备。这种做法简化了内存控制系统的硬件设计引脚。

MTRR机制允许多达96个内存范围(memory ranges)在物理内存的定义,它定义了一系列的MSRs,这些寄存器分别去说明MSR定义中包含的那段内存的具体类型。图2MTRRs物理内存映射的示意图。

 

2 MTRRs物理内存映射示意

而每一段的内存可以被定义的类型有多个,见图3.

 

 

3 Memory Types That Can Be Encoded in MTRRs

硬件复位之后,P6及大多最近的处理器系列禁用所有的固定和可变MTRRs,这使得所有的物理内存的类型都成为了uncacheable。初始化软件应该依据系统定义的存储器映射设置MTRRs成特定的类型。典型的,BIOS(基本输入/输出系统)软件来配置MTRRs

在一个多处理器系统中,使用的P6系列或者较新的处理器系列,每个处理器必须使用相同的MTRR内存映射,从而使软件的内存有一致的视点。

2 MTRR Feature Identification

MTRR的功能可用性是模型具体。软件可以判定处理器上MTRRs是否支持。它只需要通过执行CPUID指令,读取的MTRR Flag的状态(EDXbit 12)状态。

如果MTRR标志被置为1(表明该处理器采用MTRRs),MTRRs的其他信息可以从64位的寄存器IA32_MTRRCAP中获得(MTRRcap MSRP6系列处理器的名字)。IA32_MTRRCAP MSR是一个只读的MSR,它可以用RDMSR指令读取。图4显示了IA32_MTRRCAP MSR的内容。

 

4 IA32_MTRRCAP Register

寄存器中的这些Flags和相应区域的功正如:

 •VCNTvariable range registers count)区域(field

[*] Symmetric multi-processing support │ │ │ │ -*- Support x2apic │ │ │ │ [ ] Enable MSI and MSI-x delivery by posted interrupts (NEW) │ │ │ │ [*] Enable MPS table │ │ │ │ [ ] x86 CPU resource control support (NEW) │ │ │ │ [ ] Flexible Return and Event Delivery (NEW) │ │ │ │ [*] Support for extended (non-PC) x86 platforms │ │ │ │ [*] Numascale NumaChip │ │ │ │ [ ] ScaleMP vSMP │ │ │ │ [ ] SGI Ultraviolet │ │ │ │ [ ] Goldfish (Virtual Platform) │ │ │ │ [ ] Intel MID platform support │ │ │ │ [*] Intel Low Power Subsystem Support │ │ │ │ [*] AMD ACPI2Platform devices support │ │ │ │ -*- Intel SoC IOSF Sideband support for SoC platforms │ │ │ │ [*] Enable IOSF sideband access through debugfs │ │ │ │ [*] Single-depth WCHAN output │ │ │ │ [*] Linux guest support ---> │ │ │ │ Processor family (Intel Atom) ---> │ │ │ │ [*] Supported processor vendors ---> │ │ │ │ -*- Enable DMI scanning │ │ │ │ [*] Old AMD GART IOMMU support │ │ │ │ [*] Enable Maximum number of SMP Processors and NUMA Nodes [*] Cluster scheduler support (NEW) │ │ │ │ [*] Multi-core scheduler support │ │ │ │ [*] CPU core priorities scheduler support │ │ │ │ [*] Reroute for broken boot IRQs │ │ │ │ [*] Machine Check / overheating reporting │ │ │ │ [*] Support for deprecated /dev/mcelog character device │ │ │ │ [*] Intel MCE features │ │ │ │ [*] AMD MCE features │ │ │ │ <M> Machine check injector support │ │ │ │ Performance monitoring ---> │ │ │ │ [*] Enable support for 16-bit segments │ │ │ │ [*] Enable vsyscall emulation │ │ │ │ [*] IOPERM and IOPL Emulation (NEW) │ │ │ │ [ ] Late microcode loading (DANGEROUS) (NEW) │ │ │ │ <M> /dev/cpu/*/msr - Model-specific register support │ │ │ │ <M> /dev/cpu/*/cpuid - CPU information support │ │ │ │ [ ] Enable 5-level page tables support │ │ │ │ [ ] Enable statistic for Change Page Attribute (NEW) │ │ │ │ [*] AMD Secure Memory Encryption (SME) support │ │ │ │ [*] NUMA Memory Allocation and Scheduler Support │ │ │ │ [*] Old style AMD Opteron NUMA detection [*] ACPI NUMA detection │ │ │ │ [*] Enable sysfs memory/probe interface │ │ │ │ <*> Support non-standard NVDIMMs and ADR protected memory │ │ │ │ [*] Check for low memory corruption │ │ │ │ [*] Set the default setting of memory_corruption_check │ │ │ │ [*] MTRR (Memory Type Range Register) support │ │ │ │ [*] MTRR cleanup support │ │ │ │ (1) MTRR cleanup enable value (0-1) │ │ │ │ (1) MTRR cleanup spare reg num (0-7) │ │ │ │ [*] x86 PAT support │ │ │ │ [*] User Mode Instruction Prevention (NEW) │ │ │ │ [*] Memory Protection Keys │ │ │ │ TSX enable mode (off) ---> │ │ │ │ [ ] Software Guard eXtensions (SGX) (NEW) │ │ │ │ [*] EFI runtime service support [*] EFI handover protocol (DEPRECATED) (NEW) │ │ │ │ [*] EFI mixed-mode support │ │ │ │ -*- Export EFI runtime maps to sysfs │ │ │ │ Timer frequency (250 HZ) ---> │ │ │ │ (0x1000000) Physical address where the kernel is loaded │ │ │ │ -*- Build a relocatable kernel │ │ │ │ [*] Randomize the address of the kernel image (KASLR) │ │ │ │ (0x200000) Alignment value to which kernel should be aligned │ │ │ │ [*] Randomize the kernel memory sections │ │ │ │ (0xa) Physical memory mapping padding │ │ │ │ [ ] Disable the 32-bit vDSO (needed for glibc 2.3.3) │ │ │ │ vsyscall table for legacy applications (Emulate execution only) ---> │ │ │ │ [ ] Built-in kernel command line │ │ │ │ [*] Enable the LDT (local descriptor table) │ │ │ │ [ ] Enforce strict size checking for sigaltstack (NEW) │ │ │ │ [*] Kernel Live Patching │ │ │ └───────────────────────────────────────────────────────────────────这里面有没有我可以精简的
08-08
### Linux 内核编译优化与 Intel vPro CPU 的适配建议 Intel vPro 技术基于特定的 Intel Core 或 Xeon 处理器,具备远程管理、安全性和稳定性增强功能。在进行 Linux 内核编译时,针对此类平台应优化内核配置以提升性能、降低资源占用并确保远程管理功能的完整性。 #### 内核配置优化建议 1. **启用 Intel Management Engine 支持** 若需使用 Intel vPro 的远程管理功能(如 Intel AMT),应启用 `CONFIG_INTEL_MEI` 和 `CONFIG_INTEL_MEI_ME` 配置项,以支持 Intel Management Engine Interface(MEI)驱动。这些配置确保系统可以与 Intel Management Engine 通信,实现远程诊断与管理功能 [^1]。 ```bash CONFIG_INTEL_MEI=y CONFIG_INTEL_MEI_ME=y ``` 2. **启用虚拟化支持** 若部署环境涉及虚拟化(如远程桌面服务或容器化应用),应启用 `CONFIG_KVM_INTEL` 和 `CONFIG_KVM_AMD_VI`(尽管是 Intel 平台,部分配置仍需启用以支持虚拟化扩展)。此外,`CONFIG_X86_VSYSCALL_EMULATE` 可提升虚拟化兼容性 [^1]。 ```bash CONFIG_KVM_INTEL=y CONFIG_X86_VSYSCALL_EMULATE=y ``` 3. **精简不必要的硬件支持模块** 对于仅用于远程管理或轻量级计算的 Intel vPro 设备(如基于 Atom x6E 系列的平台),可禁用部分图形驱动(如 `CONFIG_DRM_AMDGPU`、`CONFIG_DRM_NVIDIA`)和非必要的 USB 控制器驱动(如 `CONFIG_USB_XHCI_HCD` 若已确认使用的是 EHCI 控制器) [^2]。 ```bash # 禁用非必要图形驱动 CONFIG_DRM_AMDGPU=n CONFIG_DRM_NVIDIA=n # 禁用非必要 USB 控制器 CONFIG_USB_XHCI_HCD=n ``` 4. **启用电源管理优化** 对于低功耗场景(如远程监控设备),启用 `CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND` 和 `CONFIG_INTEL_PSTATE` 可优化处理器的能耗表现,同时保持响应能力 [^3]。 ```bash CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND=y CONFIG_INTEL_PSTATE=y ``` 5. **启用安全功能支持** 若需使用 Intel vPro 的安全特性(如 Boot Guard 或 Secure Key),应启用 `CONFIG_INTEL_SECURE_KEY` 和 `CONFIG_TCG_TPM` 以支持可信平台模块(TPM)和安全启动功能 [^1]。 ```bash CONFIG_INTEL_SECURE_KEY=y CONFIG_TCG_TPM=y ``` #### 示例内核配置片段 以下为适用于 Intel vPro 平台的内核配置示例片段: ```bash # Intel ME 支持 CONFIG_INTEL_MEI=y CONFIG_INTEL_MEI_ME=y # 虚拟化支持 CONFIG_KVM_INTEL=y CONFIG_X86_VSYSCALL_EMULATE=y # 电源管理 CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND=y CONFIG_INTEL_PSTATE=y # 安全功能 CONFIG_INTEL_SECURE_KEY=y CONFIG_TCG_TPM=y # 精简图形支持 CONFIG_DRM_AMDGPU=n CONFIG_DRM_NVIDIA=n # 精简 USB 控制器 CONFIG_USB_XHCI_HCD=n ``` #### 性能与安全性平衡 在远程管理场景中,建议保留完整的网络驱动支持(如 `CONFIG_E1000E`、`CONFIG_IGB`)以确保远程连接的稳定性。对于基于 Intel Xeon 的 vPro 平台,可进一步启用 `CONFIG_X86_INTEL_LPSS` 以优化低功耗串行总线性能 [^1]。 ---
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值