Index / Reload
識者に意見を聞いてみたところ mmap は lazy に処理を行うため高速だということでした。カーネルソースを見ながら該当箇所をさがしています。
mmap が早いのではなく、munmap の処理速度がアロケートする大きさに比例して遅くなっていますね。最初、書き込みありとなしで何か違いがあるのかと思い、やってみましたが変わりなし。mmap も遅くはなっているが、munmap ほどではありません。あとは、他CPUとの同期処理などをやっていると思われます。一応、調べたデータを↓(400mくらいでやめました)Allocate size = 16384mmap = 7747550, ave = 7747munmap = 7835123, ave = 7835munmap/page = 7835123Allocate size = 32768mmap = 7747587, ave = 7747munmap = 7847158, ave = 7847munmap/page = 3923579Allocate size = 49152mmap = 7745226, ave = 7745munmap = 7852062, ave = 7852munmap/page = 2617354snip snip snipAllocate size = 403980288mmap = 7853898, ave = 7853munmap = 55702646, ave = 55702munmap/page = 2259Allocate size = 403996672mmap = 7861224, ave = 7861munmap = 55693471, ave = 55693munmap/page = 2258Allocate size = 404013056mmap = 7859386, ave = 7859munmap = 55721878, ave = 55721munmap/page = 2259Allocate size = 404029440mmap = 7854493, ave = 7854munmap = 55725049, ave = 55725munmap/page = 2259
識者に意見を聞いてみたところ mmap は lazy に処理を行うため高速だということでした。
カーネルソースを見ながら該当箇所をさがしています。
mmap が早いのではなく、munmap の処理速度がアロケートする大きさに比例して遅くなっていますね。最初、書き込みありとなしで何か違いがあるのかと思い、やってみましたが変わりなし。
mmap も遅くはなっているが、munmap ほどではありません。
あとは、他CPUとの同期処理などをやっていると思われます。
一応、調べたデータを↓(400mくらいでやめました)
Allocate size = 16384
mmap = 7747550, ave = 7747
munmap = 7835123, ave = 7835
munmap/page = 7835123
Allocate size = 32768
mmap = 7747587, ave = 7747
munmap = 7847158, ave = 7847
munmap/page = 3923579
Allocate size = 49152
mmap = 7745226, ave = 7745
munmap = 7852062, ave = 7852
munmap/page = 2617354
snip snip snip
Allocate size = 403980288
mmap = 7853898, ave = 7853
munmap = 55702646, ave = 55702
munmap/page = 2259
Allocate size = 403996672
mmap = 7861224, ave = 7861
munmap = 55693471, ave = 55693
munmap/page = 2258
Allocate size = 404013056
mmap = 7859386, ave = 7859
munmap = 55721878, ave = 55721
munmap/page = 2259
Allocate size = 404029440
mmap = 7854493, ave = 7854
munmap = 55725049, ave = 55725
munmap/page = 2259