Intel 64 and IA32 内存类型 - memory type
来源:互联网 发布:java人事管理系统项目 编辑:程序博客网 时间:2024/06/16 02:14
内存类型 - memory type
内存类型又称为cache类型,用来定义系统内存区域的cache类型,当前Intel 64和IA32支持如下内存类型:
Strong Unacheable(UC)
内存不可以cached,所有的读和写操作出现在总线上的顺序就是程序执行的顺序。不会执行预测内存访问,或者分支预测。这种内存类型的cache机制非常适合那些做
memory-mappped的IO设备。如果在普通内存上使用这种内存类型,将极大降低处理器性能。
Uncacheable(UC-)
和Strong Uncacheable类似,除了UC-内存类型可以通过修改MTRRs寄存器变成WC内存类型。这种内存类型自Pentium III处理器开始出现,并指只能通过PAT来指定。
Write Combining(WC)
这种类型的系统内存不可以cached,处理器总线的一致性协议不会保证一致性。可以预测读;写操作被 delay并且被合并到write combine buffer(WC buffer)中,以便减少内存的访问。
如果WC buffer仅仅部分被填充,那么写操作要推迟到下一次Serializing事件,比如SFENCE或者MFENCE指令,CPUID,对uncached memory的读写操作,一个中断,或者一个Lock指令。
这种内存类型非常适合video frame buffers,在需要把内存的内容显示到graphics display之前,写顺序并不重要。在Pentium Pro好Pentium II处理器家族中通过编程MTRRs选择这种内存类型;从Pentium III处理器开始通过编程MTRRs或者通过PAT来设置。
Write-through (WT)
对系统内存的读写操作都是cached。cache hits则从cache lines中读取,cache missed则会填充cache lines。允许预测读。写到cache lines的同时也会写通到系统内存(有可能不会写到cache line中,而是直接写通到系统内存)。当写通到系统内存时,无效的cache line不会被填充,而有效的cache line或者被填充或者变得无效。
write combining是允许的。
这种内存类型非常适合framebuffers,或者那些访问系统内存时不会snooping总线内存访问的设备。
这种内存类型保证处理器中的cache和系统内存间的一致性。
Write-back (WB)
内存读写都会cached。cache hits则从cache lines中读取,cache missed则会导致cache fills(cache填充)。写失败则导致cache line填充,如果可能整个写都在cache中执行。
Write combining是允许的。通过减少不必要的系统内存写操作,Write-back减少了总线传输。写到cache lines中并不会立刻推送到系统内存中,相反,这些写操作仅仅保留在系统cache中。这些修改的cache lines会推迟写到系统内存,直到执行write-back操作。
Write-back操作的触发:在cache lines需要重新分配时,比如当cache中分配的cache lines已经满了;或者在需要保证cache一致性时。
这种内存类型提供了最好的性能,但是访问这种系统内存的设备能够snooping内存访问,以确保系统内存和cache的一致性
Write Protected (WP)
从cache lines中读取,如果cache missed则引发cache fills。写操作则传播到系统总线,使得总线上处理器的相应cache lines变得无效。
预测读是允许的。这种内存类型从P6处理器家族开始出现,通过MTRRs寄存器设置。
选择内存类型
最简单的系统内存模式不使用memory-mapped IO(有读写副作用);不包括frame buffer;所有的系统内存都使用write-back内存类型。一个IO代理可以对write-back执行DMA操作,并且cache protocol来维护cache一致性问题。当然这是一种理想的模型。
一个系统可以对memory-mapped IO使用strong uncacheable 内存类型,而且也应该使用strong uncacheable类型,尽管这会带来读的副作用。
双端口内存具有写副作用,因为在一个端口的写操作,在抵达memory agent前不会被另外一个端口观测到。对于frame buffer和双端口内存系统可以使用strong cacheable, uncacheable, write-through,或者write-combining内存类型。
Frame buffer内存一般来说都是很大的(典型几个MB),并且处理器写操作要多余读操作。frame buffer使用strong uncacheable内存类型会导致大量的总线操作,因为整个frame buffer的内容的写操作被分割成太小的写单位。使用write-through则会导致处理器的L2 L3 caches以及L1 Data cache的cache lines充满了无用的frame buffer数据。因此对于frame buffer,系统应该使用write-combining内存类型。
软件可以使用页面级cache control,因此针对某些特定的数据结构访问,替换write-back 内存类型为其他内存类型可能会带来性能上的提高。比如,软件可能只会读某个大的数据结构一次,此后不会再读取这个数据结构,直到其他的代理重写这个数据结构。对于包含这种数据结构的page,我们可以把这个页面标识为uncacheable,免得第一次读这个数据结构时,会把这些数据填充到cache中,而导致其他更有用的cache lines被换出。
对于那种包含仅写的数据结构的页面来说。我们也可以把这个页面类型指定为uncacheable,因为软件从来都不会读取它的值
从Pentium III, P4以及他们后续的处理器,引入了新的指令使得软件可以控制数据的cacheing, prefetching以及write-back。这些指令,可以用来指定weakly ordered或者处理器序的内存类型,进而改善性能。同时也使得软件能够更容易控制数据的cache。
Uncacheable内存类型上的指令获取。
- Intel 64 and IA32 内存类型 - memory type
- Intel 64 and IA32 WC buffers
- Intel 64 and IA32 Store Buffer
- IA32中的5种caching type(也叫memory type)
- memory内存类型
- CUDA内存类型memory
- CUDA内存类型memory
- CUDA内存类型memory
- CUDA内存类型memory
- Intel 64 Memory ordering principles
- intel dpdk api memory manage module (内存管理模块)
- yale_OS(3)——Intel IA32架构
- Assembly-Level Representation of Programs on IA32 and x86-64
- 【Android】【内存】java and dalvik memory
- 内存的种类(The type of memory)
- Intel 386 and AMD x86-64 Options
- Intel 64 and IA-32 cache 术语
- Intel 64 and IA-32 Control Registers
- 什么是REST?以及RESTful的实现
- jquery 访问父节点
- memcache配置和简单例子
- K&R风格VSMS风格
- Android布局之RelativeLayout属性大全
- Intel 64 and IA32 内存类型 - memory type
- flex 开发聊天组件blazeDs+消息推送+java
- android预定义样式
- 【转】Vsflexgrid8.0和Vsview8.0 最新注册版
- TCP和UDP的区别
- 表级隐含字段: xmin 和 xmax
- PHP三大框架对比
- MyBatis关于Mapper配置文件知识集合
- Restful 与 SOAP