Chipkill的ECC能力是强于Bounded Fault ECC的。那么既然已经有了Chipkill,为什么还要有Bounded Fault ECC呢?

Prerequisite

Overview

Bounded Fault ECC(有界故障ECC)的提出,很大程度上就是为了弥补传统 Chipkill 在 x8 DRAM 组织下无法覆盖某些 device fault 的问题。

核心关系:

Chipkill 本身不是万能的,它依赖 DRAM device 的粒度(x4/x8)。Bounded Fault ECC 的目标就是把”不可控的大故障”限制成 ECC 可以处理的有界故障,从而让 Chipkill 能覆盖更多场景。

下面结合 x4 / x8 解释。

回顾 Chipkill 的基本思想

Chipkill:

将一个 DRAM chip/device 的失效看成一个 ECC symbol 丢失,然后利用强ECC恢复。

例如:

一个 cache line:

1
2
3
4
5
Data:

Chip0 Chip1 Chip2 Chip3
| | | |
symbol symbol symbol symbol

如果:

1
Chip2 完全失效

变成:

1
symbol2 missing

ECC恢复:

1
2
3
4
5
6
7
8
9
symbol0
symbol1
symbol2 <--- lost
symbol3

|
v

ECC reconstruction

因此:

Chipkill要求:device failure必须是ECC可以建模和恢复的symbol error。

x4 DRAM为什么天然适合Chipkill?

x4 DRAM:

表示:

一个DRAM chip一次输出4 bit数据。

例如:

1
2
3
4
5
6
7
x4 DRAM:

Chip0 ---> 4 bits
Chip1 ---> 4 bits
Chip2 ---> 4 bits
Chip3 ---> 4 bits
...

假设一个device坏:

1
Chip2 failure

损失:

1
4 bits

ECC看到:

1
一个symbol丢失

这是比较容易处理的。

所以:

1
2
3
4
5
6
x4 DRAM + ECC DIMM

|
v

Chipkill-friendly

为什么x8 DRAM给Chipkill带来问题?

x8 DRAM:

一个chip输出:

1
8 bits

例如:

1
2
3
4
Chip0 ---> 8 bits
Chip1 ---> 8 bits
Chip2 ---> 8 bits
Chip3 ---> 8 bits

如果:

1
Chip2 failure

一次丢:

1
8 bits

问题来了:

ECC symbol粒度通常没有这么大。

也就是说:

1
2
3
4
5
一个device failure

=

多个ECC symbol同时错误

例如:

1
2
3
4
5
6
7
8
symbol0
symbol1
symbol2
symbol3

Chip2坏:

symbol1 + symbol2同时丢失

传统Chipkill:

1
一个symbol failure

可以处理。

但是:

1
多个symbol failure

可能超出ECC能力。

所以:

传统Chipkill在x8 DRAM下无法保证覆盖整个device failure。

为什么需要 Bounded Fault ECC?

问题本质:

x8 DRAM:

1
2
3
4
device failure
|
v
8-bit error burst

这个故障太大。

Bounded Fault ECC的思想:

不要求ECC处理任意大的device fault,而是通过限制fault范围,把错误变成ECC可纠正的形式。

也就是:

1
2
3
4
5
6
7
8
9
10
11
unbounded fault

|
v

bounded fault

|
v

ECC correction

Bounded Fault ECC如何帮助Chipkill?

简单理解:

以前:

1
2
3
4
5
6
7
8
9
10
11
12
13
x8 DRAM

Chip failure

|
v

8-bit burst error

|
X

Chipkill无法覆盖

加入Bounded Fault ECC:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
x8 DRAM

Chip failure

|
v

fault containment

|
v

bounded error pattern

|
v

Chipkill ECC can correct

也就是说:

Bounded Fault ECC把x8 device failure转换成Chipkill ECC能够处理的故障模型。

Example

没有Bounded Fault ECC

x8:

1
2
3
4
Chip0 Chip1 Chip2 Chip3

X

Chip2坏:

1
8 bits corrupted

ECC:

1
2
3
需要恢复8-bit device failure

超过能力

结果:

1
UE

有Bounded Fault ECC

故障:

1
Chip2 failure

经过fault bounding:

1
只暴露有限bit error

例如:

1
错误限制在一个ECC word范围内

然后:

1
2
3
4
5
6
Chipkill ECC

|
v

correct

x4、x8与RAS演进关系

可以这样理解:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
         DRAM device fault

|
-----------------
| |
x4 x8
| |
| |
Chipkill容易 Chipkill困难
| |
| |
v v

传统Chipkill Bounded Fault ECC
|
|
v

x8也可以实现
device fault tolerance

为什么不用全部换成x4?

这是实际工程问题。

x4优势:

  • 更容易实现Chipkill

但是:

  • DRAM颗粒组织不同
  • PCB布线
  • 成本
  • 容量密度
  • 产品兼容性

x8:

  • 成本低
  • 常见
  • 容量密度高

所以业界希望:

保留x8 DRAM优势,同时获得类似Chipkill的可靠性。

这就是Bounded Fault ECC出现的原因。

总结

Chipkill依赖DRAM device故障粒度,而传统Chipkill更适合x4 DRAM。x8 DRAM由于一次device failure会产生更大的错误范围,超过传统Chipkill ECC能力。Bounded Fault ECC通过限制故障范围,将x8 device failure转换为ECC可处理的有界错误,从而让Chipkill类保护能够覆盖x8 DRAM。

Bounded Fault ECC不是替代Chipkill,而是扩展Chipkill能够处理的fault model。