On Tue, Jan 21, 2025 at 05:00:45PM +0800, Chenyi Qiang wrote:
> >> +
> >> + /* block size and alignment */
> >> + uint64_t block_size;
> >
> > Can we always fetch it from the MR/ramblock? If this is needed, better add
> > some comment explaining why.
>
> The block_size is the granularity used to track the private/shared
> attribute in the bitmap. It is currently hardcoded to 4K as guest_memfd
> may manipulate the page conversion in at least 4K size and alignment.
> I think It is somewhat a variable to cache the size and can avoid many
> getpagesize() calls.
Though qemu does it frequently.. e.g. qemu_real_host_page_size() wraps
that. So IIUC that's not a major concern, and if it's a concern maybe we
can cache it globally instead.
OTOH, this is not a per-ramblock limitation either, IIUC. So maybe instead
of caching it per manager, we could have memory_attr_manager_get_psize()
helper (or any better name..):
memory_attr_manager_get_psize(MemoryAttrManager *mgr)
{
/* Due to limitation of ... always notify with host psize */
return qemu_real_host_page_size();
}
Then in the future if necessary, switch to:
memory_attr_manager_get_psize(MemoryAttrManager *mgr)
{
return mgr->mr->ramblock->pagesize;
}
Thanks,
--
Peter Xu