gpt4 book ai didi

c - 在内核空间,如何获取ext4格式磁盘文件对应的物理地址

转载 作者:太空狗 更新时间:2023-10-29 12:10:40 27 4
gpt4 key购买 nike

如果你在这里:

https://github.com/torvalds/linux/blob/master/fs/ext4/file.c#L360

您可以在 ext4_file_mmap 函数中访问这两个结构:

struct file *file, struct vm_area_struct *vma

我正在为 dax 模式更改此函数的实现,以便在您调用 mmap 时为文件完全填充页表(以查看有多少没有任何 pagefaults 给我们带来更好的性能)。

到目前为止,我已经设法完成了以下工作(假设我可以访问 ext4_file_mmap 可以访问的两个结构):

// vm_area_struct defined in /include/linux/mm_types.h : 284
// file defined in /include/linux/fs.h : 848

loff_t file_size = file_inode(file)->i_size;
unsigned long start_va = vma->vm_start;

现在,难点就在这里。如何获取与此文件关联的物理地址( block ?不确定 dax 是否使用 block )?

在过去的几天里,我一直盯着 Linux 源代码,试图弄清其中的意义,天哪,我成功了。

非常感谢任何帮助、提示或建议!谢谢!

一些更新:当您在dax 模式下mmap 一个文件时,您不会将任何内容提取到内存中。该设备(在本例中为 PMEM)可按字节寻址并提供 DDR 延迟,因此可以直接访问(中间没有内存)。某些 pte 导致访问此 PMEM 设备而不是内存。

最佳答案

首先,mmap 支持 MAP_POPULATE 标志,专门用于避免页面错误。原则上它可能不适用于 dax,但这不太可能。

其次,您似乎对当前事态没有任何衡量标准。只是“改变一些东西并检查差异”是一种根本错误的方法。特别是实际的瓶颈可能会作为更改的意外结果而被消除,并且胜利最终会被错误归因。您可以先使用“perf”获取基本数字并生成火焰图 (http://www.brendangregg.com/FlameGraphs/cpuflamegraphs.html)。如果您在小范围内执行大量 I/O,页面错误的影响应该可以忽略不计。

关于c - 在内核空间,如何获取ext4格式磁盘文件对应的物理地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45705066/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com