When I look at Windows IO priorities, I see that "High" does not execute before "Normal" and "Low" does not execute before "Very Low", i.e. "High" equals "Normal" and "Low" equals "Very Low". Why?
For example, when I test with FastCopy and set the IO priority of one to "High" and the other to "Normal". The "High" does not execute before the "Normal", they alternate, as in the case of the same priority.
If one priority is "High" and the other "Low", " High " takes precedence over "Low" (and also over "Very Low"); similarly, "Normal" takes precedence over "Low" and "Very Low". In addition, we can see that the "Low" priority execute slowly to prevent starvation, which is a sign that the "Idle Policy" has been activated.
Here is a reference article.
Does this situation imply that the "Critical" priority is also equivalent to "Normal"? Or does it execute before any other priority? Is it affected by the "Idle Policy" (i.e., the two "Idle Priorities" of "Low" and "Very Low" are executed slowly (two IOs per second), even if there is a "Critical" priority ahead)?
Originally, I posted the question in the "Microsoft Community", but they told me to ask here. After that, I tested the properties of the "Critical" priority and found some examples where "Critical" takes precedence over "Normal" (only when the priorities are different (IO size, type are the same), and "Critical" is requested after "Normal" but first executes the completion, the example is more convincing). You can check it out here.
However, whether the "Critical" priority is affected by the "Idle Policy" has not been addressed. Also, I would like to know if the "Equal Priority" case is due to Microsoft laziness, since the article quoted above says: "All port drivers check specifically for Critical priority I/Os and move them ahead of their queues, even if they do not support the full hierarchy mechanism. This mechanism is in place to support critical memory manager paging I/Os to ensure system reliability."