的优先级大小_cache也有优先级
在实时操作系统中,task是有优先级的,这里的优先级体现的是对CPU的使用权。按理说为了保证关键任务的执行,不光CPU,其他的系统资源,比如内存,也应该优先为这些任务提供服务才对。
操作系统可以保证关键任务对内存的需求,比如在中断上下文,或者持有spinlock的任务(两者都属于atomic上下文),通过GFP_ATOMIC标志位向内核申请内存,在系统内存不足的情况下,可以使用内核预留的内存(参考这篇文章)。
现在处理器的高速cache越来越大,常用的内存数据都是放在cache中的,CPU主要和cache打交道,而操作系统是没法让cache优先为某个任务服务的。
为此,intel从Xeon E5 v4系列处理器开始,提供了一种叫Cache Allocation Technology(CAT)的技术,可以让系统软件(OS或者虚拟化中的hypervisor)为某个应用划定可以使用的最外层的cache(LLC - Last Level Cache,通常为L3)空间的大小,后续新的处理器甚至支持对L2的划分。
在CAT技术中,任务对cache使用的优先级是通过classes of service (COS)来标定的,而cache的空间根据划分,比如一个有32个cache line的4-wat set associative的cache,其含有的set就是8个。
软件对CAT的配着和使用过程是这样的:
OS初始化的时候通过CPUID指令查询得到当前的处理器支持的COS级数和L2/L3的cache sets数目,然后OS为每级COS配置对应的cache sets。假设当前处理器支持4级COS,COS 0优先级最高,COS 3最低。
如果每个COS级别的任务对所有cache都有相同的访问权(相当于没有使用CAT),其配置关系就是这样的(横向代表cache set,纵向代表COS,A代表可以Allocate):
让高优先级的任务可以访问的cache sets多于低优先级的任务,但某些cache sets可以被高优先级和低优先级的任务共享(overlap),则是这样的:
如果把高优先级和低优先级的任务对cache的使用完全隔离,则是这样的:
当发生context switch时,OS会为即将执行的task分配一个COS级别(系统启动后所有任务默认都是COS 0级的)。那这个task运行起来后怎么知道OS是怎么配置cache空间的,或者说哪些cache sets是它可以访问的?
获得cache使用权靠的是tag比对,前面的文章介绍过,比如VIPT,就是以物理地址做tag同cache line中的tag做匹配的,匹配的上就可以使用可以这个cache line。同样的,task会带上OS给它的代表COS的tag去匹配该COS级别对应的cache空间。
COS的分配是动态的,也就是说OS可以为同一个task在两次调度运行时分配不同的COS优先级,但是更换了COS级别,很可能就更换了cache sets(如果是overlap的配置则不一定),这样新的cache sets里就没有这个task常用的数据和代码,所以一般不推荐这样做。
如果想进一步细化不同task对代码和数据的使用,还可以利用基于CAT的扩展技术Code and Data Prioritization(CDP)。CDP默认是关闭的,如果开启,由于每个COS级别都分为Code和Data,所以系统支持的COS级别将减半。
原创文章,转载请注明出处。
的优先级大小_cache也有优先级相关推荐
- android线程优先级大小,android 设置线程优先级 两种方式
1) android.os.Process.setThreadPriority (int priority)或android.os.Process.setThreadPriority (int tid ...
- 的优先级大小_如何评估需求的优先级?
一. 需求的优先级怎么定义? 很多产品经理,包括我,一定都会遇到这样的场景:" 需求堆如山,什么都想做 ". 面对各种各样.来自各个渠道的需求,产品经理的工作职责之一,就是梳理需求 ...
- 验证条件逻辑运算符优先级大小
条件逻辑运算符:逻辑与优先级大于逻辑或 逻辑与( && ):如果两个操作数都是true,结果为true:否则为false. 逻辑或( || ):如果至少一个操作数是true,结果为tr ...
- and or not 优先级_快速划分测试用例优先级
在工程工期时间有限的情况下,怎么解决测试工期和全部测试用例执行时间之间的矛盾呢? 怎么样的设计才能算测试用例 引自:IEEE Standard 610 (1990): A set of test in ...
- c语言中优先级队列_C ++中的优先级队列
c语言中优先级队列 A Priority Queue is a variant of a Queue such that it's elements are ordered based on thei ...
- c语言运算符优先级结合,C语言运算符优先级及结合性
今天去翻了下C语言运算符的优先级和结合性,发现当初学习的时候就没认真记住,惭愧.发现一篇讲得不错的文章,编辑了下转来供以后翻阅. C语言运算符优先级表(由上至下,优先级依次递减) 运算符 结合性 () ...
- 华为修改优先级命令_华为QoS 优先级配置教程-qos设置
二.QoS 优先级配置 1.QoS优先级信任模式配置 [Huawei-GigabitEthernet0/0/2]trust ? 8021p Specify trust VLAN 802.1p para ...
- 华为修改优先级命令_华为QoS 优先级配置教程
二.QoS优先级配置 1.QoS优先级信任模式配置 [Huawei-GigabitEthernet0/0/2]trust ? 8021p Specify trust VLAN 802.1p p ...
- css选择器有哪些?各种选择器优先级大小顺序
1.类型选择器 CSS中的一种选择器是元素类型的名称.使用这种选择器(称为类型选择器),可以向这种元素类型的每个实例上应用声明.例如,以下简单规则的选择器是H1,因此规则作用于文档中所有的H1元素. ...
- python优先级排序_Python实现一个优先级队列的方法
问题 怎样实现一个按优先级排序的队列? 并且在这个队列上面每次 pop 操作总是返回优先级最高的那个元素 解决方案 下面的类利用 heapq 模块实现了一个简单的优先级队列: import heapq ...
最新文章
- 怎样把DataGrid存放在ViewState中的无用数据卡掉
- 华为eNSP模拟器学习(一)
- 5分钟了解 Python 中的super函数是如何实现继承的
- 保持你的决心——《传说之下》背后的设计之道
- React的Ant Design Pro目录结构
- 包含天,时,分,秒的倒计时
- 商汤科技「工业视觉AI」研发介绍
- linux ucontext族函数的原理及使用
- android 内存对齐,Go struct 内存对齐
- 什么叫做数字功放?它的电路原理是什么?
- PyTorch 成程序员“新宠”,TensorFlow 风光不再?
- Python 爬虫proxy
- pycharm python InvalidVersionSpecError: Invalid version spec: =2.7
- spidev 驱动 probe 获取 dts 节点参数
- c 语言dll源码查看,易语言DLL函数查看器源码
- android多个单选框超格,福昕PDF阅读器打印时提示“打印机被意外删除了”怎么处理?...
- 基于OpenCV的土壤裂缝分割系统
- VxVM Volume Snapshot Issue -- 卷快照删除失败示例一
- ClickHouse技术分享第二弹(英文讲义)
- [笔记]n个点的基环树数量
热门文章
- 记录一次:微信支付申请时,网站不通过/统一驳回的问题解决方法
- Tomcat默认端口,关闭不必要的安全隐患
- centos solr4.5 tomcat 简单安装[已测试ok]
- 线上解决Resin服务响应过慢的几个方法(转)
- 【Java与智能设备】用户界面基础
- java确定随机数组的范围_Java程序以生成一定范围内的随机数数组并获取最小值和最大值...
- jboss mysql amp amp_怎么在JBoss中配置MySQL数据库连接池让Mysql支持中文
- 什么是webpack? ----(webpack入门)
- android如何关闭响应程序,android – 如何修复应用程序没有响应?
- java 中如何临时保存某输入值_java笔记临时存放