You guessed it right from the title.  This posting is all about WinFS performance and will answer the following questions:  What does it mean for WinFS to perform?  How do we measure performance?  And most importantly how can you help improve WinFS performance?  Before we dive into these questions let me introduce myself.  My name is Tony Voellm and I am the lead of the WinFS performance team.  In one way or another I have been working on making code perform since writing my first program at an early age.  Have you ever wondered how to make “10 Print “Tony”, 20 goto 10” run faster? I have.

Now let’s look into the first question.  What does it mean for WinFS to perform?  Performance means different things to different people.  Some people look at benchmarks in order to define if a piece of code is performing.  The better the score the better they think the code performs.  Others define performance in terms of consumption of resources such as I/O, CPU, and memory.  In other words a performant piece of code uses fewer resources.  Both of these definitions can be useful.  I prefer to look at performance from a user expectation viewpoint.  Human perception is around 20ms (30 frames / sec for TV = 33ms) so any computer response than happens in less than the human perception time could be perceived as performing.  However there is a catch.  It might be the operation happens in less than 20ms but leaves the machine in such a state that subsequent operations that used to return in less than 20ms now take longer or use more resources.  This means the operation needs not only to return in less than 20ms, but it also needs to leave the machine is such a state as to not adversely affect other operations.  How does this apply to WinFS?  When we look at WinFS performance we are driving it not only to minimize resource consumption and impact on the machine but also to meet user expectation.

Now it’s time for the second question: How do we measure WinFS performance?  Some have asked how does WinFS perform against NTFS on Winbench?  This is a good question but it might also be equally valid to ask how does WinFS perform on a common database benchmark like TPC-C.  In my opinion neither of these benchmarks is suitable for WinFS because they don’t look at enough of what WinFS can do.  An example query that neither benchmark captures is “Show me all email from people I am meeting with this week.” In today’s systems email is typically part of the mail application and not the file system so Winbench is not sufficient.  Its not that WinBench couldn’t be extended to include query tests but rather file systems like NTFS can’t even execute the query. At the same time TPC-C is an order processing benchmark and not really focused on rich query.  Given that today’s Benchmarks don’t really measure what WinFS can do, how do we measure performance?  The answer is to drive performance based on customer scenarios like “copy 100 photos from a digital camera into WinFS” and look how it impacts the machine and compares to user expectations.  Another scenario focused on query is the one mentioned above, “Show me all email from people I am meeting with this week.”

This leads us to the last question.  How can you help improve WinFS performance?  Simple as 1, 2, 3.
1) Download WinFS Beta 1 from (MSDN Subscribers & PDC attendees only). 
2) Upload your examples to
3) Post your comments here on what your experience was or how you might use it in the future. 
I’m not asking for your company secrets so please don’t post any confidential information!  Rather we want to know what types of operations you are trying to perform with WinFS. Are they more insert based like inserting contacts or query based like finding email?  Are you building a viewer app where notifications might be important or how about peer to peer sharing apps that take advantage of WinFS multi-master sync infrastructure?  The more we find out what you plan to do and what you expect in terms of throughput and impact on the machine the better we can make WinFS fit your expectation.  We have done a lot of work in this area to deliver a usable Beta 1.  Now we need your help to take it to the next level.

Have fun with the bits and in the future you’ll see posts looking at all types of performance numbers and topics.  I love the numbers...

Author: Tony Voellm