Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
raspberrypi-kernel
提交
c3444363
R
raspberrypi-kernel
项目概览
openeuler
/
raspberrypi-kernel
通知
13
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
raspberrypi-kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
c3444363
编写于
9月 05, 2009
作者:
M
Mauro Carvalho Chehab
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Documentation/edac.txt: Improve it to reflect the latest changes at the driver
Signed-off-by:
N
Mauro Carvalho Chehab
<
mcheahb@redhat.com
>
上级
d4c27795
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
56 addition
and
16 deletion
+56
-16
Documentation/edac.txt
Documentation/edac.txt
+56
-16
未找到文件。
Documentation/edac.txt
浏览文件 @
c3444363
...
...
@@ -730,25 +730,41 @@ Due to the way Nehalem exports Memory Controller data, some adjustments
were done at i7core_edac driver. This chapter will cover those differences
1) On Nehalem, there are one Memory Controller per Quick Patch Interconnect
(QPI). At the driver, the term "socket" means one QPI.
It should also be
associated with
the CPU physical
socket.
(QPI). At the driver, the term "socket" means one QPI.
This is
associated with
a physical CPU
socket.
Each MC have 3 physical read channels, 3 physical write channels and
3 logic channels. The driver currenty sees it as just 3 channels.
Each channel can have up to 3 DIMMs.
The minimum known unity is DIMMs. There are no information about csrows.
As EDAC API maps the minimum unity is csrows, the driver exports one
As EDAC API maps the minimum unity is csrows, the driver sequencially
maps channel/dimm into different csrows.
For example, suposing the following layout:
Ch0 phy rd0, wr0 (0x063f4031): 2 ranks, UDIMMs
dimm 0 1024 Mb offset: 0, bank: 8, rank: 1, row: 0x4000, col: 0x400
dimm 1 1024 Mb offset: 4, bank: 8, rank: 1, row: 0x4000, col: 0x400
Ch1 phy rd1, wr1 (0x063f4031): 2 ranks, UDIMMs
dimm 0 1024 Mb offset: 0, bank: 8, rank: 1, row: 0x4000, col: 0x400
Ch2 phy rd3, wr3 (0x063f4031): 2 ranks, UDIMMs
dimm 0 1024 Mb offset: 0, bank: 8, rank: 1, row: 0x4000, col: 0x400
The driver will map it as:
csrow0: channel 0, dimm0
csrow1: channel 0, dimm1
csrow2: channel 1, dimm0
csrow3: channel 2, dimm0
exports one
DIMM per csrow.
Currently, it also exports the several memory controllers as just one. This
limit will be removed on future versions of the driver.
Each QPI is exported as a different memory controller.
2) Nehalem MC has the hability to generate errors. The driver implements this
functionality via some error injection nodes:
For injecting a memory error, there are some sysfs nodes, under
/sys/devices/system/edac/mc/mc
0
/:
/sys/devices/system/edac/mc/mc
?
/:
inject_addrmatch:
Controls the error injection mask register. It is possible to specify
...
...
@@ -779,11 +795,6 @@ were done at i7core_edac driver. This chapter will cover those differences
2 for the highest
1 for the lowest
inject_socket:
specifies what QPI (or processor socket) will generate the error.
on Xeon 35xx, it should be 0.
on Xeon 55xx, it should be 0 or 1.
inject_type:
specifies the type of error, being a combination of the following bits:
bit 0 - repeat
...
...
@@ -806,10 +817,12 @@ were done at i7core_edac driver. This chapter will cover those differences
echo 2 >/sys/devices/system/edac/mc/mc0/inject_type
echo 64 >/sys/devices/system/edac/mc/mc0/inject_eccmask
echo 3 >/sys/devices/system/edac/mc/mc0/inject_section
echo 0 >/sys/devices/system/edac/mc/mc0/inject_socket
echo 1 >/sys/devices/system/edac/mc/mc0/inject_enable
dd if=/dev/mem of=/dev/null seek=16k bs=4k count=1 >& /dev/null
For socket 1, it is needed to replace "mc0" by "mc1" at the above
commands.
The generated error message will look like:
EDAC MC0: UE row 0, channel-a= 0 channel-b= 0 labels "-": NON_FATAL (addr = 0x0075b980, socket=0, Dimm=0, Channel=2, syndrome=0x00000040, count=1, Err=8c0000400001009f:4000080482 (read error: read ECC error))
...
...
@@ -821,9 +834,36 @@ were done at i7core_edac driver. This chapter will cover those differences
separate sysfs note were created to handle such counters.
They can be read by looking at the contents of "corrected_error_counts"
counter:
counter. Due to hardware limits, the output is different on machines
with unregistered memories and machines with registered ones.
With unregistered memories, it outputs:
$ cat /sys/devices/system/edac/mc/mc0/corrected_error_counts
dimm0: 15866
dimm1: 0
dimm2: 27285
all channels UDIMM0: 0 UDIMM1: 0 UDIMM2: 0
What happens here is that errors on different csrows, but at the same
dimm number will increment the same counter.
So, in this memory mapping:
csrow0: channel 0, dimm0
csrow1: channel 0, dimm1
csrow2: channel 1, dimm0
csrow3: channel 2, dimm0
The hardware will increment UDIMM0 for an error at either csrow0, csrow2
or csrow3.
With registered memories, it outputs:
$cat /sys/devices/system/edac/mc/mc0/corrected_error_counts
channel 0 RDIMM0: 0 RDIMM1: 0 RDIMM2: 0
channel 1 RDIMM0: 0 RDIMM1: 0 RDIMM2: 0
channel 2 RDIMM0: 0 RDIMM1: 0 RDIMM2: 0
So, with registered memories, there's a direct map between a csrow and a
counter.
4) Standard error counters
The standard error counters are generated when an mcelog error is received
by the driver. Since it is counted by software, it is possible that some
errors could be lost.
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录