{"id":911,"date":"2021-05-21T19:01:48","date_gmt":"2021-05-21T18:01:48","guid":{"rendered":"https:\/\/devblogs.microsoft.com\/sustainable-software\/?p=911"},"modified":"2021-05-21T19:01:48","modified_gmt":"2021-05-21T18:01:48","slug":"introducing-ecoqos","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/sustainable-software\/introducing-ecoqos\/","title":{"rendered":"Introducing EcoQoS"},"content":{"rendered":"<h2>Introduction<\/h2>\n<p>EcoQoS is a new Quality of Service (QoS) level introduced to Windows that developers can now opt-in to run their work efficiently, leading to better energy efficiency\/increased battery life, reduced fan noise and power\/thermal throttling. It contributes to the Microsoft\u2019s <a href=\"https:\/\/devblogs.microsoft.com\/sustainable-software\/\">Sustainable Software<\/a> and Microsoft&#8217;s <a href=\"https:\/\/blogs.microsoft.com\/blog\/2020\/01\/16\/microsoft-will-be-carbon-negative-by-2030\/\">Carbon Negative by 2030 initiative<\/a>.<\/p>\n<h2>Motivation<\/h2>\n<p>Management of processor power consumption is important to provide optimal battery life and performance for users. The processor clock speed is a key player in this regard. As simulated in the figure below, higher clock speeds provide higher performance but with exponentially higher power consumption. This higher power drain can result in worse battery life, higher temperatures, and louder fan noise. Not all tasks require the absolute highest performance, so Windows dynamically reconfigures the processor to provide the proper balance of performance and power efficiency.<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/performance-diagnostics\/wp-content\/uploads\/sites\/64\/2021\/04\/CPUFrequencyVsPower.png\"><img decoding=\"async\" class=\"wp-image-316 aligncenter\" src=\"https:\/\/devblogs.microsoft.com\/performance-diagnostics\/wp-content\/uploads\/sites\/64\/2021\/04\/CPUFrequencyVsPower-300x192.png\" alt=\"Image CPUFrequencyVsPower\" width=\"427\" height=\"273\" \/><\/a><\/p>\n<p>Windows associates a Quality of Service (QoS) for processes and threads which indicates the balance of performance and power efficiency. Starting with Windows 10 Insider Preview Build 21359, Windows includes a new Quality of Service level called <em>EcoQoS<\/em>. This new QoS level is valuable for workloads that do not have a significant performance or latency requirement, to enable them to always run in an energy efficient manner. Developers can call APIs to explicitly opt in their processes and threads to be identified as EcoQoS, and Windows takes care of the rest. Windows will take this as a hint to automatically schedule this work to the most efficient processors, and to configure the processors to run at the most efficient clock speed. The usage of EcoQoS is ideal for background services, updaters, sync engines, indexing services, and more, where energy efficiency is the focus.<\/p>\n<h2>Impact<\/h2>\n<p>Initial assessment of EcoQoS has been shown to provide up to a 90% reduction in CPU power consumption, while consuming less than half the CPU energy to complete the same work.<\/p>\n<p>We are encouraging developers to take advantage of this API to enable their work to be run more efficiently. Usage of EcoQoS provides:<\/p>\n<ul>\n<li>Energy efficiency &amp; Sustainability<\/li>\n<li>Reduced heat and fan noise<\/li>\n<li>Reduced power\/thermal throttling \u2013 improving the performance of concurrent workloads<\/li>\n<\/ul>\n<h2>Supported Hardware<\/h2>\n<p>We worked with our silicon partners to tune processor power management for optimal efficiency. The platform automatically knows the optimal tuning for the EcoQoS processes and threads.<\/p>\n<p>Initial rollout of tuning for EcoQoS includes most of the latest Intel\u00ae\u2019s 10<sup>th<\/sup> and 11<sup>th<\/sup> Generation Mobile Processors, AMD\u2122 Ryzen\u2122 5000 Series Mobile Processors, and Qualcomm\u2019s series of processors. Over time we will expand our tuning for EcoQoS to a wider range of silicon, expanding these efficiency improvements to a broader range of devices, including desktop PCs.<\/p>\n<h2>API Support<\/h2>\n<p>The <a href=\"https:\/\/docs.microsoft.com\/en-us\/windows\/win32\/api\/processthreadsapi\/nf-processthreadsapi-setprocessinformation\">SetProcessInformation<\/a> and <a href=\"https:\/\/docs.microsoft.com\/en-us\/windows\/win32\/api\/processthreadsapi\/nf-processthreadsapi-setthreadinformation\">SetThreadInformation<\/a> functions provide a means for opting into EcoQoS on a particular process or individual thread respectively. Developers can call these functions and specify the use <strong><em>PowerThrottling<\/em><\/strong> to cause the process\/thread to be identified as EcoQoS and execute more efficiently.<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>EcoQoS is a new Quality of Service (QoS) level introduced to Windows that developers can now opt-in to run their work efficiently, leading to better energy efficiency\/increased battery life, reduced fan noise and power\/thermal throttling.<\/p>\n","protected":false},"author":55814,"featured_media":872,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[22],"tags":[141,142,140,62],"class_list":["post-911","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-sustainable-software-engineering","tag-battery-life","tag-ecoqos","tag-energy-efficiency","tag-sustainability"],"acf":[],"blog_post_summary":"<p>EcoQoS is a new Quality of Service (QoS) level introduced to Windows that developers can now opt-in to run their work efficiently, leading to better energy efficiency\/increased battery life, reduced fan noise and power\/thermal throttling.<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/sustainable-software\/wp-json\/wp\/v2\/posts\/911","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/sustainable-software\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/sustainable-software\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/sustainable-software\/wp-json\/wp\/v2\/users\/55814"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/sustainable-software\/wp-json\/wp\/v2\/comments?post=911"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/sustainable-software\/wp-json\/wp\/v2\/posts\/911\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/sustainable-software\/wp-json\/wp\/v2\/media\/872"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/sustainable-software\/wp-json\/wp\/v2\/media?parent=911"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/sustainable-software\/wp-json\/wp\/v2\/categories?post=911"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/sustainable-software\/wp-json\/wp\/v2\/tags?post=911"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}