mm/zsmalloc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
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(-)
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;
--
2.18.0
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/
© 2016 - 2024 Red Hat, Inc.