Message ID | 20231006060245.7411-1-mark-pk.tsai@mediatek.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | zsmalloc: use copy_page for full page copy | expand |
On (23/10/06 14:02), Mark-PK Tsai wrote: > Some architectures have implemented optimized > copy_page for full page copying, such as arm. > > On my arm platform, use the copy_page helper > for single page copying is about 10 percent faster > than memcpy. > > Signed-off-by: Mark-PK Tsai <mark-pk.tsai@mediatek.com> TIL I've never heard of arm's copy_page() before. Is it really much faster than memcpy()? Reviewed-by: Sergey Senozhatsky <senozhatsky@chromium.org> > diff --git a/mm/zsmalloc.c b/mm/zsmalloc.c > index c743ce7a5f49..b1c0dad7f4cf 100644 > --- a/mm/zsmalloc.c > +++ b/mm/zsmalloc.c > @@ -1839,7 +1839,7 @@ static int zs_page_migrate(struct page *newpage, struct page *page, > * Here, any user cannot access all objects in the zspage so let's move. > */ > d_addr = kmap_atomic(newpage); > - memcpy(d_addr, s_addr, PAGE_SIZE); > + copy_page(d_addr, s_addr); I guess you can also look into patching zram_drv.c, which seem to have at least one PAGE_SIZE memcpy().
On Fri, 2023-10-06 at 20:11 +0900, Sergey Senozhatsky wrote: > > External email : Please do not click links or open attachments until > you have verified the sender or the content. > > On (23/10/06 14:02), Mark-PK Tsai wrote: > > Some architectures have implemented optimized > > copy_page for full page copying, such as arm. > > > > On my arm platform, use the copy_page helper > > for single page copying is about 10 percent faster > > than memcpy. > > > > Signed-off-by: Mark-PK Tsai <mark-pk.tsai@mediatek.com> > > TIL > > I've never heard of arm's copy_page() before. Is it really much > faster than memcpy()? Based on my earlier tests, it seems better than memcpy for full page copying. The test code is just measures the copying time with irq disabled. > > Reviewed-by: Sergey Senozhatsky <senozhatsky@chromium.org> > > > > diff --git a/mm/zsmalloc.c b/mm/zsmalloc.c > > index c743ce7a5f49..b1c0dad7f4cf 100644 > > --- a/mm/zsmalloc.c > > +++ b/mm/zsmalloc.c > > @@ -1839,7 +1839,7 @@ static int zs_page_migrate(struct page > *newpage, struct page *page, > > * Here, any user cannot access all objects in the zspage so let's > move. > > */ > > d_addr = kmap_atomic(newpage); > > -memcpy(d_addr, s_addr, PAGE_SIZE); > > +copy_page(d_addr, s_addr); > > I guess you can also look into patching zram_drv.c, which seem to > have > at least one PAGE_SIZE memcpy(). Thank. I've just post another patch for zram_drv.c as below link. https://lore.kernel.org/lkml/20231007070554.8657-1-mark-pk.tsai@mediatek.com/
diff --git a/mm/zsmalloc.c b/mm/zsmalloc.c index c743ce7a5f49..b1c0dad7f4cf 100644 --- a/mm/zsmalloc.c +++ b/mm/zsmalloc.c @@ -1839,7 +1839,7 @@ static int zs_page_migrate(struct page *newpage, struct page *page, * Here, any user cannot access all objects in the zspage so let's move. */ d_addr = kmap_atomic(newpage); - memcpy(d_addr, s_addr, PAGE_SIZE); + copy_page(d_addr, s_addr); kunmap_atomic(d_addr); for (addr = s_addr + offset; addr < s_addr + PAGE_SIZE;
Some architectures have implemented optimized copy_page for full page copying, such as arm. On my arm platform, use the copy_page helper for single page copying is about 10 percent faster than memcpy. Signed-off-by: Mark-PK Tsai <mark-pk.tsai@mediatek.com> --- mm/zsmalloc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)