<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.technet.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Designing Applications for High Performance - Part III</title><link>http://blogs.technet.com/winserverperformance/archive/2008/06/26/designing-applications-for-high-performance-part-iii.aspx</link><description>Rick Vicik - Architect, Windows Server Performance Team The third, and final, part of this series covers I/O Completions and Memory Management techniques. I will go through the different ways to handle I/O completions with some recommendations and optimizations</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>Absolute  &amp;raquo; Blog Archive   &amp;raquo; Designing Applications for High Performance - Part III</title><link>http://blogs.technet.com/winserverperformance/archive/2008/06/26/designing-applications-for-high-performance-part-iii.aspx#3078192</link><pubDate>Thu, 26 Jun 2008 04:11:11 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:3078192</guid><dc:creator>Absolute  &amp;raquo; Blog Archive   &amp;raquo; Designing Applications for High Performance - Part III</dc:creator><description>&lt;p&gt;PingBack from &lt;a rel="nofollow" target="_new" href="http://absolute.morelyrics.co.uk/2008/06/25/designing-applications-for-high-performance-part-iii/"&gt;http://absolute.morelyrics.co.uk/2008/06/25/designing-applications-for-high-performance-part-iii/&lt;/a&gt;&lt;/p&gt;
</description></item><item><title>Running Microsoft SQL Server 2008 Analysis Services on Windows Server 2008 vs. Windows Server 2003 and Memory Preallocation: Lessons Learned</title><link>http://blogs.technet.com/winserverperformance/archive/2008/06/26/designing-applications-for-high-performance-part-iii.aspx#3089745</link><pubDate>Wed, 16 Jul 2008 20:06:07 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:3089745</guid><dc:creator>Technical Notes</dc:creator><description>&lt;p&gt;Author: Carl Rabeler Contributers: Eric Jacobsen, Thomas Kejser Technical Reviewers: Brad Daniels, Lindsey&lt;/p&gt;
</description></item><item><title>re: Designing Applications for High Performance - Part III</title><link>http://blogs.technet.com/winserverperformance/archive/2008/06/26/designing-applications-for-high-performance-part-iii.aspx#3109052</link><pubDate>Wed, 20 Aug 2008 17:53:32 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:3109052</guid><dc:creator>John Davis</dc:creator><description>&lt;P&gt;Rick, why does non-blocking i/o outperform IOCP on UDP sockets when sending/receiving small packets (ie 300 bytes) &amp;nbsp;This includes using send/recv overlap depths of up to 128 combined with GetQueueCompletionStatusEx with an array of 128 completion notification entries.&lt;/P&gt;
&lt;P style="MARGIN:0in 0in 0pt;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:'Calibri','sans-serif';COLOR:#1f497d;FONT-SIZE:11pt;mso-ascii-theme-font:minor-latin;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:'Times New Roman';mso-bidi-theme-font:minor-bidi;mso-themecolor:dark2;"&gt;Since you are using GQCSEx, it must be Vista or above.&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;By “non-blocking i/o” I assume you mean receiving IO completion notification by calling WaitForSingleObject on the EventObject in the IOSB (although you might be scanning the status field in the IOSBs like SQL).&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;Since depth is 128, WaitForMultiple probably isn’t used.&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN:0in 0in 0pt;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:'Calibri','sans-serif';COLOR:#1f497d;FONT-SIZE:11pt;mso-ascii-theme-font:minor-latin;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:'Times New Roman';mso-bidi-theme-font:minor-bidi;mso-themecolor:dark2;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN:0in 0in 0pt;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:'Calibri','sans-serif';COLOR:#1f497d;FONT-SIZE:11pt;mso-ascii-theme-font:minor-latin;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:'Times New Roman';mso-bidi-theme-font:minor-bidi;mso-themecolor:dark2;"&gt;It is surprising that GQCS isn’t outperforming WaitForSingleObject because there is&amp;nbsp;no&amp;nbsp;IO completion APC&amp;nbsp;and no dispatcher lock acquire per IO.&amp;nbsp;&amp;nbsp;That usually makes a significant difference&amp;nbsp;with many cpus, but it should be at least equal on UP.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN:0in 0in 0pt;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:'Calibri','sans-serif';COLOR:#1f497d;FONT-SIZE:11pt;mso-ascii-theme-font:minor-latin;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:'Times New Roman';mso-bidi-theme-font:minor-bidi;mso-themecolor:dark2;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN:0in 0in 0pt;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:'Calibri','sans-serif';COLOR:#1f497d;FONT-SIZE:11pt;mso-ascii-theme-font:minor-latin;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:'Times New Roman';mso-bidi-theme-font:minor-bidi;mso-themecolor:dark2;"&gt;It is possible that setting the “don’t queue a phony completion if the IO completes in-line” option might help, but there is probably some other interaction going on.&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;Is it possible to get an ETW&amp;nbsp;trace (with CSWITCH+LOADER+PROC_THREAD+DISPATCHER+DPC and&amp;nbsp;stacks)?&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN:0in 0in 0pt;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:'Calibri','sans-serif';COLOR:#1f497d;FONT-SIZE:11pt;mso-ascii-theme-font:minor-latin;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:'Times New Roman';mso-bidi-theme-font:minor-bidi;mso-themecolor:dark2;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN:0in 0in 0pt;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:'Calibri','sans-serif';COLOR:#1f497d;FONT-SIZE:11pt;mso-ascii-theme-font:minor-latin;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:'Times New Roman';mso-bidi-theme-font:minor-bidi;mso-themecolor:dark2;"&gt;---rick &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description></item><item><title>re: Designing Applications for High Performance - Part III</title><link>http://blogs.technet.com/winserverperformance/archive/2008/06/26/designing-applications-for-high-performance-part-iii.aspx#3109304</link><pubDate>Thu, 21 Aug 2008 00:57:45 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:3109304</guid><dc:creator>John Davis</dc:creator><description>&lt;P&gt;How do I do an ETW trace, etc.?&lt;/P&gt;
&lt;P style="MARGIN:0in 0in 0pt;" class=MsoNormal&gt;&lt;FONT size=3 face="Times New Roman"&gt;There is information on ETW at &lt;/FONT&gt;&lt;A href="http://www.microsoft.com/whdc/system/sysperf/perftools.mspx"&gt;&lt;FONT size=3 face="Times New Roman"&gt;http://www.microsoft.com/whdc/system/sysperf/perftools.mspx&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=3&gt;&lt;FONT face="Times New Roman"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;&amp;amp; &lt;/FONT&gt;&lt;/FONT&gt;&lt;A href="http://blogs.msdn.com/pigscanfly/archive/tags/xperf/default.aspx"&gt;&lt;FONT size=3 face="Times New Roman"&gt;http://blogs.msdn.com/pigscanfly/archive/tags/xperf/default.aspx&lt;/FONT&gt;&lt;/A&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P style="MARGIN:0in 0in 0pt;" class=MsoNormal&gt;&lt;o:p&gt;&lt;FONT size=3 face="Times New Roman"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P style="MARGIN:0in 0in 0pt;" class=MsoNormal&gt;&lt;FONT size=3&gt;&lt;FONT face="Times New Roman"&gt;Also, there is a lot of built-in help: &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN:0in 0in 0pt;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';FONT-SIZE:10pt;"&gt;xperf –help stackwalk&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN:0in 0in 0pt;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';FONT-SIZE:10pt;"&gt;xperf –help symbols&lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P style="MARGIN:0in 0in 0pt;" class=MsoNormal&gt;&lt;o:p&gt;&lt;FONT size=3 face="Times New Roman"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P style="MARGIN:0in 0in 0pt;" class=MsoNormal&gt;&lt;FONT size=3&gt;&lt;FONT face="Times New Roman"&gt;Here is what I use for a quick look (must run as admin):&lt;SPAN style="FONT-FAMILY:'Courier New';FONT-SIZE:10pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN:0in 0in 0pt;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';FONT-SIZE:10pt;"&gt;xperf -on CSWITCH+LOADER+PROC_THREAD+DPC+DISPATCHER -maxfile 100 -buffersize 512 -stackwalk CSWITCH+READYTHREAD&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN:0in 0in 0pt;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';FONT-SIZE:10pt;"&gt;pause&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN:0in 0in 0pt;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';FONT-SIZE:10pt;"&gt;xperf -d cswitch.bin&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN:0in 0in 0pt;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';FONT-SIZE:10pt;"&gt;xperf -i cswitch.bin -symbols -a dumper &amp;gt;mytrace.txt&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description></item><item><title>re: Designing Applications for High Performance - Part III</title><link>http://blogs.technet.com/winserverperformance/archive/2008/06/26/designing-applications-for-high-performance-part-iii.aspx#3279449</link><pubDate>Sun, 06 Sep 2009 22:53:11 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:3279449</guid><dc:creator>Don Burn</dc:creator><description>&lt;p&gt;I am trying to use SetFileIoOverlappedRange and SetFileCompletionNotificationModes in a program to drive my device. &amp;nbsp;But whatever I do I keep getting ERROR_ACCESS_DENIED on both calls. &amp;nbsp;Unfortunately the documentation is a little lite, and I am at a loss.&lt;/p&gt;</description></item><item><title>re: Designing Applications for High Performance - Part III</title><link>http://blogs.technet.com/winserverperformance/archive/2008/06/26/designing-applications-for-high-performance-part-iii.aspx#3280181</link><pubDate>Thu, 10 Sep 2009 00:04:04 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:3280181</guid><dc:creator>winsrvperf</dc:creator><description>&lt;p&gt;Are you sure it is ACCESS_DENIED and not INVALID_PARAMETER? &amp;nbsp;It will return INVALID_PARAMETER if called on a file opened without the OVERLAPPED flag. &amp;nbsp;The only way I can see it returning ACCESS_DENIED is if you really don't have read/write access to the file. &amp;nbsp;Try SetFileShortName (see MSDN for usage). &amp;nbsp;It exercises the same underlying code to get access to the file before branching to the function-specific code.&lt;/p&gt;
</description></item></channel></rss>