[问题] vector emplace_back 疑似page fault问题

楼主: laughingman (笑面男)   2022-01-14 04:57:45
开发平台(Platform): (Ex: Win10, Linux, ...)
Linux
编译器(Ex: GCC, clang, VC++...)+目标环境(跟开发平台不同的话需列出)
GCC
问题(Question):
上面那篇我有问估算vector在empalce_back(int)花的时间时,
发现疑似有page fault的情形,
但问题来了,我用/usr/bin/time -v ./a.out 去检测,结果如下:
Major (requiring I/O) page faults: 0
Minor (reclaiming a frame) page faults: 343
看起来没有发生硬性的page fault,而且我测试的机器内存有32GB,
这样会遇到page fault也让我有点惊讶,
另外我后来有加mlock,就可以避免在1024倍数次loop时时间变大到us的问题,
但我这时再用/usr/bin/time -v ./a.out 去检测,结果跟没有加mlock差不多,
这样真的有改善page fault吗? 让我有点怀疑。
有没有神人可以指点一二,感恩。
程式码(Code):(请善用置底文网页, 记得排版,禁止使用图档)
#include <iostream>
#include <vector>
#include <sys/mman.h>
uint64_t get_tscp()
{
uint64_t a, d;
__asm__ volatile("rdtscp" : "=a"(a), "=d"(d));
return (d << 32) | a;
}
int main(int argc, char *argv[])
{
std::vector<int> v;
int size = 4096;
v.reserve(size);
mlock(&v[0], sizeof(int)*size);
for (int i = 0; i < size; ++i)
{
auto t1 = get_tscp();
v.emplace_back(i);
auto t2 = get_tscp();
// std::cout << (t2 - t1) / 2.6 << std::endl;
}
return 0;
}
作者: shibin (喜饼)   2022-01-14 13:02:00
好奇一问,mlock()有成功吗
作者: Lipraxde (Lipraxde)   2022-01-14 13:23:00
你想要什么硬性的 page fault...?
作者: sarafciel (Cattuz)   2022-01-14 13:24:00
15us的话应该是minor page fault,可以试试看perf
作者: Lipraxde (Lipraxde)   2022-01-14 13:35:00
程式在向 OS 要 memory 时,实际上 OS 是先预留位置,直到实际去存取要到的位置时 (触发了 page fault 后)才会真的去更新 page table,属于 recoverable 的想避免的话也许用 mmap + MAP_POPULATE?
作者: jaid (jaid)   2022-01-14 16:06:00
madvise?
楼主: laughingman (笑面男)   2022-01-14 18:19:00
抱歉可能描述不清楚让大家误会了,mlock()有成功,所以我想说在使用mlock()时跑/usr/bin/time -v应该看不到minor page fault,可是仍然显示有一样多的(甚至更多)的minor page fault,这样无法解释mlock()真的有解决原有的page fault问题。
作者: dces4212 (flawless)   2022-01-15 03:29:00
语言runtime在加载.so时也会有page fault 或许可以试试在你感兴趣的程式码前后用getrusage来观察page fault次数比较精准
作者: LiloHuang (十年一刻)   2022-01-15 14:30:00
总是会有 page fault 只是发生时间早晚问题从mmap 拿到的 address 再跑 madvise + MADV_HUGEPAGE使用 huge page (e.g. 2M) 应该就能减少次数了std::vector default allocator 也不一定是 mmap 来的建议自己用 mmap 写个 custom allocator
楼主: laughingman (笑面男)   2022-01-16 06:43:00
谢谢各位大神的建议,我再研究看看,有结果再跟大家分享,感恩。

Links booklink

Contact Us: admin [ a t ] ucptt.com