我想要跟踪正在/可能用于DMA的页面。
我只知道DMA的页面是“锁定的”,它的物理位置在主内存中是不允许改变的。但是我如何判断一个页面是否“锁定”呢?(我猜是在struct页面中使用标志),或者有没有更好的方法来知道页面是否用于DMA?
发布于 2021-10-27 05:32:09
我不是专家,但是,从我在这里和那里读到的内容来看,没有办法知道一个页面是否用于DMA。就像你说的,在页面结构中有一个标志字段,它是一个无符号的长整型。在这个标志字段中,有一个加锁位,它告诉Linux不要将页面换出主内存。要知道这一点,最好的方法是遍历所有进程及其地址空间,并检查页面是否锁定在主内存中。通常,锁定页面的是设备驱动程序。这对于避免设备写入调用进程不能通过虚拟地址访问的物理地址是必要的。如果设备驱动程序没有锁定页面,设备将写入可能被换出的物理帧,或者更改vm映射,这将是灾难性的。这个方法也不会告诉你内核的dma。内核有时可以像交换页面时那样执行dma IO。
https://stackoverflow.com/questions/69718253
复制相似问题