Intel 64 and IA32 WC buffers

WC buffers - Write Combining buffers

写WC内存类型的系统内存,并不会被cached到cache lines中。这些写被保存在write combining buffer(又称为WC buffers)中,WC buffers是独立于L1 L2 L3 caches的存储buffer。WC buffer没有提供snooping机制,因此并不提供数据一致性。

缓冲到WC 类型memory中的写,使得在一个小的软件时间窗口内,WC buffer可以支持更多的数据修改,而不会影响到软件运行。此外缓冲到WC 内存类型的写,可以使数据修改达到覆盖的效果,也就是说对同一个位置多次修改,仅有最后一次生效,而其他的写操作被最后一次覆盖。

WC buffer的尺寸和结构并不是架构定义的。对于Inel Core 2 Duo, Intel Atom, Intel Core Duo, Pentium M, Pentium 4 and Intel Xeon Processor; WC buffer是由几个64-byte WC buffers组成。对于P6家族处理器,WC buffer是由几个32-byte buffer组成。

当软件开始向WC 内存中写入数据时,处理器先填充一个WC buffers,当一个或者多个WC buffers已经被填充后,处理器可以选择一个WC buffers,写回内存中。如何选择WC buffers写回内存的协议是独立于实现的,软件无法依赖这个协议来实现系统内存一致性。当使用WC内存类型时,软件必须时刻注意这个事实:写数据到系统内存有可能被延迟,为了保证系统内存一致性,必须要主动刷写WC buffers中的内容。

一旦处理器开始从WC buffer推送数据到系统内存时,处理器会根据WC buffer包含的有效数据多少来决定总线事物类型。如果buffer是满的(所有字节都是有效的),处理器将执行一个总线burst-write事物,这就导致所有的32 bytes(P6 family)或者64 bytes(Pentium 4 之后的处理器)被一个burst事物传输到数据总线上。如果一个或者多个WC buffer's的字节是无效的(比如,没有被软件写入),处理器将使用"partial write"事物传输数据到内存中(一次一个chunk, 每个chunk包含8字节)

这就导致一个WC buffer的数据需要最多4次"partial write"(P6 处理器家族),或者8次"partial write"(Pentium 4之后的处理器)才能传送到系统内存。

WC 内存类型是弱序的。一旦WC buffer选定进行传输,那么数据注定是弱序的。比如,写第一个WC buffer然后再写第二个WC buffer,在系统内存总线上可能会出现先写buffer 2再写buffer 1的情况。


你可能感兴趣的:(Intel)