使用线程局部变量可能导致的最大缓存未命中数
Maximum cache misses possible from using Thread Local Variables
提到这个问题已经 asked/answered 问题:(How are the fs/gs registers used in Linux AMD64?), and this doc referenced in an answer to this question (https://akkadia.org/drepper/tls.pdf)
根据文档,FS 寄存器指向 TCB(线程控制块),后者指向最终导致线程本地数据的 DTV(动态线程向量)。
那么假设我们可以招致最多 3 次缓存未命中加载一个线程局部变量是正确的吗? (1 个用于 TCB,1 个用于 DTV,1 个用于数据本身?
根据Godbolt,代码如下:
thread_local int t;
int get_t () {
return t;
}
生成以下目标代码:
mov eax, DWORD PTR fs:t@tpoff
ret
所以我进行了一次内存访问。实际上 post 你 link 中有一个答案说的是同样的话。
提到这个问题已经 asked/answered 问题:(How are the fs/gs registers used in Linux AMD64?), and this doc referenced in an answer to this question (https://akkadia.org/drepper/tls.pdf)
根据文档,FS 寄存器指向 TCB(线程控制块),后者指向最终导致线程本地数据的 DTV(动态线程向量)。 那么假设我们可以招致最多 3 次缓存未命中加载一个线程局部变量是正确的吗? (1 个用于 TCB,1 个用于 DTV,1 个用于数据本身?
根据Godbolt,代码如下:
thread_local int t;
int get_t () {
return t;
}
生成以下目标代码:
mov eax, DWORD PTR fs:t@tpoff
ret
所以我进行了一次内存访问。实际上 post 你 link 中有一个答案说的是同样的话。