mmapã®ã»ããreadããéãã¨ããè¿·ä¿¡ã«ã¤ãã¦
@ITã«ä»¥ä¸ã®ãããªè¨äºãåºã¦ã
ãä»åãããã°ããã®éã¯ãã¾ã£ããéã®ä¾ãã¤ã¾ã使ãã¨ããã°ã©ã ã®å¦çæ§è½ãä¸ããã¨ããã·ã¹ãã ã³ã¼ã«ãç´¹ä»ãã¦ãããã·ã¹ãã ã³ã¼ã«ãå¼ã¶åæ°ã¯å°ãªãæ¹ãå¦çæ§è½ã¯é«ããªãã¨ããååã¯å¤ãããªãããå¼ã³åºãã¦ããã¨å¦çæ§è½ãåä¸ããã·ã¹ãã ã³ã¼ã«ã¨ãããã®ãåå¨ããã®ã ãããããã·ã¹ãã ã³ã¼ã«ã使ããªãã§ãããã¨ã¯ãã¨ã¦ããã£ãããªãã
ãä»åç´¹ä»ããã·ã¹ãã ã³ã¼ã«ã¯ãmmap(2)ãã ãããã§ã¯è©³ããä»çµã¿ã解説ããªãããmmap(2)ã¯ãããã°ã©ã ã®å¦çæ§è½ã«å¿ ãè¯ãå½±é¿ãä¸ããã
やはりあった? 高速化に効くシステムコール (1/2):知ってトクするシステムコール(3) - @IT
ãããçã«åããã®ãããGo言語でmmapシステムコールを使ったファイル読み込みの高速化検討とC言語のコンパイラの話 - ryochack.blogãã®ãããªããã°ã¨ã³ããªãä¸ãã£ã¦ããã
ãããmmapã ã¨å¿ ãéããªãããªãã¦è¿·ä¿¡ã§ãããï¼ï¼ï¼
ãããã®è¨äºã§ç´¹ä»ããã¦ãããã³ããã¼ã¯ã§ read ã mmap ãããé ãè¦ããã®ã¯ãé常ã«å¤§ããªãããã¡ã確ä¿ãã¦ãããããæ£ããã³ã¼ããæ¸ãã°ãã·ã¼ã±ã³ã·ã£ã«ã¢ã¯ã»ã¹ãè¡ãã±ã¼ã¹ã«ãã㦠read(2) ã mmap(2) ããå¤§å¹ ã«é ãã¨ãããã¨ã¯ãã¾ãèµ·ãããªããããããread(2) ã®ã»ãã mmap(2) ãããéããªãã¨ããã±ã¼ã¹ãå®éã«ã¯å¤ãã
ãã¨ãã°ãä¸è¨ã®ãã¡å¾è ã®è¨äºã® read ã使ããã³ããã¼ã¯ãé©åãªãããã¡ãµã¤ãºã使ãããå¤æ´ããã¨ãåã®æå ã§ã¯ read(2) ã使ãçï¼ソースコードï¼ã®ã»ããé«éã«ãªã (MacBook Pro / Mountain Lion ã§è¨æ¸¬ããã¹ããã¼ã¿ã¯32MB)ã
ã¢ã¯ã»ã¹æ¹å¼ | å¦çæé | |
---|---|---|
read | 0.028 | |
mmap | 0.035 |
Linux ã§ã mmap(2) ãã·ã¼ã±ã³ã·ã£ã«ã¢ã¯ã»ã¹ã®å ´åã«æ§è½ãåºãªãã¨ããåé¡ãç¥ããã¦ããã¨ããçµç·¯ããã£ã¦ãã¬ãã£ãã³ã§ç¥ããã kosaki ããã 2.6.34 ã§å ¥ã£ãããããç´¹ä»ããè¨äºï¼革命の日々! 2.6.34のused once ページに対する改善をcopybenchで検証してみたï¼ãéå»ã«æ¸ããããã¦ããï¼ãããã®è¨äºã®æç¹ã§ããã¾ã read/writeã使ã£ãæ¹ãéãï¼ã
ã¾ããããããã®ãªã®ã§ãè¿·ä¿¡ã§ãã
ã¤ãã§ã«ããã¨ãmmap(2) ã§disk I/Oãã¼ã¸ãã©ã«ããèµ·ããã¨ã¹ã¬ãããåºã¾ãã®ã§ããã®ç¹ããããéåæããã°ã©ã *1ã§ã¯ mmap ãé¿ãã¦éåæ I/O ã·ã¹ãã ã³ã¼ã«ã使ãã¹ãã§ãã
ãã£ã¨ãªã£ã¦æ¸ãããå¾æã¯ãã¦ããªãã
*1:Goã£ã¦éåæããã°ã©ãã³ã°ããããã®è¨èªã§ããã