热门关键字:  ubuntu  分区  Fedora  linux系统进程  函数

当前位置 :| 主页>Linux教程>内核研究>

Linux内核补丁AMD旁路转换缓冲(TLB)错误

来源: 作者: 时间:2007-12-13 Tag: 点击:

关于AMD的旁路转换缓冲 (TLB)错误及其对四核皓龙芯片的影响上周已经有了很多报道,据国外媒体报道,AMD在为64位Red Hat企业版Linux即Upgrade 4准备一个内核补丁程序。和AMD的BIOS(基本输入输出系统)修复和微代码更新不同,据悉这些处理过程降低了10-20%的性能,据说Linux补丁程序对性能的损耗低于1%。然而,我们也了解到,用户为了获得该补丁程序必须签署一份保密协议。

情况被证实之后,AMD在x86-64.org邮件列表上公布了该补丁程序的源代码。然而,这些代码以现状为基准,不再进行修改,同时再次警告,提示它不完全适用于主流系统:

 

由于此补丁程序具有强大的入侵特性,而且受到影响的用户数非常少(如果你的部分系统受到影响,就会了解这一点),我们不推荐在常规的Linux系统上使用此补丁程序。此补丁不是为主流用户而准备的,也不是用于销售的Linux产品!此补丁只接受过最小限度的功能性测试。每位用户在使用前必须对其进行评估,以确保其能符合必要的质量标准。

 

在同一邮件列表上的一篇以前发表的文章中,AMD的员工Elsie Wahlig也提出警告,该补丁程序"不推荐应用于上游产品"。Wahlig提到,该补丁程序是由AMD的操作系统研究中心小组为Linux 2.6.23.8而开发的,并提供了一份详细的错误描述:

 

对错误298的描述如下:"处理器操作可能不是原子性的,在二级缓存中改变页面转换表项目中从0b到1b地址的被访问过的或脏字节。在一个细小的时间间隔内,在修改过的复制数据返回二级缓存之前,其他缓存操作可能引起失效的页面转换表项目被安装在三级缓存中。另外,如果在该时间间隔期间检测到该缓存行,处理器不会对该被访问过的或脏字节,以及可能发生错误的数据进行无关的缓存操作。系统可能会通过一次机器检测事件,报告发生了一次三级缓存协议错误。在这种情况下,MC4状态寄存器(MSR 0000_0410)的内容将会是B2000000_000B0C0F或BA000000_000B0C0F。MC4地址寄存器(MSR 0000_0412)的内容将会是26h。"

 

Wahlig对Linux补丁程序的工作过程作了描述,该补丁程序也绕过了BIOS工作区并仿真"被访问过的和脏字节",以阻止错误数据建立文件头:

 

内核补丁解决方案取决于二级缓存迁出问题的根本原因。只有当TLB需要在一个页表项目中设置一个A或D位时,问题才暴露。如果TLB永远不需要设置一个A 或D位,错误则不会出现。通过使用当前的可写位对A和D位进行仿真,补丁程序将确保经常对实际的A和D位进行预设。当首次访问一个未对仿真A位进行设置的页面时,并且当首次写访问一个未对仿真D位进行设置的可写页面时,通过对一个错误页面进行强制而完成该处理。仿真A和D位存储在位寄存器中,操作系统通常可以在页表项目中取得它。

 

AMD以比最初预期更为委婉的说法,停止发行该补丁程序,但公司并没有给所有Linux用户发放"通行证",用来避免BIOS修复程序带来的性能损失。




相关文章:
精通initramfs构建step by step
Linux利用kexec迅速切换内核
进程上下文VS中断上下文
内核通知链 学习笔记
linux spi子系统驱动分析
menuconfig 配置选项
《Linux操作系统内核实习》之练习一
udev详解
什么叫微内核,宏内核?
Linux 信号signal处理机制
开发简单的 Linux2.6 内核模块
删除内核的perl脚本
Linux2.6内核usb gadget驱动移植
GCC hacks in the Linux kernel
iomem
kernel学习的想法
让自己的驱动支持udev
linux内核编译步骤
内核的等待队列
Linux内核wait_queue深入分析
升级和删除内核
SD卡驱动分析2
Linux Kernel VDSO本地权限提升漏洞
内核中的TCP的追踪分析-15-TCP(IPV4)的客户端与
linux 2.6内核可加载模块的编译
内核模块HelloWorld
在环回接口上发送一个数据报
ARP初始化
1分钟编译FreeBSD内核
linux设备模型之uart驱动架构分析