考虑以下场景:在 NUMA 计算机上运行的用户进程调用 mmap 在虚拟地址空间中创建新映射。然后它使用 mmap 返回的内存进行处理(存储其数据,...)。现在由于某些原因,用户进程被调度到不同的NUMA节点。用户进程是否可以告诉操作系统在保留数据的同时重新定位已映射的内存(到不同的 NUMA 节点)?
我阅读了Xen源代码并看到了类似这样的内容:
#define is_domain_direct_mapped(d) ((void)(d), 0)
Run Code Online (Sandbox Code Playgroud)
然后在if语句中使用is_domain_direct_mapped,如下所示(d是指向struct变量的指针):
if( is_domain_direct_mapped(d) ) {...}
Run Code Online (Sandbox Code Playgroud)
因此,在编译器用其定义替换is_domain_direct_mapped之后,我们有类似的东西:
if( ((void)(d), 0) ) {...}
Run Code Online (Sandbox Code Playgroud)
上面的if语句对我来说非常奇怪.这是我第一次看到这种说法.它应该如何工作?
假设块大小为128MB,则群集具有10GB(因此~80个可用块).假设我创建了10个小文件,它们共同占用磁盘上的128MB(块文件,校验和,复制......)和10个HDFS块.如果我想向HDFS添加另一个小文件,那么HDFS使用什么,使用的块或实际磁盘使用量来计算可用块?
80个块 - 10个块= 70个可用块或(10 GB - 128 MB)/ 128 MB = 79个可用块?
谢谢.