<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>赵翔鹏的Blog &#187; performance</title>
	<atom:link href="http://www.zhaoxiangpeng.com/tag/performance/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.zhaoxiangpeng.com</link>
	<description>Xiangpeng&#039;s Thinkpad</description>
	<lastBuildDate>Sat, 21 Jan 2012 17:45:51 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.1</generator>
		<item>
		<title>Windows里跟performance相关的一些概念</title>
		<link>http://www.zhaoxiangpeng.com/2009/11/performance-related-concepts-in-windows/</link>
		<comments>http://www.zhaoxiangpeng.com/2009/11/performance-related-concepts-in-windows/#comments</comments>
		<pubDate>Thu, 12 Nov 2009 13:44:51 +0000</pubDate>
		<dc:creator>Xiangpeng</dc:creator>
				<category><![CDATA[Windows编程]]></category>
		<category><![CDATA[performance]]></category>

		<guid isPermaLink="false">http://www.zhaoxiangpeng.com/?p=656720</guid>
		<description><![CDATA[1、kernel里的Cache Manager： 提供了在ReadFile、WriteFile时的cache，包括read-ahead和write-behind机制。原理是把application本来应该让file system服务的I/O request截走，转给cache manager自己拥有的一小块memory。 Cache manager就像一个应用程序，它只管虚拟内存，真正的物理内存管理都由memory manager做。所以cache那一部分memory也可能被page out。 只针对普通的file，dll、exe文件不会read-ahead。更精确的说，凡是用memory-mapped file方式读取的文件，都不会被read-ahead。 2、Prefetch： 在启动一个Process时，总要load一些dll，常用的几个icon等。如果等用到了再去读就比较慢，而且硬盘磁头会来回跑路。prefetch会根据上次process运行的历史记录，按照它们在磁盘上的顺序预读这些dll。 因此，一个程序第一次运行时可能硬盘要转很久，但以后再运行就快了。Prefetch对Boot也有类似的优化，会自动defrag启动时用到的文件。 可能的问题：上次打开的文件这次未必用到。 3、SuperFetch： 为了解决“after-lunch effect”引入的。为啥午饭回来之后outlook很迟钝，硬盘在狂转？因为在idle的时候杀毒软件开始扫描磁盘，占用大量物理内存，outlook不幸被page out了。等杀毒软件运行完释放了内存，LRU算法会把杀毒软件留在内存的standby list里，而outlook的页面却不会从pagefile里回来。 类似Prefetch，SuperFetch记录内存的历史使用情况。它考虑了时间信息，比如“每天下午2：00要用Outlook”，这样就预先把需要的东西读到内存里。而且也会考虑把常用/重要的东西（比如输密码解锁那段code）尽量留在内存里。 只要发现你的空闲内存比较大（比如刚有一个大程序退出），它就会一点一点地吃掉你的空闲内存，把它认为需要用的东西放在内存里。所以很多人误以为SuperFetch浪费内存。 4、ReadyBoost： 用优盘当虚拟内存。hard fault发生时，从优盘读比硬盘稍微能快一点点。 5、ReadyBoot： 在boot的时候，预读一些硬盘数据到内存里。这个跟prefetch很像但是更智能。我现在还不是很清楚这个东西怎么工作的。还需要翻一翻宝书Windows Internals 5。。。 Update: 今天翻了宝书，发现宝书上只用了1页描述ReadyBoot……郁闷，还是不清楚。这也意味着即使我通过别的方法把它搞清楚，也不能把结果贴出来了。]]></description>
			<content:encoded><![CDATA[<p><strong>1、kernel里的</strong><a href="http://windowsitpro.com/Articles/Index.cfm?ArticleID=3864" target="_blank"><strong>Cache Manager</strong></a><strong>：</strong></p>
<p>提供了在ReadFile、WriteFile时的cache，包括read-ahead和write-behind机制。原理是把application本来应该让file system服务的I/O request截走，转给cache manager自己拥有的一小块memory。</p>
<p>Cache manager就像一个应用程序，它只管虚拟内存，真正的物理内存管理都由memory manager做。所以cache那一部分memory也可能被page out。</p>
<p>只针对普通的file，dll、exe文件不会read-ahead。更精确的说，凡是用memory-mapped file方式读取的文件，都不会被read-ahead。</p>
<p><strong>2、Prefetch：</strong></p>
<p>在启动一个Process时，总要load一些dll，常用的几个icon等。如果等用到了再去读就比较慢，而且硬盘磁头会来回跑路。prefetch会根据上次process运行的历史记录，按照它们<strong>在磁盘上的顺序</strong>预读这些dll。</p>
<p>因此，一个程序第一次运行时可能硬盘要转很久，但以后再运行就快了。Prefetch对Boot也有类似的优化，会自动defrag启动时用到的文件。</p>
<p>可能的问题：上次打开的文件这次未必用到。</p>
<p><strong>3、</strong><a href="http://technet.microsoft.com/en-us/magazine/2007.03.vistakernel.aspx" target="_blank"><strong>SuperFetch</strong></a><strong>：</strong></p>
<p>为了解决“after-lunch effect”引入的。为啥午饭回来之后outlook很迟钝，硬盘在狂转？因为在idle的时候杀毒软件开始扫描磁盘，占用大量物理内存，outlook不幸被page out了。等杀毒软件运行完释放了内存，LRU算法会把杀毒软件留在内存的standby list里，而outlook的页面却不会从pagefile里回来。</p>
<p>类似Prefetch，SuperFetch记录内存的历史使用情况。它考虑了时间信息，比如“每天下午2：00要用Outlook”，这样就预先把需要的东西读到内存里。而且也会考虑把常用/重要的东西（比如输密码解锁那段code）尽量留在内存里。</p>
<p>只要发现你的空闲内存比较大（比如刚有一个大程序退出），它就会一点一点地吃掉你的空闲内存，把它认为需要用的东西放在内存里。所以很多人误以为SuperFetch浪费内存。</p>
<p><strong>4、ReadyBoost：</strong></p>
<p>用优盘当虚拟内存。hard fault发生时，从优盘读比硬盘稍微能快一点点。</p>
<p><strong>5、ReadyBoot：</strong></p>
<p>在boot的时候，预读一些硬盘数据到内存里。这个跟prefetch很像但是更智能。我现在还不是很清楚这个东西怎么工作的。还需要翻一翻宝书<a href="http://www.amazon.com/Windows%C2%AE-Internals-Including-Windows-PRO-Developer/dp/0735625301" target="_blank">Windows Internals 5</a>。。。</p>
<p>Update: 今天翻了宝书，发现宝书上只用了1页描述ReadyBoot……郁闷，还是不清楚。这也意味着即使我通过别的方法把它搞清楚，也不能把结果贴出来了。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.zhaoxiangpeng.com/2009/11/performance-related-concepts-in-windows/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

