Intel RDT简介

RDT要解决的就是: cache level的资源隔离.
我们先看一下noisy neighbour问题.

Noisy Neighbor问题

在目前Server的硬件架构中, 遵循以下规则:

  1. 每个logical core独享L1 cache (L1又被进一步地分为icache, dcache)
  2. 每个physical core(对应两个logical core)共享L2 cache
  3. 每个socket的core共享L3 cache

这就有可能引发noisy neighbor问题.
如下图, 分别有两个application, 由于L3是共享的, 同时遵循"先到先得"的原则, App[1]只有少量的L3 cache可以利用, 这对于它的性能无疑是不利的.


noisy neighbor

RDT分为5个功能模块:
Cache Monitoring Technology (CMT) 缓存检测技术
Cache Allocation Technology (CAT) 缓存分配技术
Memory Bandwidth Monitoring (MBM) 内存带宽监测
Memory Bandwidth Allocation (MBA) 内存带宽分配
Code and Data Prioritization (CDP) 代码和数据优先级

下面主要介绍一下CAT和MBA的机制.

Cache Allocation Technology (CAT)

RDT中定义了clos的概念, 可以将它类比为cgroup中的group. 一个clos对应了一种hareware config(比如20% L3 cache). 通过将上层应用映射到这些clos, 来达到资源控制的效果.

CLOS

我们自底向上看一下RDT的实现机制.
首先, RDT使用bitmask来刻画clos所对应的cache资源.
下面这个例子中, clos[1]可以使用20%的L3 cache.


CAT Example

在硬件上, n个寄存器被用来存储clos->bitmask的映射关系.
从这一点上可以知道, 一台物理机所允许的clos是有上限的.
然后, 每个cpu内部都有一个特殊的寄存器, 用来存储对应的closid.
这样一来, 就完成了cpu -> bitmask的映射.


Hardware design

从上面的分析可以知道, 通过读写寄存器, 就能够完成CAT的功能.
Intel提供了两种CAT的方式:

  1. kernel rdt support: 进程切换的时候, kernel会把procoss所属的closid更新到相应cpu的寄存器里. (需要修改kernel config)
  2. intel-cmt-cat: 除了kernel的方式, intel还提供了工具去直接读写寄存器. 由于缺少schedule的信息, 它只能将不同的cpu绑定不同的cache资源, 然后再将线程pin在上面, 从而达到一定程度的资源隔离. 好处是不需要重编kernel, 较为方便. 坏处是不能够支持线程迁移.

kernel rdt support

kernel使用resctl filesystem来作为暴露给userspace的接口.
使用之前, 需要先简单配置一下kernel

1. enable kernel config
- kernel v4.10 - v4.13 with kernel configuration option CONFIG_INTEL_RDT_A
- kernel v4.14+ with kernel configuration option CONFIG_INTEL_RDT
- kernel v5.0+ with kernel configuration option CONFIG_X86_RESCTRL

2. add kernel parameters (根据需要, 选择性添加就好)
rdt=cmt,mbmtotal,mbmlocal,l3cat,l3cdp,l2cat,l2cdp,mba

下面举例来说明一下resctrl的用法.
step 1. mount resctrl

mount -t resctrl resctrl /sys/fs/resctrl

step 2. create clos

 cd /sys/fs/resctrl
mkdir p0 p1

每个clos下面主要有三类文件:

  • tasks: 表明所属于这个clos的task id.
  • cpus: 表明所属于这个clos的cpu id.
  • schemata: 表明了一种cache的配置.

一般来说, 有两种mode, tasks和cpus二选一配置就好了.

  • task & schemata: 通过绑定task和schemata, 来完成资源隔离的目标. scheduler进行切换的时候, 对应cpu的closid也会发生变化.
  • cpus & schemata: 通过绑定cpu和schemata, 来完成资源隔离的目标. 相当于把cpu里的closid固定住, 然后再将不同的thread pin再这些core上.

如果tasks和cpus都配置了, 且出现冲突的情况下(task实际运行的cpu和所属clos配置的cpu不一致), 以tasks所属的clos为准.

step 3. schemata config
首先, 每一个L1/L2/L3 cache都有对应的id, 比如说socket 0上的L3 cache index = 0, socket 1上的L3 cache index = 1.

/sys/devices/system/cpu/cpu*/cache/index*/id

然后, 我们将如下规则写入schemata.
等式左边是cache id, 等式右边是bitmask.

# echo "L3:0=3;1=c" > /sys/fs/resctrl/p0/schemata
# echo "L3:0=3;1=3" > /sys/fs/resctrl/p1/schemata
Schemata

step 4. echo task

echo 1234 > p0/tasks
echo 5678 > p1/tasks

我还没有用RDT做过实验, 不知道"进程切换带来的closid切换"的overhead有多大, 会不会把task pin在某些core上会比较好.

intel-cmt-cat

占位(逃

Memory Bandwidth Allocation (MBA)

MBA的使用方式就不介绍了, 和CAT差不多, 主要是介绍一下它的硬件设计.
Intel在L2和L3之间再加一个controller来控制bandwidth.
这个controller会根据用户给出的速率计算并加上一个delay.
需要注意的有两点

  • 这个delay同样会影响L3 cache的latency.
  • 假设有两个 不同bandwidth的process运行在同一个core上, bandwidth取较小值.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容

  • 原文:https://blog.csdn.net/force_eagle/article/details/7719...
    大a艺术家阅读 1,956评论 0 0
  • 0、准备知识 超线程技术(Hyper-Threading):就是利用特殊的硬件指令,把两个逻辑内核(CPU cor...
    67c7ec450933阅读 613评论 0 0
  • 1. CPU 并行 1.1 概述 之所以先从 CPU 聊起而不是直接切入正题讲 GPU, 是因为并行思想在CPU和...
    Teci阅读 4,802评论 1 5
  • 1、限制容器的资源 默认情况下,容器没有资源限制,可以使用主机内核调度程序允许的尽可能多的给定资源。Docker提...
    Java大生阅读 741评论 0 0
  • 表情是什么,我认为表情就是表现出来的情绪。表情可以传达很多信息。高兴了当然就笑了,难过就哭了。两者是相互影响密不可...
    Persistenc_6aea阅读 123,973评论 2 7