ユーザã®æ„Ÿæƒ…ã«ä½œç”¨ã™ã‚‹é…延書ãè¾¼ã¿ã®ä»•çµ„ã¿ã‚’æš´ã‘ - 記事紹介: Inside Vista SP1 File Copy Improvements (3)
éŽåŽ»ã®é–¢é€£è¨˜äº‹
å‰å›žè¨˜äº‹
- 記事紹介: Inside Vista SP1 File Copy Improvements (1)
- 記事紹介: Inside Vista SP1 File Copy Improvements (2)
ãã‚Œã§ã¯ã„よã„よ最終回ã«ã—ã¦ãƒ¡ã‚¤ãƒ³ãƒ‡ã‚£ãƒƒã‚·ãƒ¥ï¼Žè¨˜äº‹ç´¹ä»‹ã‹ã‚‰é›¢ã‚Œã¦ã“ã®ä»¶ã‚’æ·±ã掘り下ã’ã¦ã„ãã¾ã™ï¼Ž
Cached I/O vs Non-Cached I/O revisit
Cached I/O をオートマ車ã«å–©ãˆã‚‹ãªã‚‰ï¼ŒNon-Cached I/O ã¯ã¾ã•ã«ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«è»Šã§ã™ï¼Ž
両者ã®å¤§ããªé•ã„ã¯ï¼Œã©ã‚Œãらã„ã®ã‚µã‚¤ã‚ºã®ãƒ‡ãƒ¼ã‚¿ã‚’,ã©ã‚Œãらã„ã®æœŸé–“メモリ上ã«ä¿æŒã™ã‚‹ã‹ã‚’自動ã§æ±ºã‚ã‚‹ã‹æ‰‹å‹•ã§æ±ºã‚ã‚‹ã‹ã¨ã„ã†ã¨ã“ã‚ã§ã™ï¼Žã‚‚ã¡ã‚ん後者ã®æ–¹ãŒã€Œç†æƒ³çš„ãªçŠ¶æ³ã€ã§ã®ãƒ‘フォーマンスã¯ä¸Šã«ãªã‚Šã¾ã™ï¼Žä¼¼ãŸã‚ˆã†ãªå¯¾ç«‹è»¸ã¯ã‚ã¡ã“ã¡ã«ã‚ã‚Šã¾ã™ã.
Cached I/O | Non-Cached I/O |
å‚照型作りã¾ãã‚Šã§å¯¿å‘½ç®¡ç†ã¯ GC ã«ãŠä»»ã› | 値型é…列ã§å¯¿å‘½ç®¡ç†ã¯è‡ªå‰å®Ÿè£… |
DrawUserPrimitive | DrawPrimitive |
D3DPOOL_MANAGED | D3DPOOL_DEFAULT |
ã‚“ã§ï¼Œã“ã‚“ãªè«–æ–‡ãŒã‚ã‚‹ã®ã§ã™ã‚ˆï¼Ž
second author ã«æ³¨ç›®ï¼ŽRDBMS ç•Œã®å¤§å¾¡æ‰€ã«ã—ã¦ï¼ŒMicrosoft Research ã® Jim Gray åšå£«*1ã§ã™ï¼Žãªãœæ°ãŒ .NET ã®è«–文を? ã¨ã„ã†æ–¹ã¯è»½ãè«–æ–‡ã®ã‚°ãƒ©ãƒ•ã‚’眺ã‚ã¦ã¿ã¦ä¸‹ã•ã„.基本的ã«ã“ã®è«–文㯠Windows OS 㧠Cached I/O 㨠Non-Cached I/O ã®ãƒ‘フォーマンスを比ã¹ã‚‹è©±ã§ã™ï¼Ž.NET ã‚„ P/Invoke ã®è©±ã¯åŠåˆ†ãŠã¾ã‘ã£ã½ã„ã§ã™ã.
余談ã§ã™ãŒ Microsoft SQL Server ã¨ã„ã†è£½å“ã¯é¢ç™½ãã¦ï¼ŒNon-Cached I/O ã‚„ Scatter/Gather I/O,Fiber, NUMA ãªã©éžå¸¸ã«ç‰¹æ®Šãª API ã‚’ã‚„ãŸã‚‰ã«æ´»ç”¨ã—ã¦ã„ã¾ã™ï¼Žã‚€ã—ã‚ MSSQL Server ãƒãƒ¼ãƒ ã‹ã‚‰ã®è¦è«‹ã§ã“れら㮠OS ã®æ©Ÿèƒ½è¿½åŠ ãŒå¾ŒæŠ¼ã—ã•ã‚ŒãŸã¨ã„ã†è¦‹æ–¹ã™ã‚‰ã§ãã‚‹ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“.
ã•ã¦ï¼Œè«–æ–‡ã®è©±ã«æˆ»ã‚Šã¾ã—ょã†ï¼Ž
As shown in Figures 6 and 7, a file striped across 16 disk drives delivers 800 MBps and uses about 30% of a processor – when those experiments are done with buffered IO the speed is dramatically less – about 100 MBps vs 800 MBps – so for now, the .NET runtime is OK for single disks, but un-buffered IO is needed to drive disk arrays at speed..
Non-cached I/O ãªã‚‰ CPU 使用率 30% 㧠800 MBps 出ã¦ã„ãŸç’°å¢ƒã§ï¼Œ(.NET ã®FileStream クラスã®ãƒãƒƒãƒ•ã‚¡ã‚‚å«ã‚ãŸ) cached I/O を使ã†ã¨ 100 MBps ã—ã‹å‡ºã¾ã›ã‚“ã§ã—ãŸï¼Œã¨ã„ã†è©±ã§ã™ï¼Ž
ã“ã®è©±ã¨ï¼Œã€Œå¾“æ¥ã® Windows ã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚³ãƒ”ー㯠cached I/O を使ã£ã¦ã„ãŸã€ã¨ã„ã†è©±ã‚’組ã¿åˆã‚ã›ã‚‹ã¨ï¼Œã€ŒVista 㧠Non-cached I/O ã«ç§»è¡Œã—ã¾ã™ã€ã¨èžã„ã¦ã‚‚ãã‚Œã»ã©é©šãã¯ã—ãªã„ã§ã—ょã†ï¼Ž
ã—ã‹ã—ç¾å®Ÿã«ã©ã†ãªã£ãŸã‹ã¨ã„ã†ã¨ï¼Œç¢ºã‹ã«ç§»è¡Œã¯ã—ãŸã®ã§ã™ãŒï¼ŒæœŸå¾…ã¯çµ¶æœ›ã«å¤‰ã‚ã‚Šã¾ã—ãŸï¼Žç§ã‚’å«ã‚€å¤šãã®äººã€…ã«ã¨ã£ã¦ã®å°è±¡ã¯ã€ŒVista ã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚³ãƒ”ーã¯éžå¸¸ã«é…ããªã£ãŸã€ã¨ã„ã†ã‚‚ã®ã ã£ãŸã®ã§ã™ï¼Ž
ã‚‚ã£ã¨ã‚‚,複数ã®ã‚·ãƒŠãƒªã‚ªã‚’ç·åˆçš„ã«è¨ˆæ¸¬ã—ã¦ï¼Œæœ¬å½“ã«ã€ŒVista ã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚³ãƒ”ーã¯éžå¸¸ã«é…ããªã£ãŸã‹ã©ã†ã‹ã€ã‚’調ã¹ãŸäººã¯å°‘ãªã„ã®ã§ã¯ãªã„ã§ã—ょã†ã‹ï¼Žã‚る特定ã®ã‚·ãƒŠãƒªã‚ªï¼Œä¾‹ãˆã°è¤‡æ•°ã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚’ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯è¶Šã—ã«å–ã£ã¦ãる,ã¨ã„ã£ãŸã‚±ãƒ¼ã‚¹ã§ï¼Œä»¥å‰ã‚ˆã‚Šã‚‚ダイアãƒã‚°ã®ä¼¸ã³ãŒé…ã„ã®ã«æ°—ãŒã¤ã,ãã®æ‚ªå°è±¡ãŒã€Œå…¨ã¦ã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚µã‚¤ã‚ºï¼Œå…¨ã¦ã®ã‚³ãƒ”ーシナリオã§ãã£ã¨é…ã„ã«é•ã„ãªã„ã€ã¨ã„ã†ç¢ºä¿¡ã«ç¹‹ãŒã£ãŸäººã‚‚å°‘ãªããªã„ã¯ãšã§ã™ï¼Ž
ã“ã‚Œã¯å…¨ãã‚‚ã£ã¦æ„Ÿæƒ…çš„ãªåå¿œã§ã™ï¼Žã—ã‹ã—ã ã‹ã‚‰ã“ã,Joel ãŒã‚ã‚Œã»ã©å£ã‚’é…¸ã£ã±ãã—ã¦è¦å‘Šã—ã¦ã„ã‚‹ã®ã§ã—ょã†ï¼Žç¾åœ¨ã®ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢åˆ¶ä½œã§ã¯ï¼Œåˆ¶ä½œè€…ã¨åˆ©ç”¨è€…ãŒå…¨ã¦ã®é¢ã§ç•°ãªã‚‹å ´åˆãŒã»ã¨ã‚“ã©ã§ã™ï¼Žæ•…ã«ï¼Œèª°ãŒãã®ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã‚’使用ã—,ãã®ã¨ãã«ã©ã‚“ãªæ„Ÿæƒ…を抱ãã‹ã¨ã„ã†è¦ç´ ã¯æ±ºã—ã¦ç„¡è¦–ã§ãã‚‹ã‚‚ã®ã§ã¯ã‚ã‚Šã¾ã›ã‚“.
ç¾å®Ÿã¯äºˆæƒ³ã®æ–œã‚上を行ã
ã¾ãŸï¼Œç¾å®Ÿã®å¤šæ§˜æ€§ã¨ã„ã†æ„味ã§ã‚‚ã“ã®ä»¶ã¯é¢ç™½ã„ã‚‚ã®ã§ã—ãŸï¼Žä¸€è¦‹ãƒ˜ãƒžã‚’ã—ã¦ã„るよã†ã§ï¼Œãã‚ŒãŒå®Ÿã¯ã†ã¾ãè¡Œã£ã¦ã„ã‚‹ã“ã¨ã‚‚ã‚る,ã¨ã„ã†ã‚ã‘ã§ã™ï¼Ž
技術者:「ãã‚‚ãã‚‚ 1 TB ã®ãƒãƒ¼ãƒ‰ãƒ‡ã‚£ã‚¹ã‚¯ã‚’,1 GB ã®ç©ºãメモリã§ã‚ャッシュã™ã‚‹ã¨ã—ãŸã‚‰ï¼Œé¸ã¹ã‚‹ãƒ‡ãƒ¼ã‚¿ã¯å…¨ä½“ã® 0.1 % ã—ã‹ç„¡ã„ã‚“ã .ãã‚“ãªè²´é‡ãªã‚ãƒ£ãƒƒã‚·ãƒ¥é ˜åŸŸã‚’ï¼Œå˜ã«ä»Š 数百 MB ã‹ã‚‰ æ•° GB ã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚’コピーã—ã¦ã„ã‚‹ã‹ã‚‰ã¨ã„ã†ç†ç”±ã§ä¸¸ã€…書ãæ›ãˆã¦ã—ã¾ãªã‚“ã¦ï¼Œã¾ã•ã«ã‚ャッシュã®æ±šæŸ“ã よãï¼ã€
悪é”:「本当ã«ãã†ã‹ãªï¼Ÿ 確ã‹ã«ãƒ•ã‚¡ã‚¤ãƒ«ã‚³ãƒ”ー直後ã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚’é–‹ãã“ã¨ã¯å°‘ãªã„よã†ã«æ€ãˆã‚‹ã‹ã‚‚ã—ã‚Œãªã„ã‘ã‚Œã©ï¼Œä¾‹ãˆã°ãƒ‡ã‚¹ã‚¯ãƒˆãƒƒãƒ—ã«ãƒ•ã‚¡ã‚¤ãƒ«ã‚’コピーã—ãŸã¨ãã®ã“ã¨ã‚’考ãˆã¦ã¿ãªã‚ˆï¼Žã ã£ã¦ãƒ‡ã‚¹ã‚¯ãƒˆãƒƒãƒ—ã«æ–°ã—ã„ファイルãŒç¾ã‚Œã‚‹ã¨ï¼Œãƒ‡ã‚¹ã‚¯ãƒˆãƒƒãƒ—サーãƒã®ã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹ä½œæˆãŒå§‹ã¾ã£ã¦ï¼Œã‚¢ãƒ³ãƒã‚¦ã‚£ãƒ«ã‚¹ã‚½ãƒ•ãƒˆã‚„アンãƒã‚¹ãƒ‘イウェアソフトãŒã‚¹ã‚ャンを始ã‚ã¦ï¼ŒExplorer ã¯è¦ªãƒ•ã‚©ãƒ«ãƒ€ã®ãƒ•ã‚©ãƒ«ãƒ€ã‚¢ã‚¤ã‚³ãƒ³ã«è¡¨ç¤ºã™ã‚‹ã‚µãƒ ãƒã‚¤ãƒ«ã®ä½œæˆã‚’始ã‚ã‚‹ã‚“ã ãœï¼Ÿã€
ã†ã¡ã®æ—¥è¨˜ã‚‚ã‚‚ã£ã¨ã‚‚らã—ã„話ã°ã‹ã‚Šæ›¸ã„ã¦ã„ã‚‹ã®ã§ï¼Œä»Šå›žã®ä»¶ãªã‚“ã‹ã¯æœ¬å½“ã«èº«ã®ã™ãむよã†ãªè©±ã§ã™ï¼Ž
システムã¨ã—ã¦ã®è¤‡é›‘ã•ã¨ï¼Œå€‹ã¨ã—ã¦ã®å˜ç´”ã•
例ãˆã° ZDNet ã®è¨˜äº‹ã«å¯¾ã™ã‚‹å応.
ã‚ã‚‹æ„味ショッã‚ング。
XPã§ã¯ã‚ャッシュã®ã‚³ãƒŸãƒƒãƒˆãŒå¾…ã¡çŠ¶æ…‹ã§ã‚ã£ã¦ã‚‚ダイアãƒã‚°ãŒæ¶ˆãˆã‚‹ Vistaã§ã¯ã‚ャッシュãŒãƒ‡ã‚£ã‚¹ã‚¯ã«ã‚³ãƒŸãƒƒãƒˆã•ã‚ŒãŸæ™‚点ã§ãƒ•ã‚¡ã‚¤ãƒ«ã‚³ãƒ”ーã®çµŒéŽã‚’示ã™ãƒ€ã‚¤ã‚¢ãƒã‚°ãƒœãƒƒã‚¯ã‚¹ãŒæ¶ˆãˆã‚‹ã¤ã¾ã‚Šã€XPã¯å‡¦ç†ãŒé€”ä¸ã¾ã§ã™ã‚“ã らã€ãƒ€ã‚¤ã‚¢ãƒã‚°ã‚’消ã—ã¡ã‚ƒã†ã®ã§ã€ãã®ã›ã„ã§XPãŒé€Ÿã見ãˆã¦ãŸã¨ã€‚VistaãŒãªã‚“ã§ã‚‚ã‹ã‚“ã§ã‚‚悪ã„ã‚ã‘ã§ã¯ãªã•ãã†ã§ã™ã€‚
確ã‹ã«æ™®é€šãã†æ€ã„ã¾ã™ã‚ˆã.ç§ã‚‚最åˆè¨˜äº‹ã‚’èªã‚“ã ã¨ãã¯ï¼Œã€Œã†ãƒ¼ã‚€ï¼Œãªã‚“ã¦ã‚¤ãƒ³ãƒã‚ã‚’ã—ã¦ã„ãŸã‚“ã ã€ã¨æ€ã„ã¾ã—ãŸï¼ŽãŒï¼Œå®Ÿé¨“ã—ã¦ã¿ã‚‹ã¨â€¦â€¦ï¼Ÿ 続ãã¯ã‚ã¨ã®æ–¹ã§ï¼Ž
ã•ã¦ï¼Œã“ã“ã‹ã‚‰ã¯æ„Ÿæƒ…ã§ã¯ãªãç¾å®Ÿã®æŒ™å‹•ã®æ–¹ã«å†ã³ç›®ã‚’å‘ã‘ã¾ã™ï¼Ž
ç¾å®Ÿã¯è¤‡é›‘ã ã¨å…ˆã»ã©æ›¸ãã¾ã—ãŸãŒï¼Œé¢ç™½ã„ã‚‚ã®ã§ï¼Œæ³¨æ„æ·±ã実験ã™ã‚‹ã¨ï¼Œå€‹ã€…ã®ã‚¢ãƒ«ã‚´ãƒªã‚ºãƒ ã®æŒ¯ã‚‹èˆžã„ãŒè¦‹ãˆã¦ãã¦ï¼Œã—ã°ã—ã°ãã‚Œã¯ãƒ‰ã‚ュメント通りã®éžå¸¸ã«ç´ ç›´ãªå‹•ãã ã£ãŸã‚Šã—ã¾ã™ï¼Ž
ã“ã®é©šãã¯ä»¥å‰ã®ã‚¨ãƒ³ãƒˆãƒªã§ã‚‚書ã„ãŸã‹ã‚‚ã—ã‚Œã¾ã›ã‚“.大é‡ã®ãƒ’ープを消費ã™ã‚‹ã‚¢ãƒ—リケーションを最å°åŒ–ã—ãŸã‚‰ï¼Œãã®ç›´å¾Œã‹ã‚‰ãƒšãƒ¼ã‚¸ãƒ•ã‚¡ã‚¤ãƒ«ã¨ã®åŒæœŸãŒå§‹ã¾ã‚‹ã¨ã„ã†è©±ã§ã™ãŒï¼Œç§è‡ªèº«ï¼Œè©¦ã™ã¾ã§ã¯ã€Œãã‚“ãªå˜ç´”ã«å‹•ã„ã¦ã‚‹ã‚‚ã‚“ã‹ã„ãªï¼Žã‚‚ã£ã¨è¤‡é›‘ãªã‚¢ãƒ«ã‚´ãƒªã‚ºãƒ 使ã£ã¦ã‚‹ã‚“ã˜ã‚ƒãªã„ã®ï¼Ÿã€ã¨æ€ã£ã¦ã„ãŸã®ã§ã™ï¼Žã¨ã“ã‚ãŒå®Ÿéš›è©¦ã—ã¦ã¿ã‚‹ã¨ï¼Œã€Žã‚¤ãƒ³ã‚µã‚¤ãƒ‰ Windows 第4版ã€ã®å†…容ã‹ã‚‰äºˆæƒ³ã•ã‚Œã‚‹å‹•ä½œãã®ã‚‚ã®ã§ï¼Œé€†ã«ã€Œã»ã‚“ã¨ã‹ã„ãªã€ã¨ç–‘ã„ãŸããªã£ã¦ã—ã¾ã†ãらã„ã§ã—ãŸï¼Ž
ãƒã‚¤ãƒ³ãƒˆã¯ã“ã“ã«ã‚ã‚Šã¾ã™ï¼Žç¢ºã‹ã«ï¼Œã‚·ã‚¹ãƒ†ãƒ 全体ã¨ã—ã¦ã®ãƒ‘フォーマンスや,ãã®ãƒ‘フォーマンスãŒã©ã®ã‚ˆã†ãªæ„Ÿæƒ…を利用者ã«æŠ±ã‹ã›ã‚‹ã‹ã¯ï¼Œéžå¸¸ã«è¤‡é›‘ãªå•é¡Œã§ã™ï¼Žäº‹å‰ã«èªã¿åˆ‡ã‚‹ã®ã¯ã¨ã¦ã‚‚大変ã§ã™ï¼ŽMicrosoft ã§ã™ã‚‰ãƒ˜ãƒžã‚’ã—ã¾ã™ï¼Žã—ã‹ã—,ãã‚“ãªè¤‡é›‘ãªã‚·ã‚¹ãƒ†ãƒ ã§ã‚‚,部分部分ã¯ï¼Œãã‚Œã»ã©è¤‡é›‘ãªä»•çµ„ã¿ã§å‹•ã„ã¦ã„る訳ã§ã¯ãªã„ã®ã§ã™ï¼Ž
ãã—ã¦ï¼ŒWindows を構æˆã™ã‚‹å€‹ã€…ã®ã‚³ãƒ³ãƒãƒ¼ãƒãƒ³ãƒˆã®æŒ¯ã‚‹èˆžã„ã«ã¤ã„ã¦ã®è³‡æ–™ã¯æŽ¢ã›ã°çµæ§‹ã‚ã‚‹ã‚‚ã®ã§ã™ï¼Žãƒ‰ã‚ュメントãŒå…¬é–‹ã•ã‚Œã¦ã„る以上,ソースコードãŒå…¬é–‹ã•ã‚Œã¦ã„ãªã„ã“ã¨ã¯è¨€ã„訳ã«ã¯ãªã‚Šã¾ã›ã‚“.必è¦ãªã‚³ã‚¹ãƒˆã‚’ã‹ã‘ã‚Œã°ï¼Œé™å®šã•ã‚ŒãŸç¯„囲内ã§ã®å‹•ä½œæŽ¨å®šã¯ã‹ãªã‚Šã®é«˜ç²¾åº¦ã§å¯èƒ½ã§ã™ï¼Žã“ã‚Œã¯é”法ã§ã¯ãªãã¦æŠ€è¡“ã§ã™ï¼Žãã“ã®ã¨ã“ã‚ã¯ã‚ˆã憶ãˆã¦ãŠãã¾ã—ょã†ï¼Ž
確ã‹ã«é›£æ˜“度ã¯æ¥µæ‚ªã§ã™ï¼Žæ‚ªæ„ã«åŸºã¥ã„ãŸã¨ã—ã‹æ€ãˆãªã„å¶ç„¶ã¨éŽåŽ»ãŒæŠ˜ã‚Šé‡ãªã‚Šï¼Œä¼èžã§ä¼ã‚ã£ã¦ãã‚‹æƒ…å ±ã¯ãƒŸã‚¹ãƒªãƒ¼ãƒ‰ã‚’誘ã†ãƒ©ãƒ³ãƒ€ãƒ ノイズ.
ã—ã‹ã—ãã‚“ãªæ€è€ƒè¿·è·¯ã‚‚,éžå¸¸ãƒ‰ã‚¢ã‹ã‚‰è£ã«å›žã£ã¦ã¿ã‚‹ã¨ï¼Œæ¡ˆå¤–ãŸã„ã—ãŸã“ã¨ã®ãªã„張りã¼ã¦ã ã£ãŸã‚Šã™ã‚‹ã‚‚ã®ã§ã™ï¼Žãã‚Œã§ã¯è§£ã‚’ã”らんã‚れ.
é…延書ãè¾¼ã¿å…¥é–€
ã¨ã„ã†ã‚ã‘ã§ä»Šå›žã¯ï¼ŒCached I/O ã«ã‚ˆã‚‹é…延書ãè¾¼ã¿ã«çµžã£ã¦ï¼Œæ™®æ®µã¯ã‚ã¾ã‚Šè¡¨ã«ã•ã‚‰ã•ã‚Œãªã„舞å°è£ã‚’ã”覧ã«ã„ã‚Œã¾ã—ょã†ï¼Žæœ€å¾Œã¾ã§èªã‚“ã§ã„ãŸã ã‘ã‚Œã°ï¼Œå°‘ãªãã¨ã‚‚å³æ»ã‚³ãƒ³ãƒœã‚’食らã‚ãªã„程度ã«ã¯è€æ€§ãŒä»˜ãã¯ãšã§ã™ï¼Ž
å‚考資料ã¨ã—ã¦ã¯ï¼Œæ¬¡ã®ã‚‚ã®ãŒãŠå‹§ã‚ã§ã™ï¼Ž
- 『インサイド Windows 第4版ã€ã®ã€Œ 第11ç« ã‚ャッシュマãƒãƒ¼ã‚¸ãƒ£ã€
- 以å‰æ±å¤§ã§è¡Œã‚ã‚ŒãŸã€Žコンピュータ科学特別講義III (戦略ソフトウェア特論II) ã€ã¨ã„ã†è¬›ç¾© ã®ã€ŽCacheManager に関する講義資料ã€
WriteFile ãŒé…延書ãè¾¼ã¿ã‚’è¡Œã†ã¨ã,引数ã«æ¸¡ã•ã‚ŒãŸãƒ‡ãƒ¼ã‚¿ã‚’å˜ã«ãƒ•ã‚¡ã‚¤ãƒ«ãƒžãƒƒãƒ”ングã•ã‚ŒãŸç‰©ç†ãƒ¡ãƒ¢ãƒªã«ã‚³ãƒ”ーã•ã‚ŒãŸã ã‘ã§ï¼Œå®Ÿéš›ã®ãƒ•ã‚¡ã‚¤ãƒ«æ›¸ãè¾¼ã¿ã¯å®Œäº†ã—ã¦ã„ã¾ã›ã‚“.ã¾ãšã¯ã“れをå†ç¾ã—ã¾ã™ï¼Ž
次ã®ã‚ˆã†ãªãƒ†ã‚¹ãƒˆã‚³ãƒ¼ãƒ‰ã‹ã‚‰ã‚¹ã‚¿ãƒ¼ãƒˆã—ã¾ã—ょã†ï¼Žã“ã‚Œã¯ï¼Œ
- CreateFile API を使用ã—ã¦ã‚·ã‚¹ãƒ†ãƒ ドライブã«ãƒ•ã‚¡ã‚¤ãƒ«ã‚’æ–°è¦ä½œæˆï¼Ž
- デフォルトã®ã¾ã¾ãªã®ã§ Cached I/O を使用ã™ã‚‹ã“ã¨ã«ãªã‚‹ï¼Ž
- 64 KB ã®ãƒãƒƒãƒ•ã‚¡ã‚’ VirtualAlloc ã§ç¢ºä¿
- é©å½“ã«ãƒ‡ãƒ¼ã‚¿ã‚’埋ã‚ã‚‹
- WriteFile API ã«å…ˆã»ã©ã®ãƒãƒƒãƒ•ã‚¡ã‚’渡ã—ã¦ãƒ‡ãƒ¼ã‚¿ã‚’書ã込む
- ã“れを 128 回繰り返ã™
- åˆè¨ˆ 8 MB 書ãè¾¼ã¾ã‚Œã‚‹
- CloseHandle ã§ãƒ•ã‚¡ã‚¤ãƒ«ã‚’é–‰ã˜ã¦çµ‚了ã™ã‚‹
ã¨ã„ã†ã‚‚ã®ã§ã™ï¼Ž
手元ã®ç’°å¢ƒã§ï¼ŒWriteFile 128 回ã«è¦ã™ã‚‹æ™‚間を計ã£ã¦ã¿ã¾ã—ãŸï¼Žæ‰€è¦æ™‚é–“ã¯ç´„ 10 msec å‰å¾Œã§ï¼ŒWriteFile ã®ã‚¹ãƒ«ãƒ¼ãƒ—ットã¯ç´„ 800 MB/sec ã«ç›¸å½“ã—ã¾ã™ï¼Žã•ã‚‰ã«ï¼ŒCPU ã®å‹•ä½œã‚¯ãƒãƒƒã‚¯ã‚’åŠåˆ†ã«ã—ã¦è©¦ã—ã¦ã¿ã‚‹ã¨ï¼Œæ¦‚ã所è¦æ™‚間㯠2 å€ã«ï¼Œã¤ã¾ã‚Šã‚¹ãƒ«ãƒ¼ãƒ—ットã¯åŠåˆ†ã® 400 MB/sec å‰å¾Œã¨ãªã‚Šã¾ã—ãŸï¼Žã“ã‚ŒãŒç”Ÿã®ãƒ‡ã‚£ã‚¹ã‚¯é€Ÿåº¦ã¨ã¯ã¨ã¦ã‚‚æ€ãˆã¾ã›ã‚“よã? HDD 自体ã«æ載ã•ã‚Œã¦ã„ã‚‹ã‚ャッシュメモリを疑ã†ã®ã§ã‚ã‚Œã°ï¼Œä»–ã®ãƒ‡ã‚£ã‚¹ã‚¯ã§è©¦ã—ã¦ã¿ã‚‹ã¨ã‚ˆã„ã§ã—ょã†ï¼ŽãªãŠï¼Œå®Ÿéš›ã«ãƒ‡ã‚£ã‚¹ã‚¯ã«æ›¸ãè¾¼ã¾ã‚Œã‚‹ã¾ã§åŒæœŸçš„ã«å¾…ã¤ã“ã¨ã‚‚å¯èƒ½ã§ï¼Œãã‚Œã«ã¯ FlushFileBuffers API を使用ã—ã¾ã™ï¼ŽFlushFileBuffers ã«ã‹ã‹ã‚‹æ™‚é–“ã‹ã‚‰ï¼Œã©ã‚Œãらã„é…延書ãè¾¼ã¿ãŒæºœã¾ã£ã¦ã„ã‚‹ã®ã‹è¦‹ç©ã‚‚ã‚‹ã“ã¨ãŒå¯èƒ½ã§ã™ï¼Ž
改ã‚ã¦ã‚½ãƒ¼ã‚¹ã‚³ãƒ¼ãƒ‰ã‚’示ã—ã¾ã—ょã†ï¼Ž
#define WINVER 0x500 #define WIN32_LEAN_AND_MEAN #include <windows.h> #include <iostream> #include <fstream> int main() { HANDLE file = ::CreateFileW( L"C:\\test.dat", GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_FLAG_SEQUENTIAL_SCAN, NULL); const int totalSize = 1024*1024*8; const int bufSize = 1024*64; char* buf = (char*)VirtualAlloc(NULL, bufSize, MEM_COMMIT, PAGE_READWRITE); for(int i = 0; i < bufSize; ++i) { buf[i] = i % 255; } int numWriteBytes = 0; for(int i = 0; i < totalSize/bufSize; ++i) { DWORD size = 0; const BOOL ret = WriteFile( file, buf, bufSize, &size, NULL ); if( ret == 0 ) { const DWORD lastError = GetLastError(); std::cout << "WriteFile failed error:" << lastError << std::endl; break; } numWriteBytes += size; } CloseHandle(file); VirtualFree(buf, 0, MEM_FREE); return 0; }
ã±ã£ã¨è¦‹ãŸã ã‘ã§ã¯ï¼Œã“ã‚Œã¯ã„ã‹ã«ã‚‚「HDD ã®æ›¸ãè¾¼ã¿é€Ÿåº¦ã®å½±éŸ¿ã‚’å—ã‘ãã†ãªã‚³ãƒ¼ãƒ‰ã€ã§ã™ï¼ŽãŒï¼Œãã“ã¯æ—¢ã«æ€è€ƒè¿·è·¯ã®å…¥ã‚Šå£ã§ã™ï¼Ž
æ—¢ã«ã“ã®ã‚³ãƒ¼ãƒ‰ãŒã»ã¨ã‚“ã© CPU ã®ãƒ™ãƒ³ãƒãƒžãƒ¼ã‚¯ã«ãªã£ã¦ã—ã¾ã†ã“ã¨ã‚‚ã‚ã‚‹ã®ã¯ç¤ºã—ã¾ã—ãŸï¼Žäº›ç´°ãªã“ã¨ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“ãŒï¼Œã‚½ãƒ¼ã‚¹ã‚³ãƒ¼ãƒ‰ã« FlushFileBuffers API ãŒã¿ã‚ãŸã‚‰ãªã„ã“ã¨ãªã©ã«ã‚‚気付ã„ã¦ãŠããŸã„ã¨ã“ã‚ã§ã™ï¼Ž
ã“ã®ã‚ˆã†ã«ï¼Œã‚½ãƒ¼ã‚¹ã‚³ãƒ¼ãƒ‰ã®å—é¢ã‹ã‚‰ï¼Œå®Ÿéš›ã«ã©ã®ã‚ˆã†ãªæŒ™å‹•ãŒå°Žã‹ã‚Œã‚‹ã‹ï¼Œãã®å¯èƒ½æ€§ã‚’真剣ã«è€ƒãˆã¦ã¿ã‚‹ã®ãŒæœ¬ã‚¨ãƒ³ãƒˆãƒªã®è¶£æ—¨ã§ã™ï¼Ž
é…延書ãè¾¼ã¿ã¨ã‚«ãƒ¼ãƒãƒ«å¤‰æ•° CcDirtyPageThreshold
å…ˆã»ã©ã®ãƒ†ã‚¹ãƒˆã‚³ãƒ¼ãƒ‰ã§ã¯ï¼Œåˆè¨ˆ 8 MB ã®ãƒ‡ãƒ¼ã‚¿ãŒé…延書ãè¾¼ã¿ã•ã‚Œã‚‹ã®ã‚’見ã¾ã—ãŸï¼Žãƒ†ã‚¹ãƒˆç’°å¢ƒã® HDD ã®æ›¸ãè¾¼ã¿é€Ÿåº¦ã¯æ¦‚ã 20 MB/sec 程度ãªã®ã§ï¼Œå…¨åŠ›ã§æ›¸ã込ん㧠0.4 秒程度ã®ãƒ‡ãƒ¼ã‚¿ãŒã‚ャッシュã•ã‚Œã¦ã„ã‚‹ã“ã¨ã«ãªã‚Šã¾ã™ï¼Ž
ã“ã®ã‚µã‚¤ã‚ºã¯ã©ã“ã¾ã§å¢—ãˆã‚‹ã®ã§ã—ょã†ã‹ï¼Ÿå®Ÿã¯ï¼Œã‚ャッシュマãƒãƒ¼ã‚¸ãƒ£ãŒä¿æŒã§ãるダーティーページ (ディスクã«æ›¸ãè¾¼ã¿ãŒå®Œäº†ã—ã¦ã„ãªã„メモリページ) ã¯ï¼Œã‚«ãƒ¼ãƒãƒ«å¤‰æ•° CcDirtyPageThreshold ã¾ã§ã¨åˆ¶é™ã•ã‚Œã¦ã„ã¾ã™*2.
CcDirtyPageThreshold ã¯ï¼Œæ載物ç†ãƒ¡ãƒ¢ãƒªé‡ç‰ ã«ã‚ˆã£ã¦åˆæœŸåŒ–時ã«æ±ºå®šã•ã‚Œã‚‹é–¾å€¤ã§ï¼Œã‚ャッシュマãƒãƒ¼ã‚¸ãƒ£ãŒä¿æŒã§ãるダーティーページã®æœ€å¤§å€¤ã‚’ç¾ã—ã¾ã™ï¼Ž
ã‚ャッシュマãƒãƒ¼ã‚¸ãƒ£ãŒä¿æŒã—ã¦ã„るシステム全体ã®ãƒ€ãƒ¼ãƒ†ã‚£ãƒ¼ãƒšãƒ¼ã‚¸ãŒ CcDirtyPageThreshold を超ãˆãã†ã«ãªã‚‹ã¨ï¼ŒWriteFile API 呼ã³å‡ºã—ãŒå†…部ã§ãƒ–ãƒãƒƒã‚¯ã•ã‚Œã‚‹ã‚ˆã†ã«ãªã‚Šã¾ã™*3.ダーティーページã®æ¸›å°‘速度ã¯ï¼ŒHDD ã®æœ¬å½“ã®æ›¸ãè¾¼ã¿é€Ÿåº¦ã‚’超ãˆã‚‰ã‚Œã¾ã›ã‚“ã‹ã‚‰ï¼Œã“れ以é™ï¼Œå¹³å‡ã®æ›¸ãè¾¼ã¿é€Ÿåº¦ã¯ HDD ã®å®Ÿéš›ã®æ›¸ãè¾¼ã¿é€Ÿåº¦ã¨ã»ã¼ä¸€è‡´ã™ã‚‹ã¨äºˆæƒ³ã•ã‚Œã¾ã™ï¼Ž
試ã—ã« CcDirtyPageThreshold ㌠510 MB ã¨ã„ã†ç’°å¢ƒã§å®Ÿé¨“ã—ã¦ã¿ã¾ã—ãŸï¼ŽCached I/O モード㧠64 KB ã® WriteFile ã‚’ç¹°ã‚Šè¿”ã—,書ã出ã—ãŸåˆè¨ˆé‡ã¨æ‰€è¦æ™‚é–“ã®é–¢ä¿‚を測定ã—ãªãŒã‚‰ï¼Œåˆè¨ˆ 1 GB ã¾ã§æ›¸ã込んã§ã¿ã‚‹ã¨ã„ã†ã‚‚ã®ã§ã™ï¼Ž
çµæžœã‚’下ã«ç¤ºã—ã¾ã—ょã†ï¼Žé¢ç™½ã„ãらã„ã« 510 MB ã¡ã‚‡ã£ã¨ã®ã¨ã“ã‚ã§ã€Œãƒ¢ãƒ¼ãƒ‰ãŒå¤‰ã‚ã£ã¦ã€ã„ã‚‹ã§ã—ょã†ï¼Ÿ å‰åŠã®æ›¸ãè¾¼ã¿ãŒã€Œçµ‚ã‚ã‚‹ã€ã¾ã§ç´„ 1.5 秒,ãã®å¾Œç´„ 50 秒ã‹ã‘ã¦å¾ŒåŠã®æ›¸ãè¾¼ã¿ãŒã€Œçµ‚ã‚ã‚Šã€ã¾ã™ï¼Žã—ã‹ã—ディスクã¯ã¾ã 書ãè¾¼ã¿ã‚’続ã‘ã¦ã„ã‚‹ã¨ï¼Žå…¨ã¦ãŒçµ„ã¿åˆã‚ã•ã‚Œã°ç«‹æ´¾ãªæ€è€ƒè¿·è·¯ã®ã§ãã‚ãŒã‚Šã§ã™ï¼Ž
ã‚‚ã¡ã‚ã‚“ã“ã®ã‚°ãƒ©ãƒ•ã®å§‹ç‚¹ã¨çµ‚点をçµã¹ã°å¹³å‡æ›¸ãè¾¼ã¿é€Ÿåº¦ãŒåˆ†ã‹ã‚Šã¾ã™ã‚ˆã.ã§ã‚‚,ãã‚“ãªã‚‚ã®ã«ï¼Œã¯ãŸã—ã¦ä½•ã®æ„味ãŒã‚ã‚‹ã®ã§ã—ょã†ã‹ï¼Ÿ
実際㮠CcDirtyPageThreshold ã¯ã©ã‚Œãらã„ãªã®ã‹ï¼Ÿ
ã•ã¦ï¼Œè©±ã‚’戻ã—ã¾ã—ょã†ï¼Ž
ã¤ã¾ã‚Šã€XPã¯å‡¦ç†ãŒé€”ä¸ã¾ã§ã™ã‚“ã らã€ãƒ€ã‚¤ã‚¢ãƒã‚°ã‚’消ã—ã¡ã‚ƒã†ã®ã§ã€ãã®ã›ã„ã§XPãŒé€Ÿã見ãˆã¦ãŸã¨ã€‚VistaãŒãªã‚“ã§ã‚‚ã‹ã‚“ã§ã‚‚悪ã„ã‚ã‘ã§ã¯ãªã•ãã†ã§ã™ã€‚
Windows Vista RTM 版以外,ã¤ã¾ã‚Š Windows XP ã‚’å«ã‚€å¾“æ¥ã® Windows や,Windows Vista SP1 ãªã©ã¯ï¼ŒåŽŸå‰‡çš„ã« Cached I/O を使用ã—ã¦ãƒ•ã‚¡ã‚¤ãƒ«ã‚³ãƒ”ーを行ã£ã¦ã„ã¾ã™ã‹ã‚‰ï¼Œãƒ€ã‚¤ã‚¢ãƒã‚°ãŒæ¶ˆãˆãŸã‚¿ã‚¤ãƒŸãƒ³ã‚°ã§ã ã„ãŸã„ CcDirtyPageThreshold ã¨åŒç¨‹åº¦ã®æœªæ›¸ãè¾¼ã¿ãƒ‡ãƒ¼ã‚¿ãŒãƒ¡ãƒ¢ãƒªä¸Šã«æ®‹ã£ã¦ã„ã‚‹ã¨è€ƒãˆã‚‰ã‚Œã¾ã™ (ã‚‚ã¡ã‚ã‚“ã“ã‚Œã¯ã‚·ã‚¹ãƒ†ãƒ 全体ã«é©ç”¨ã•ã‚Œã‚‹å€¤ãªã®ã§ï¼Œåˆ¥ãƒ—ãƒã‚»ã‚¹ãŒ Cached I/O ã‚’è¡Œã£ã¦ã„ã‚Œã°æœªæ›¸ãè¾¼ã¿ãƒ‡ãƒ¼ã‚¿ã¯ã‚‚ã£ã¨å°‘ãªããªã‚Šã¾ã™).一方ã§ï¼ŒWindows Vista RTM 版ã§ã¯ï¼ŒNon-Cached I/O を使ã£ã¦ï¼Œè‡ªå‰ã§ãƒãƒƒãƒ•ã‚¡ç®¡ç†ã‚’è¡Œã„ãªãŒã‚‰ãƒ•ã‚¡ã‚¤ãƒ«ã‚³ãƒ”ーを行ã†ã®ã§ï¼Œãƒ•ã‚¡ã‚¤ãƒ«ã‚³ãƒ”ーダイアãƒã‚°ã®çµ‚了時ã«ã¯åŸºæœ¬çš„ã«å…¨ã¦ã®æ›¸ãè¾¼ã¿ãŒå®Œäº†ã—ã¦ã„ã¾ã™ï¼Ž
ã•ã¦ï¼Œå®Ÿéš›ã® CcDirtyPageThreshold ã®å€¤ã¯ã©ã‚Œãらã„ãªã®ã§ã—ょã†ã‹ï¼Ÿ 『インサイド Windows 第4版 11.7.3 書ãè¾¼ã¿ã®æŠ‘制ã€ã«ï¼ŒWinDbg を用ã„㦠CcDirtyPageThreshold ã®å€¤ã‚’表示ã™ã‚‹æ–¹æ³•ãŒè§£èª¬ã•ã‚Œã¦ã„ã¾ã™ï¼ŽWinDbg ã§ã‚«ãƒ¼ãƒãƒ«ãƒ‡ãƒãƒƒã‚°ã‚’開始ã—ã¦ï¼Œ!defwrites コマンドを実行ã—ã¾ã™*4.
以下ã¯æ‰‹å…ƒã® Windows Vista SP1 環境ã§ï¼Œ 1 GB ã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚’コピーã—ãªãŒã‚‰ !defwrites を実行ã—ãŸã¨ãã®çµæžœã§ã™ï¼Ž
"writes may be throttled" ã¨è¡¨ç¤ºã•ã‚Œã¦ã„ã¦ï¼Œæ›¸ãè¾¼ã¿ã®æŠ‘制ãŒè¡Œã‚ã‚Œã¦ã„ã‚‹ã“ã¨ãŒåˆ†ã‹ã‚Šã¾ã™ï¼Ž
lkd> !defwrites *** Cache Write Throttle Analysis *** GetUlongFromAddress: unable to read from 00000000 GetUlongFromAddress: unable to read from 00000000 CcTotalDirtyPages: 65449 ( 261796 Kb) CcDirtyPageThreshold: 65461 ( 261844 Kb) MmAvailablePages: 180063 ( 720252 Kb) MmThrottleTop: 0 ( 0 Kb) MmThrottleBottom: 0 ( 0 Kb) MmModifiedPageListHead.Total: 75783 ( 303132 Kb) CcTotalDirtyPages within 64 (max charge) pages of the threshold, writes may be throttled Check these thread(s): CcWriteBehind(LazyWriter) Check critical workqueue for the lazy writer, !exqueue 16 Cc Deferred Write list: (CcDeferredWrites) File: 860c22b0 Event: beb6aa98
ã„ãã¤ã‹ç’°å¢ƒã§ CcDirtyPageThreshold ã®å€¤ã‚’調ã¹ã¦ã¿ã¾ã—ãŸï¼Ž
OS | LargeSystemCache | Memory [MB] | CcDirtyPageThreshold [MB] |
---|---|---|---|
XP SP2 (x86) | 0 | 256 | 22 |
XP SP2 (x86) | 0 | 384 | 22 |
XP SP2 (x86) | 0 | 512 | 22 |
XP SP2 (x86) | 0 | 768 | 22 |
XP SP2 (x86) | 0 | 1024 | 22 |
XP SP2 (x86) | 0 | 1536 | 22 |
XP SP2 (x86) | 1 | 256 | 200 |
XP SP2 (x86) | 1 | 384 | 311 |
XP SP2 (x86) | 1 | 512 | 447 |
XP SP2 (x86) | 1 | 768 | 510 |
XP SP2 (x86) | 1 | 1024 | 510 |
XP SP2 (x86) | 1 | 1536 | 510 |
Vista SP1 (x86) | 0 | 512 | 64 |
Vista SP1 (x86) | 0 | 768 | 96 |
Vista SP1 (x86) | 0 | 1024 | 128 |
Vista RTM (x86) | 0 | 1536 | 192 |
Vista SP1 (x86) | 0 | 1536 | 192 |
Vista SP1 (x86) | 0 | 2048 | 256 |
Vista SP1 (x86) | 1 | 512 | 64 |
Vista SP1 (x86) | 1 | 768 | 96 |
Vista SP1 (x86) | 1 | 1024 | 128 |
Vista RTM (x86) | 1 | 1536 | 192 |
Vista SP1 (x86) | 1 | 1536 | 192 |
Vista SP1 (x86) | 1 | 2048 | 256 |
ãªãŠï¼ŒWindows XP ã® LargeSystemCache ã¯ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã§ 0 ã§ï¼Œã€Žã‚³ãƒ³ãƒ”ュータã®ãƒ—ãƒãƒ‘ティã€ã«ã¦ã€Œãƒ—ãƒã‚»ãƒƒã‚µã®ã‚¹ã‚±ã‚¸ãƒ¥ãƒ¼ãƒ«ã¨ãƒ¡ãƒ¢ãƒªä½¿ç”¨é‡ã€ã§ã€Œãƒãƒƒã‚¯ã‚°ãƒ©ã‚¦ãƒ³ãƒ‰ã‚µãƒ¼ãƒ“ス優先ã€ã€Œãƒ¡ãƒ¢ãƒªä½¿ç”¨é‡ã€ã§ã€Œã‚·ã‚¹ãƒ†ãƒ ã‚ャッシュã€ã‚’é¸æŠžã™ã‚‹ã“ã¨ã§ã‚‚ 1 ã«ãªã‚Šã¾ã™ï¼Žä¸Šã®è¡¨ã«ç¤ºã—ãŸã‚ˆã†ã«ï¼Œæ‰‹å…ƒã® Windows Vista SP1 ã§ã¯ï¼ŒLargeSystemCache ã«ã‚ˆã‚‹ CcDirtyPageThreshold ã®å¤‰åŒ–ã¯è¦‹ã‚‰ã‚Œã¾ã›ã‚“ã§ã—ãŸ*5.
ã•ã¦ã•ã¦ï¼Œã“ã® CcDirtyPageThreshold ã®æ•°å—ã®å¤§ãã•ï¼Œã„ã‹ãŒã§ã—ょã†ã‹ï¼Ÿ
2 GB ã®ãƒ¡ãƒ¢ãƒªã‚’æ載ã—ãŸï¼Œæ‰‹å…ƒã® Windows Vista SP1 ã¯ï¼Œã‚·ã‚¹ãƒ†ãƒ ディスクã®å®Ÿéš›ã®æ›¸ãè¾¼ã¿é€Ÿåº¦ãŒ 20 MB/sec å‰å¾Œãªã®ã«å¯¾ã—ã¦ï¼ŒCcDirtyPageThreshold ã¯ç´„ 256 MB ã§ã™ï¼Žã¨ã„ã†ã“ã¨ã¯ï¼Œãƒ•ã‚¡ã‚¤ãƒ«ã‚³ãƒ”ーã¯ç´„ 13 秒ãらã„「早ãã€çµ‚了ã—ã¦ã„ã‚‹ã®ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“.もã¡ã‚ã‚“ã“ã®é–“åœé›»ãŒèµ·ãã‚Œã°æœªæ›¸ãè¾¼ã¿ã®ãƒ‡ãƒ¼ã‚¿ã¯æ»äº¡ãªã‚ã‘ã§ã™ãŒï¼Ž
Windows XP SP2 ã§ã¯ã©ã†ã§ã—ょã†ï¼Ÿ ã“れ㯠LargeSystemCache ã®å€¤ã«ã‚ˆã‚‹å¤‰åŒ–ãŒå¤§ãã™ãŽã¦ï¼ŒåŒã˜ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ã¨ã¯æ€ãˆãªã„é•ã„ãŒç¾ã‚Œã¾ã™ï¼Žãƒ¬ã‚¸ã‚¹ãƒˆãƒªã‚¨ãƒ³ãƒˆãƒªã‚’ã²ã¨ã¤å¤‰ãˆã‚‹ã ã‘ã§ï¼Œ1.5 GB ã®ãƒ¡ãƒ¢ãƒªã‚’æ載ã—ãªãŒã‚‰ 22 MB ã® CcDirtyPageThreshold ã¨ã„ã†ã“ã¨ã‚‚ã‚ã‚Œã°ï¼Œ768 MB ã®ç’°å¢ƒã® CcDirtyPageThreshold ㌠510 MB ã¨ã„ã†ã“ã¨ã‚‚ã‚ã‚‹ã‚ã‘ã§ã™ï¼Žã‚‚ã¡ã‚ん,最大 510 MB ã®é…延書ãè¾¼ã¿ãŒè¨±å¯ã•ã‚Œã‚‹ã¨ã„ã£ã¦ã‚‚,実際ã«å…¨ã¦ä½¿ã„切れるã‹ã©ã†ã‹ã¯ç©ºãメモリ次第ã§ã™ï¼Žçµæžœã¨ã—ã¦ï¼Œã‚ã‚‹æ—¥ã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚³ãƒ”ーã¯ã¨ã¦ã‚‚速ãæ„Ÿã˜ã‚‰ã‚Œã‚‹ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“ã—,ã‚ã‚‹æ—¥ã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚³ãƒ”ー㯠HDD 性能ã«è¦‹åˆã£ãŸæ™®é€šã®é€Ÿåº¦ã«æ„Ÿã˜ã‚‰ã‚Œã‚‹ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“.
ãªãœ Windows Vista RTM ã§ãƒ•ã‚¡ã‚¤ãƒ«ã‚³ãƒ”ーã¯é…ããªã£ãŸã®ã‹ï¼Ÿ
以上ã®ã‚ˆã†ã«ï¼Œãƒ‡ãƒ•ã‚©ãƒ«ãƒˆè¨å®šã® Windows XP SP2 ã® CcDirtyPageThreshold ã¯å分å°ã•ã,標準的㪠HDD ã«ã—ã¦ã‚‚ã›ã„ãœã„ 1 秒程度ã ã£ãŸã“ã¨ãŒåˆ†ã‹ã‚Šã¾ã—ãŸï¼ŽãŠã‚„,何ã‹å¤‰ã§ã™ã.元々é…延書ãè¾¼ã¿ã§å¤§ã—ã¦æ™‚é–“çŸç¸®ãŒèµ·ãã¦ã„ãªã„ã®ãªã‚‰ï¼ŒVista RTM 版ã§ãã®åŠ¹æžœãŒ 0 ã«ãªã£ã¦ã‚‚影響ã¯å°‘ãªã„ã¯ãšã§ã™ï¼Žã¨ã„ã†ã‚ã‘ã§ï¼Œå€‹äººçš„ã¯ã‚„ã¯ã‚Š Vista RTM 版ã§ã®ãƒ˜ãƒžã¯ã‚„ã£ã±ã‚ŠãƒŸã‚¹ã¨å‘¼ã¹ã‚‹ã‚‚ã®ã ã£ãŸã‚“ã˜ã‚ƒãªã„ã‹ãªã¨æ€ã„ã¾ã™ï¼ŽMark æ°ã®å…ƒè¨˜äº‹ã§ã¯ï¼Œä»–ã«ã‚‚様々ãªè¦å› ãŒè§£èª¬ã•ã‚Œã¦ã„ã¾ã™ã®ã§ï¼Œã‚ˆã‚Šå½±éŸ¿ã®å¤§ãã‹ã£ãŸåŽŸå› を探るã«ã¯ãã¡ã‚‰ã‚’見直ã™ã“ã¨ã«ãªã‚‹ã§ã—ょã†ï¼Žè©³ã—ãã¯æœ¬ã‚·ãƒªãƒ¼ã‚ºã®ç¬¬ 1 回ã¨ç¬¬ 2 回をã©ã†ãžï¼Ž
ãŸã ã—例外ã¨ã—ã¦ï¼ŒXP SP2 環境㧠LargeSystemCache ã‚’ 1 ã«è¨å®šã—ã¦ã„ãŸäººãŸã¡ãŒã„ã¾ã™ï¼Žå½¼ã‚‰ã¯ XP SP2 時代ã«ï¼Œé…延書ãè¾¼ã¿ã§å¤§ããªæ™‚é–“çŸç¸®åŠ¹æžœã‚’å¾—ã¦ã„ãŸå¯èƒ½æ€§ãŒã‚ã‚Šã¾ã™ï¼Žãã‚“ãªå½¼ã‚‰ãŒ Vista RTM ã«ã€Œã‚¢ãƒƒãƒ—グレードã€ã—ã¦ã—ã¾ã†ã¨ï¼ŒCcDirtyPageThreshold ã«ã‚ˆã£ã¦å¾—られã¦ã„ãŸæ•°ç™¾ MB å˜ä½ã®ä¸‹é§„を失ã£ãŸã“ã¨ã§ã—ょã†ï¼Žã“ã®å ´åˆã«é™ã‚Œã°ï¼ŒVista RTM 版ã§ã¯ 256 KB 以上ã®ã‚µã‚¤ã‚ºã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚³ãƒ”ー㫠Cached I/O を使用ã—ãªããªã£ãŸã“ã¨ãŒï¼Œãƒ•ã‚¡ã‚¤ãƒ«ã‚³ãƒ”ー速度を低下ã•ã›ãŸã¨ã„ã†èª¬ã¯ã ã„ã¶ã‚‚ã£ã¨ã‚‚らã—ãèžã“ãˆã¾ã™ï¼Ž
ã„ãšã‚Œã«ã›ã‚ˆï¼ŒVista SP1 ã§å…¨ã¦ã®ã‚µã‚¤ã‚ºã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚³ãƒ”ー㯠Cached I/O ã«æˆ»ã‚Šã¾ã—ãŸï¼Žå…¨ã¦ã¯å…ƒé€šã‚Šã§ã™ï¼Žå†ã³ CcDirtyPageThreshold ã¯å¸¸ã«ãƒ•ã‚¡ã‚¤ãƒ«ã‚³ãƒ”ー時間ã¸å½±éŸ¿ã‚’åŠã¼ã™ã‚ˆã†ã«ãªã‚Šã¾ã—ãŸï¼Žãã—ã¦å¤§å¤šæ•°ã® XP ユーザー (ã¤ã¾ã‚Š LargeSystemCache ã®å€¤ã‚’変ãˆã¦ã„ãªã„人) ㌠Vista SP1 ã«ç§»è¡Œã—ãŸã¨ã,CcDirtyPageThreshold ã¯å¤§å¹…ã«å¢—åŠ ã—ã¾ã™ï¼Žã‚‚ã¡ã‚ん実際ã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚³ãƒ”ーã«ã¯è¤‡é›‘ã§ï¼Œã‚³ãƒ”ー元ã‹ã‚‰ã®èªã¿å‡ºã—速度も関係ã—ã¦ãã¾ã™ã—,é…延書ãè¾¼ã¿ã«ã—ã¦ã‚‚常ã«ç©ºãメモリã¨ã®ç›¸è«‡ã§ã™ã‹ã‚‰ï¼Œå˜ç´”ã«ã‚³ãƒ”ー時間ãŒå½±éŸ¿ã‚’å—ã‘ã‚‹ã‹ã©ã†ã‹ã¯ã‚±ãƒ¼ã‚¹ãƒã‚¤ã‚±ãƒ¼ã‚¹ã§ã™ã‘ã©ï¼Ž
ã¨ã¾ã‚ファイルコピーã¨ã„ã†éžå¸¸ã«å˜ç´”ãªä½œæ¥ã²ã¨ã¤ã¨ã£ã¦ã¿ã¦ã‚‚,「Vista ã«ã—ã¦é€Ÿããªã£ãŸã‚ˆã€ã€Œé…ããªã£ãŸã‚ˆã€ã€Œå¤‰ã‚らãªã„よã€ã¨ã„ã†ä¼šè©±ãŒå…¥ã‚Šä¹±ã‚Œã‚‹ç†ç”±ã®ä¸€ç«¯ãŒè¦‹ãˆã¦ããŸã‚ˆã†ã§ã™ï¼Žå€‹ã€…ã®ãƒ«ãƒ¼ãƒ«ã¯ã‚·ãƒ³ãƒ—ルã§ã™ãŒï¼Œç’°å¢ƒã«èµ·å› ã™ã‚‹ãƒ‘ラメータã®çµ„ã¿åˆã‚ã›ãŒå¤§ãã™ãŽã¦ï¼Œã“ã‚Œã¯ã¡ã‚‡ã£ã¨ç¥žãªã‚‰ã¬äººã®æ‰‹ã«ã¯ä½™ã‚‹ã‚ˆã†ã«æ€ã„ã¾ã™ï¼Ž
世界ã¯åºƒã,組ã¿åˆã‚ã›ã¯ç„¡é™ã«è©¦è¡Œã•ã‚Œç¶šã‘ã¾ã™ï¼Žã‚る人ã®ç’°å¢ƒã§ç™ºç”Ÿã—ãŸçµ„ã¿åˆã‚ã›ã¯ï¼Œæœ¬å½“ã«ãã®å ´é™ã‚Šã®å¥‡è·¡ã®ã‚ˆã†ãªçµ„ã¿åˆã‚ã›ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“.
ã‹ãã—ã¦ï¼Œçµ±ä¸€çš„ã«ã€ŒVista ã¯é€Ÿã„ã‹é…ã„ã‹ã€ã‚’語るã®ã¯ã‚‚ã¯ã‚„ä¸å¯èƒ½ã¨ã„ã†ã“ã¨ã«ãªã‚Šã¾ã™ï¼Žãã‚‚ãも環境ã®å¤šæ§˜æ€§ãŒå¤§ãã™ãŽã‚‹ã®ãŒå•é¡Œãªã‚ã‘ã§ã™ã‹ã‚‰ï¼Œå¹³å‡ã«æ„味ãŒã‚ã‚‹ã‹ã©ã†ã‹ã™ã‚‰æ€ªã—ã„ã‚‚ã®ã§ã™ï¼Žå¤šæ§˜ãªç’°å¢ƒã®å¹³å‡ã‚’å–ã£ãŸã¨ã—ã¦ã‚‚,ãã‚Œã§ã‚ãªãŸã®ã€Œç¾å®Ÿã€ãŒèª¬æ˜Žã§ãã‚‹ã§ã—ょã†ã‹ï¼Ÿ
感情を考慮ã™ã‚‹ã¨ã„ã†è¦³ç‚¹ã§è¨€ãˆã°ï¼ŒOS ãŒå«Œã‚ã‚Œãªã„ãŸã‚ã«ã¯ï¼Œã€Œæ˜Žã‚‰ã‹ã«ãƒ˜ãƒžã‚’ã—ãŸã€ã¨æ€ã‚れるよã†ãªç›®ç«‹ã£ãŸãƒ˜ãƒžã‚’ã—ãªã„ã“ã¨ã«å°½ãã¾ã™ï¼Žã“ã®ç‚¹ã§ Vista RTM 版ã¯å¤§ããªãƒŸã‚¹ã‚’犯ã—ã¾ã—ãŸï¼Ž
ã‚ã‚‹ã„ã¯ã€Œæ˜Žã‚‰ã‹ã«ã†ã¾ãã‚„ã£ã¦ã„ã‚‹ã€ã‚ˆã†ã«è¦‹ãˆã‚‹ä½•ã‹ã‚’気付ã‹ã‚Œã‚‹ç¨‹åº¦ã«ã•ã‚Šã’ãªã示ã™ã®ã¯æ„味ãŒã‚ã‚Šã¾ã™ï¼ŽSuperFetch ã¯ï¼Œä½“æ„Ÿã§ãる時間差を稼ãŽå‡ºã—ã†ã‚‹ã¨ã„ã†ç‚¹ã§ï¼Œç§ã®å°è±¡ã¨ã—ã¦ã¯ã†ã¾ãã‚„ã£ã¦ã„るよã†ã«æ€ã„ã¾ã™ï¼ŽãŸã ã¾ã‚今㮠SuperFetch ã¯ï¼ŒHDD ã®ã‚¢ã‚¯ã‚»ã‚¹éŸ³ã‚„アクセスランプã¨ã—ã¦å‹•ä½œãŒè¦‹ãˆã¦ã—ã¾ã„ã¾ã™ã‹ã‚‰ï¼Œãã“ã‚’éš ã—ã¦ï¼Œã¤ã¾ã‚Š SSD ãªã©ã¸ã®ç§»è¡Œã§å…‰ã‚‚音もãªããªã£ã¦ã¯ã˜ã‚ã¦ï¼ŒçœŸã«ç©ºæ°—ã®ã‚ˆã†ãªæ©Ÿèƒ½ã«æ˜‡è¯ã•ã‚Œã‚‹ã“ã¨ã§ã—ょã†ï¼Ž
ミスをé¿ã‘ã¦ï¼Œãƒ¯ãƒ³ãƒã‚¤ãƒ³ãƒˆã‚’気付ã‹ã‚Œã‚‹ç¨‹åº¦ã«ã•ã‚Šã’ãªã,ã„ã‚ã°ãã†ã„ã£ãŸç©ºæ°—æ„Ÿã“ããŒç¾ä»£ã®ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã«æ±‚ã‚られã¦ã„ã‚‹ã®ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“.
é…延書ãè¾¼ã¿ã‚’確èªã™ã‚‹ãã®ä»–ã®æ–¹æ³•
ã‚ャッシュマãƒãƒ¼ã‚¸ãƒ£ã‚’経由ã—ãŸé…延書ãè¾¼ã¿ã‚’確èªã™ã‚‹æœ€ã‚‚確実ãªæ–¹æ³•ã¯ï¼ŒWinDbg ã® !defwrites コマンドを指定ã—ã¦ï¼ŒCcTotalDirtyPages カーãƒãƒ«å¤‰æ•°ã®å€¤ã‚’確èªã™ã‚‹ã“ã¨ã§ã™ï¼Žã“ã®å€¤ãŒæœ‰æ„ã«å¤§ãã‘ã‚Œã°ï¼Œæœªæ›¸ãè¾¼ã¿ã®ãƒ‡ãƒ¼ã‚¿ã‚’ã‚ャッシュマãƒãƒ¼ã‚¸ãƒ£ãŒæŠ±ãˆã¦ã„ã‚‹ã“ã¨ãŒåˆ†ã‹ã‚Šã¾ã™ï¼Ž
WriteFile ã‚’è¡Œã£ã¦ã„るソースコードを修æ£ã§ãã‚‹ã®ã§ãã‚‹ã®ã§ã‚ã‚Œã°ï¼ŒFlushFileBuffers API を呼んã§ã¿ã‚‹ã®ã‚‚ã²ã¨ã¤ã®æ–¹æ³•ã§ã™ï¼ŽFlushFileBuffers ã‹ã‚‰æˆ»ã‚‹ã¾ã§ã«æ™‚é–“ãŒã‹ã‹ã‚Œã°ï¼Œãã‚Œã ã‘é…延書ãè¾¼ã¿ãŒæºœã¾ã£ã¦ã„ãŸã“ã¨ãŒåˆ†ã‹ã‚Šã¾ã™ï¼Ž
Mark æ°ã®è¨˜äº‹ã«ã‚ã£ãŸã‚ˆã†ã«ï¼ŒProcess Monitor を利用ã—ã¦å®Ÿéš›ã®æ›¸ãè¾¼ã¿ã‚’モニタã™ã‚‹ã¨ã„ã†æ–¹æ³•ã‚‚ã‚ã‚Šã¾ã™ï¼Ž
ãã®ä»–,パフォーマンスカウンタã‹ã‚‰ã‚‚ã‚る程度ã®ã“ã¨ãŒåˆ†ã‹ã‚Šã¾ã™ï¼Ž
- Cache カテゴリ
- Lazy Write Flushes/sec
- Lazy Write Pages/sec
- Memory カテゴリ
- Modified Page List Bytes (Vista 以é™ã®ã¿)
é…延書ãè¾¼ã¿ãŒä½¿ãˆãªã„ã¨ã
ã•ã¦ï¼Œã„ãã¤ã‹å®Ÿé¨“ã—ã¦ã„ã¦æ°—付ã„ãŸã®ã§ã™ãŒï¼ŒWriteFile API ã«æ¸¡ã™ãƒãƒƒãƒ•ã‚¡ã‚µã‚¤ã‚ºã«ã‚ˆã£ã¦ï¼ŒWriteFile ãŒåŒæœŸæ›¸ã込㿠(実際ã«ãƒ‡ã‚£ã‚¹ã‚¯ã«æ›¸ã込むã¾ã§æˆ»ã£ã¦ã“ãªã„) ã«ãªã‚‹ã“ã¨ãŒã‚るよã†ã§ã™ï¼Žã“ã®ã“ã¨ã«æ°—付ã‹ãªã„ã¨ï¼Œä¸æ€è°ãªæŒ™å‹•ã«æ‚©ã¾ã•ã‚Œã‚‹ã“ã¨ã«ãªã‚Šã¾ã™ï¼Ž
例ãˆã° WriteFile ã¯ï¼Œã‚«ãƒ¼ãƒãƒ«ãƒ¢ãƒ¼ãƒ‰ã¸ã®é·ç§»ã‚’ä¼´ã„ãã†ãªã®ã§ï¼Œå›žæ•°ã‚’減らã—ãŸæ–¹ãŒãƒ‘フォーマンスãŒä¸ŠãŒã‚‹ã¨äºˆæƒ³ã—ãŸã¨ã—ã¾ã—ょã†ï¼Žãã“㧠WriteFile ã«æ¸¡ã™ãƒãƒƒãƒ•ã‚¡ã‚µã‚¤ã‚ºã‚’ 64 KB ã‹ã‚‰ 1 MB ã«å¢—ã‚„ã—ã¦ã¿ã¾ã™ï¼Žã“れ㧠WriteFile ã®å‘¼ã³å‡ºã—回数㯠1/16,ã—ã‚ã—ã‚ã¨æ€ã„ãや,1 MB ã®ãƒãƒƒãƒ•ã‚¡ã‚’渡ã—ãŸã¨ãã® WriteFile ã¯ï¼Œé…延書ãè¾¼ã¿ã‚’ã—ãªããªã£ã¦ï¼Œå®Ÿéš›ã«ãƒ‰ãƒ©ã‚¤ãƒã«ãƒ‡ãƒ¼ã‚¿ã‚’渡ã—ãã‚‹ã¾ã§å‡¦ç†ãŒæˆ»ã‚‰ãªã‚Šã¾ã—ãŸã¨ï¼Žã—ã‹ã‚‚ CcDirtyPageThreshold 関係ãªã—ã«ï¼Œã§ã™ï¼Žã“ã†ãªã‚‹ã¨ï¼Œæ›¸ãè¾¼ã¿æ™‚é–“ã¯çŸããªã‚‹ã©ã“ã‚ã‹æ•°åå€ã‚‚é•·ããªã£ã¦ã—ã¾ã„ã¾ã™ï¼Žã‚ãŠï¼
ã„ãã¤ã‹ã®å®Ÿé¨“ã‹ã‚‰ï¼Œç†è€…ã®æ‰‹å…ƒã®ç’°å¢ƒã§ã¯ 256 KB ã¾ã§ã® WriteFile ã§ã‚ã‚Œã°é…延書ãè¾¼ã¿ãŒè¡Œã‚れるらã—ã„ã“ã¨ãŒåˆ†ã‹ã‚Šã¾ã—ãŸï¼Žã‚‚ã¡ã‚ã‚“ã“ã®å€¤ã¯ç’°å¢ƒã‚„è¨å®šã«ã‚ˆã£ã¦ç•°ãªã‚‹ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“.é‡è¦ãªã®ã¯ï¼Œ64 KB ã® WriteFile 16 回ã¨ï¼Œ1 MB ã® WriteFile 1 回ãŒï¼ŒåŒã˜çµæžœã«ãªã‚‹ã¨ã¯é™ã‚‰ãªã„ã¨ã“ã¨ã§ã™ï¼Ž
ã‚‚ã†ä¸€ç‚¹ã®æ°—付ã„ãŸã“ã¨ã¨è¨€ãˆã°ï¼Œãƒ‡ã‚£ã‚¹ã‚¯æ›¸ãè¾¼ã¿ãƒãƒªã‚·ãƒ¼ã®å½±éŸ¿ã§ã™ï¼ŽWindows Vista SP1 環境ã§å®Ÿé¨“ã—ã¦ã„ã¦ï¼ŒUSB ドライブã®æ›¸ãè¾¼ã¿ãƒãƒªã‚·ãƒ¼ã§ã€Œã‚¯ã‚¤ãƒƒã‚¯å‰Šé™¤ã®ãŸã‚ã«æœ€é©åŒ–ã™ã‚‹ã€ã‚’é¸ã‚“ã§ã„ã‚‹ã¨ãã®ã“ã¨ã§ã™ï¼ŽWriteFile 自体ã¯é…延書ãè¾¼ã¿ã‚’è¡Œã£ã¦ã„るよã†ã«æŒ¯ã‚‹èˆžã†ã®ã§ã™ãŒï¼ŒCloseHandle ã§ãƒ•ã‚¡ã‚¤ãƒ«ã‚’é–‰ã˜ã‚‹ã¨ãã« FlushFileBuffers 相当ã®ã“ã¨ã‚’è¡Œã£ã¦ã„るらã—ã,やãŸã‚‰ãƒ•ã‚¡ã‚¤ãƒ«ã‚’é–‰ã˜ã‚‹ã®ã«å¾…ãŸã•ã‚Œã‚‹ã“ã¨ã«ãªã‚Šã¾ã™ï¼ŽCcDirtyPageThreshold ãŒæ•°ç™¾ MB ã¨ã„ã†ç’°å¢ƒã§ã¯ï¼Œ10 秒ã©ã“ã‚ã˜ã‚ƒãªãå¾…ãŸã•ã‚Œã‚‹ã“ã¨ã‚‚ã‚り,ã“れも知らãªã„ã¨ã³ã£ãã‚Šã¨ã„ã†ç¾è±¡ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“.
ã˜ã‚ƒã‚ CloseHandle ã›ãšã«ãƒ—ãƒã‚»ã‚¹ã‚’終了ã—ãŸã‚‰ã©ã†ãªã‚‹ã‹ã‚‚実験ã—ã¦ã¿ã¾ã—ãŸãŒï¼Œçµå±€ãƒ—ãƒã‚»ã‚¹ã‚¯ãƒªãƒ¼ãƒ³ã‚¢ãƒƒãƒ—時ã«åŒã˜ã“ã¨ãŒè¡Œã‚れるよã†ã§ï¼Œ10 秒以上プãƒã‚»ã‚¹ã®çµ‚了ãŒå¾…ãŸã•ã‚Œã‚‹ã“ã¨ã«ãªã‚Šã¾ã—ãŸï¼Ž
書ãè¾¼ã¿å…ˆã®ãƒ‡ã‚£ã‚¹ã‚¯ã®æ›¸ãè¾¼ã¿ãƒãƒªã‚·ãƒ¼ã‚’「パフォーマンスã®ãŸã‚ã«æœ€é©åŒ–ã™ã‚‹ã€ã«å¤‰æ›´ã—ãŸã¨ã“ã‚,é…延書ãè¾¼ã¿ãƒ‡ãƒ¼ã‚¿ãŒæ®‹ã£ã¦ã„ã¦ã‚‚ CloseHandle ã§å¾…ãŸã•ã‚Œãªããªã‚Šã¾ã—ãŸï¼Ž
ã“れも,Cached I/O ã®å®Ÿé¨“ã‚’ã—ã¦ã„ãŸã‹ã‚‰åŽŸå› ã«æ°—ã¥ã‘ãŸè©±ã§ï¼Œå˜ä½“ã§ã“ã®ç¾è±¡ã«å‡ºä¼šã£ã¦ã„ãŸã‚‰åŽŸå› 究明ã«æ™‚é–“ãŒã‹ã‹ã£ã¦ã„ãŸã‹ã‚‚ã—ã‚Œã¾ã›ã‚“.ã ã£ã¦æ™®é€šï¼Œä½•ç™¾ MB ã‚‚ã®æ›¸ãè¾¼ã¿ãŒã‚ャッシュã•ã‚Œã¦ã„ã‚‹ãªã‚“ã¦æ€ã„ã¾ã›ã‚“ã‚‚ã®ãã‡ï¼Ÿ
ã¾ã¨ã‚
- 標準㮠Windows XP SP2 環境ã§ã¯ï¼Œå¤§é‡ã«ãƒ¡ãƒ¢ãƒªã‚’æ載ã—ã¦ã‚‚,CcDirtyPageThreshold ã¯æœ€å¤§ã§ 22 MB 程度ã«å›ºå®šã•ã‚Œã¦ã„るよã†ã§ã™ï¼Žã“ã®ç¨‹åº¦ãªã‚‰ï¼Œé…延書ãè¾¼ã¿ã®å½±éŸ¿ã¯ãã‚Œã»ã©å¤§ããã‚ã‚Šã¾ã›ã‚“.
- デフォルトè¨å®šã® Windows XP SP2 ãŒï¼Œé…延書ãè¾¼ã¿ã«ã‚ˆã£ã¦ã‚³ãƒ”ー時間ãŒçŸã見ãˆã¦ã„ãŸã¨ã„ã†èª¬ã¯ã¡ã‚‡ã£ã¨æ€ªã—ã„ã§ã™ï¼Ž22 MB 程度ã®é…延書ãè¾¼ã¿ã§ç¨¼ã’る時間ã¨è¨€ã£ã¦ã‚‚,ã›ã„ãœã„ 1 秒ã§ã—ょã†ï¼Ž
- Windows Vista RTM 版ã§ã¯ï¼Œ256 KB 以上ã®ã‚µã‚¤ã‚ºã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚³ãƒ”ー㫠Cached I/O を使ã„ã¾ã›ã‚“.ã“ã®å ´åˆã¯ï¼Œãƒ•ã‚¡ã‚¤ãƒ«ã‚³ãƒ”ー㨠CcDirtyPageThreshold ã¯ç„¡é–¢ä¿‚ã§ã™ï¼Žã‚³ãƒ”ー完了時ã«ã¯åŸºæœ¬çš„ã«æ›¸ãè¾¼ã¿ã‚‚終ã‚ã£ã¦ã„ã¾ã™ï¼Ž
- Windows Vista SP1 ã§ã¯ï¼Œå…¨ã¦ã®ã‚µã‚¤ã‚ºã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚³ãƒ”ー㌠Cached I/O ã«æˆ»ã‚Šã¾ã—ãŸï¼Žãƒ•ã‚¡ã‚¤ãƒ«ã‚³ãƒ”ー時ã®é…延書ãè¾¼ã¿ã®å½±éŸ¿ã¯ï¼Œå†ã³ï¼Œå…¨ã¦ã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚µã‚¤ã‚ºã§ã‚‚èµ·ãるよã†ã«ãªã‚Šã¾ã™ï¼Žã—ã‹ã‚‚ CcDirtyPageThreshold ã®ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆå€¤ãŒå¢—ãˆã¦ã„ã‚‹ã®ã§ï¼Œå½±éŸ¿ã‚’å—ã‘るユーザã®æ•°ãƒ»è¦æ¨¡ã¨ã‚‚ã«æ‹¡å¤§ã—ã¦ã„ã‚‹ã§ã—ょã†ï¼Ž
- ノート PC ã®ã‚ˆã†ã«ä½Žé€Ÿãª HDD ã‚’æ載ã—ã¦ã„ã¦ï¼Œã‹ã¤å¤§å®¹é‡ã®ãƒ¡ãƒ¢ãƒªãŒåˆ©ç”¨ã§ãã‚‹å ´åˆï¼Œå®Ÿéš›ã®æ›¸ãè¾¼ã¿å®Œäº†ã® 10 秒以上å‰ã«ãƒ•ã‚¡ã‚¤ãƒ«ã‚³ãƒ”ーダイアãƒã‚°ã¯çµ‚了ã—ã¦ã„ã‚‹ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“.
- パフォーマンスカウンタやカーãƒãƒ«ãƒ‡ãƒãƒƒã‚¬ã§é…延書ãè¾¼ã¿ã®æ§˜åを知るã“ã¨ãŒã§ãã¾ã™ï¼Žæ°—ã«ãªã‚‹äººã¯ãƒã‚§ãƒƒã‚¯ã—ã¦ã¿ã¾ã—ょã†ï¼Ž
- Windows Vista ã«ãªã£ã¦ (XP ã®ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã«æ¯”ã¹ã‚Œã°) CcDirtyPageThreshold ã¯ä¸€èˆ¬ã«å¤§ãããªã£ãŸã‚ˆã†ã§ã™ï¼Žä»Šå¾Œã¯ï¼Œãƒ‡ã‚¹ã‚¯ãƒˆãƒƒãƒ—アプリケーションã«ã¨ã£ã¦ã‚‚,é…延書ãè¾¼ã¿ã®å½±éŸ¿ã¯ç„¡è¦–ã§ããªã„ã‚‚ã®ã«ãªã‚‹ã§ã—ょã†ï¼Ž
- パフォーマンスãƒãƒ¥ãƒ¼ãƒ‹ãƒ³ã‚°ã¨ç§°ã—㦠LargeSystemCache ã‚’ 1 ã«ã—ã¦ã„ã‚‹ XP ユーザã®ç’°å¢ƒã§ã¯ï¼Œæ—¢ã«æ•°ç™¾ MB è¦æ¨¡ã® CcDirtyPageThreshold ãŒä½¿ã‚ã‚Œã¦ã„ãŸå¯èƒ½æ€§ãŒå¼·ã„ã§ã™ï¼Ž
- パフォーマンスãƒãƒ¥ãƒ¼ãƒ‹ãƒ³ã‚°ã¨ç§°ã—㦠LargeSystemCache ã‚’ 1 ã«ã—ã¦ã„ã‚‹ Vista ユーザã¯ï¼Œå˜ã«æ°—休ã‚ãªã ã‘ã¨ã„ã†å¯èƒ½æ€§ãŒã‚ã‚Šã¾ã™ï¼Ž
- ファイル書ã出ã—サイズ㌠CcDirtyPageThreshold ã¨åŒç¨‹åº¦ã®å ´åˆï¼Œè¦‹ãŸç›®ã®æ‰€è¦æ™‚間を比較ã—ãŸãƒ™ãƒ³ãƒãƒžãƒ¼ã‚¯ã¯ CPU 速度ã¨å¼·ã„相関をæŒã¤ã¨è€ƒãˆã‚‰ã‚Œã¾ã™ï¼ŽCPU ãŒã‚ˆã‚Šé€Ÿã,CcDirtyPageThreshold ãŒã‚ˆã‚Šå¤§ãã„環境ã®æ–¹ãŒï¼Œä¸€èˆ¬ã«ã€Œæ‰€è¦æ™‚é–“ã€ã§ã¯æœ‰åˆ©ã§ã™ï¼Žå ´åˆã«ã‚ˆã£ã¦ã¯ï¼ŒHDD 性能ã¨ã¯ã»ã¨ã‚“ã©ç›¸é–¢ãŒè¦‹ã‚‰ã‚Œãªã„ã“ã¨ã‚‚ã‚ã‚‹ã§ã—ょã†ï¼Ž
- CcDirtyPageThreshold ãŒæ•°ç™¾ MB ã«å±Šãよã†ãªç’°å¢ƒã§ã¯ï¼Œ FlushFileBuffers ã‚’è¡Œã£ãŸã‚Šï¼Œã€Œã‚¯ã‚¤ãƒƒã‚¯å‰Šé™¤ã®ãŸã‚ã«æœ€é©åŒ–ã™ã‚‹ã€ã‚’é¸æŠžã—ãŸãƒ‰ãƒ©ã‚¤ãƒ–ã§ãƒ•ã‚¡ã‚¤ãƒ«ã‚’クãƒãƒ¼ã‚ºã™ã‚‹ã¨ãã«ï¼Œæ•°å秒å˜ä½ã®ãƒ–ãƒãƒƒã‚¯ãŒç™ºç”Ÿã™ã‚‹ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“.GUI スレッドをæ„図ã›ãšé•·æ™‚é–“æ¢ã‚ã¦ã—ã¾ã„,ユーザã«ã€Œãƒãƒ³ã‚°ã—ãŸã€ã¨æ€ã‚ã‚Œãªã„よã†ãªæ³¨æ„ãŒå¿…è¦ã§ã—ょã†ï¼Ž
- é…延書ãè¾¼ã¿ã«ã‚ˆã‚‹ãƒ¬ã‚¹ãƒãƒ³ã‚¹å‘上を狙ã£ã¦ã„ã‚‹å ´åˆï¼ŒWriteFile ã«æ¸¡ã™ãƒãƒƒãƒ•ã‚¡ã‚µã‚¤ã‚ºã‚’大ããã—ã™ãŽã‚‹ã¨é€†åŠ¹æžœã®å¯èƒ½æ€§ãŒã‚ã‚Šã¾ã™ï¼Ž
- 64 KB ã¯æらã大丈夫ã§ï¼Œã‚‚ã—ã‹ã—ãŸã‚‰ 256 KB ã§ã‚‚ OK ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“.
- Windows ã¯åŽŸå‰‡çš„ã«ãƒ•ã‚¡ã‚¤ãƒ«ã‚³ãƒ”ーã®æ›¸ãè¾¼ã¿ã§ Cached I/O を使用ã—ã¾ã™ï¼Žãƒ•ã‚¡ã‚¤ãƒ«ã‚³ãƒ”ーダイアãƒã‚°çµ‚了時ã«ã¯ï¼Œæœ€å¤§ã§ CcDirtyPageThreshold 程度ã®ãƒ‡ãƒ¼ã‚¿ãŒæœªæ›¸ãè¾¼ã¿ã®å¯èƒ½æ€§ãŒã‚ã‚Šã¾ã™ï¼Žä¾‹å¤–㌠Windows Vista RTM 版ã§ï¼Œãƒ•ã‚¡ã‚¤ãƒ«ã‚µã‚¤ã‚ºãŒ 256 KB 以上ã®å ´åˆã¯ Non-Cached I/O を使用ã—ã¾ã™ï¼Ž
- å¹³å‡é€Ÿåº¦ã°ã£ã‹ã‚Šè¦‹ã›ã‚‰ã‚Œã‚‹ãƒ™ãƒ³ãƒãƒžãƒ¼ã‚¯è¨˜äº‹ / Vista SP1 レãƒãƒ¼ãƒˆè¨˜äº‹ã«ã”注æ„を.
- Vista RTM 版ã¨ãã®ä»–ã® Windows ã®æ‰€è¦æ™‚間を並ã¹ã¦ç¤ºã—ãŸå ´åˆï¼ŒUI çš„ã«ã¯åŒã˜å€¤ã‚’比ã¹ã¦ã„るよã†ã«è¦‹ãˆã¾ã™ãŒï¼Œå®Ÿéš›ã®å‹•ä½œçš„ã«ã¯æ„味ãŒç•°ãªã‚‹ã‚°ãƒ©ãƒ•ã‚’åŒåˆ—ã«ä¸¦ã¹ã¦ã„ã‚‹å¯èƒ½æ€§ãŒã‚ã‚Šã¾ã™ï¼Ž
- .NET Framework ã® FileStream クラスもデフォルトã§ã¯ Cached I/O を使ã„ã¾ã™ï¼Ž
- ã¨ãªã‚Œã°ï¼Œ64 KB å˜ä½ã®æ›¸ãè¾¼ã¿ã¨ï¼Œ1 MB ã®å˜ä½ã®æ›¸ãè¾¼ã¿ã§ãƒ‘フォーマンス特性ãŒå…¨ç„¶é•ã†ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“ã.ã“ã®æŒ™å‹•ã‚’ API よりも上ã®å±¤ã ã‘ã§èª¬æ˜Žã—よã†ã¨ã™ã‚‹ã¨æ€è€ƒè¿·è·¯ã«å›šã‚れるã“ã¨ã§ã—ょã†ï¼Ž
ãŠã¾ã‘
図解『Cached I/O 使用時ã®ãƒ•ã‚¡ã‚¤ãƒ«æ›¸ãè¾¼ã¿æ™‚間推定方法ã€
æ›´æ–°å±¥æ´
- 2008年3月6日
- Windows XP SP2 㨠Windows Vista RTM 版ã§ï¼Œãƒ•ã‚¡ã‚¤ãƒ«ã‚³ãƒ”ー体感速度ãŒé•ã†ã“ã¨ã®èª¬æ˜Žã‚’ã¡ã‚‡ã£ã¨è¨‚æ£ï¼ŽVista RTM 版ã§ã¯ãƒ•ã‚¡ã‚¤ãƒ«ã‚³ãƒ”ー㌠Non-Cached I/O ã ã£ãŸã®ã§ã—ãŸï¼Ž
- メリット目立ãŸã›ã‚‹ã®ã‚‚空気ã˜ã‚ƒãªã„æ°—ãŒã—ã¦ããŸã®ã§ã€Œæ°—付ã‹ã‚Œã‚‹ç¨‹åº¦ã«ã•ã‚Šã’ãªã示ã™ã€ã«æ–‡é¢å¤‰æ›´ï¼Ž
- 2008年3月7日
- Windows Vista RTM 版ã§ã‚‚,256 KB 以下ã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚³ãƒ”ー㧠Cached I/O を使ã£ã¦ã„ãŸã®ã‚’忘れã¦ã„ãŸã®ã§ä¿®æ£ï¼Žè©³ç´°ãªã‚¢ãƒ«ã‚´ãƒªã‚ºãƒ ã«ã¤ã„ã¦ã¯ç¬¬äºŒå›žå‚ç…§ã®ã“ã¨ï¼Ž
- 2008年3月10日
- éŽåŽ»ã®é–¢é€£è¨˜äº‹ã‚’è¿½åŠ ï¼Ž
- 2009年3月16日
- "「メモリ使用é‡ã€ã§ã€Œã‚·ã‚¹ãƒ†ãƒ ã‚ャッシュã€"ã¨æ›¸ãã¹ãã¨ã“ã‚ã§"「プãƒã‚»ãƒƒã‚µã®ã‚¹ã‚±ã‚¸ãƒ¥ãƒ¼ãƒ«ã¨ãƒ¡ãƒ¢ãƒªä½¿ç”¨é‡ã€ã§ã€Œãƒãƒƒã‚¯ã‚°ãƒ©ã‚¦ãƒ³ãƒ‰ã‚µãƒ¼ãƒ“ス優先ã€"ã¨æ›¸ã„ã¦ã„ãŸã®ã‚’ä¿®æ£ï¼Ž
*1:1 å¹´å‰ã®è¡Œæ–¹ä¸æ˜Žäº‹æ•…ã¯è¨˜æ†¶ã«æ–°ã—ã„ã¨ã“ã‚ã§ã™ï¼Žã“ã®è«–文,1997 å¹´ã«ã‚‚åŒã˜ã‚ˆã†ãªå®Ÿé¨“ã‚’è¡Œã£ã¦ã„ã¦ï¼Œãれ㨠2004 å¹´ã®æ¯”較も行ã£ã¦ã„ã¾ã™ï¼Žæらã次もã‚ã‚‹ã¨æœŸå¾…ã—ã¦ã„ã¾ã™ãŒï¼Œãã“ã«æ°ã®åå‰ãŒè¼‰ã‚‰ãªã„ã§ã‚ã‚ã†ã“ã¨ã¯æœ¬å½“ã«å“€ã—ã„ã§ã™ã‚ˆã….
*2:『インサイド Windows 第4版 11.7.3 書ãè¾¼ã¿ã®æŠ‘制ã€ã¾ãŸã¯ã€Ž[http://www.i.u-tokyo.ac.jp/edu/training/ss/lecture/new-documents/Lectures/15-CacheManager/CacheManager.pdf#Page=33:title=Cache Manager ã«é–¢ã™ã‚‹è¬›ç¾©è³‡æ–™ã® 33 ページ目]ã€
*3:ã‚‚ã¡ã‚ん,Non-Cached I/O,ã¤ã¾ã‚Š CreateFile 㧠FILE_FLAG_NO_BUFFERING を付ã‘ãŸå ´åˆã¯ï¼Œã‚ャッシュマãƒãƒ¼ã‚¸ãƒ£ã¯ä»‹åœ¨ã—ã¾ã›ã‚“ã‹ã‚‰ï¼Œã“ã®å½±éŸ¿ã¯å—ã‘ã¾ã›ã‚“
*4:Windows Vista ã§ã‚«ãƒ¼ãƒãƒ«ãƒ‡ãƒãƒƒã‚°ã‚’è¡Œã†ã«ã¯ï¼ŒOS 起動時ã«ã‚ªãƒ—ションãŒå¿…è¦ã§ã™ï¼Žã”注æ„下ã•ã„.id:NyaRuRu:20071016:p1
*5:Vista ã§ã¯ã€Žã‚³ãƒ³ãƒ”ュータã®ãƒ—ãƒãƒ‘ティã€ã«ä¸Šè¨˜è¨å®šé …ç›®ã¯ç„¡ããªã£ã¦ã„ã¾ã™ã—,『[http://blogs.technet.com/askperf/archive/2008/02/01/ws2008-upgrade-paths-resource-limits-registry-values.aspx:title=WS2008: Upgrade Paths, Resource Limits & Registry Values - Ask the Performance Team]ã€ã«ã‚ˆã‚Œã°ï¼ŒWindows Server 2008 ã§LargeSystemCache 㯠Not Used ã¨ã®ã“ã¨ã§ã™ï¼ŽNT Kernel 6.0 以é™ã¯ LargeSystemCache ã¯ä½¿ã‚ã‚Œã¦ã„ãªã„ã®ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“ã.