CINXE.COM
Brain Fuck Scheduler - Wikipedia
<!DOCTYPE html> <html class="client-nojs vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-sticky-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-1 vector-feature-night-mode-enabled skin-theme-clientpref-day vector-toc-available" lang="en" dir="ltr"> <head> <meta charset="UTF-8"> <title>Brain Fuck Scheduler - Wikipedia</title> <script>(function(){var className="client-js vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-sticky-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-1 vector-feature-night-mode-enabled skin-theme-clientpref-day vector-toc-available";var cookie=document.cookie.match(/(?:^|; )enwikimwclientpreferences=([^;]+)/);if(cookie){cookie[1].split('%2C').forEach(function(pref){className=className.replace(new RegExp('(^| )'+pref.replace(/-clientpref-\w+$|[^\w-]+/g,'')+'-clientpref-\\w+( |$)'),'$1'+pref+'$2');});}document.documentElement.className=className;}());RLCONF={"wgBreakFrames":false,"wgSeparatorTransformTable":["",""],"wgDigitTransformTable":["",""],"wgDefaultDateFormat":"dmy", "wgMonthNames":["","January","February","March","April","May","June","July","August","September","October","November","December"],"wgRequestId":"30d97346-40f3-44e1-8135-e77e1f41b1ed","wgCanonicalNamespace":"","wgCanonicalSpecialPageName":false,"wgNamespaceNumber":0,"wgPageName":"Brain_Fuck_Scheduler","wgTitle":"Brain Fuck Scheduler","wgCurRevisionId":1258759347,"wgRevisionId":1258759347,"wgArticleId":24281777,"wgIsArticle":true,"wgIsRedirect":false,"wgAction":"view","wgUserName":null,"wgUserGroups":["*"],"wgCategories":["Webarchive template wayback links","Articles with short description","Short description matches Wikidata","Wikipedia articles in need of updating from November 2016","All Wikipedia articles in need of updating","Linux kernel process schedulers","Free software programmed in C","Software using the GPL license"],"wgPageViewLanguage":"en","wgPageContentLanguage":"en","wgPageContentModel":"wikitext","wgRelevantPageName":"Brain_Fuck_Scheduler","wgRelevantArticleId":24281777, "wgIsProbablyEditable":true,"wgRelevantPageIsProbablyEditable":true,"wgRestrictionEdit":[],"wgRestrictionMove":[],"wgNoticeProject":"wikipedia","wgCiteReferencePreviewsActive":false,"wgFlaggedRevsParams":{"tags":{"status":{"levels":1}}},"wgMediaViewerOnClick":true,"wgMediaViewerEnabledByDefault":true,"wgPopupsFlags":0,"wgVisualEditor":{"pageLanguageCode":"en","pageLanguageDir":"ltr","pageVariantFallbacks":"en"},"wgMFDisplayWikibaseDescriptions":{"search":true,"watchlist":true,"tagline":false,"nearby":true},"wgWMESchemaEditAttemptStepOversample":false,"wgWMEPageLength":30000,"wgRelatedArticlesCompat":[],"wgCentralAuthMobileDomain":false,"wgEditSubmitButtonLabelPublish":true,"wgULSPosition":"interlanguage","wgULSisCompactLinksEnabled":false,"wgVector2022LanguageInHeader":true,"wgULSisLanguageSelectorEmpty":false,"wgWikibaseItemId":"Q656481","wgCheckUserClientHintsHeadersJsApi":["brands","architecture","bitness","fullVersionList","mobile","model","platform","platformVersion"], "GEHomepageSuggestedEditsEnableTopics":true,"wgGETopicsMatchModeEnabled":false,"wgGEStructuredTaskRejectionReasonTextInputEnabled":false,"wgGELevelingUpEnabledForUser":false};RLSTATE={"ext.globalCssJs.user.styles":"ready","site.styles":"ready","user.styles":"ready","ext.globalCssJs.user":"ready","user":"ready","user.options":"loading","ext.cite.styles":"ready","ext.math.styles":"ready","ext.pygments":"ready","skins.vector.search.codex.styles":"ready","skins.vector.styles":"ready","skins.vector.icons":"ready","jquery.makeCollapsible.styles":"ready","ext.wikimediamessages.styles":"ready","ext.visualEditor.desktopArticleTarget.noscript":"ready","ext.uls.interlanguage":"ready","wikibase.client.init":"ready","ext.wikimediaBadges":"ready"};RLPAGEMODULES=["ext.cite.ux-enhancements","ext.pygments.view","mediawiki.page.media","ext.scribunto.logs","site","mediawiki.page.ready","jquery.makeCollapsible","mediawiki.toc","skins.vector.js","ext.centralNotice.geoIP","ext.centralNotice.startUp", "ext.gadget.ReferenceTooltips","ext.gadget.switcher","ext.urlShortener.toolbar","ext.centralauth.centralautologin","mmv.bootstrap","ext.popups","ext.visualEditor.desktopArticleTarget.init","ext.visualEditor.targetLoader","ext.echo.centralauth","ext.eventLogging","ext.wikimediaEvents","ext.navigationTiming","ext.uls.interface","ext.cx.eventlogging.campaigns","ext.cx.uls.quick.actions","wikibase.client.vector-2022","ext.checkUser.clientHints","ext.growthExperiments.SuggestedEditSession","wikibase.sidebar.tracking"];</script> <script>(RLQ=window.RLQ||[]).push(function(){mw.loader.impl(function(){return["user.options@12s5i",function($,jQuery,require,module){mw.user.tokens.set({"patrolToken":"+\\","watchToken":"+\\","csrfToken":"+\\"}); }];});});</script> <link rel="stylesheet" href="/w/load.php?lang=en&modules=ext.cite.styles%7Cext.math.styles%7Cext.pygments%2CwikimediaBadges%7Cext.uls.interlanguage%7Cext.visualEditor.desktopArticleTarget.noscript%7Cext.wikimediamessages.styles%7Cjquery.makeCollapsible.styles%7Cskins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles%7Cwikibase.client.init&only=styles&skin=vector-2022"> <script async="" src="/w/load.php?lang=en&modules=startup&only=scripts&raw=1&skin=vector-2022"></script> <meta name="ResourceLoaderDynamicStyles" content=""> <link rel="stylesheet" href="/w/load.php?lang=en&modules=site.styles&only=styles&skin=vector-2022"> <meta name="generator" content="MediaWiki 1.44.0-wmf.4"> <meta name="referrer" content="origin"> <meta name="referrer" content="origin-when-cross-origin"> <meta name="robots" content="max-image-preview:standard"> <meta name="format-detection" content="telephone=no"> <meta property="og:image" content="https://upload.wikimedia.org/wikipedia/commons/thumb/6/65/Simplified_Structure_of_the_Linux_Kernel.svg/1200px-Simplified_Structure_of_the_Linux_Kernel.svg.png"> <meta property="og:image:width" content="1200"> <meta property="og:image:height" content="675"> <meta property="og:image" content="https://upload.wikimedia.org/wikipedia/commons/thumb/6/65/Simplified_Structure_of_the_Linux_Kernel.svg/800px-Simplified_Structure_of_the_Linux_Kernel.svg.png"> <meta property="og:image:width" content="800"> <meta property="og:image:height" content="450"> <meta property="og:image" content="https://upload.wikimedia.org/wikipedia/commons/thumb/6/65/Simplified_Structure_of_the_Linux_Kernel.svg/640px-Simplified_Structure_of_the_Linux_Kernel.svg.png"> <meta property="og:image:width" content="640"> <meta property="og:image:height" content="360"> <meta name="viewport" content="width=1120"> <meta property="og:title" content="Brain Fuck Scheduler - Wikipedia"> <meta property="og:type" content="website"> <link rel="preconnect" href="//upload.wikimedia.org"> <link rel="alternate" media="only screen and (max-width: 640px)" href="//en.m.wikipedia.org/wiki/Brain_Fuck_Scheduler"> <link rel="alternate" type="application/x-wiki" title="Edit this page" href="/w/index.php?title=Brain_Fuck_Scheduler&action=edit"> <link rel="apple-touch-icon" href="/static/apple-touch/wikipedia.png"> <link rel="icon" href="/static/favicon/wikipedia.ico"> <link rel="search" type="application/opensearchdescription+xml" href="/w/rest.php/v1/search" title="Wikipedia (en)"> <link rel="EditURI" type="application/rsd+xml" href="//en.wikipedia.org/w/api.php?action=rsd"> <link rel="canonical" href="https://en.wikipedia.org/wiki/Brain_Fuck_Scheduler"> <link rel="license" href="https://creativecommons.org/licenses/by-sa/4.0/deed.en"> <link rel="alternate" type="application/atom+xml" title="Wikipedia Atom feed" href="/w/index.php?title=Special:RecentChanges&feed=atom"> <link rel="dns-prefetch" href="//meta.wikimedia.org" /> <link rel="dns-prefetch" href="//login.wikimedia.org"> </head> <body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject mw-editable page-Brain_Fuck_Scheduler rootpage-Brain_Fuck_Scheduler skin-vector-2022 action-view"><a class="mw-jump-link" href="#bodyContent">Jump to content</a> <div class="vector-header-container"> <header class="vector-header mw-header"> <div class="vector-header-start"> <nav class="vector-main-menu-landmark" aria-label="Site"> <div id="vector-main-menu-dropdown" class="vector-dropdown vector-main-menu-dropdown vector-button-flush-left vector-button-flush-right" > <input type="checkbox" id="vector-main-menu-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-main-menu-dropdown" class="vector-dropdown-checkbox " aria-label="Main menu" > <label id="vector-main-menu-dropdown-label" for="vector-main-menu-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only " aria-hidden="true" ><span class="vector-icon mw-ui-icon-menu mw-ui-icon-wikimedia-menu"></span> <span class="vector-dropdown-label-text">Main menu</span> </label> <div class="vector-dropdown-content"> <div id="vector-main-menu-unpinned-container" class="vector-unpinned-container"> <div id="vector-main-menu" class="vector-main-menu vector-pinnable-element"> <div class="vector-pinnable-header vector-main-menu-pinnable-header vector-pinnable-header-unpinned" data-feature-name="main-menu-pinned" data-pinnable-element-id="vector-main-menu" data-pinned-container-id="vector-main-menu-pinned-container" data-unpinned-container-id="vector-main-menu-unpinned-container" > <div class="vector-pinnable-header-label">Main menu</div> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-main-menu.pin">move to sidebar</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-main-menu.unpin">hide</button> </div> <div id="p-navigation" class="vector-menu mw-portlet mw-portlet-navigation" > <div class="vector-menu-heading"> Navigation </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="n-mainpage-description" class="mw-list-item"><a href="/wiki/Main_Page" title="Visit the main page [z]" accesskey="z"><span>Main page</span></a></li><li id="n-contents" class="mw-list-item"><a href="/wiki/Wikipedia:Contents" title="Guides to browsing Wikipedia"><span>Contents</span></a></li><li id="n-currentevents" class="mw-list-item"><a href="/wiki/Portal:Current_events" title="Articles related to current events"><span>Current events</span></a></li><li id="n-randompage" class="mw-list-item"><a href="/wiki/Special:Random" title="Visit a randomly selected article [x]" accesskey="x"><span>Random article</span></a></li><li id="n-aboutsite" class="mw-list-item"><a href="/wiki/Wikipedia:About" title="Learn about Wikipedia and how it works"><span>About Wikipedia</span></a></li><li id="n-contactpage" class="mw-list-item"><a href="//en.wikipedia.org/wiki/Wikipedia:Contact_us" title="How to contact Wikipedia"><span>Contact us</span></a></li> </ul> </div> </div> <div id="p-interaction" class="vector-menu mw-portlet mw-portlet-interaction" > <div class="vector-menu-heading"> Contribute </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="n-help" class="mw-list-item"><a href="/wiki/Help:Contents" title="Guidance on how to use and edit Wikipedia"><span>Help</span></a></li><li id="n-introduction" class="mw-list-item"><a href="/wiki/Help:Introduction" title="Learn how to edit Wikipedia"><span>Learn to edit</span></a></li><li id="n-portal" class="mw-list-item"><a href="/wiki/Wikipedia:Community_portal" title="The hub for editors"><span>Community portal</span></a></li><li id="n-recentchanges" class="mw-list-item"><a href="/wiki/Special:RecentChanges" title="A list of recent changes to Wikipedia [r]" accesskey="r"><span>Recent changes</span></a></li><li id="n-upload" class="mw-list-item"><a href="/wiki/Wikipedia:File_upload_wizard" title="Add images or other media for use on Wikipedia"><span>Upload file</span></a></li> </ul> </div> </div> </div> </div> </div> </div> </nav> <a href="/wiki/Main_Page" class="mw-logo"> <img class="mw-logo-icon" src="/static/images/icons/wikipedia.png" alt="" aria-hidden="true" height="50" width="50"> <span class="mw-logo-container skin-invert"> <img class="mw-logo-wordmark" alt="Wikipedia" src="/static/images/mobile/copyright/wikipedia-wordmark-en.svg" style="width: 7.5em; height: 1.125em;"> <img class="mw-logo-tagline" alt="The Free Encyclopedia" src="/static/images/mobile/copyright/wikipedia-tagline-en.svg" width="117" height="13" style="width: 7.3125em; height: 0.8125em;"> </span> </a> </div> <div class="vector-header-end"> <div id="p-search" role="search" class="vector-search-box-vue vector-search-box-collapses vector-search-box-show-thumbnail vector-search-box-auto-expand-width vector-search-box"> <a href="/wiki/Special:Search" class="cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only search-toggle" title="Search Wikipedia [f]" accesskey="f"><span class="vector-icon mw-ui-icon-search mw-ui-icon-wikimedia-search"></span> <span>Search</span> </a> <div class="vector-typeahead-search-container"> <div class="cdx-typeahead-search cdx-typeahead-search--show-thumbnail cdx-typeahead-search--auto-expand-width"> <form action="/w/index.php" id="searchform" class="cdx-search-input cdx-search-input--has-end-button"> <div id="simpleSearch" class="cdx-search-input__input-wrapper" data-search-loc="header-moved"> <div class="cdx-text-input cdx-text-input--has-start-icon"> <input class="cdx-text-input__input" type="search" name="search" placeholder="Search Wikipedia" aria-label="Search Wikipedia" autocapitalize="sentences" title="Search Wikipedia [f]" accesskey="f" id="searchInput" > <span class="cdx-text-input__icon cdx-text-input__start-icon"></span> </div> <input type="hidden" name="title" value="Special:Search"> </div> <button class="cdx-button cdx-search-input__end-button">Search</button> </form> </div> </div> </div> <nav class="vector-user-links vector-user-links-wide" aria-label="Personal tools"> <div class="vector-user-links-main"> <div id="p-vector-user-menu-preferences" class="vector-menu mw-portlet emptyPortlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </div> <div id="p-vector-user-menu-userpage" class="vector-menu mw-portlet emptyPortlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </div> <nav class="vector-appearance-landmark" aria-label="Appearance"> <div id="vector-appearance-dropdown" class="vector-dropdown " title="Change the appearance of the page's font size, width, and color" > <input type="checkbox" id="vector-appearance-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-appearance-dropdown" class="vector-dropdown-checkbox " aria-label="Appearance" > <label id="vector-appearance-dropdown-label" for="vector-appearance-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only " aria-hidden="true" ><span class="vector-icon mw-ui-icon-appearance mw-ui-icon-wikimedia-appearance"></span> <span class="vector-dropdown-label-text">Appearance</span> </label> <div class="vector-dropdown-content"> <div id="vector-appearance-unpinned-container" class="vector-unpinned-container"> </div> </div> </div> </nav> <div id="p-vector-user-menu-notifications" class="vector-menu mw-portlet emptyPortlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </div> <div id="p-vector-user-menu-overflow" class="vector-menu mw-portlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="pt-sitesupport-2" class="user-links-collapsible-item mw-list-item user-links-collapsible-item"><a data-mw="interface" href="https://donate.wikimedia.org/wiki/Special:FundraiserRedirector?utm_source=donate&utm_medium=sidebar&utm_campaign=C13_en.wikipedia.org&uselang=en" class=""><span>Donate</span></a> </li> <li id="pt-createaccount-2" class="user-links-collapsible-item mw-list-item user-links-collapsible-item"><a data-mw="interface" href="/w/index.php?title=Special:CreateAccount&returnto=Brain+Fuck+Scheduler" title="You are encouraged to create an account and log in; however, it is not mandatory" class=""><span>Create account</span></a> </li> <li id="pt-login-2" class="user-links-collapsible-item mw-list-item user-links-collapsible-item"><a data-mw="interface" href="/w/index.php?title=Special:UserLogin&returnto=Brain+Fuck+Scheduler" title="You're encouraged to log in; however, it's not mandatory. [o]" accesskey="o" class=""><span>Log in</span></a> </li> </ul> </div> </div> </div> <div id="vector-user-links-dropdown" class="vector-dropdown vector-user-menu vector-button-flush-right vector-user-menu-logged-out" title="Log in and more options" > <input type="checkbox" id="vector-user-links-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-user-links-dropdown" class="vector-dropdown-checkbox " aria-label="Personal tools" > <label id="vector-user-links-dropdown-label" for="vector-user-links-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only " aria-hidden="true" ><span class="vector-icon mw-ui-icon-ellipsis mw-ui-icon-wikimedia-ellipsis"></span> <span class="vector-dropdown-label-text">Personal tools</span> </label> <div class="vector-dropdown-content"> <div id="p-personal" class="vector-menu mw-portlet mw-portlet-personal user-links-collapsible-item" title="User menu" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="pt-sitesupport" class="user-links-collapsible-item mw-list-item"><a href="https://donate.wikimedia.org/wiki/Special:FundraiserRedirector?utm_source=donate&utm_medium=sidebar&utm_campaign=C13_en.wikipedia.org&uselang=en"><span>Donate</span></a></li><li id="pt-createaccount" class="user-links-collapsible-item mw-list-item"><a href="/w/index.php?title=Special:CreateAccount&returnto=Brain+Fuck+Scheduler" title="You are encouraged to create an account and log in; however, it is not mandatory"><span class="vector-icon mw-ui-icon-userAdd mw-ui-icon-wikimedia-userAdd"></span> <span>Create account</span></a></li><li id="pt-login" class="user-links-collapsible-item mw-list-item"><a href="/w/index.php?title=Special:UserLogin&returnto=Brain+Fuck+Scheduler" title="You're encouraged to log in; however, it's not mandatory. [o]" accesskey="o"><span class="vector-icon mw-ui-icon-logIn mw-ui-icon-wikimedia-logIn"></span> <span>Log in</span></a></li> </ul> </div> </div> <div id="p-user-menu-anon-editor" class="vector-menu mw-portlet mw-portlet-user-menu-anon-editor" > <div class="vector-menu-heading"> Pages for logged out editors <a href="/wiki/Help:Introduction" aria-label="Learn more about editing"><span>learn more</span></a> </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="pt-anoncontribs" class="mw-list-item"><a href="/wiki/Special:MyContributions" title="A list of edits made from this IP address [y]" accesskey="y"><span>Contributions</span></a></li><li id="pt-anontalk" class="mw-list-item"><a href="/wiki/Special:MyTalk" title="Discussion about edits from this IP address [n]" accesskey="n"><span>Talk</span></a></li> </ul> </div> </div> </div> </div> </nav> </div> </header> </div> <div class="mw-page-container"> <div class="mw-page-container-inner"> <div class="vector-sitenotice-container"> <div id="siteNotice"><!-- CentralNotice --></div> </div> <div class="vector-column-start"> <div class="vector-main-menu-container"> <div id="mw-navigation"> <nav id="mw-panel" class="vector-main-menu-landmark" aria-label="Site"> <div id="vector-main-menu-pinned-container" class="vector-pinned-container"> </div> </nav> </div> </div> <div class="vector-sticky-pinned-container"> <nav id="mw-panel-toc" aria-label="Contents" data-event-name="ui.sidebar-toc" class="mw-table-of-contents-container vector-toc-landmark"> <div id="vector-toc-pinned-container" class="vector-pinned-container"> <div id="vector-toc" class="vector-toc vector-pinnable-element"> <div class="vector-pinnable-header vector-toc-pinnable-header vector-pinnable-header-pinned" data-feature-name="toc-pinned" data-pinnable-element-id="vector-toc" > <h2 class="vector-pinnable-header-label">Contents</h2> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-toc.pin">move to sidebar</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-toc.unpin">hide</button> </div> <ul class="vector-toc-contents" id="mw-panel-toc-list"> <li id="toc-mw-content-text" class="vector-toc-list-item vector-toc-level-1"> <a href="#" class="vector-toc-link"> <div class="vector-toc-text">(Top)</div> </a> </li> <li id="toc-Theoretical_design_and_efficiency" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Theoretical_design_and_efficiency"> <div class="vector-toc-text"> <span class="vector-toc-numb">1</span> <span>Theoretical design and efficiency</span> </div> </a> <button aria-controls="toc-Theoretical_design_and_efficiency-sublist" class="cdx-button cdx-button--weight-quiet cdx-button--icon-only vector-toc-toggle"> <span class="vector-icon mw-ui-icon-wikimedia-expand"></span> <span>Toggle Theoretical design and efficiency subsection</span> </button> <ul id="toc-Theoretical_design_and_efficiency-sublist" class="vector-toc-list"> <li id="toc-Virtual_deadline" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Virtual_deadline"> <div class="vector-toc-text"> <span class="vector-toc-numb">1.1</span> <span>Virtual deadline</span> </div> </a> <ul id="toc-Virtual_deadline-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Scheduling_policies" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Scheduling_policies"> <div class="vector-toc-text"> <span class="vector-toc-numb">1.2</span> <span>Scheduling policies</span> </div> </a> <ul id="toc-Scheduling_policies-sublist" class="vector-toc-list"> <li id="toc-Realtime_policy" class="vector-toc-list-item vector-toc-level-3"> <a class="vector-toc-link" href="#Realtime_policy"> <div class="vector-toc-text"> <span class="vector-toc-numb">1.2.1</span> <span>Realtime policy</span> </div> </a> <ul id="toc-Realtime_policy-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Isochronous_policy" class="vector-toc-list-item vector-toc-level-3"> <a class="vector-toc-link" href="#Isochronous_policy"> <div class="vector-toc-text"> <span class="vector-toc-numb">1.2.2</span> <span>Isochronous policy</span> </div> </a> <ul id="toc-Isochronous_policy-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Normal_policy" class="vector-toc-list-item vector-toc-level-3"> <a class="vector-toc-link" href="#Normal_policy"> <div class="vector-toc-text"> <span class="vector-toc-numb">1.2.3</span> <span>Normal policy</span> </div> </a> <ul id="toc-Normal_policy-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Idle_priority_policy" class="vector-toc-list-item vector-toc-level-3"> <a class="vector-toc-link" href="#Idle_priority_policy"> <div class="vector-toc-text"> <span class="vector-toc-numb">1.2.4</span> <span>Idle priority policy</span> </div> </a> <ul id="toc-Idle_priority_policy-sublist" class="vector-toc-list"> </ul> </li> </ul> </li> <li id="toc-Preemption" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Preemption"> <div class="vector-toc-text"> <span class="vector-toc-numb">1.3</span> <span>Preemption</span> </div> </a> <ul id="toc-Preemption-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Task_placement,_multiple_cores" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Task_placement,_multiple_cores"> <div class="vector-toc-text"> <span class="vector-toc-numb">1.4</span> <span>Task placement, multiple cores</span> </div> </a> <ul id="toc-Task_placement,_multiple_cores-sublist" class="vector-toc-list"> </ul> </li> </ul> </li> <li id="toc-schedtool" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#schedtool"> <div class="vector-toc-text"> <span class="vector-toc-numb">2</span> <span>schedtool</span> </div> </a> <ul id="toc-schedtool-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Benchmarks" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Benchmarks"> <div class="vector-toc-text"> <span class="vector-toc-numb">3</span> <span>Benchmarks</span> </div> </a> <ul id="toc-Benchmarks-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Adoption" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Adoption"> <div class="vector-toc-text"> <span class="vector-toc-numb">4</span> <span>Adoption</span> </div> </a> <ul id="toc-Adoption-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-MuQSS" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#MuQSS"> <div class="vector-toc-text"> <span class="vector-toc-numb">5</span> <span>MuQSS</span> </div> </a> <button aria-controls="toc-MuQSS-sublist" class="cdx-button cdx-button--weight-quiet cdx-button--icon-only vector-toc-toggle"> <span class="vector-icon mw-ui-icon-wikimedia-expand"></span> <span>Toggle MuQSS subsection</span> </button> <ul id="toc-MuQSS-sublist" class="vector-toc-list"> <li id="toc-Theoretical_design_and_efficiency_2" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Theoretical_design_and_efficiency_2"> <div class="vector-toc-text"> <span class="vector-toc-numb">5.1</span> <span>Theoretical design and efficiency</span> </div> </a> <ul id="toc-Theoretical_design_and_efficiency_2-sublist" class="vector-toc-list"> </ul> </li> </ul> </li> <li id="toc-See_also" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#See_also"> <div class="vector-toc-text"> <span class="vector-toc-numb">6</span> <span>See also</span> </div> </a> <ul id="toc-See_also-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-References" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#References"> <div class="vector-toc-text"> <span class="vector-toc-numb">7</span> <span>References</span> </div> </a> <ul id="toc-References-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-External_links" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#External_links"> <div class="vector-toc-text"> <span class="vector-toc-numb">8</span> <span>External links</span> </div> </a> <ul id="toc-External_links-sublist" class="vector-toc-list"> </ul> </li> </ul> </div> </div> </nav> </div> </div> <div class="mw-content-container"> <main id="content" class="mw-body"> <header class="mw-body-header vector-page-titlebar"> <nav aria-label="Contents" class="vector-toc-landmark"> <div id="vector-page-titlebar-toc" class="vector-dropdown vector-page-titlebar-toc vector-button-flush-left" > <input type="checkbox" id="vector-page-titlebar-toc-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-page-titlebar-toc" class="vector-dropdown-checkbox " aria-label="Toggle the table of contents" > <label id="vector-page-titlebar-toc-label" for="vector-page-titlebar-toc-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only " aria-hidden="true" ><span class="vector-icon mw-ui-icon-listBullet mw-ui-icon-wikimedia-listBullet"></span> <span class="vector-dropdown-label-text">Toggle the table of contents</span> </label> <div class="vector-dropdown-content"> <div id="vector-page-titlebar-toc-unpinned-container" class="vector-unpinned-container"> </div> </div> </div> </nav> <h1 id="firstHeading" class="firstHeading mw-first-heading"><span class="mw-page-title-main">Brain Fuck Scheduler</span></h1> <div id="p-lang-btn" class="vector-dropdown mw-portlet mw-portlet-lang" > <input type="checkbox" id="p-lang-btn-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-p-lang-btn" class="vector-dropdown-checkbox mw-interlanguage-selector" aria-label="Go to an article in another language. Available in 5 languages" > <label id="p-lang-btn-label" for="p-lang-btn-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--action-progressive mw-portlet-lang-heading-5" aria-hidden="true" ><span class="vector-icon mw-ui-icon-language-progressive mw-ui-icon-wikimedia-language-progressive"></span> <span class="vector-dropdown-label-text">5 languages</span> </label> <div class="vector-dropdown-content"> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li class="interlanguage-link interwiki-de mw-list-item"><a href="https://de.wikipedia.org/wiki/Brain_Fuck_Scheduler" title="Brain Fuck Scheduler – German" lang="de" hreflang="de" data-title="Brain Fuck Scheduler" data-language-autonym="Deutsch" data-language-local-name="German" class="interlanguage-link-target"><span>Deutsch</span></a></li><li class="interlanguage-link interwiki-ja mw-list-item"><a href="https://ja.wikipedia.org/wiki/Brain_Fuck_Scheduler" title="Brain Fuck Scheduler – Japanese" lang="ja" hreflang="ja" data-title="Brain Fuck Scheduler" data-language-autonym="日本語" data-language-local-name="Japanese" class="interlanguage-link-target"><span>日本語</span></a></li><li class="interlanguage-link interwiki-pl mw-list-item"><a href="https://pl.wikipedia.org/wiki/Brain_Fuck_Scheduler" title="Brain Fuck Scheduler – Polish" lang="pl" hreflang="pl" data-title="Brain Fuck Scheduler" data-language-autonym="Polski" data-language-local-name="Polish" class="interlanguage-link-target"><span>Polski</span></a></li><li class="interlanguage-link interwiki-ru mw-list-item"><a href="https://ru.wikipedia.org/wiki/Brain_Fuck_Scheduler" title="Brain Fuck Scheduler – Russian" lang="ru" hreflang="ru" data-title="Brain Fuck Scheduler" data-language-autonym="Русский" data-language-local-name="Russian" class="interlanguage-link-target"><span>Русский</span></a></li><li class="interlanguage-link interwiki-zh mw-list-item"><a href="https://zh.wikipedia.org/wiki/%E8%85%A6%E6%AE%98%E6%8E%92%E7%A8%8B%E5%99%A8" title="腦殘排程器 – Chinese" lang="zh" hreflang="zh" data-title="腦殘排程器" data-language-autonym="中文" data-language-local-name="Chinese" class="interlanguage-link-target"><span>中文</span></a></li> </ul> <div class="after-portlet after-portlet-lang"><span class="wb-langlinks-edit wb-langlinks-link"><a href="https://www.wikidata.org/wiki/Special:EntityPage/Q656481#sitelinks-wikipedia" title="Edit interlanguage links" class="wbc-editpage">Edit links</a></span></div> </div> </div> </div> </header> <div class="vector-page-toolbar"> <div class="vector-page-toolbar-container"> <div id="left-navigation"> <nav aria-label="Namespaces"> <div id="p-associated-pages" class="vector-menu vector-menu-tabs mw-portlet mw-portlet-associated-pages" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="ca-nstab-main" class="selected vector-tab-noicon mw-list-item"><a href="/wiki/Brain_Fuck_Scheduler" title="View the content page [c]" accesskey="c"><span>Article</span></a></li><li id="ca-talk" class="vector-tab-noicon mw-list-item"><a href="/wiki/Talk:Brain_Fuck_Scheduler" rel="discussion" title="Discuss improvements to the content page [t]" accesskey="t"><span>Talk</span></a></li> </ul> </div> </div> <div id="vector-variants-dropdown" class="vector-dropdown emptyPortlet" > <input type="checkbox" id="vector-variants-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-variants-dropdown" class="vector-dropdown-checkbox " aria-label="Change language variant" > <label id="vector-variants-dropdown-label" for="vector-variants-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet" aria-hidden="true" ><span class="vector-dropdown-label-text">English</span> </label> <div class="vector-dropdown-content"> <div id="p-variants" class="vector-menu mw-portlet mw-portlet-variants emptyPortlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </div> </div> </div> </nav> </div> <div id="right-navigation" class="vector-collapsible"> <nav aria-label="Views"> <div id="p-views" class="vector-menu vector-menu-tabs mw-portlet mw-portlet-views" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="ca-view" class="selected vector-tab-noicon mw-list-item"><a href="/wiki/Brain_Fuck_Scheduler"><span>Read</span></a></li><li id="ca-edit" class="vector-tab-noicon mw-list-item"><a href="/w/index.php?title=Brain_Fuck_Scheduler&action=edit" title="Edit this page [e]" accesskey="e"><span>Edit</span></a></li><li id="ca-history" class="vector-tab-noicon mw-list-item"><a href="/w/index.php?title=Brain_Fuck_Scheduler&action=history" title="Past revisions of this page [h]" accesskey="h"><span>View history</span></a></li> </ul> </div> </div> </nav> <nav class="vector-page-tools-landmark" aria-label="Page tools"> <div id="vector-page-tools-dropdown" class="vector-dropdown vector-page-tools-dropdown" > <input type="checkbox" id="vector-page-tools-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-page-tools-dropdown" class="vector-dropdown-checkbox " aria-label="Tools" > <label id="vector-page-tools-dropdown-label" for="vector-page-tools-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet" aria-hidden="true" ><span class="vector-dropdown-label-text">Tools</span> </label> <div class="vector-dropdown-content"> <div id="vector-page-tools-unpinned-container" class="vector-unpinned-container"> <div id="vector-page-tools" class="vector-page-tools vector-pinnable-element"> <div class="vector-pinnable-header vector-page-tools-pinnable-header vector-pinnable-header-unpinned" data-feature-name="page-tools-pinned" data-pinnable-element-id="vector-page-tools" data-pinned-container-id="vector-page-tools-pinned-container" data-unpinned-container-id="vector-page-tools-unpinned-container" > <div class="vector-pinnable-header-label">Tools</div> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-page-tools.pin">move to sidebar</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-page-tools.unpin">hide</button> </div> <div id="p-cactions" class="vector-menu mw-portlet mw-portlet-cactions emptyPortlet vector-has-collapsible-items" title="More options" > <div class="vector-menu-heading"> Actions </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="ca-more-view" class="selected vector-more-collapsible-item mw-list-item"><a href="/wiki/Brain_Fuck_Scheduler"><span>Read</span></a></li><li id="ca-more-edit" class="vector-more-collapsible-item mw-list-item"><a href="/w/index.php?title=Brain_Fuck_Scheduler&action=edit" title="Edit this page [e]" accesskey="e"><span>Edit</span></a></li><li id="ca-more-history" class="vector-more-collapsible-item mw-list-item"><a href="/w/index.php?title=Brain_Fuck_Scheduler&action=history"><span>View history</span></a></li> </ul> </div> </div> <div id="p-tb" class="vector-menu mw-portlet mw-portlet-tb" > <div class="vector-menu-heading"> General </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="t-whatlinkshere" class="mw-list-item"><a href="/wiki/Special:WhatLinksHere/Brain_Fuck_Scheduler" title="List of all English Wikipedia pages containing links to this page [j]" accesskey="j"><span>What links here</span></a></li><li id="t-recentchangeslinked" class="mw-list-item"><a href="/wiki/Special:RecentChangesLinked/Brain_Fuck_Scheduler" rel="nofollow" title="Recent changes in pages linked from this page [k]" accesskey="k"><span>Related changes</span></a></li><li id="t-upload" class="mw-list-item"><a href="/wiki/Wikipedia:File_Upload_Wizard" title="Upload files [u]" accesskey="u"><span>Upload file</span></a></li><li id="t-specialpages" class="mw-list-item"><a href="/wiki/Special:SpecialPages" title="A list of all special pages [q]" accesskey="q"><span>Special pages</span></a></li><li id="t-permalink" class="mw-list-item"><a href="/w/index.php?title=Brain_Fuck_Scheduler&oldid=1258759347" title="Permanent link to this revision of this page"><span>Permanent link</span></a></li><li id="t-info" class="mw-list-item"><a href="/w/index.php?title=Brain_Fuck_Scheduler&action=info" title="More information about this page"><span>Page information</span></a></li><li id="t-cite" class="mw-list-item"><a href="/w/index.php?title=Special:CiteThisPage&page=Brain_Fuck_Scheduler&id=1258759347&wpFormIdentifier=titleform" title="Information on how to cite this page"><span>Cite this page</span></a></li><li id="t-urlshortener" class="mw-list-item"><a href="/w/index.php?title=Special:UrlShortener&url=https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FBrain_Fuck_Scheduler"><span>Get shortened URL</span></a></li><li id="t-urlshortener-qrcode" class="mw-list-item"><a href="/w/index.php?title=Special:QrCode&url=https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FBrain_Fuck_Scheduler"><span>Download QR code</span></a></li> </ul> </div> </div> <div id="p-coll-print_export" class="vector-menu mw-portlet mw-portlet-coll-print_export" > <div class="vector-menu-heading"> Print/export </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="coll-download-as-rl" class="mw-list-item"><a href="/w/index.php?title=Special:DownloadAsPdf&page=Brain_Fuck_Scheduler&action=show-download-screen" title="Download this page as a PDF file"><span>Download as PDF</span></a></li><li id="t-print" class="mw-list-item"><a href="/w/index.php?title=Brain_Fuck_Scheduler&printable=yes" title="Printable version of this page [p]" accesskey="p"><span>Printable version</span></a></li> </ul> </div> </div> <div id="p-wikibase-otherprojects" class="vector-menu mw-portlet mw-portlet-wikibase-otherprojects" > <div class="vector-menu-heading"> In other projects </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="t-wikibase" class="wb-otherproject-link wb-otherproject-wikibase-dataitem mw-list-item"><a href="https://www.wikidata.org/wiki/Special:EntityPage/Q656481" title="Structured data on this page hosted by Wikidata [g]" accesskey="g"><span>Wikidata item</span></a></li> </ul> </div> </div> </div> </div> </div> </div> </nav> </div> </div> </div> <div class="vector-column-end"> <div class="vector-sticky-pinned-container"> <nav class="vector-page-tools-landmark" aria-label="Page tools"> <div id="vector-page-tools-pinned-container" class="vector-pinned-container"> </div> </nav> <nav class="vector-appearance-landmark" aria-label="Appearance"> <div id="vector-appearance-pinned-container" class="vector-pinned-container"> <div id="vector-appearance" class="vector-appearance vector-pinnable-element"> <div class="vector-pinnable-header vector-appearance-pinnable-header vector-pinnable-header-pinned" data-feature-name="appearance-pinned" data-pinnable-element-id="vector-appearance" data-pinned-container-id="vector-appearance-pinned-container" data-unpinned-container-id="vector-appearance-unpinned-container" > <div class="vector-pinnable-header-label">Appearance</div> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-appearance.pin">move to sidebar</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-appearance.unpin">hide</button> </div> </div> </div> </nav> </div> </div> <div id="bodyContent" class="vector-body" aria-labelledby="firstHeading" data-mw-ve-target-container> <div class="vector-body-before-content"> <div class="mw-indicators"> </div> <div id="siteSub" class="noprint">From Wikipedia, the free encyclopedia</div> </div> <div id="contentSub"><div id="mw-content-subtitle"></div></div> <div id="mw-content-text" class="mw-body-content"><div class="mw-content-ltr mw-parser-output" lang="en" dir="ltr"><div class="shortdescription nomobile noexcerpt noprint searchaux" style="display:none">Process scheduler in Linux</div> <style data-mw-deduplicate="TemplateStyles:r1236090951">.mw-parser-output .hatnote{font-style:italic}.mw-parser-output div.hatnote{padding-left:1.6em;margin-bottom:0.5em}.mw-parser-output .hatnote i{font-style:normal}.mw-parser-output .hatnote+link+.hatnote{margin-top:-0.5em}@media print{body.ns-0 .mw-parser-output .hatnote{display:none!important}}</style><div role="note" class="hatnote navigation-not-searchable">Not to be confused with <a href="/wiki/Brainfuck" title="Brainfuck">Brainfuck</a>.</div> <style data-mw-deduplicate="TemplateStyles:r1251242444">.mw-parser-output .ambox{border:1px solid #a2a9b1;border-left:10px solid #36c;background-color:#fbfbfb;box-sizing:border-box}.mw-parser-output .ambox+link+.ambox,.mw-parser-output .ambox+link+style+.ambox,.mw-parser-output .ambox+link+link+.ambox,.mw-parser-output .ambox+.mw-empty-elt+link+.ambox,.mw-parser-output .ambox+.mw-empty-elt+link+style+.ambox,.mw-parser-output .ambox+.mw-empty-elt+link+link+.ambox{margin-top:-1px}html body.mediawiki .mw-parser-output .ambox.mbox-small-left{margin:4px 1em 4px 0;overflow:hidden;width:238px;border-collapse:collapse;font-size:88%;line-height:1.25em}.mw-parser-output .ambox-speedy{border-left:10px solid #b32424;background-color:#fee7e6}.mw-parser-output .ambox-delete{border-left:10px solid #b32424}.mw-parser-output .ambox-content{border-left:10px solid #f28500}.mw-parser-output .ambox-style{border-left:10px solid #fc3}.mw-parser-output .ambox-move{border-left:10px solid #9932cc}.mw-parser-output .ambox-protection{border-left:10px solid #a2a9b1}.mw-parser-output .ambox .mbox-text{border:none;padding:0.25em 0.5em;width:100%}.mw-parser-output .ambox .mbox-image{border:none;padding:2px 0 2px 0.5em;text-align:center}.mw-parser-output .ambox .mbox-imageright{border:none;padding:2px 0.5em 2px 0;text-align:center}.mw-parser-output .ambox .mbox-empty-cell{border:none;padding:0;width:1px}.mw-parser-output .ambox .mbox-image-div{width:52px}@media(min-width:720px){.mw-parser-output .ambox{margin:0 10%}}@media print{body.ns-0 .mw-parser-output .ambox{display:none!important}}</style><table class="box-Update plainlinks metadata ambox ambox-content ambox-Update" role="presentation"><tbody><tr><td class="mbox-image"><div class="mbox-image-div"><span typeof="mw:File"><span><img alt="" src="//upload.wikimedia.org/wikipedia/commons/thumb/9/98/Ambox_current_red.svg/42px-Ambox_current_red.svg.png" decoding="async" width="42" height="34" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/9/98/Ambox_current_red.svg/63px-Ambox_current_red.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/9/98/Ambox_current_red.svg/84px-Ambox_current_red.svg.png 2x" data-file-width="360" data-file-height="290" /></span></span></div></td><td class="mbox-text"><div class="mbox-text-span">This article needs to be <b>updated</b>.<span class="hide-when-compact"> Relevant discussion may be found on the <a href="/wiki/Talk:Brain_Fuck_Scheduler#MuQSS" title="Talk:Brain Fuck Scheduler">talk page</a>. Please help update this article to reflect recent events or newly available information.</span> <span class="date-container"><i>(<span class="date">November 2016</span>)</i></span></div></td></tr></tbody></table> <style data-mw-deduplicate="TemplateStyles:r1257001546">.mw-parser-output .infobox-subbox{padding:0;border:none;margin:-3px;width:auto;min-width:100%;font-size:100%;clear:none;float:none;background-color:transparent}.mw-parser-output .infobox-3cols-child{margin:auto}.mw-parser-output .infobox .navbar{font-size:100%}@media screen{html.skin-theme-clientpref-night .mw-parser-output .infobox-full-data:not(.notheme)>div:not(.notheme)[style]{background:#1f1f23!important;color:#f8f9fa}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .infobox-full-data:not(.notheme) div:not(.notheme){background:#1f1f23!important;color:#f8f9fa}}@media(min-width:640px){body.skin--responsive .mw-parser-output .infobox-table{display:table!important}body.skin--responsive .mw-parser-output .infobox-table>caption{display:table-caption!important}body.skin--responsive .mw-parser-output .infobox-table>tbody{display:table-row-group}body.skin--responsive .mw-parser-output .infobox-table tr{display:table-row!important}body.skin--responsive .mw-parser-output .infobox-table th,body.skin--responsive .mw-parser-output .infobox-table td{padding-left:inherit;padding-right:inherit}}</style><table class="infobox vevent"><caption class="infobox-title summary">Brain Fuck Scheduler</caption><tbody><tr><th scope="row" class="infobox-label" style="white-space: nowrap;"><a href="/wiki/Programmer" title="Programmer">Developer(s)</a></th><td class="infobox-data"><a href="/wiki/Con_Kolivas" title="Con Kolivas">Con Kolivas</a></td></tr><tr style="display: none;"><td colspan="2" class="infobox-full-data"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1257001546"></td></tr><tr><th scope="row" class="infobox-label" style="white-space: nowrap;"><a href="/wiki/Software_release_life_cycle" title="Software release life cycle">Final release</a></th><td class="infobox-data"><div style="margin:0px;">0.512 / October 3, 2016<span class="noprint">; 8 years ago</span><span style="display:none"> (<span class="bday dtstart published updated">2016-10-03</span>)</span><sup id="cite_ref-1" class="reference"><a href="#cite_note-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup></div></td></tr><tr style="display:none"><td colspan="2"> </td></tr><tr><th scope="row" class="infobox-label" style="white-space: nowrap;">Written in</th><td class="infobox-data"><a href="/wiki/C_(programming_language)" title="C (programming language)">C</a></td></tr><tr><th scope="row" class="infobox-label" style="white-space: nowrap;"><a href="/wiki/Operating_system" title="Operating system">Operating system</a></th><td class="infobox-data"><a href="/wiki/Linux" title="Linux">Linux</a></td></tr><tr><th scope="row" class="infobox-label" style="white-space: nowrap;"><a href="/wiki/Software_license" title="Software license">License</a></th><td class="infobox-data"><a href="/wiki/GNU_GPL" class="mw-redirect" title="GNU GPL">GNU GPL</a></td></tr><tr><th scope="row" class="infobox-label" style="white-space: nowrap;">Website</th><td class="infobox-data"><span class="url"><a rel="nofollow" class="external text" href="http://kernel.kolivas.org/">kernel<wbr />.kolivas<wbr />.org</a></span></td></tr></tbody></table> <figure class="mw-default-size" typeof="mw:File/Thumb"><a href="/wiki/File:Simplified_Structure_of_the_Linux_Kernel.svg" class="mw-file-description"><img src="//upload.wikimedia.org/wikipedia/commons/thumb/6/65/Simplified_Structure_of_the_Linux_Kernel.svg/370px-Simplified_Structure_of_the_Linux_Kernel.svg.png" decoding="async" width="370" height="208" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/6/65/Simplified_Structure_of_the_Linux_Kernel.svg/555px-Simplified_Structure_of_the_Linux_Kernel.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/6/65/Simplified_Structure_of_the_Linux_Kernel.svg/740px-Simplified_Structure_of_the_Linux_Kernel.svg.png 2x" data-file-width="960" data-file-height="540" /></a><figcaption>The location of <a href="/wiki/Process_scheduler" class="mw-redirect" title="Process scheduler">process schedulers</a> in a simplified structure of the <a href="/wiki/Linux_kernel" title="Linux kernel">Linux kernel</a></figcaption></figure> <p>The <b>Brain Fuck Scheduler</b> (<b>BFS</b>) is a <a href="/wiki/Process_scheduler" class="mw-redirect" title="Process scheduler">process scheduler</a> designed for the <a href="/wiki/Linux_kernel" title="Linux kernel">Linux kernel</a> in August 2009 based on <a href="/wiki/Earliest_eligible_virtual_deadline_first_scheduling" title="Earliest eligible virtual deadline first scheduling">earliest eligible virtual deadline first scheduling</a> (EEVDF),<sup id="cite_ref-2" class="reference"><a href="#cite_note-2"><span class="cite-bracket">[</span>2<span class="cite-bracket">]</span></a></sup> as an alternative to the <a href="/wiki/Completely_Fair_Scheduler" title="Completely Fair Scheduler">Completely Fair Scheduler</a> (CFS) and the <a href="/wiki/O(1)_scheduler" title="O(1) scheduler">O(1) scheduler</a>.<sup id="cite_ref-Linux_Pro_Magazine_on_BFS_3-0" class="reference"><a href="#cite_note-Linux_Pro_Magazine_on_BFS-3"><span class="cite-bracket">[</span>3<span class="cite-bracket">]</span></a></sup> BFS was created by <a href="/wiki/Con_Kolivas" title="Con Kolivas">Con Kolivas</a>.<sup id="cite_ref-bfsfaq_4-0" class="reference"><a href="#cite_note-bfsfaq-4"><span class="cite-bracket">[</span>4<span class="cite-bracket">]</span></a></sup> </p><p>The objective of BFS, compared to other schedulers, is to provide a scheduler with a simpler <a href="/wiki/Algorithm" title="Algorithm">algorithm</a>, that does not require adjustment of <a href="/wiki/Heuristic" title="Heuristic">heuristics</a> or tuning <a href="/wiki/Parameter_(computer_programming)" title="Parameter (computer programming)">parameters</a> to tailor <a href="/wiki/Computer_performance" title="Computer performance">performance</a> to a specific type of <a href="/wiki/Computation" title="Computation">computational</a> workload. Kolivas asserted that these tunable parameters were difficult for the average user to understand, especially in terms of interactions of multiple parameters with each other, and claimed that the use of such tuning parameters could often result in improved performance in a specific targeted type of computation, at the cost of worse performance in the general case.<sup id="cite_ref-bfsfaq_4-1" class="reference"><a href="#cite_note-bfsfaq-4"><span class="cite-bracket">[</span>4<span class="cite-bracket">]</span></a></sup> BFS has been reported to improve responsiveness on Linux desktop computers with fewer than 16 <a href="/wiki/CPU_core" class="mw-redirect" title="CPU core">cores</a>.<sup id="cite_ref-shedulers_compared_5-0" class="reference"><a href="#cite_note-shedulers_compared-5"><span class="cite-bracket">[</span>5<span class="cite-bracket">]</span></a></sup> </p><p>Shortly following its introduction, the new scheduler made headlines within the Linux community, appearing on <i><a href="/wiki/Slashdot" title="Slashdot">Slashdot</a></i>, with reviews in <i><a href="/wiki/Linux_Magazine_(USA)" class="mw-redirect" title="Linux Magazine (USA)">Linux Magazine</a></i> and <i><a href="/wiki/Linux_Magazine" title="Linux Magazine">Linux Pro Magazine</a></i>.<sup id="cite_ref-Linux_Pro_Magazine_on_BFS_3-1" class="reference"><a href="#cite_note-Linux_Pro_Magazine_on_BFS-3"><span class="cite-bracket">[</span>3<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-6" class="reference"><a href="#cite_note-6"><span class="cite-bracket">[</span>6<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-7" class="reference"><a href="#cite_note-7"><span class="cite-bracket">[</span>7<span class="cite-bracket">]</span></a></sup> Although there have been varied reviews of improved performance and responsiveness, Con Kolivas did not intend for BFS to be integrated into the mainline kernel.<sup id="cite_ref-bfsfaq_4-2" class="reference"><a href="#cite_note-bfsfaq-4"><span class="cite-bracket">[</span>4<span class="cite-bracket">]</span></a></sup> </p> <meta property="mw:PageProp/toc" /> <div class="mw-heading mw-heading2"><h2 id="Theoretical_design_and_efficiency">Theoretical design and efficiency</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Brain_Fuck_Scheduler&action=edit&section=1" title="Edit section: Theoretical design and efficiency"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>In 2009, BFS was introduced and had originally used a <a href="/wiki/Doubly_linked_list" title="Doubly linked list">doubly linked list</a> data structure,<sup id="cite_ref-sched-bfs-001.patch_8-0" class="reference"><a href="#cite_note-sched-bfs-001.patch-8"><span class="cite-bracket">[</span>8<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-4.0-sched-bfs-462.patch_9-0" class="reference"><a href="#cite_note-4.0-sched-bfs-462.patch-9"><span class="cite-bracket">[</span>9<span class="cite-bracket">]</span></a></sup> but the data structure is treated like a <a href="/wiki/FIFO_(computing_and_electronics)" title="FIFO (computing and electronics)">queue</a>. Task insertion is <span class="nowrap">⁠<span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle O(1)}"> <semantics> <mrow class="MJX-TeXAtom-ORD"> <mstyle displaystyle="true" scriptlevel="0"> <mi>O</mi> <mo stretchy="false">(</mo> <mn>1</mn> <mo stretchy="false">)</mo> </mstyle> </mrow> <annotation encoding="application/x-tex">{\displaystyle O(1)}</annotation> </semantics> </math></span><img src="https://wikimedia.org/api/rest_v1/media/math/render/svg/e66384bc40452c5452f33563fe0e27e803b0cc21" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:4.745ex; height:2.843ex;" alt="{\displaystyle O(1)}"></span>⁠</span>.<sup id="cite_ref-4.0-sched-bfs-462.patch_9-1" class="reference"><a href="#cite_note-4.0-sched-bfs-462.patch-9"><span class="cite-bracket">[</span>9<span class="cite-bracket">]</span></a></sup><sup class="reference nowrap"><span title="Page / location: ln 119–120">: ln 119–120 </span></sup> Task search for next task to execute is <span class="nowrap">⁠<span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle O(n)}"> <semantics> <mrow class="MJX-TeXAtom-ORD"> <mstyle displaystyle="true" scriptlevel="0"> <mi>O</mi> <mo stretchy="false">(</mo> <mi>n</mi> <mo stretchy="false">)</mo> </mstyle> </mrow> <annotation encoding="application/x-tex">{\displaystyle O(n)}</annotation> </semantics> </math></span><img src="https://wikimedia.org/api/rest_v1/media/math/render/svg/34109fe397fdcff370079185bfdb65826cb5565a" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:4.977ex; height:2.843ex;" alt="{\displaystyle O(n)}"></span>⁠</span> worst case.<sup id="cite_ref-4.0-sched-bfs-462.patch_9-2" class="reference"><a href="#cite_note-4.0-sched-bfs-462.patch-9"><span class="cite-bracket">[</span>9<span class="cite-bracket">]</span></a></sup><sup class="reference nowrap"><span title="Page / location: ln 209">: ln 209 </span></sup> It uses a single global <a href="/wiki/Run_queue" title="Run queue">run queue</a> which all CPUs use. Tasks with higher scheduling priorities get executed first.<sup id="cite_ref-4.0-sched-bfs-462.patch_9-3" class="reference"><a href="#cite_note-4.0-sched-bfs-462.patch-9"><span class="cite-bracket">[</span>9<span class="cite-bracket">]</span></a></sup><sup class="reference nowrap"><span title="Page / location: ln 4146–4161">: ln 4146–4161 </span></sup> Tasks are ordered (or distributed) and chosen based on the virtual deadline formula in all policies except for the realtime and Isochronous priority classes. </p><p>The execution behavior is still a weighted variation of the <a href="/wiki/Round-robin_scheduling" title="Round-robin scheduling">Round-Robin Scheduler</a> especially when tasks have the same priority below the Isochronous policy.<sup id="cite_ref-4.0-sched-bfs-462.patch_9-4" class="reference"><a href="#cite_note-4.0-sched-bfs-462.patch-9"><span class="cite-bracket">[</span>9<span class="cite-bracket">]</span></a></sup><sup class="reference nowrap"><span title="Page / location: ln 1193–1195, 334–335">: ln 1193–1195, 334–335 </span></sup> The user tuneable round robin interval (<a href="/wiki/Time_slice" class="mw-redirect" title="Time slice">time slice</a>) is 6 milliseconds by default which was chosen as the minimal <a href="/wiki/Jitter" title="Jitter">jitter</a> just below detectable by humans.<sup id="cite_ref-4.0-sched-bfs-462.patch_9-5" class="reference"><a href="#cite_note-4.0-sched-bfs-462.patch-9"><span class="cite-bracket">[</span>9<span class="cite-bracket">]</span></a></sup><sup class="reference nowrap"><span title="Page / location: ln 306">: ln 306 </span></sup> Kolivas claimed that anything below the 6 ms was pointless and anything above 300 ms for the round robin timeslice is fruitless in terms of throughput.<sup id="cite_ref-4.0-sched-bfs-462.patch_9-6" class="reference"><a href="#cite_note-4.0-sched-bfs-462.patch-9"><span class="cite-bracket">[</span>9<span class="cite-bracket">]</span></a></sup><sup class="reference nowrap"><span title="Page / location: ln 314–320">: ln 314–320 </span></sup> This important tuneable can tailor the round robin scheduler as a trade off between throughput and latency.<sup id="cite_ref-4.0-sched-bfs-462.patch_9-7" class="reference"><a href="#cite_note-4.0-sched-bfs-462.patch-9"><span class="cite-bracket">[</span>9<span class="cite-bracket">]</span></a></sup><sup class="reference nowrap"><span title="Page / location: ln 229–320">: ln 229–320 </span></sup> All tasks get the same time slice with the exception of realtime FIFO which is assumed to have infinite time slice.<sup id="cite_ref-4.0-sched-bfs-462.patch_9-8" class="reference"><a href="#cite_note-4.0-sched-bfs-462.patch-9"><span class="cite-bracket">[</span>9<span class="cite-bracket">]</span></a></sup><sup class="reference nowrap"><span title="Page / location: ln 1646, 1212–1218, 4062, 3910">: ln 1646, 1212–1218, 4062, 3910 </span></sup> </p><p>Kolivas explained the reason why he choose to go with the doubly linked list mono-runqueue than the multi-runqueue (round robin<sup id="cite_ref-lwn-224865_10-0" class="reference"><a href="#cite_note-lwn-224865-10"><span class="cite-bracket">[</span>10<span class="cite-bracket">]</span></a></sup><sup class="reference nowrap"><span title="Page / location: par. 3">: par. 3 </span></sup>) priority array<sup id="cite_ref-11" class="reference"><a href="#cite_note-11"><span class="cite-bracket">[</span>11<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-lwn-224865_10-1" class="reference"><a href="#cite_note-lwn-224865-10"><span class="cite-bracket">[</span>10<span class="cite-bracket">]</span></a></sup> per CPU that was used in his RDSL scheduler was to put to ease fairness among the multiple CPU scenario and remove complexity that each runqueue in a multi-runqueue scenario had to maintain its own latencies and [task] fairness.<sup id="cite_ref-4.0-sched-bfs-462.patch_9-9" class="reference"><a href="#cite_note-4.0-sched-bfs-462.patch-9"><span class="cite-bracket">[</span>9<span class="cite-bracket">]</span></a></sup><sup class="reference nowrap"><span title="Page / location: ln 81–92">: ln 81–92 </span></sup> He claimed that deterministic latencies was guaranteed with BFS in his later iteration of MuQSS.<sup id="cite_ref-0001-MultiQueue-Skiplist-Scheduler-version-v0.173.patch_12-0" class="reference"><a href="#cite_note-0001-MultiQueue-Skiplist-Scheduler-version-v0.173.patch-12"><span class="cite-bracket">[</span>12<span class="cite-bracket">]</span></a></sup><sup class="reference nowrap"><span title="Page / location: ln 471–472">: ln 471–472 </span></sup> He also recognized possible lock contention problem (related to the altering, removal, creation of task node data)<sup id="cite_ref-0001-MultiQueue-Skiplist-Scheduler-version-v0.173.patch_12-1" class="reference"><a href="#cite_note-0001-MultiQueue-Skiplist-Scheduler-version-v0.173.patch-12"><span class="cite-bracket">[</span>12<span class="cite-bracket">]</span></a></sup><sup class="reference nowrap"><span title="Page / location: ln 126–144">: ln 126–144 </span></sup> with increasing CPUs and the overhead of <span class="nowrap">⁠<span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle O(\log n)}"> <semantics> <mrow class="MJX-TeXAtom-ORD"> <mstyle displaystyle="true" scriptlevel="0"> <mi>O</mi> <mo stretchy="false">(</mo> <mi>log</mi> <mo>⁡<!-- --></mo> <mi>n</mi> <mo stretchy="false">)</mo> </mstyle> </mrow> <annotation encoding="application/x-tex">{\displaystyle O(\log n)}</annotation> </semantics> </math></span><img src="https://wikimedia.org/api/rest_v1/media/math/render/svg/aae0f22048ba6b7c05dbae17b056bfa16e21807d" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:8.336ex; height:2.843ex;" alt="{\displaystyle O(\log n)}"></span>⁠</span> next task for execution lookup.<sup id="cite_ref-0001-MultiQueue-Skiplist-Scheduler-version-v0.173.patch_12-2" class="reference"><a href="#cite_note-0001-MultiQueue-Skiplist-Scheduler-version-v0.173.patch-12"><span class="cite-bracket">[</span>12<span class="cite-bracket">]</span></a></sup><sup class="reference nowrap"><span title="Page / location: ln 472–478">: ln 472–478 </span></sup> MuQSS tried to resolve those problems. </p><p>Kolivas later changed the design to a <a href="/wiki/Skip_list" title="Skip list">skip list</a> in the v0.480 release of BFS in 2016.<sup id="cite_ref-4.7-sched-bfs-480.patch_13-0" class="reference"><a href="#cite_note-4.7-sched-bfs-480.patch-13"><span class="cite-bracket">[</span>13<span class="cite-bracket">]</span></a></sup> This time this altered the efficiency of the scheduler. He noted <span class="nowrap">⁠<span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle O(\log n)}"> <semantics> <mrow class="MJX-TeXAtom-ORD"> <mstyle displaystyle="true" scriptlevel="0"> <mi>O</mi> <mo stretchy="false">(</mo> <mi>log</mi> <mo>⁡<!-- --></mo> <mi>n</mi> <mo stretchy="false">)</mo> </mstyle> </mrow> <annotation encoding="application/x-tex">{\displaystyle O(\log n)}</annotation> </semantics> </math></span><img src="https://wikimedia.org/api/rest_v1/media/math/render/svg/aae0f22048ba6b7c05dbae17b056bfa16e21807d" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:8.336ex; height:2.843ex;" alt="{\displaystyle O(\log n)}"></span>⁠</span> task insertion, <span class="nowrap">⁠<span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle O(1)}"> <semantics> <mrow class="MJX-TeXAtom-ORD"> <mstyle displaystyle="true" scriptlevel="0"> <mi>O</mi> <mo stretchy="false">(</mo> <mn>1</mn> <mo stretchy="false">)</mo> </mstyle> </mrow> <annotation encoding="application/x-tex">{\displaystyle O(1)}</annotation> </semantics> </math></span><img src="https://wikimedia.org/api/rest_v1/media/math/render/svg/e66384bc40452c5452f33563fe0e27e803b0cc21" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:4.745ex; height:2.843ex;" alt="{\displaystyle O(1)}"></span>⁠</span> task lookup; <span class="nowrap">⁠<span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle O(k)}"> <semantics> <mrow class="MJX-TeXAtom-ORD"> <mstyle displaystyle="true" scriptlevel="0"> <mi>O</mi> <mo stretchy="false">(</mo> <mi>k</mi> <mo stretchy="false">)</mo> </mstyle> </mrow> <annotation encoding="application/x-tex">{\displaystyle O(k)}</annotation> </semantics> </math></span><img src="https://wikimedia.org/api/rest_v1/media/math/render/svg/f5ec39041121b14e8c2b1a986c9b04547b223e3c" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:4.794ex; height:2.843ex;" alt="{\displaystyle O(k)}"></span>⁠</span>, with <span class="nowrap">⁠<span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle k\leq 16}"> <semantics> <mrow class="MJX-TeXAtom-ORD"> <mstyle displaystyle="true" scriptlevel="0"> <mi>k</mi> <mo>≤<!-- ≤ --></mo> <mn>16</mn> </mstyle> </mrow> <annotation encoding="application/x-tex">{\displaystyle k\leq 16}</annotation> </semantics> </math></span><img src="https://wikimedia.org/api/rest_v1/media/math/render/svg/011185aab6b89623166ae092397303d98b1c42b9" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.505ex; width:6.635ex; height:2.343ex;" alt="{\displaystyle k\leq 16}"></span>⁠</span>, for task removal.<sup id="cite_ref-4.7-sched-bfs-480.patch_13-1" class="reference"><a href="#cite_note-4.7-sched-bfs-480.patch-13"><span class="cite-bracket">[</span>13<span class="cite-bracket">]</span></a></sup><sup class="reference nowrap"><span title="Page / location: ln 4">: ln 4 </span></sup> </p> <div class="mw-heading mw-heading3"><h3 id="Virtual_deadline">Virtual deadline</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Brain_Fuck_Scheduler&action=edit&section=2" title="Edit section: Virtual deadline"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>The virtual deadline formula is a future deadline time that is the scaled round robin timeslice based on the nice level offset by the current time (in niffy units or nanosecond <a href="/wiki/Jiffies" class="mw-redirect" title="Jiffies">jiffies</a>, an internal kernel time counter).<sup id="cite_ref-4.0-sched-bfs-462.patch_9-10" class="reference"><a href="#cite_note-4.0-sched-bfs-462.patch-9"><span class="cite-bracket">[</span>9<span class="cite-bracket">]</span></a></sup><sup class="reference nowrap"><span title="Page / location: ln 4023, 4063">: ln 4023, 4063 </span></sup> The virtual deadline only suggests the order but does not guarantee that a task will run exactly on the future scheduled niffy.<sup id="cite_ref-4.0-sched-bfs-462.patch_9-11" class="reference"><a href="#cite_note-4.0-sched-bfs-462.patch-9"><span class="cite-bracket">[</span>9<span class="cite-bracket">]</span></a></sup><sup class="reference nowrap"><span title="Page / location: ln 161–163">: ln 161–163 </span></sup> </p><p>First a prio ratios lookup table is created.<sup id="cite_ref-4.0-sched-bfs-462.patch_9-12" class="reference"><a href="#cite_note-4.0-sched-bfs-462.patch-9"><span class="cite-bracket">[</span>9<span class="cite-bracket">]</span></a></sup><sup class="reference nowrap"><span title="Page / location: ln 8042–8044">: ln 8042–8044 </span></sup> It is based on a recursive sequence. It increases 10% each nice level.<sup id="cite_ref-4.0-sched-bfs-462.patch_9-13" class="reference"><a href="#cite_note-4.0-sched-bfs-462.patch-9"><span class="cite-bracket">[</span>9<span class="cite-bracket">]</span></a></sup><sup class="reference nowrap"><span title="Page / location: ln 161">: ln 161 </span></sup> It follows a parabolic pattern if graphed, and the niced tasks are distributed as a moving squared function from 0 to 39 (corresponding from highest to lowest nice priority) as the domain and 128 to 5089 as the range.<sup id="cite_ref-4.0-sched-bfs-462.patch_9-14" class="reference"><a href="#cite_note-4.0-sched-bfs-462.patch-9"><span class="cite-bracket">[</span>9<span class="cite-bracket">]</span></a></sup><sup class="reference nowrap"><span title="Page / location: ln 177–179, 120, 184–185">: ln 177–179, 120, 184–185 </span></sup> The moving part comes from the <style data-mw-deduplicate="TemplateStyles:r886049734">.mw-parser-output .monospaced{font-family:monospace,monospace}</style><span class="monospaced">t</span> variable in the virtual deadline formula that Kolivas hinted. </p> <style data-mw-deduplicate="TemplateStyles:r1195917819">.mw-parser-output .pre-borderless{border:none}</style><pre class="pre">g(0) = 128 g(i) = INT( g(i-1)*11/10 )</pre> <table class="wikitable mw-collapsible autocollapse"> <tbody><tr> <th>Index </th> <th>Numerator </th></tr> <tr> <td>0</td> <td>128 </td></tr> <tr> <td>1</td> <td>140 </td></tr> <tr> <td>2</td> <td>154 </td></tr> <tr> <td>3</td> <td>169 </td></tr> <tr> <td>4</td> <td>185 </td></tr> <tr> <td>5</td> <td>203 </td></tr> <tr> <td>6</td> <td>223 </td></tr> <tr> <td>7</td> <td>245 </td></tr> <tr> <td>8</td> <td>269 </td></tr> <tr> <td>9</td> <td>295 </td></tr> <tr> <td>10</td> <td>324 </td></tr> <tr> <td>11</td> <td>356 </td></tr> <tr> <td>12</td> <td>391 </td></tr> <tr> <td>13</td> <td>430 </td></tr> <tr> <td>14</td> <td>473 </td></tr> <tr> <td>15</td> <td>520 </td></tr> <tr> <td>16</td> <td>572 </td></tr> <tr> <td>17</td> <td>629 </td></tr> <tr> <td>18</td> <td>691 </td></tr> <tr> <td>19</td> <td>760 </td></tr> <tr> <td>20</td> <td>836 </td></tr> <tr> <td>21</td> <td>919 </td></tr> <tr> <td>22</td> <td>1010 </td></tr> <tr> <td>23</td> <td>1111 </td></tr> <tr> <td>24</td> <td>1222 </td></tr> <tr> <td>25</td> <td>1344 </td></tr> <tr> <td>26</td> <td>1478 </td></tr> <tr> <td>27</td> <td>1625 </td></tr> <tr> <td>28</td> <td>1787 </td></tr> <tr> <td>29</td> <td>1965 </td></tr> <tr> <td>30</td> <td>2161 </td></tr> <tr> <td>31</td> <td>2377 </td></tr> <tr> <td>32</td> <td>2614 </td></tr> <tr> <td>33</td> <td>2875 </td></tr> <tr> <td>34</td> <td>3162 </td></tr> <tr> <td>35</td> <td>3478 </td></tr> <tr> <td>36</td> <td>3825 </td></tr> <tr> <td>37</td> <td>4207 </td></tr> <tr> <td>38</td> <td>4627 </td></tr> <tr> <td>39</td> <td>5089 </td></tr></tbody></table> <p>The task's <a href="/wiki/Nice_(Unix)" title="Nice (Unix)">nice</a>-to-index mapping function <link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r886049734"><span class="monospaced">f(n)</span> is mapped from nice −20...19 to index 0...39 to be used as the input to the prio ratio lookup table. This mapping function is the <code class="mw-highlight mw-highlight-lang-text mw-content-ltr" style="" dir="ltr">TASK_USER_PRIO()</code> macro in <a href="/w/index.php?title=Sched.h&action=edit&redlink=1" class="new" title="Sched.h (page does not exist)">sched.h</a> in the kernel header. The internal kernel implementation slightly differs with range between 100 and 140 static priority but users will see it as −20...19 nice. </p> <table class="wikitable mw-collapsible autocollapse"> <tbody><tr> <th>Nice </th> <th>Index </th></tr> <tr> <td>−20</td> <td>0 </td></tr> <tr> <td>−19</td> <td>1 </td></tr> <tr> <td>−18</td> <td>2 </td></tr> <tr> <td>−17</td> <td>3 </td></tr> <tr> <td>−16</td> <td>4 </td></tr> <tr> <td>−15</td> <td>5 </td></tr> <tr> <td>−14</td> <td>6 </td></tr> <tr> <td>−13</td> <td>7 </td></tr> <tr> <td>−12</td> <td>8 </td></tr> <tr> <td>−11</td> <td>9 </td></tr> <tr> <td>−10</td> <td>10 </td></tr> <tr> <td>−9</td> <td>11 </td></tr> <tr> <td>−8</td> <td>12 </td></tr> <tr> <td>−7</td> <td>13 </td></tr> <tr> <td>−6</td> <td>14 </td></tr> <tr> <td>−5</td> <td>15 </td></tr> <tr> <td>−4</td> <td>16 </td></tr> <tr> <td>−3</td> <td>17 </td></tr> <tr> <td>−2</td> <td>18 </td></tr> <tr> <td>−1</td> <td>19 </td></tr> <tr> <td>0</td> <td>20 </td></tr> <tr> <td>1</td> <td>21 </td></tr> <tr> <td>2</td> <td>22 </td></tr> <tr> <td>3</td> <td>23 </td></tr> <tr> <td>4</td> <td>24 </td></tr> <tr> <td>5</td> <td>25 </td></tr> <tr> <td>6</td> <td>26 </td></tr> <tr> <td>7</td> <td>27 </td></tr> <tr> <td>8</td> <td>28 </td></tr> <tr> <td>9</td> <td>29 </td></tr> <tr> <td>10</td> <td>30 </td></tr> <tr> <td>11</td> <td>31 </td></tr> <tr> <td>12</td> <td>32 </td></tr> <tr> <td>13</td> <td>33 </td></tr> <tr> <td>14</td> <td>34 </td></tr> <tr> <td>15</td> <td>35 </td></tr> <tr> <td>16</td> <td>36 </td></tr> <tr> <td>17</td> <td>37 </td></tr> <tr> <td>18</td> <td>38 </td></tr> <tr> <td>19</td> <td>39 </td></tr></tbody></table> <p>The virtual deadline is based on this exact formula:<sup id="cite_ref-4.0-sched-bfs-462.patch_9-15" class="reference"><a href="#cite_note-4.0-sched-bfs-462.patch-9"><span class="cite-bracket">[</span>9<span class="cite-bracket">]</span></a></sup><sup class="reference nowrap"><span title="Page / location: ln 4063, 4036, 4033, 1180">: ln 4063, 4036, 4033, 1180 </span></sup> </p> <link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1195917819"><pre class="pre">T = 6 N = 1<<20 d(n,t) = t + g(f(n)) * T * (N/128)</pre> <p>Alternatively, </p> <style data-mw-deduplicate="TemplateStyles:r996643573">.mw-parser-output .block-indent{padding-left:3em;padding-right:0;overflow:hidden}</style><div class="block-indent"><span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle {\mathtt {d(n,t)={\frac {g(f(n))}{128}}*T*N+t}}}"> <semantics> <mrow class="MJX-TeXAtom-ORD"> <mstyle displaystyle="true" scriptlevel="0"> <mrow class="MJX-TeXAtom-ORD"> <mrow class="MJX-TeXAtom-ORD"> <mi mathvariant="monospace">d</mi> <mo mathvariant="monospace" stretchy="false">(</mo> <mi mathvariant="monospace">n</mi> <mo mathvariant="monospace">,</mo> <mi mathvariant="monospace">t</mi> <mo mathvariant="monospace" stretchy="false">)</mo> <mo mathvariant="monospace">=</mo> <mrow class="MJX-TeXAtom-ORD"> <mfrac> <mrow> <mi mathvariant="monospace">g</mi> <mo mathvariant="monospace" stretchy="false">(</mo> <mi mathvariant="monospace">f</mi> <mo mathvariant="monospace" stretchy="false">(</mo> <mi mathvariant="monospace">n</mi> <mo mathvariant="monospace" stretchy="false">)</mo> <mo mathvariant="monospace" stretchy="false">)</mo> </mrow> <mn mathvariant="monospace">128</mn> </mfrac> </mrow> <mo mathvariant="monospace">∗<!-- ∗ --></mo> <mi mathvariant="monospace">T</mi> <mo mathvariant="monospace">∗<!-- ∗ --></mo> <mi mathvariant="monospace">N</mi> <mo mathvariant="monospace">+</mo> <mi mathvariant="monospace">t</mi> </mrow> </mrow> </mstyle> </mrow> <annotation encoding="application/x-tex">{\displaystyle {\mathtt {d(n,t)={\frac {g(f(n))}{128}}*T*N+t}}}</annotation> </semantics> </math></span><img src="https://wikimedia.org/api/rest_v1/media/math/render/svg/849cdab451f23d87b9d27cef2364103fc4ad1117" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -1.838ex; width:29.905ex; height:5.509ex;" alt="{\displaystyle {\mathtt {d(n,t)={\frac {g(f(n))}{128}}*T*N+t}}}"></span><sup id="cite_ref-14" class="reference"><a href="#cite_note-14"><span class="cite-bracket">[</span>14<span class="cite-bracket">]</span></a></sup></div> <p>where <link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r886049734"><span class="monospaced">d(n,t)</span> is the virtual deadline in u64 integer nanoseconds as a function of nice <link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r886049734"><span class="monospaced">n</span> and <link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r886049734"><span class="monospaced">t</span> which is the current time in niffies, <link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r886049734"><span class="monospaced">g(i)</span> is the prio ratio table lookup as a function of index, <link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r886049734"><span class="monospaced">f(n)</span> is the task's nice-to-index mapping function, <link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r886049734"><span class="monospaced">T</span> is the round robin timeslice in milliseconds, <link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r886049734"><span class="monospaced">N</span> is a constant of 1 millisecond in terms of nanoseconds as a latency reducing approximation of the conversion factor of <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle \mathrm {\frac {10^{9}ns}{10^{3}ms}} }"> <semantics> <mrow class="MJX-TeXAtom-ORD"> <mstyle displaystyle="true" scriptlevel="0"> <mrow class="MJX-TeXAtom-ORD"> <mfrac> <mrow> <msup> <mn>10</mn> <mrow class="MJX-TeXAtom-ORD"> <mn>9</mn> </mrow> </msup> <mi mathvariant="normal">n</mi> <mi mathvariant="normal">s</mi> </mrow> <mrow> <msup> <mn>10</mn> <mrow class="MJX-TeXAtom-ORD"> <mn>3</mn> </mrow> </msup> <mi mathvariant="normal">m</mi> <mi mathvariant="normal">s</mi> </mrow> </mfrac> </mrow> </mstyle> </mrow> <annotation encoding="application/x-tex">{\displaystyle \mathrm {\frac {10^{9}ns}{10^{3}ms}} }</annotation> </semantics> </math></span><img src="https://wikimedia.org/api/rest_v1/media/math/render/svg/862b507701c1b99000a61a1b4ab3a1cf33c8b9c8" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -2.338ex; width:7.067ex; height:6.176ex;" alt="{\displaystyle \mathrm {\frac {10^{9}ns}{10^{3}ms}} }"></span> but Kolivas uses a base 2 constant <link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r886049734"><span class="monospaced">N</span> with approximately that scale.<sup id="cite_ref-4.0-sched-bfs-462.patch_9-16" class="reference"><a href="#cite_note-4.0-sched-bfs-462.patch-9"><span class="cite-bracket">[</span>9<span class="cite-bracket">]</span></a></sup><sup class="reference nowrap"><span title="Page / location: ln 1173–1174">: ln 1173–1174 </span></sup> Smaller values of <link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r886049734"><span class="monospaced">d</span> mean that the virtual deadline is earlier corresponding to negative nice values. Larger values of <link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r886049734"><span class="monospaced">d</span> indicate the virtual deadline is pushed back later corresponding to positive nice values. It uses this formula whenever the timeslice expires.<sup id="cite_ref-4.0-sched-bfs-462.patch_9-17" class="reference"><a href="#cite_note-4.0-sched-bfs-462.patch-9"><span class="cite-bracket">[</span>9<span class="cite-bracket">]</span></a></sup><sup class="reference nowrap"><span title="Page / location: ln 5087">: ln 5087 </span></sup> </p><p>128 in base 2 corresponds to 100 in base 10 and possibly a "pseudo 100".<sup id="cite_ref-4.0-sched-bfs-462.patch_9-18" class="reference"><a href="#cite_note-4.0-sched-bfs-462.patch-9"><span class="cite-bracket">[</span>9<span class="cite-bracket">]</span></a></sup><sup class="reference nowrap"><span title="Page / location: ln 3415">: ln 3415 </span></sup> 115 in base 2 corresponds to 90 in base 10. Kolivas uses 128 for "fast <a href="/wiki/Bitwise_operation#Bit_shifts" title="Bitwise operation">shifts</a>",<sup id="cite_ref-4.0-sched-bfs-462.patch_9-19" class="reference"><a href="#cite_note-4.0-sched-bfs-462.patch-9"><span class="cite-bracket">[</span>9<span class="cite-bracket">]</span></a></sup><sup class="reference nowrap"><span title="Page / location: ln 3846, 1648, 3525">: ln 3846, 1648, 3525 </span></sup> as in division is right shift base 2. </p> <table class="wikitable mw-collapsible autocollapse"> <tbody><tr> <th>Nice </th> <th>Virtual deadline in timeslices relative to <link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r886049734"><span class="monospaced">t</span> </th> <th>Virtual deadline in exact seconds relative to <link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r886049734"><span class="monospaced">t</span> </th></tr> <tr> <td>−20</td> <td>1.0</td> <td>0.006 </td></tr> <tr> <td>−19</td> <td>1.09</td> <td>0.006562 </td></tr> <tr> <td>−18</td> <td>1.2</td> <td>0.007219 </td></tr> <tr> <td>−17</td> <td>1.3</td> <td>0.007922 </td></tr> <tr> <td>−16</td> <td>1.4</td> <td>0.008672 </td></tr> <tr> <td>−15</td> <td>1.5</td> <td>0.009516 </td></tr> <tr> <td>−14</td> <td>1.7</td> <td>0.010453 </td></tr> <tr> <td>−13</td> <td>1.9</td> <td>0.011484 </td></tr> <tr> <td>−12</td> <td>2.1</td> <td>0.012609 </td></tr> <tr> <td>−11</td> <td>2.3</td> <td>0.013828 </td></tr> <tr> <td>−10</td> <td>2.5</td> <td>0.015187 </td></tr> <tr> <td>−9</td> <td>2.7</td> <td>0.016688 </td></tr> <tr> <td>−8</td> <td>3.0</td> <td>0.018328 </td></tr> <tr> <td>−7</td> <td>3.3</td> <td>0.020156 </td></tr> <tr> <td>−6</td> <td>3.6</td> <td>0.022172 </td></tr> <tr> <td>−5</td> <td>4.0</td> <td>0.024375 </td></tr> <tr> <td>−4</td> <td>4.4</td> <td>0.026812 </td></tr> <tr> <td>−3</td> <td>4.9</td> <td>0.029484 </td></tr> <tr> <td>−2</td> <td>5.3</td> <td>0.032391 </td></tr> <tr> <td>−1</td> <td>5.9</td> <td>0.035625 </td></tr> <tr> <td>0</td> <td>6.5</td> <td>0.039188 </td></tr> <tr> <td>1</td> <td>7.1</td> <td>0.043078 </td></tr> <tr> <td>2</td> <td>7.8</td> <td>0.047344 </td></tr> <tr> <td>3</td> <td>8.6</td> <td>0.052078 </td></tr> <tr> <td>4</td> <td>9.5</td> <td>0.057281 </td></tr> <tr> <td>5</td> <td>10.5</td> <td>0.063000 </td></tr> <tr> <td>6</td> <td>11.5</td> <td>0.069281 </td></tr> <tr> <td>7</td> <td>12.6</td> <td>0.076172 </td></tr> <tr> <td>8</td> <td>13.9</td> <td>0.083766 </td></tr> <tr> <td>9</td> <td>15.3</td> <td>0.092109 </td></tr> <tr> <td>10</td> <td>16.8</td> <td>0.101297 </td></tr> <tr> <td>11</td> <td>18.5</td> <td>0.111422 </td></tr> <tr> <td>12</td> <td>20.4</td> <td>0.122531 </td></tr> <tr> <td>13</td> <td>22.4</td> <td>0.134766 </td></tr> <tr> <td>14</td> <td>24.7</td> <td>0.148219 </td></tr> <tr> <td>15</td> <td>27.1</td> <td>0.163031 </td></tr> <tr> <td>16</td> <td>29.8</td> <td>0.179297 </td></tr> <tr> <td>17</td> <td>32.8</td> <td>0.197203 </td></tr> <tr> <td>18</td> <td>36.1</td> <td>0.216891 </td></tr> <tr> <td>19</td> <td>39.7</td> <td>0.238547 </td></tr></tbody></table> <div class="mw-heading mw-heading3"><h3 id="Scheduling_policies">Scheduling policies</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Brain_Fuck_Scheduler&action=edit&section=3" title="Edit section: Scheduling policies"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>BFS uses scheduling policies to determine how much of the CPU tasks may use. BFS uses 4 scheduling tiers (called scheduling policies or scheduling classes) ordered from best to worst which determines how tasks are selected<sup id="cite_ref-4.0-sched-bfs-462.patch_9-20" class="reference"><a href="#cite_note-4.0-sched-bfs-462.patch-9"><span class="cite-bracket">[</span>9<span class="cite-bracket">]</span></a></sup><sup class="reference nowrap"><span title="Page / location: ln 4146–4161">: ln 4146–4161 </span></sup> with the ones on top being executed first. </p><p>Each task has a special value called a prio. In the v0.462 edition (used in the -ck 4.0 kernel patchset), there are total of 103 "priority queues" (aka prio) or allowed values that it can take. No actual special data structure was used as the priority queue but only the doubly linked list runqueue itself. The lower prio value means it is more important and gets executed first. </p> <div class="mw-heading mw-heading4"><h4 id="Realtime_policy">Realtime policy</h4><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Brain_Fuck_Scheduler&action=edit&section=4" title="Edit section: Realtime policy"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>The realtime policy was designed for <a href="/wiki/Real-time_computing" title="Real-time computing">realtime</a> tasks. This policy implies that the running tasks cannot be interrupted (i.e. preempted) by the lower prio-ed task or lower priority policy tiers. Priority classes considered under the realtime policy by the scheduler are those marked SCHED_RR and SCHED_FIFO.<sup id="cite_ref-4.0-sched-bfs-462.patch_9-21" class="reference"><a href="#cite_note-4.0-sched-bfs-462.patch-9"><span class="cite-bracket">[</span>9<span class="cite-bracket">]</span></a></sup><sup class="reference nowrap"><span title="Page / location: ln 351, 1150">: ln 351, 1150 </span></sup> The scheduler treats realtime round robin (SCHED_RR) and realtime FIFO (SCHED_FIFO) differently.<sup id="cite_ref-4.0-sched-bfs-462.patch_9-22" class="reference"><a href="#cite_note-4.0-sched-bfs-462.patch-9"><span class="cite-bracket">[</span>9<span class="cite-bracket">]</span></a></sup><sup class="reference nowrap"><span title="Page / location: ln 3881–3934">: ln 3881–3934 </span></sup> </p><p>The design laid out first 100 static priority queues.<sup id="cite_ref-4.0-sched-bfs-462.patch_9-23" class="reference"><a href="#cite_note-4.0-sched-bfs-462.patch-9"><span class="cite-bracket">[</span>9<span class="cite-bracket">]</span></a></sup><sup class="reference nowrap"><span title="Page / location: ln 189">: ln 189 </span></sup> </p><p>The task that will get chosen for execution is based on task availability of the lowest value of prio of the 100 queues and FIFO scheduling.<sup id="cite_ref-4.0-sched-bfs-462.patch_9-24" class="reference"><a href="#cite_note-4.0-sched-bfs-462.patch-9"><span class="cite-bracket">[</span>9<span class="cite-bracket">]</span></a></sup><sup class="reference nowrap"><span title="Page / location: ln 4146–4161">: ln 4146–4161 </span></sup> </p><p>On <a href="/wiki/Fork_(system_call)" title="Fork (system call)">forks</a>, the process priority will be demoted to normal policy.<sup id="cite_ref-4.0-sched-bfs-462.patch_9-25" class="reference"><a href="#cite_note-4.0-sched-bfs-462.patch-9"><span class="cite-bracket">[</span>9<span class="cite-bracket">]</span></a></sup><sup class="reference nowrap"><span title="Page / location: ln 2708">: ln 2708 </span></sup> </p><p>On unprivileged use (i.e. non-root user) of sched_setscheduler called with a request for realtime policy class, the scheduler will demote the task to Isochronous policy.<sup id="cite_ref-4.0-sched-bfs-462.patch_9-26" class="reference"><a href="#cite_note-4.0-sched-bfs-462.patch-9"><span class="cite-bracket">[</span>9<span class="cite-bracket">]</span></a></sup><sup class="reference nowrap"><span title="Page / location: ln 350–359, 5023–5025">: ln 350–359, 5023–5025 </span></sup> </p> <div class="mw-heading mw-heading4"><h4 id="Isochronous_policy">Isochronous policy</h4><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Brain_Fuck_Scheduler&action=edit&section=5" title="Edit section: Isochronous policy"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>The Isochronous policy was designed for near realtime performance for non-<a href="/wiki/Superuser" title="Superuser">root</a> users.<sup id="cite_ref-4.0-sched-bfs-462.patch_9-27" class="reference"><a href="#cite_note-4.0-sched-bfs-462.patch-9"><span class="cite-bracket">[</span>9<span class="cite-bracket">]</span></a></sup><sup class="reference nowrap"><span title="Page / location: ln 325">: ln 325 </span></sup> </p><p>The design laid out 1 priority queue that by default ran as pseudo-realtime tasks, but can be tuned as a degree of realtime.<sup id="cite_ref-4.0-sched-bfs-462.patch_9-28" class="reference"><a href="#cite_note-4.0-sched-bfs-462.patch-9"><span class="cite-bracket">[</span>9<span class="cite-bracket">]</span></a></sup><sup class="reference nowrap"><span title="Page / location: ln 1201, 346–348">: ln 1201, 346–348 </span></sup> </p><p>The behavior of the policy can allow a task can be demoted to normal policy<sup id="cite_ref-4.0-sched-bfs-462.patch_9-29" class="reference"><a href="#cite_note-4.0-sched-bfs-462.patch-9"><span class="cite-bracket">[</span>9<span class="cite-bracket">]</span></a></sup><sup class="reference nowrap"><span title="Page / location: ln 336">: ln 336 </span></sup> when it exceeds a tuneable resource handling percentage (70% by default<sup id="cite_ref-4.0-sched-bfs-462.patch_9-30" class="reference"><a href="#cite_note-4.0-sched-bfs-462.patch-9"><span class="cite-bracket">[</span>9<span class="cite-bracket">]</span></a></sup><sup class="reference nowrap"><span title="Page / location: ln 343, 432">: ln 343, 432 </span></sup>) of 5 seconds scaled to the number of online CPUs and the timer resolution plus 1 tick.<sup id="cite_ref-4.0-sched-bfs-462.patch_9-31" class="reference"><a href="#cite_note-4.0-sched-bfs-462.patch-9"><span class="cite-bracket">[</span>9<span class="cite-bracket">]</span></a></sup><sup class="reference nowrap"><span title="Page / location: ln 343, 3844–3859, 1167, 338">: ln 343, 3844–3859, 1167, 338 </span></sup><sup id="cite_ref-0001-MultiQueue-Skiplist-Scheduler-version-v0.173.patch_12-3" class="reference"><a href="#cite_note-0001-MultiQueue-Skiplist-Scheduler-version-v0.173.patch-12"><span class="cite-bracket">[</span>12<span class="cite-bracket">]</span></a></sup><sup class="reference nowrap"><span title="Page / location: ln 1678, 4770–4783, 734">: ln 1678, 4770–4783, 734 </span></sup> The formula was altered in MuQSS due to the multi-runqueue design. The exact formulas are: </p> <link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r996643573"><div class="block-indent"><span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle {\mathtt {T_{BFS}=((5*F*n)+1)*R}}}"> <semantics> <mrow class="MJX-TeXAtom-ORD"> <mstyle displaystyle="true" scriptlevel="0"> <mrow class="MJX-TeXAtom-ORD"> <mrow class="MJX-TeXAtom-ORD"> <msub> <mi mathvariant="monospace">T</mi> <mrow class="MJX-TeXAtom-ORD"> <mi mathvariant="monospace">B</mi> <mi mathvariant="monospace">F</mi> <mi mathvariant="monospace">S</mi> </mrow> </msub> <mo mathvariant="monospace">=</mo> <mo mathvariant="monospace" stretchy="false">(</mo> <mo mathvariant="monospace" stretchy="false">(</mo> <mn mathvariant="monospace">5</mn> <mo mathvariant="monospace">∗<!-- ∗ --></mo> <mi mathvariant="monospace">F</mi> <mo mathvariant="monospace">∗<!-- ∗ --></mo> <mi mathvariant="monospace">n</mi> <mo mathvariant="monospace" stretchy="false">)</mo> <mo mathvariant="monospace">+</mo> <mn mathvariant="monospace">1</mn> <mo mathvariant="monospace" stretchy="false">)</mo> <mo mathvariant="monospace">∗<!-- ∗ --></mo> <mi mathvariant="monospace">R</mi> </mrow> </mrow> </mstyle> </mrow> <annotation encoding="application/x-tex">{\displaystyle {\mathtt {T_{BFS}=((5*F*n)+1)*R}}}</annotation> </semantics> </math></span><img src="https://wikimedia.org/api/rest_v1/media/math/render/svg/cd107724f01eecab4141f1fe77947eea661b0707" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.671ex; width:26.374ex; height:2.509ex;" alt="{\displaystyle {\mathtt {T_{BFS}=((5*F*n)+1)*R}}}"></span></div> <link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r996643573"><div class="block-indent"><span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle {\mathtt {T_{MuQSS}=(5*F)*R}}}"> <semantics> <mrow class="MJX-TeXAtom-ORD"> <mstyle displaystyle="true" scriptlevel="0"> <mrow class="MJX-TeXAtom-ORD"> <mrow class="MJX-TeXAtom-ORD"> <msub> <mi mathvariant="monospace">T</mi> <mrow class="MJX-TeXAtom-ORD"> <mi mathvariant="monospace">M</mi> <mi mathvariant="monospace">u</mi> <mi mathvariant="monospace">Q</mi> <mi mathvariant="monospace">S</mi> <mi mathvariant="monospace">S</mi> </mrow> </msub> <mo mathvariant="monospace">=</mo> <mo mathvariant="monospace" stretchy="false">(</mo> <mn mathvariant="monospace">5</mn> <mo mathvariant="monospace">∗<!-- ∗ --></mo> <mi mathvariant="monospace">F</mi> <mo mathvariant="monospace" stretchy="false">)</mo> <mo mathvariant="monospace">∗<!-- ∗ --></mo> <mi mathvariant="monospace">R</mi> </mrow> </mrow> </mstyle> </mrow> <annotation encoding="application/x-tex">{\displaystyle {\mathtt {T_{MuQSS}=(5*F)*R}}}</annotation> </semantics> </math></span><img src="https://wikimedia.org/api/rest_v1/media/math/render/svg/26395132a26777bd78d45ae0366e38eace9b7738" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:18.771ex; height:2.676ex;" alt="{\displaystyle {\mathtt {T_{MuQSS}=(5*F)*R}}}"></span></div> <p>where <link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r886049734"><span class="monospaced">T</span> is the total number of isochronous ticks, <link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r886049734"><span class="monospaced">F</span> is the timer frequency, <link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r886049734"><span class="monospaced">n</span> is the number of online CPUs, <link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r886049734"><span class="monospaced">R</span> is the tuneable resource handling percentage not in decimal but as a whole number. The timer frequency is set to 250 by default and editable in the kernel, but usually tuned to 100 Hz for servers and 1000 Hz for interactive desktops. 250 is the balanced value. Setting <link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r886049734"><span class="monospaced">R</span> to 100 made tasks behave as realtime and 0 made it not pseudo-realtime and anything in the middle was pseudo-realtime.<sup id="cite_ref-4.0-sched-bfs-462.patch_9-32" class="reference"><a href="#cite_note-4.0-sched-bfs-462.patch-9"><span class="cite-bracket">[</span>9<span class="cite-bracket">]</span></a></sup><sup class="reference nowrap"><span title="Page / location: ln 346–348">: ln 346–348 </span></sup> </p><p>The task that had an earliest virtual deadline was chosen for execution, but when multiple Isochronous tasks are in existence, they schedule as round robin allowing tasks to run the tuneable round robin value (with 6 ms as the default) one after another in a fair equal chance without considering the nice level.<sup id="cite_ref-4.0-sched-bfs-462.patch_9-33" class="reference"><a href="#cite_note-4.0-sched-bfs-462.patch-9"><span class="cite-bracket">[</span>9<span class="cite-bracket">]</span></a></sup><sup class="reference nowrap"><span title="Page / location: ln 334">: ln 334 </span></sup> </p><p>This behavior of the Isochronous policy is unique to only BFS and MuQSS and may not be implemented in other CPU schedulers.<sup id="cite_ref-4.0-sched-bfs-462.patch_9-34" class="reference"><a href="#cite_note-4.0-sched-bfs-462.patch-9"><span class="cite-bracket">[</span>9<span class="cite-bracket">]</span></a></sup><sup class="reference nowrap"><span title="Page / location: ln 324, 8484–8485">: ln 324, 8484–8485 </span></sup><sup id="cite_ref-0001-MultiQueue-Skiplist-Scheduler-version-v0.173.patch_12-4" class="reference"><a href="#cite_note-0001-MultiQueue-Skiplist-Scheduler-version-v0.173.patch-12"><span class="cite-bracket">[</span>12<span class="cite-bracket">]</span></a></sup><sup class="reference nowrap"><span title="Page / location: ln 1287–1288">: ln 1287–1288 </span></sup> </p> <div class="mw-heading mw-heading4"><h4 id="Normal_policy">Normal policy</h4><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Brain_Fuck_Scheduler&action=edit&section=6" title="Edit section: Normal policy"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>The normal policy was designed for regular use and is the default policy. Newly created tasks are typically marked normal.<sup id="cite_ref-4.0-sched-bfs-462.patch_9-35" class="reference"><a href="#cite_note-4.0-sched-bfs-462.patch-9"><span class="cite-bracket">[</span>9<span class="cite-bracket">]</span></a></sup><sup class="reference nowrap"><span title="Page / location: ln 502">: ln 502 </span></sup> </p><p>The design laid out one priority queue and tasks are chosen to be executed first based on earliest virtual deadline. </p> <div class="mw-heading mw-heading4"><h4 id="Idle_priority_policy">Idle priority policy</h4><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Brain_Fuck_Scheduler&action=edit&section=7" title="Edit section: Idle priority policy"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>The idle priority was designed for background processes such as <a href="/wiki/Distributed_program" class="mw-redirect" title="Distributed program">distributed programs</a> and <a href="/wiki/Transcoders" class="mw-redirect" title="Transcoders">transcoders</a> so that foreground processes or those above this scheduling policy can run uninterrupted.<sup id="cite_ref-4.0-sched-bfs-462.patch_9-36" class="reference"><a href="#cite_note-4.0-sched-bfs-462.patch-9"><span class="cite-bracket">[</span>9<span class="cite-bracket">]</span></a></sup><sup class="reference nowrap"><span title="Page / location: ln 363–368">: ln 363–368 </span></sup> </p><p>The design laid out 1 priority queue and tasks can be <a href="/wiki/Aging_(scheduling)" title="Aging (scheduling)">promoted</a> to normal policy automatically to prevent <a href="/wiki/Starvation_(computer_science)" title="Starvation (computer science)">indefinite resource hold</a>.<sup id="cite_ref-4.0-sched-bfs-462.patch_9-37" class="reference"><a href="#cite_note-4.0-sched-bfs-462.patch-9"><span class="cite-bracket">[</span>9<span class="cite-bracket">]</span></a></sup><sup class="reference nowrap"><span title="Page / location: ln 368">: ln 368 </span></sup> </p><p>The next executed task with Idle priority with others residing in the same priority policy is selected by the earliest virtual deadline.<sup id="cite_ref-4.0-sched-bfs-462.patch_9-38" class="reference"><a href="#cite_note-4.0-sched-bfs-462.patch-9"><span class="cite-bracket">[</span>9<span class="cite-bracket">]</span></a></sup><sup class="reference nowrap"><span title="Page / location: ln 4160–4161">: ln 4160–4161 </span></sup> </p> <div class="mw-heading mw-heading3"><h3 id="Preemption">Preemption</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Brain_Fuck_Scheduler&action=edit&section=8" title="Edit section: Preemption"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p><a href="/wiki/Preemption_(computing)" title="Preemption (computing)">Preemption</a> can occur when a newly ready task with a higher priority policy (i.e. higher prio) has an earlier virtual deadline than the currently running task - which will be descheduled and put at the back of the queue.<sup id="cite_ref-4.0-sched-bfs-462.patch_9-39" class="reference"><a href="#cite_note-4.0-sched-bfs-462.patch-9"><span class="cite-bracket">[</span>9<span class="cite-bracket">]</span></a></sup><sup class="reference nowrap"><span title="Page / location: ln 169–175">: ln 169–175 </span></sup> Descheduled means that its virtual deadline is updated.<sup id="cite_ref-4.0-sched-bfs-462.patch_9-40" class="reference"><a href="#cite_note-4.0-sched-bfs-462.patch-9"><span class="cite-bracket">[</span>9<span class="cite-bracket">]</span></a></sup><sup class="reference nowrap"><span title="Page / location: ln 165–166">: ln 165–166 </span></sup> The task's time gets refilled to max round robin quantum when it has used up all its time.<sup id="cite_ref-4.0-sched-bfs-462.patch_9-41" class="reference"><a href="#cite_note-4.0-sched-bfs-462.patch-9"><span class="cite-bracket">[</span>9<span class="cite-bracket">]</span></a></sup><sup class="reference nowrap"><span title="Page / location: ln 4057–4062, 5856">: ln 4057–4062, 5856 </span></sup> If the scheduler found the task at the higher prio with the earliest virtual deadline, it will execute in place of the less important currently running task only if all logical CPUs (including hyperthreaded cores / SMT threads) are busy. The scheduler will delay preemption as long as possible if there are unused logical CPUs. </p><p>If a task is marked idle priority policy, it cannot preempt at all even other idle policy marked tasks but rather use <a href="/wiki/Cooperative_multitasking" title="Cooperative multitasking">cooperative multitasking</a>.<sup id="cite_ref-4.0-sched-bfs-462.patch_9-42" class="reference"><a href="#cite_note-4.0-sched-bfs-462.patch-9"><span class="cite-bracket">[</span>9<span class="cite-bracket">]</span></a></sup><sup class="reference nowrap"><span title="Page / location: ln 2341–2344">: ln 2341–2344 </span></sup> </p> <div class="mw-heading mw-heading3"><h3 id="Task_placement,_multiple_cores"><span id="Task_placement.2C_multiple_cores"></span>Task placement, multiple cores</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Brain_Fuck_Scheduler&action=edit&section=9" title="Edit section: Task placement, multiple cores"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>When the scheduler discovers a waking task on a non-unicore system, it will need to determine which logical CPU to run the task on. The scheduler favors most the idle <a href="/wiki/Hyper-threading" title="Hyper-threading">hyperthreaded</a> cores (or idle <a href="/wiki/Simultaneous_multithreading" title="Simultaneous multithreading">SMT</a> threads) first on the same CPU that the task executed on,<sup id="cite_ref-4.0-sched-bfs-462.patch_9-43" class="reference"><a href="#cite_note-4.0-sched-bfs-462.patch-9"><span class="cite-bracket">[</span>9<span class="cite-bracket">]</span></a></sup><sup class="reference nowrap"><span title="Page / location: ln 261">: ln 261 </span></sup> then the other idle core of a multicore CPU,<sup id="cite_ref-4.0-sched-bfs-462.patch_9-44" class="reference"><a href="#cite_note-4.0-sched-bfs-462.patch-9"><span class="cite-bracket">[</span>9<span class="cite-bracket">]</span></a></sup><sup class="reference nowrap"><span title="Page / location: ln 262">: ln 262 </span></sup> then the other CPUs on the same NUMA node,<sup id="cite_ref-4.0-sched-bfs-462.patch_9-45" class="reference"><a href="#cite_note-4.0-sched-bfs-462.patch-9"><span class="cite-bracket">[</span>9<span class="cite-bracket">]</span></a></sup><sup class="reference nowrap"><span title="Page / location: ln 267, 263–266, 255–258">: ln 267, 263–266, 255–258 </span></sup> then all busy hyperthreaded cores / SMT threads / logical CPUs to be preempted on the same <a href="/wiki/Non-uniform_memory_access" title="Non-uniform memory access">NUMA</a> node,<sup id="cite_ref-4.0-sched-bfs-462.patch_9-46" class="reference"><a href="#cite_note-4.0-sched-bfs-462.patch-9"><span class="cite-bracket">[</span>9<span class="cite-bracket">]</span></a></sup><sup class="reference nowrap"><span title="Page / location: ln 265–267">: ln 265–267 </span></sup> then the other (remote) NUMA node<sup id="cite_ref-4.0-sched-bfs-462.patch_9-47" class="reference"><a href="#cite_note-4.0-sched-bfs-462.patch-9"><span class="cite-bracket">[</span>9<span class="cite-bracket">]</span></a></sup><sup class="reference nowrap"><span title="Page / location: ln 268–270">: ln 268–270 </span></sup> and is ranked on a preference list.<sup id="cite_ref-4.0-sched-bfs-462.patch_9-48" class="reference"><a href="#cite_note-4.0-sched-bfs-462.patch-9"><span class="cite-bracket">[</span>9<span class="cite-bracket">]</span></a></sup><sup class="reference nowrap"><span title="Page / location: ln 255–274">: ln 255–274 </span></sup> This special scan exists to minimize latency overhead resulting of migrating the task.<sup id="cite_ref-4.0-sched-bfs-462.patch_9-49" class="reference"><a href="#cite_note-4.0-sched-bfs-462.patch-9"><span class="cite-bracket">[</span>9<span class="cite-bracket">]</span></a></sup><sup class="reference nowrap"><span title="Page / location: ln 245, 268–272">: ln 245, 268–272 </span></sup> </p><p>The preemption order is similar to the above paragraph. The preemption order is hyperthreaded core / SMT units on the same multicore first, then the other core in the multicore, then the other CPU on the same NUMA node.<sup id="cite_ref-4.0-sched-bfs-462.patch_9-50" class="reference"><a href="#cite_note-4.0-sched-bfs-462.patch-9"><span class="cite-bracket">[</span>9<span class="cite-bracket">]</span></a></sup><sup class="reference nowrap"><span title="Page / location: ln 265–267">: ln 265–267 </span></sup> When it goes scanning for a task to preempt in the other remote NUMA node, the preemption is just any busy threads with lower to equal prio or later virtual deadline assuming that all logical CPUs (including hyperthreaded core / SMT threads) in the machine are all busy.<sup id="cite_ref-4.0-sched-bfs-462.patch_9-51" class="reference"><a href="#cite_note-4.0-sched-bfs-462.patch-9"><span class="cite-bracket">[</span>9<span class="cite-bracket">]</span></a></sup><sup class="reference nowrap"><span title="Page / location: ln 270">: ln 270 </span></sup> The scheduler will have to scan for a suitable task with a lower or maybe equal priority policy task (with a later virtual deadline if necessary) to preempt and avoid logical CPUs with a task with a higher priority policy which it cannot preempt. Local preemption has a higher rank than scanning for a remote idle NUMA unit.<sup id="cite_ref-4.0-sched-bfs-462.patch_9-52" class="reference"><a href="#cite_note-4.0-sched-bfs-462.patch-9"><span class="cite-bracket">[</span>9<span class="cite-bracket">]</span></a></sup><sup class="reference nowrap"><span title="Page / location: ln 265–269">: ln 265–269 </span></sup> </p><p>When a task is involuntary preempted at the time the CPU is slowed down as a result of kernel mediated <a href="/wiki/Dynamic_frequency_scaling" title="Dynamic frequency scaling">CPU frequency scaling</a> (aka CPU frequency governor), the task is specially marked "sticky" except those marked as realtime policy.<sup id="cite_ref-4.0-sched-bfs-462.patch_9-53" class="reference"><a href="#cite_note-4.0-sched-bfs-462.patch-9"><span class="cite-bracket">[</span>9<span class="cite-bracket">]</span></a></sup><sup class="reference nowrap"><span title="Page / location: ln 2085">: ln 2085 </span></sup> Marked sticky indicates that the task still has unused time and the task is restricted executing to the same CPU.<sup id="cite_ref-4.0-sched-bfs-462.patch_9-54" class="reference"><a href="#cite_note-4.0-sched-bfs-462.patch-9"><span class="cite-bracket">[</span>9<span class="cite-bracket">]</span></a></sup><sup class="reference nowrap"><span title="Page / location: ln 233–243">: ln 233–243 </span></sup> The task will be marked sticky whenever the CPU scaling governor has scaled the CPU at a slower speed.<sup id="cite_ref-4.0-sched-bfs-462.patch_9-55" class="reference"><a href="#cite_note-4.0-sched-bfs-462.patch-9"><span class="cite-bracket">[</span>9<span class="cite-bracket">]</span></a></sup><sup class="reference nowrap"><span title="Page / location: ln 2082–2107, 8840–8848">: ln 2082–2107, 8840–8848 </span></sup> The idled stickied task will return to either executing at full Ghz speed by chance or to be rescheduled to execute on the best idle CPU that is not the same CPU that the task ran on.<sup id="cite_ref-4.0-sched-bfs-462.patch_9-56" class="reference"><a href="#cite_note-4.0-sched-bfs-462.patch-9"><span class="cite-bracket">[</span>9<span class="cite-bracket">]</span></a></sup><sup class="reference nowrap"><span title="Page / location: ln 2082–2086, 239–242, 2068–2079">: ln 2082–2086, 239–242, 2068–2079 </span></sup> It is not desirable to migrate the task to other places but make it idle instead because of increased latency brought about of overhead to migrating the task to another CPU or NUMA node.<sup id="cite_ref-4.0-sched-bfs-462.patch_9-57" class="reference"><a href="#cite_note-4.0-sched-bfs-462.patch-9"><span class="cite-bracket">[</span>9<span class="cite-bracket">]</span></a></sup><sup class="reference nowrap"><span title="Page / location: ln 228, 245">: ln 228, 245 </span></sup> This sticky feature was removed in the last iteration of BFS (v0.512) corresponding to Kolivas' patchset 4.8-ck1 and did not exist in MuQSS. </p> <div class="mw-heading mw-heading2"><h2 id="schedtool">schedtool</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Brain_Fuck_Scheduler&action=edit&section=10" title="Edit section: schedtool"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>A privileged user can change the priority policy of a process with the schedtool program<sup id="cite_ref-4.0-sched-bfs-462.patch_9-58" class="reference"><a href="#cite_note-4.0-sched-bfs-462.patch-9"><span class="cite-bracket">[</span>9<span class="cite-bracket">]</span></a></sup><sup class="reference nowrap"><span title="Page / location: ln 326, 373">: ln 326, 373 </span></sup> or it is done by a program itself.<sup id="cite_ref-4.0-sched-bfs-462.patch_9-59" class="reference"><a href="#cite_note-4.0-sched-bfs-462.patch-9"><span class="cite-bracket">[</span>9<span class="cite-bracket">]</span></a></sup><sup class="reference nowrap"><span title="Page / location: ln 336">: ln 336 </span></sup> The priority class can be manipulated at the code level with a <a href="/wiki/Syscall" class="mw-redirect" title="Syscall">syscall</a> like sched_setscheduler only available to root,<sup id="cite_ref-15" class="reference"><a href="#cite_note-15"><span class="cite-bracket">[</span>15<span class="cite-bracket">]</span></a></sup> which schedtool uses.<sup id="cite_ref-16" class="reference"><a href="#cite_note-16"><span class="cite-bracket">[</span>16<span class="cite-bracket">]</span></a></sup> </p> <div class="mw-heading mw-heading2"><h2 id="Benchmarks">Benchmarks</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Brain_Fuck_Scheduler&action=edit&section=11" title="Edit section: Benchmarks"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>In a contemporary study,<sup id="cite_ref-shedulers_compared_5-1" class="reference"><a href="#cite_note-shedulers_compared-5"><span class="cite-bracket">[</span>5<span class="cite-bracket">]</span></a></sup> the author compared the BFS to the CFS using the Linux kernel v3.6.2 and several performance-based endpoints. The purpose of this study was to evaluate the Completely Fair Scheduler (CFS) in the <a href="/wiki/Vanilla_(software)" class="mw-redirect" title="Vanilla (software)">vanilla</a> Linux kernel and the BFS in the corresponding kernel patched with the ck1 patchset. Seven different machines were used to see if differences exist and, to what degree they scale using performance based metrics. Number of logical CPUs ranged from 1 to 16. These end-points were never factors in the primary design goals of the BFS. The results were encouraging. </p><p>Kernels patched with the ck1 patch set including the BFS outperformed the vanilla kernel by 1% to 8% using the CFS at nearly all the performance-based benchmarks tested.<sup id="cite_ref-shedulers_compared_5-2" class="reference"><a href="#cite_note-shedulers_compared-5"><span class="cite-bracket">[</span>5<span class="cite-bracket">]</span></a></sup> Further study with a larger test set could be conducted, but based on the small test set of 7 PCs evaluated, these increases in process queuing, efficiency/speed are, on the whole, independent of CPU type (mono, dual, quad, hyperthreaded, etc.), CPU architecture (32-bit and 64-bit) and of CPU multiplicity (mono or dual socket). </p><p>Moreover, on several "modern" CPUs, such as the Intel <a href="/wiki/Core_2_Duo" class="mw-redirect" title="Core 2 Duo">Core 2 Duo</a> and <a href="/wiki/Core_i7" class="mw-redirect" title="Core i7">Core i7</a>, that represent common workstations and laptops, BFS consistently outperformed the CFS in the vanilla kernel at all benchmarks. Efficiency and speed gains were small to moderate. </p> <div class="mw-heading mw-heading2"><h2 id="Adoption">Adoption</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Brain_Fuck_Scheduler&action=edit&section=12" title="Edit section: Adoption"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>BFS is the default scheduler for the following desktop Linux distributions: </p> <ul><li><a href="/wiki/NimbleX" title="NimbleX">NimbleX</a> and <a href="/wiki/Sabayon_Linux" title="Sabayon Linux">Sabayon Linux</a> 7<sup id="cite_ref-17" class="reference"><a href="#cite_note-17"><span class="cite-bracket">[</span>17<span class="cite-bracket">]</span></a></sup></li> <li><a href="/wiki/PCLinuxOS" title="PCLinuxOS">PCLinuxOS</a> 2010<sup id="cite_ref-18" class="reference"><a href="#cite_note-18"><span class="cite-bracket">[</span>18<span class="cite-bracket">]</span></a></sup></li> <li><a href="/wiki/Zenwalk" title="Zenwalk">Zenwalk</a> 6.4<sup id="cite_ref-19" class="reference"><a href="#cite_note-19"><span class="cite-bracket">[</span>19<span class="cite-bracket">]</span></a></sup></li> <li><a href="/wiki/GalliumOS" title="GalliumOS">GalliumOS</a> 2.1<sup id="cite_ref-20" class="reference"><a href="#cite_note-20"><span class="cite-bracket">[</span>20<span class="cite-bracket">]</span></a></sup></li></ul> <p>Additionally, BFS has been added to an experimental branch of <a href="/wiki/Google" title="Google">Google</a>'s <a href="/wiki/Android_(operating_system)" title="Android (operating system)">Android</a> development repository.<sup id="cite_ref-21" class="reference"><a href="#cite_note-21"><span class="cite-bracket">[</span>21<span class="cite-bracket">]</span></a></sup> It was not included in the <a href="/wiki/Android_version_history#Android_2.2–2.2.3_Froyo_(API_level_8)" title="Android version history">Froyo release</a> after <a href="/wiki/Blind_testing" class="mw-redirect" title="Blind testing">blind testing</a> did not show an improved user experience.<sup id="cite_ref-22" class="reference"><a href="#cite_note-22"><span class="cite-bracket">[</span>22<span class="cite-bracket">]</span></a></sup> </p> <div class="mw-heading mw-heading2"><h2 id="MuQSS">MuQSS</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Brain_Fuck_Scheduler&action=edit&section=13" title="Edit section: MuQSS"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>BFS has been retired in favour of <b>MuQSS</b>, known formally as the <b>Multiple Queue Skiplist Scheduler</b>, a rewritten implementation of the same concept.<sup id="cite_ref-bfsretired_23-0" class="reference"><a href="#cite_note-bfsretired-23"><span class="cite-bracket">[</span>23<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-phoronix-MuQSS_24-0" class="reference"><a href="#cite_note-phoronix-MuQSS-24"><span class="cite-bracket">[</span>24<span class="cite-bracket">]</span></a></sup> The primary author abandoned<sup id="cite_ref-muqsseol_25-0" class="reference"><a href="#cite_note-muqsseol-25"><span class="cite-bracket">[</span>25<span class="cite-bracket">]</span></a></sup> work on MuQSS by the end of August 2021. </p> <div class="mw-heading mw-heading3"><h3 id="Theoretical_design_and_efficiency_2">Theoretical design and efficiency</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Brain_Fuck_Scheduler&action=edit&section=14" title="Edit section: Theoretical design and efficiency"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>MuQSS uses a bidirectional static arrayed 8 level <a href="/wiki/Skip_list" title="Skip list">skip list</a> and tasks are ordered by static priority [queues] (referring to the scheduling policy) and a virtual deadline.<sup id="cite_ref-0001-MultiQueue-Skiplist-Scheduler-version-v0.173.patch_12-5" class="reference"><a href="#cite_note-0001-MultiQueue-Skiplist-Scheduler-version-v0.173.patch-12"><span class="cite-bracket">[</span>12<span class="cite-bracket">]</span></a></sup><sup class="reference nowrap"><span title="Page / location: ln 519, 525, 537, 588, 608">: ln 519, 525, 537, 588, 608 </span></sup> 8 was chosen to fit the array in the cacheline.<sup id="cite_ref-0001-MultiQueue-Skiplist-Scheduler-version-v0.173.patch_12-6" class="reference"><a href="#cite_note-0001-MultiQueue-Skiplist-Scheduler-version-v0.173.patch-12"><span class="cite-bracket">[</span>12<span class="cite-bracket">]</span></a></sup><sup class="reference nowrap"><span title="Page / location: ln 523">: ln 523 </span></sup> Doubly linked data structure design was chosen to speed up task removal. Removing a task takes only O(1) with a doubly skip list versus the original design by <a href="/wiki/William_Pugh_(computer_scientist)" title="William Pugh (computer scientist)">William Pugh</a> which takes <span class="nowrap">⁠<span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle O(n)}"> <semantics> <mrow class="MJX-TeXAtom-ORD"> <mstyle displaystyle="true" scriptlevel="0"> <mi>O</mi> <mo stretchy="false">(</mo> <mi>n</mi> <mo stretchy="false">)</mo> </mstyle> </mrow> <annotation encoding="application/x-tex">{\displaystyle O(n)}</annotation> </semantics> </math></span><img src="https://wikimedia.org/api/rest_v1/media/math/render/svg/34109fe397fdcff370079185bfdb65826cb5565a" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:4.977ex; height:2.843ex;" alt="{\displaystyle O(n)}"></span>⁠</span> worst case.<sup id="cite_ref-0001-MultiQueue-Skiplist-Scheduler-version-v0.173.patch_12-7" class="reference"><a href="#cite_note-0001-MultiQueue-Skiplist-Scheduler-version-v0.173.patch-12"><span class="cite-bracket">[</span>12<span class="cite-bracket">]</span></a></sup><sup class="reference nowrap"><span title="Page / location: ln 458">: ln 458 </span></sup> </p><p>Task insertion is <span class="nowrap">⁠<span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle O(\log n)}"> <semantics> <mrow class="MJX-TeXAtom-ORD"> <mstyle displaystyle="true" scriptlevel="0"> <mi>O</mi> <mo stretchy="false">(</mo> <mi>log</mi> <mo>⁡<!-- --></mo> <mi>n</mi> <mo stretchy="false">)</mo> </mstyle> </mrow> <annotation encoding="application/x-tex">{\displaystyle O(\log n)}</annotation> </semantics> </math></span><img src="https://wikimedia.org/api/rest_v1/media/math/render/svg/aae0f22048ba6b7c05dbae17b056bfa16e21807d" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:8.336ex; height:2.843ex;" alt="{\displaystyle O(\log n)}"></span>⁠</span>.<sup id="cite_ref-0001-MultiQueue-Skiplist-Scheduler-version-v0.173.patch_12-8" class="reference"><a href="#cite_note-0001-MultiQueue-Skiplist-Scheduler-version-v0.173.patch-12"><span class="cite-bracket">[</span>12<span class="cite-bracket">]</span></a></sup><sup class="reference nowrap"><span title="Page / location: ln 458">: ln 458 </span></sup> The next task for execution lookup is <span class="nowrap">⁠<span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle O(k)}"> <semantics> <mrow class="MJX-TeXAtom-ORD"> <mstyle displaystyle="true" scriptlevel="0"> <mi>O</mi> <mo stretchy="false">(</mo> <mi>k</mi> <mo stretchy="false">)</mo> </mstyle> </mrow> <annotation encoding="application/x-tex">{\displaystyle O(k)}</annotation> </semantics> </math></span><img src="https://wikimedia.org/api/rest_v1/media/math/render/svg/f5ec39041121b14e8c2b1a986c9b04547b223e3c" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:4.794ex; height:2.843ex;" alt="{\displaystyle O(k)}"></span>⁠</span>, where <span class="texhtml mvar" style="font-style:italic;">k</span> is the number of CPUs.<sup id="cite_ref-0001-MultiQueue-Skiplist-Scheduler-version-v0.173.patch_12-9" class="reference"><a href="#cite_note-0001-MultiQueue-Skiplist-Scheduler-version-v0.173.patch-12"><span class="cite-bracket">[</span>12<span class="cite-bracket">]</span></a></sup><sup class="reference nowrap"><span title="Page / location: ln 589–590, 603, 5125">: ln 589–590, 603, 5125 </span></sup> The next task for execution is <span class="nowrap">⁠<span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle O(1)}"> <semantics> <mrow class="MJX-TeXAtom-ORD"> <mstyle displaystyle="true" scriptlevel="0"> <mi>O</mi> <mo stretchy="false">(</mo> <mn>1</mn> <mo stretchy="false">)</mo> </mstyle> </mrow> <annotation encoding="application/x-tex">{\displaystyle O(1)}</annotation> </semantics> </math></span><img src="https://wikimedia.org/api/rest_v1/media/math/render/svg/e66384bc40452c5452f33563fe0e27e803b0cc21" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:4.745ex; height:2.843ex;" alt="{\displaystyle O(1)}"></span>⁠</span> per runqueue,<sup id="cite_ref-0001-MultiQueue-Skiplist-Scheduler-version-v0.173.patch_12-10" class="reference"><a href="#cite_note-0001-MultiQueue-Skiplist-Scheduler-version-v0.173.patch-12"><span class="cite-bracket">[</span>12<span class="cite-bracket">]</span></a></sup><sup class="reference nowrap"><span title="Page / location: ln 5124">: ln 5124 </span></sup> but the scheduler examines every other runqueues to maintain task fairness among CPUs, for latency or balancing (to maximize CPU usage and cache coherency on the same NUMA node over those that access across NUMA nodes), so ultimately <span class="nowrap">⁠<span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle O(k)}"> <semantics> <mrow class="MJX-TeXAtom-ORD"> <mstyle displaystyle="true" scriptlevel="0"> <mi>O</mi> <mo stretchy="false">(</mo> <mi>k</mi> <mo stretchy="false">)</mo> </mstyle> </mrow> <annotation encoding="application/x-tex">{\displaystyle O(k)}</annotation> </semantics> </math></span><img src="https://wikimedia.org/api/rest_v1/media/math/render/svg/f5ec39041121b14e8c2b1a986c9b04547b223e3c" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:4.794ex; height:2.843ex;" alt="{\displaystyle O(k)}"></span>⁠</span>.<sup id="cite_ref-0001-MultiQueue-Skiplist-Scheduler-version-v0.173.patch_12-11" class="reference"><a href="#cite_note-0001-MultiQueue-Skiplist-Scheduler-version-v0.173.patch-12"><span class="cite-bracket">[</span>12<span class="cite-bracket">]</span></a></sup><sup class="reference nowrap"><span title="Page / location: ln 591–593, 497–501, 633–656">: ln 591–593, 497–501, 633–656 </span></sup> The max number of tasks it can handle are 64k tasks per runqueue per CPU.<sup id="cite_ref-0001-MultiQueue-Skiplist-Scheduler-version-v0.173.patch_12-12" class="reference"><a href="#cite_note-0001-MultiQueue-Skiplist-Scheduler-version-v0.173.patch-12"><span class="cite-bracket">[</span>12<span class="cite-bracket">]</span></a></sup><sup class="reference nowrap"><span title="Page / location: ln 521">: ln 521 </span></sup> It uses multiple task runqueues in some configurations one runqueue per CPU, whereas its predecessor BFS only used one task runqueue for all CPUs. </p><p>Tasks are ordered as a gradient in the skip list in a way that realtime policy priority comes first and idle policy priority comes last.<sup id="cite_ref-0001-MultiQueue-Skiplist-Scheduler-version-v0.173.patch_12-13" class="reference"><a href="#cite_note-0001-MultiQueue-Skiplist-Scheduler-version-v0.173.patch-12"><span class="cite-bracket">[</span>12<span class="cite-bracket">]</span></a></sup><sup class="reference nowrap"><span title="Page / location: ln 2356–2358">: ln 2356–2358 </span></sup> Normal and idle priority policy still get sorted by virtual deadline which uses <a href="/wiki/Nice_(Unix)" title="Nice (Unix)">nice</a> values.<sup id="cite_ref-0001-MultiQueue-Skiplist-Scheduler-version-v0.173.patch_12-14" class="reference"><a href="#cite_note-0001-MultiQueue-Skiplist-Scheduler-version-v0.173.patch-12"><span class="cite-bracket">[</span>12<span class="cite-bracket">]</span></a></sup><sup class="reference nowrap"><span title="Page / location: ln 2353">: ln 2353 </span></sup> Realtime and Isochronous policy tasks are run in <a href="/wiki/FIFO_(computing_and_electronics)" title="FIFO (computing and electronics)">FIFO</a> order ignoring nice values.<sup id="cite_ref-0001-MultiQueue-Skiplist-Scheduler-version-v0.173.patch_12-15" class="reference"><a href="#cite_note-0001-MultiQueue-Skiplist-Scheduler-version-v0.173.patch-12"><span class="cite-bracket">[</span>12<span class="cite-bracket">]</span></a></sup><sup class="reference nowrap"><span title="Page / location: ln 2350–2351">: ln 2350–2351 </span></sup> New tasks with same key are placed in FIFO order meaning that newer tasks get placed at the end of the list (i.e. top most node vertically), and tasks at 0th level or at the front-bottom get execution first before those at nearest to the top vertically and those furthest away from the head node.<sup id="cite_ref-0001-MultiQueue-Skiplist-Scheduler-version-v0.173.patch_12-16" class="reference"><a href="#cite_note-0001-MultiQueue-Skiplist-Scheduler-version-v0.173.patch-12"><span class="cite-bracket">[</span>12<span class="cite-bracket">]</span></a></sup><sup class="reference nowrap"><span title="Page / location: ln 2351–2352, 590">: ln 2351–2352, 590 </span></sup> The key used for inserted sorting is either the static priority<sup id="cite_ref-0001-MultiQueue-Skiplist-Scheduler-version-v0.173.patch_12-17" class="reference"><a href="#cite_note-0001-MultiQueue-Skiplist-Scheduler-version-v0.173.patch-12"><span class="cite-bracket">[</span>12<span class="cite-bracket">]</span></a></sup><sup class="reference nowrap"><span title="Page / location: ln 2345, 2365,">: ln 2345, 2365,  </span></sup> or the virtual deadline.<sup id="cite_ref-0001-MultiQueue-Skiplist-Scheduler-version-v0.173.patch_12-18" class="reference"><a href="#cite_note-0001-MultiQueue-Skiplist-Scheduler-version-v0.173.patch-12"><span class="cite-bracket">[</span>12<span class="cite-bracket">]</span></a></sup><sup class="reference nowrap"><span title="Page / location: ln 2363">: ln 2363 </span></sup> </p><p>The user can choose to share runqueues among multicore or have a runqueue per logical CPU.<sup id="cite_ref-0001-MultiQueue-Skiplist-Scheduler-version-v0.173.patch_12-19" class="reference"><a href="#cite_note-0001-MultiQueue-Skiplist-Scheduler-version-v0.173.patch-12"><span class="cite-bracket">[</span>12<span class="cite-bracket">]</span></a></sup><sup class="reference nowrap"><span title="Page / location: ln 947–1006">: ln 947–1006 </span></sup> The speculation of sharing runqueues design was to reduce latency with a tradeoff of throughput.<sup id="cite_ref-0001-MultiQueue-Skiplist-Scheduler-version-v0.173.patch_12-20" class="reference"><a href="#cite_note-0001-MultiQueue-Skiplist-Scheduler-version-v0.173.patch-12"><span class="cite-bracket">[</span>12<span class="cite-bracket">]</span></a></sup><sup class="reference nowrap"><span title="Page / location: ln 947–1006">: ln 947–1006 </span></sup> </p><p>A new behavior introduced by MuQSS was the use of the high resolution timer for below millisecond accuracy when timeslices were used up resulting in rescheduling tasks.<sup id="cite_ref-0001-MultiQueue-Skiplist-Scheduler-version-v0.173.patch_12-21" class="reference"><a href="#cite_note-0001-MultiQueue-Skiplist-Scheduler-version-v0.173.patch-12"><span class="cite-bracket">[</span>12<span class="cite-bracket">]</span></a></sup><sup class="reference nowrap"><span title="Page / location: ln 618–630, 3829–3851, 3854–3865, 5316">: ln 618–630, 3829–3851, 3854–3865, 5316 </span></sup> </p> <div class="mw-heading mw-heading2"><h2 id="See_also">See also</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Brain_Fuck_Scheduler&action=edit&section=15" title="Edit section: See also"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <style data-mw-deduplicate="TemplateStyles:r1239009302">.mw-parser-output .portalbox{padding:0;margin:0.5em 0;display:table;box-sizing:border-box;max-width:175px;list-style:none}.mw-parser-output .portalborder{border:1px solid var(--border-color-base,#a2a9b1);padding:0.1em;background:var(--background-color-neutral-subtle,#f8f9fa)}.mw-parser-output .portalbox-entry{display:table-row;font-size:85%;line-height:110%;height:1.9em;font-style:italic;font-weight:bold}.mw-parser-output .portalbox-image{display:table-cell;padding:0.2em;vertical-align:middle;text-align:center}.mw-parser-output .portalbox-link{display:table-cell;padding:0.2em 0.2em 0.2em 0.3em;vertical-align:middle}@media(min-width:720px){.mw-parser-output .portalleft{clear:left;float:left;margin:0.5em 1em 0.5em 0}.mw-parser-output .portalright{clear:right;float:right;margin:0.5em 0 0.5em 1em}}</style><ul role="navigation" aria-label="Portals" class="noprint portalbox portalborder portalright"> <li class="portalbox-entry"><span class="portalbox-image"><span class="noviewer" typeof="mw:File"><span><img alt="" src="//upload.wikimedia.org/wikipedia/commons/thumb/3/31/Free_and_open-source_software_logo_%282009%29.svg/28px-Free_and_open-source_software_logo_%282009%29.svg.png" decoding="async" width="28" height="28" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/3/31/Free_and_open-source_software_logo_%282009%29.svg/42px-Free_and_open-source_software_logo_%282009%29.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/3/31/Free_and_open-source_software_logo_%282009%29.svg/56px-Free_and_open-source_software_logo_%282009%29.svg.png 2x" data-file-width="512" data-file-height="512" /></span></span></span><span class="portalbox-link"><a href="/wiki/Portal:Free_and_open-source_software" title="Portal:Free and open-source software">Free and open-source software portal</a></span></li><li class="portalbox-entry"><span class="portalbox-image"><span class="noviewer" typeof="mw:File"><a href="/wiki/File:NewTux.svg" class="mw-file-description"><img alt="icon" src="//upload.wikimedia.org/wikipedia/commons/thumb/b/b0/NewTux.svg/23px-NewTux.svg.png" decoding="async" width="23" height="28" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/b/b0/NewTux.svg/35px-NewTux.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/b/b0/NewTux.svg/47px-NewTux.svg.png 2x" data-file-width="625" data-file-height="750" /></a></span></span><span class="portalbox-link"><a href="/wiki/Portal:Linux" title="Portal:Linux">Linux portal</a></span></li></ul> <ul><li><a href="/wiki/Fair-share_scheduling" title="Fair-share scheduling">Fair-share scheduling</a></li></ul> <div class="mw-heading mw-heading2"><h2 id="References">References</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Brain_Fuck_Scheduler&action=edit&section=16" title="Edit section: References"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <style data-mw-deduplicate="TemplateStyles:r1239543626">.mw-parser-output .reflist{margin-bottom:0.5em;list-style-type:decimal}@media screen{.mw-parser-output .reflist{font-size:90%}}.mw-parser-output .reflist .references{font-size:100%;margin-bottom:0;list-style-type:inherit}.mw-parser-output .reflist-columns-2{column-width:30em}.mw-parser-output .reflist-columns-3{column-width:25em}.mw-parser-output .reflist-columns{margin-top:0.3em}.mw-parser-output .reflist-columns ol{margin-top:0}.mw-parser-output .reflist-columns li{page-break-inside:avoid;break-inside:avoid-column}.mw-parser-output .reflist-upper-alpha{list-style-type:upper-alpha}.mw-parser-output .reflist-upper-roman{list-style-type:upper-roman}.mw-parser-output .reflist-lower-alpha{list-style-type:lower-alpha}.mw-parser-output .reflist-lower-greek{list-style-type:lower-greek}.mw-parser-output .reflist-lower-roman{list-style-type:lower-roman}</style><div class="reflist reflist-columns references-column-width" style="column-width: 30em;"> <ol class="references"> <li id="cite_note-1"><span class="mw-cite-backlink"><b><a href="#cite_ref-1">^</a></b></span> <span class="reference-text"><style data-mw-deduplicate="TemplateStyles:r1238218222">.mw-parser-output cite.citation{font-style:inherit;word-wrap:break-word}.mw-parser-output .citation q{quotes:"\"""\"""'""'"}.mw-parser-output .citation:target{background-color:rgba(0,127,255,0.133)}.mw-parser-output .id-lock-free.id-lock-free a{background:url("//upload.wikimedia.org/wikipedia/commons/6/65/Lock-green.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-limited.id-lock-limited a,.mw-parser-output .id-lock-registration.id-lock-registration a{background:url("//upload.wikimedia.org/wikipedia/commons/d/d6/Lock-gray-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-subscription.id-lock-subscription a{background:url("//upload.wikimedia.org/wikipedia/commons/a/aa/Lock-red-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .cs1-ws-icon a{background:url("//upload.wikimedia.org/wikipedia/commons/4/4c/Wikisource-logo.svg")right 0.1em center/12px no-repeat}body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-free a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-limited a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-registration a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-subscription a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .cs1-ws-icon a{background-size:contain;padding:0 1em 0 0}.mw-parser-output .cs1-code{color:inherit;background:inherit;border:none;padding:inherit}.mw-parser-output .cs1-hidden-error{display:none;color:var(--color-error,#d33)}.mw-parser-output .cs1-visible-error{color:var(--color-error,#d33)}.mw-parser-output .cs1-maint{display:none;color:#085;margin-left:0.3em}.mw-parser-output .cs1-kern-left{padding-left:0.2em}.mw-parser-output .cs1-kern-right{padding-right:0.2em}.mw-parser-output .citation .mw-selflink{font-weight:inherit}@media screen{.mw-parser-output .cs1-format{font-size:95%}html.skin-theme-clientpref-night .mw-parser-output .cs1-maint{color:#18911f}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .cs1-maint{color:#18911f}}</style><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://ck-hack.blogspot.co.uk/2016/10/bfs-version-0512-linux-48-ck1-muqss-for.html">"-ck hacking: BFS version 0.512, linux-4.8-ck1, MuQSS for linux-4.8"</a>. <i>ck-hack.blogspot.com</i>. 2016-10-03<span class="reference-accessdate">. Retrieved <span class="nowrap">2016-11-10</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=unknown&rft.jtitle=ck-hack.blogspot.com&rft.atitle=-ck+hacking%3A+BFS+version+0.512%2C+linux-4.8-ck1%2C+MuQSS+for+linux-4.8&rft.date=2016-10-03&rft_id=https%3A%2F%2Fck-hack.blogspot.co.uk%2F2016%2F10%2Fbfs-version-0512-linux-48-ck1-muqss-for.html&rfr_id=info%3Asid%2Fen.wikipedia.org%3ABrain+Fuck+Scheduler" class="Z3988"></span></span> </li> <li id="cite_note-2"><span class="mw-cite-backlink"><b><a href="#cite_ref-2">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://lwn.net/Articles/720227/">"The MuQSS CPU scheduler [LWN.net]"</a>. <i><a href="/wiki/LWN.net" title="LWN.net">LWN.net</a></i>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=unknown&rft.jtitle=LWN.net&rft.atitle=The+MuQSS+CPU+scheduler+%5BLWN.net%5D&rft_id=https%3A%2F%2Flwn.net%2FArticles%2F720227%2F&rfr_id=info%3Asid%2Fen.wikipedia.org%3ABrain+Fuck+Scheduler" class="Z3988"></span></span> </li> <li id="cite_note-Linux_Pro_Magazine_on_BFS-3"><span class="mw-cite-backlink">^ <a href="#cite_ref-Linux_Pro_Magazine_on_BFS_3-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-Linux_Pro_Magazine_on_BFS_3-1"><sup><i><b>b</b></i></sup></a></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://www.linuxpromagazine.com/Online/News/Con-Kolivas-Introduces-New-BFS-Scheduler">"Con Kolivas Introduces New BFS Scheduler » Linux Magazine"</a>. Linuxpromagazine.com. 2009-09-02<span class="reference-accessdate">. Retrieved <span class="nowrap">2013-10-30</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=Con+Kolivas+Introduces+New+BFS+Scheduler+%C2%BB+Linux+Magazine&rft.pub=Linuxpromagazine.com&rft.date=2009-09-02&rft_id=http%3A%2F%2Fwww.linuxpromagazine.com%2FOnline%2FNews%2FCon-Kolivas-Introduces-New-BFS-Scheduler&rfr_id=info%3Asid%2Fen.wikipedia.org%3ABrain+Fuck+Scheduler" class="Z3988"></span></span> </li> <li id="cite_note-bfsfaq-4"><span class="mw-cite-backlink">^ <a href="#cite_ref-bfsfaq_4-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-bfsfaq_4-1"><sup><i><b>b</b></i></sup></a> <a href="#cite_ref-bfsfaq_4-2"><sup><i><b>c</b></i></sup></a></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://ck.kolivas.org/patches/bfs/bfs-faq.txt">"FAQs about BFS v0.330"</a>. Ck.kolivas.org<span class="reference-accessdate">. Retrieved <span class="nowrap">2013-10-30</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=FAQs+about+BFS+v0.330&rft.pub=Ck.kolivas.org&rft_id=http%3A%2F%2Fck.kolivas.org%2Fpatches%2Fbfs%2Fbfs-faq.txt&rfr_id=info%3Asid%2Fen.wikipedia.org%3ABrain+Fuck+Scheduler" class="Z3988"></span></span> </li> <li id="cite_note-shedulers_compared-5"><span class="mw-cite-backlink">^ <a href="#cite_ref-shedulers_compared_5-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-shedulers_compared_5-1"><sup><i><b>b</b></i></sup></a> <a href="#cite_ref-shedulers_compared_5-2"><sup><i><b>c</b></i></sup></a></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://repo-ck.com/bench/cpu_schedulers_compared.pdf">"CPU Schedulers Compared"</a> <span class="cs1-format">(PDF)</span>. Repo-ck.com<span class="reference-accessdate">. Retrieved <span class="nowrap">2013-10-30</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=CPU+Schedulers+Compared&rft.pub=Repo-ck.com&rft_id=http%3A%2F%2Frepo-ck.com%2Fbench%2Fcpu_schedulers_compared.pdf&rfr_id=info%3Asid%2Fen.wikipedia.org%3ABrain+Fuck+Scheduler" class="Z3988"></span></span> </li> <li id="cite_note-6"><span class="mw-cite-backlink"><b><a href="#cite_ref-6">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://slashdot.org/story/09/09/06/0433209/Con-Kolivas-Returns-With-a-Slashdo">"Con Kolivas Returns, With a Desktop-Oriented Linux Scheduler"</a>. Slashdot. 6 September 2009<span class="reference-accessdate">. Retrieved <span class="nowrap">2013-10-30</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=Con+Kolivas+Returns%2C+With+a+Desktop-Oriented+Linux+Scheduler&rft.pub=Slashdot&rft.date=2009-09-06&rft_id=http%3A%2F%2Fslashdot.org%2Fstory%2F09%2F09%2F06%2F0433209%2FCon-Kolivas-Returns-With-a-Slashdo&rfr_id=info%3Asid%2Fen.wikipedia.org%3ABrain+Fuck+Scheduler" class="Z3988"></span></span> </li> <li id="cite_note-7"><span class="mw-cite-backlink"><b><a href="#cite_ref-7">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://www.linux-magazine.com/Online/News/Ingo-Molnar-Tests-New-BF-Scheduler">"Ingo Molnar Tests New BF Scheduler"</a>. Linux Magazine. 2009-09-08<span class="reference-accessdate">. Retrieved <span class="nowrap">2013-10-30</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=Ingo+Molnar+Tests+New+BF+Scheduler&rft.pub=Linux+Magazine&rft.date=2009-09-08&rft_id=http%3A%2F%2Fwww.linux-magazine.com%2FOnline%2FNews%2FIngo-Molnar-Tests-New-BF-Scheduler&rfr_id=info%3Asid%2Fen.wikipedia.org%3ABrain+Fuck+Scheduler" class="Z3988"></span></span> </li> <li id="cite_note-sched-bfs-001.patch-8"><span class="mw-cite-backlink"><b><a href="#cite_ref-sched-bfs-001.patch_8-0">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://ck.kolivas.org/patches/old/sched-bfs-001.patch">"sched-bfs-001.patch"</a>. Con Kolivas. 2009-08-13<span class="reference-accessdate">. Retrieved <span class="nowrap">2020-10-09</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=sched-bfs-001.patch&rft.pub=Con+Kolivas&rft.date=2009-08-13&rft_id=http%3A%2F%2Fck.kolivas.org%2Fpatches%2Fold%2Fsched-bfs-001.patch&rfr_id=info%3Asid%2Fen.wikipedia.org%3ABrain+Fuck+Scheduler" class="Z3988"></span></span> </li> <li id="cite_note-4.0-sched-bfs-462.patch-9"><span class="mw-cite-backlink">^ <a href="#cite_ref-4.0-sched-bfs-462.patch_9-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-4.0-sched-bfs-462.patch_9-1"><sup><i><b>b</b></i></sup></a> <a href="#cite_ref-4.0-sched-bfs-462.patch_9-2"><sup><i><b>c</b></i></sup></a> <a href="#cite_ref-4.0-sched-bfs-462.patch_9-3"><sup><i><b>d</b></i></sup></a> <a href="#cite_ref-4.0-sched-bfs-462.patch_9-4"><sup><i><b>e</b></i></sup></a> <a href="#cite_ref-4.0-sched-bfs-462.patch_9-5"><sup><i><b>f</b></i></sup></a> <a href="#cite_ref-4.0-sched-bfs-462.patch_9-6"><sup><i><b>g</b></i></sup></a> <a href="#cite_ref-4.0-sched-bfs-462.patch_9-7"><sup><i><b>h</b></i></sup></a> <a href="#cite_ref-4.0-sched-bfs-462.patch_9-8"><sup><i><b>i</b></i></sup></a> <a href="#cite_ref-4.0-sched-bfs-462.patch_9-9"><sup><i><b>j</b></i></sup></a> <a href="#cite_ref-4.0-sched-bfs-462.patch_9-10"><sup><i><b>k</b></i></sup></a> <a href="#cite_ref-4.0-sched-bfs-462.patch_9-11"><sup><i><b>l</b></i></sup></a> <a href="#cite_ref-4.0-sched-bfs-462.patch_9-12"><sup><i><b>m</b></i></sup></a> <a href="#cite_ref-4.0-sched-bfs-462.patch_9-13"><sup><i><b>n</b></i></sup></a> <a href="#cite_ref-4.0-sched-bfs-462.patch_9-14"><sup><i><b>o</b></i></sup></a> <a href="#cite_ref-4.0-sched-bfs-462.patch_9-15"><sup><i><b>p</b></i></sup></a> <a href="#cite_ref-4.0-sched-bfs-462.patch_9-16"><sup><i><b>q</b></i></sup></a> <a href="#cite_ref-4.0-sched-bfs-462.patch_9-17"><sup><i><b>r</b></i></sup></a> <a href="#cite_ref-4.0-sched-bfs-462.patch_9-18"><sup><i><b>s</b></i></sup></a> <a href="#cite_ref-4.0-sched-bfs-462.patch_9-19"><sup><i><b>t</b></i></sup></a> <a href="#cite_ref-4.0-sched-bfs-462.patch_9-20"><sup><i><b>u</b></i></sup></a> <a href="#cite_ref-4.0-sched-bfs-462.patch_9-21"><sup><i><b>v</b></i></sup></a> <a href="#cite_ref-4.0-sched-bfs-462.patch_9-22"><sup><i><b>w</b></i></sup></a> <a href="#cite_ref-4.0-sched-bfs-462.patch_9-23"><sup><i><b>x</b></i></sup></a> <a href="#cite_ref-4.0-sched-bfs-462.patch_9-24"><sup><i><b>y</b></i></sup></a> <a href="#cite_ref-4.0-sched-bfs-462.patch_9-25"><sup><i><b>z</b></i></sup></a> <a href="#cite_ref-4.0-sched-bfs-462.patch_9-26"><sup><i><b>aa</b></i></sup></a> <a href="#cite_ref-4.0-sched-bfs-462.patch_9-27"><sup><i><b>ab</b></i></sup></a> <a href="#cite_ref-4.0-sched-bfs-462.patch_9-28"><sup><i><b>ac</b></i></sup></a> <a href="#cite_ref-4.0-sched-bfs-462.patch_9-29"><sup><i><b>ad</b></i></sup></a> <a href="#cite_ref-4.0-sched-bfs-462.patch_9-30"><sup><i><b>ae</b></i></sup></a> <a href="#cite_ref-4.0-sched-bfs-462.patch_9-31"><sup><i><b>af</b></i></sup></a> <a href="#cite_ref-4.0-sched-bfs-462.patch_9-32"><sup><i><b>ag</b></i></sup></a> <a href="#cite_ref-4.0-sched-bfs-462.patch_9-33"><sup><i><b>ah</b></i></sup></a> <a href="#cite_ref-4.0-sched-bfs-462.patch_9-34"><sup><i><b>ai</b></i></sup></a> <a href="#cite_ref-4.0-sched-bfs-462.patch_9-35"><sup><i><b>aj</b></i></sup></a> <a href="#cite_ref-4.0-sched-bfs-462.patch_9-36"><sup><i><b>ak</b></i></sup></a> <a href="#cite_ref-4.0-sched-bfs-462.patch_9-37"><sup><i><b>al</b></i></sup></a> <a href="#cite_ref-4.0-sched-bfs-462.patch_9-38"><sup><i><b>am</b></i></sup></a> <a href="#cite_ref-4.0-sched-bfs-462.patch_9-39"><sup><i><b>an</b></i></sup></a> <a href="#cite_ref-4.0-sched-bfs-462.patch_9-40"><sup><i><b>ao</b></i></sup></a> <a href="#cite_ref-4.0-sched-bfs-462.patch_9-41"><sup><i><b>ap</b></i></sup></a> <a href="#cite_ref-4.0-sched-bfs-462.patch_9-42"><sup><i><b>aq</b></i></sup></a> <a href="#cite_ref-4.0-sched-bfs-462.patch_9-43"><sup><i><b>ar</b></i></sup></a> <a href="#cite_ref-4.0-sched-bfs-462.patch_9-44"><sup><i><b>as</b></i></sup></a> <a href="#cite_ref-4.0-sched-bfs-462.patch_9-45"><sup><i><b>at</b></i></sup></a> <a href="#cite_ref-4.0-sched-bfs-462.patch_9-46"><sup><i><b>au</b></i></sup></a> <a href="#cite_ref-4.0-sched-bfs-462.patch_9-47"><sup><i><b>av</b></i></sup></a> <a href="#cite_ref-4.0-sched-bfs-462.patch_9-48"><sup><i><b>aw</b></i></sup></a> <a href="#cite_ref-4.0-sched-bfs-462.patch_9-49"><sup><i><b>ax</b></i></sup></a> <a href="#cite_ref-4.0-sched-bfs-462.patch_9-50"><sup><i><b>ay</b></i></sup></a> <a href="#cite_ref-4.0-sched-bfs-462.patch_9-51"><sup><i><b>az</b></i></sup></a> <a href="#cite_ref-4.0-sched-bfs-462.patch_9-52"><sup><i><b>ba</b></i></sup></a> <a href="#cite_ref-4.0-sched-bfs-462.patch_9-53"><sup><i><b>bb</b></i></sup></a> <a href="#cite_ref-4.0-sched-bfs-462.patch_9-54"><sup><i><b>bc</b></i></sup></a> <a href="#cite_ref-4.0-sched-bfs-462.patch_9-55"><sup><i><b>bd</b></i></sup></a> <a href="#cite_ref-4.0-sched-bfs-462.patch_9-56"><sup><i><b>be</b></i></sup></a> <a href="#cite_ref-4.0-sched-bfs-462.patch_9-57"><sup><i><b>bf</b></i></sup></a> <a href="#cite_ref-4.0-sched-bfs-462.patch_9-58"><sup><i><b>bg</b></i></sup></a> <a href="#cite_ref-4.0-sched-bfs-462.patch_9-59"><sup><i><b>bh</b></i></sup></a></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://ck.kolivas.org/patches/4.0/4.0/4.0-ck1/patches/4.0-sched-bfs-462.patch">"4.0-sched-bfs-462.patch"</a>. Con Kolivas. 2015-04-16<span class="reference-accessdate">. Retrieved <span class="nowrap">2019-01-29</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=4.0-sched-bfs-462.patch&rft.pub=Con+Kolivas&rft.date=2015-04-16&rft_id=http%3A%2F%2Fck.kolivas.org%2Fpatches%2F4.0%2F4.0%2F4.0-ck1%2Fpatches%2F4.0-sched-bfs-462.patch&rfr_id=info%3Asid%2Fen.wikipedia.org%3ABrain+Fuck+Scheduler" class="Z3988"></span></span> </li> <li id="cite_note-lwn-224865-10"><span class="mw-cite-backlink">^ <a href="#cite_ref-lwn-224865_10-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-lwn-224865_10-1"><sup><i><b>b</b></i></sup></a></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://lwn.net/Articles/224865/">"The Rotating Staircase Deadline Scheduler"</a>. corbet. 2007-03-06<span class="reference-accessdate">. Retrieved <span class="nowrap">2019-01-30</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=The+Rotating+Staircase+Deadline+Scheduler&rft.pub=corbet&rft.date=2007-03-06&rft_id=https%3A%2F%2Flwn.net%2FArticles%2F224865%2F&rfr_id=info%3Asid%2Fen.wikipedia.org%3ABrain+Fuck+Scheduler" class="Z3988"></span></span> </li> <li id="cite_note-11"><span class="mw-cite-backlink"><b><a href="#cite_ref-11">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://web.archive.org/web/20110726235345/http://ck.kolivas.org/patches/staircase-deadline/sched-rsdl-0.26.patch">"sched-rsdl-0.26.patch"</a>. Con Kolivas. Archived from <a rel="nofollow" class="external text" href="http://ck.kolivas.org/patches/staircase-deadline/sched-rsdl-0.26.patch">the original</a> on 2011-07-26<span class="reference-accessdate">. Retrieved <span class="nowrap">2019-01-30</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=sched-rsdl-0.26.patch&rft.pub=Con+Kolivas&rft_id=http%3A%2F%2Fck.kolivas.org%2Fpatches%2Fstaircase-deadline%2Fsched-rsdl-0.26.patch&rfr_id=info%3Asid%2Fen.wikipedia.org%3ABrain+Fuck+Scheduler" class="Z3988"></span></span> </li> <li id="cite_note-0001-MultiQueue-Skiplist-Scheduler-version-v0.173.patch-12"><span class="mw-cite-backlink">^ <a href="#cite_ref-0001-MultiQueue-Skiplist-Scheduler-version-v0.173.patch_12-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-0001-MultiQueue-Skiplist-Scheduler-version-v0.173.patch_12-1"><sup><i><b>b</b></i></sup></a> <a href="#cite_ref-0001-MultiQueue-Skiplist-Scheduler-version-v0.173.patch_12-2"><sup><i><b>c</b></i></sup></a> <a href="#cite_ref-0001-MultiQueue-Skiplist-Scheduler-version-v0.173.patch_12-3"><sup><i><b>d</b></i></sup></a> <a href="#cite_ref-0001-MultiQueue-Skiplist-Scheduler-version-v0.173.patch_12-4"><sup><i><b>e</b></i></sup></a> <a href="#cite_ref-0001-MultiQueue-Skiplist-Scheduler-version-v0.173.patch_12-5"><sup><i><b>f</b></i></sup></a> <a href="#cite_ref-0001-MultiQueue-Skiplist-Scheduler-version-v0.173.patch_12-6"><sup><i><b>g</b></i></sup></a> <a href="#cite_ref-0001-MultiQueue-Skiplist-Scheduler-version-v0.173.patch_12-7"><sup><i><b>h</b></i></sup></a> <a href="#cite_ref-0001-MultiQueue-Skiplist-Scheduler-version-v0.173.patch_12-8"><sup><i><b>i</b></i></sup></a> <a href="#cite_ref-0001-MultiQueue-Skiplist-Scheduler-version-v0.173.patch_12-9"><sup><i><b>j</b></i></sup></a> <a href="#cite_ref-0001-MultiQueue-Skiplist-Scheduler-version-v0.173.patch_12-10"><sup><i><b>k</b></i></sup></a> <a href="#cite_ref-0001-MultiQueue-Skiplist-Scheduler-version-v0.173.patch_12-11"><sup><i><b>l</b></i></sup></a> <a href="#cite_ref-0001-MultiQueue-Skiplist-Scheduler-version-v0.173.patch_12-12"><sup><i><b>m</b></i></sup></a> <a href="#cite_ref-0001-MultiQueue-Skiplist-Scheduler-version-v0.173.patch_12-13"><sup><i><b>n</b></i></sup></a> <a href="#cite_ref-0001-MultiQueue-Skiplist-Scheduler-version-v0.173.patch_12-14"><sup><i><b>o</b></i></sup></a> <a href="#cite_ref-0001-MultiQueue-Skiplist-Scheduler-version-v0.173.patch_12-15"><sup><i><b>p</b></i></sup></a> <a href="#cite_ref-0001-MultiQueue-Skiplist-Scheduler-version-v0.173.patch_12-16"><sup><i><b>q</b></i></sup></a> <a href="#cite_ref-0001-MultiQueue-Skiplist-Scheduler-version-v0.173.patch_12-17"><sup><i><b>r</b></i></sup></a> <a href="#cite_ref-0001-MultiQueue-Skiplist-Scheduler-version-v0.173.patch_12-18"><sup><i><b>s</b></i></sup></a> <a href="#cite_ref-0001-MultiQueue-Skiplist-Scheduler-version-v0.173.patch_12-19"><sup><i><b>t</b></i></sup></a> <a href="#cite_ref-0001-MultiQueue-Skiplist-Scheduler-version-v0.173.patch_12-20"><sup><i><b>u</b></i></sup></a> <a href="#cite_ref-0001-MultiQueue-Skiplist-Scheduler-version-v0.173.patch_12-21"><sup><i><b>v</b></i></sup></a></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://ck.kolivas.org/patches/4.0/4.18/4.18-ck1/patches/0001-MultiQueue-Skiplist-Scheduler-version-v0.173.patch">"0001-MultiQueue-Skiplist-Scheduler-version-v0.173.patch"</a>. Con Kolivas. 2018-08-27<span class="reference-accessdate">. Retrieved <span class="nowrap">2019-01-29</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=0001-MultiQueue-Skiplist-Scheduler-version-v0.173.patch&rft.pub=Con+Kolivas&rft.date=2018-08-27&rft_id=http%3A%2F%2Fck.kolivas.org%2Fpatches%2F4.0%2F4.18%2F4.18-ck1%2Fpatches%2F0001-MultiQueue-Skiplist-Scheduler-version-v0.173.patch&rfr_id=info%3Asid%2Fen.wikipedia.org%3ABrain+Fuck+Scheduler" class="Z3988"></span></span> </li> <li id="cite_note-4.7-sched-bfs-480.patch-13"><span class="mw-cite-backlink">^ <a href="#cite_ref-4.7-sched-bfs-480.patch_13-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-4.7-sched-bfs-480.patch_13-1"><sup><i><b>b</b></i></sup></a></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://ck.kolivas.org/patches/bfs/4.0/4.7/4.7-sched-bfs-480.patch">"4.7-sched-bfs-480.patch"</a>. Con Kolivas. 2016-09-02<span class="reference-accessdate">. Retrieved <span class="nowrap">2020-10-09</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=4.7-sched-bfs-480.patch&rft.pub=Con+Kolivas&rft.date=2016-09-02&rft_id=http%3A%2F%2Fck.kolivas.org%2Fpatches%2Fbfs%2F4.0%2F4.7%2F4.7-sched-bfs-480.patch&rfr_id=info%3Asid%2Fen.wikipedia.org%3ABrain+Fuck+Scheduler" class="Z3988"></span></span> </li> <li id="cite_note-14"><span class="mw-cite-backlink"><b><a href="#cite_ref-14">^</a></b></span> <span class="reference-text">The alternative formula is presented for ease of understanding. All math is done in integer math so precision loss would be great. It is possibly why Kolivas deferred the division by 128 to one of the largest numbers as a multiple of 128 resulting in no remainder.</span> </li> <li id="cite_note-15"><span class="mw-cite-backlink"><b><a href="#cite_ref-15">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://www.linuxjournal.com/article/3910">"The Linux Scheduler"</a>. Moshe Bar. 2000-04-01<span class="reference-accessdate">. Retrieved <span class="nowrap">2019-01-29</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=The+Linux+Scheduler&rft.pub=Moshe+Bar&rft.date=2000-04-01&rft_id=https%3A%2F%2Fwww.linuxjournal.com%2Farticle%2F3910&rfr_id=info%3Asid%2Fen.wikipedia.org%3ABrain+Fuck+Scheduler" class="Z3988"></span></span> </li> <li id="cite_note-16"><span class="mw-cite-backlink"><b><a href="#cite_ref-16">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://github.com/freequaos/schedtool/blob/c7bf73dc92633713268c6b5393170fa3cfe369ec/schedtool.c#L431">"schedtool.c"</a>. freek. 2017-07-17<span class="reference-accessdate">. Retrieved <span class="nowrap">2019-01-30</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=schedtool.c&rft.pub=freek&rft.date=2017-07-17&rft_id=https%3A%2F%2Fgithub.com%2Ffreequaos%2Fschedtool%2Fblob%2Fc7bf73dc92633713268c6b5393170fa3cfe369ec%2Fschedtool.c%23L431&rfr_id=info%3Asid%2Fen.wikipedia.org%3ABrain+Fuck+Scheduler" class="Z3988"></span></span> </li> <li id="cite_note-17"><span class="mw-cite-backlink"><b><a href="#cite_ref-17">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://ostatic.com/blog/sabayon-7-brings-linux-heaven">"Sabayon 7 Brings Linux Heaven"</a>. Ostatic.com<span class="reference-accessdate">. Retrieved <span class="nowrap">2013-10-30</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=Sabayon+7+Brings+Linux+Heaven&rft.pub=Ostatic.com&rft_id=http%3A%2F%2Fostatic.com%2Fblog%2Fsabayon-7-brings-linux-heaven&rfr_id=info%3Asid%2Fen.wikipedia.org%3ABrain+Fuck+Scheduler" class="Z3988"></span></span> </li> <li id="cite_note-18"><span class="mw-cite-backlink"><b><a href="#cite_ref-18">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://pclinuxos.com/?p=579">"2010 Edition is now available for download"</a>. PCLinuxOS. 2013-10-22<span class="reference-accessdate">. Retrieved <span class="nowrap">2013-10-30</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=2010+Edition+is+now+available+for+download.&rft.pub=PCLinuxOS&rft.date=2013-10-22&rft_id=http%3A%2F%2Fpclinuxos.com%2F%3Fp%3D579&rfr_id=info%3Asid%2Fen.wikipedia.org%3ABrain+Fuck+Scheduler" class="Z3988"></span></span> </li> <li id="cite_note-19"><span class="mw-cite-backlink"><b><a href="#cite_ref-19">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://web.archive.org/web/20131023055842/http://www.zenwalk.org/modules/news/article.php?storyid=107">"Zenwalk 6.4 is ready ! - Releases - News"</a>. Zenwalk.org. Archived from <a rel="nofollow" class="external text" href="http://www.zenwalk.org/modules/news/article.php?storyid=107">the original</a> on 2013-10-23<span class="reference-accessdate">. Retrieved <span class="nowrap">2013-10-30</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=Zenwalk+6.4+is+ready+%21+-+Releases+-+News&rft.pub=Zenwalk.org&rft_id=http%3A%2F%2Fwww.zenwalk.org%2Fmodules%2Fnews%2Farticle.php%3Fstoryid%3D107&rfr_id=info%3Asid%2Fen.wikipedia.org%3ABrain+Fuck+Scheduler" class="Z3988"></span></span> </li> <li id="cite_note-20"><span class="mw-cite-backlink"><b><a href="#cite_ref-20">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://wiki.galliumos.org/About_GalliumOS">"About GalliumOS - GalliumOS Wiki"</a>. <i>wiki.galliumos.org</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2018-06-08</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=unknown&rft.jtitle=wiki.galliumos.org&rft.atitle=About+GalliumOS+-+GalliumOS+Wiki&rft_id=https%3A%2F%2Fwiki.galliumos.org%2FAbout_GalliumOS&rfr_id=info%3Asid%2Fen.wikipedia.org%3ABrain+Fuck+Scheduler" class="Z3988"></span></span> </li> <li id="cite_note-21"><span class="mw-cite-backlink"><b><a href="#cite_ref-21">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external autonumber" href="http://android.git.kernel.org/?p=kernel/experimental.git;a=shortlog;h=refs/heads/android-2.6.29-bfs">[1]</a> <a rel="nofollow" class="external text" href="https://web.archive.org/web/20090922234416/http://android.git.kernel.org/?p=kernel%2Fexperimental.git%3Ba%3Dshortlog%3Bh%3Drefs%2Fheads%2Fandroid-2.6.29-bfs">Archived</a> September 22, 2009, at the <a href="/wiki/Wayback_Machine" title="Wayback Machine">Wayback Machine</a></span> </li> <li id="cite_note-22"><span class="mw-cite-backlink"><b><a href="#cite_ref-22">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://lwn.net/Articles/389230/">"CyanogenMod 5 for the G1/ADP1"</a>. Lwn.net<span class="reference-accessdate">. Retrieved <span class="nowrap">2013-10-30</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=CyanogenMod+5+for+the+G1%2FADP1&rft.pub=Lwn.net&rft_id=https%3A%2F%2Flwn.net%2FArticles%2F389230%2F&rfr_id=info%3Asid%2Fen.wikipedia.org%3ABrain+Fuck+Scheduler" class="Z3988"></span></span> </li> <li id="cite_note-bfsretired-23"><span class="mw-cite-backlink"><b><a href="#cite_ref-bfsretired_23-0">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://ck-hack.blogspot.co.uk/2016/10/linux-48-ck2-muqss-version-0114.html">"ck-hacking: linux-4.8-ck2, MuQSS version 0.114"</a>. <i>ck-hack.blogspot.com</i>. 2016-10-21<span class="reference-accessdate">. Retrieved <span class="nowrap">2016-11-10</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=unknown&rft.jtitle=ck-hack.blogspot.com&rft.atitle=ck-hacking%3A+linux-4.8-ck2%2C+MuQSS+version+0.114&rft.date=2016-10-21&rft_id=https%3A%2F%2Fck-hack.blogspot.co.uk%2F2016%2F10%2Flinux-48-ck2-muqss-version-0114.html&rfr_id=info%3Asid%2Fen.wikipedia.org%3ABrain+Fuck+Scheduler" class="Z3988"></span></span> </li> <li id="cite_note-phoronix-MuQSS-24"><span class="mw-cite-backlink"><b><a href="#cite_ref-phoronix-MuQSS_24-0">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://www.phoronix.com/scan.php?page=news_item&px=MuQSS-First-Major-Release">"Con Kolivas Announces First Major Release of MuQSS, Successor to BFS - Phoronix"</a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=Con+Kolivas+Announces+First+Major+Release+of+MuQSS%2C+Successor+to+BFS+-+Phoronix&rft_id=https%3A%2F%2Fwww.phoronix.com%2Fscan.php%3Fpage%3Dnews_item%26px%3DMuQSS-First-Major-Release&rfr_id=info%3Asid%2Fen.wikipedia.org%3ABrain+Fuck+Scheduler" class="Z3988"></span></span> </li> <li id="cite_note-muqsseol-25"><span class="mw-cite-backlink"><b><a href="#cite_ref-muqsseol_25-0">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://ck-hack.blogspot.com/2021/08/514-and-future-of-muqss-and-ck-once.html">"5.14 and the future of MuQSS and -ck once again"</a>. <i>ck-hack.blogspot.com</i>. 2021-08-31<span class="reference-accessdate">. Retrieved <span class="nowrap">2022-09-20</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=unknown&rft.jtitle=ck-hack.blogspot.com&rft.atitle=5.14+and+the+future+of+MuQSS+and+-ck+once+again&rft.date=2021-08-31&rft_id=https%3A%2F%2Fck-hack.blogspot.com%2F2021%2F08%2F514-and-future-of-muqss-and-ck-once.html&rfr_id=info%3Asid%2Fen.wikipedia.org%3ABrain+Fuck+Scheduler" class="Z3988"></span></span> </li> </ol></div> <div class="mw-heading mw-heading2"><h2 id="External_links">External links</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Brain_Fuck_Scheduler&action=edit&section=17" title="Edit section: External links"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <ul><li><a rel="nofollow" class="external text" href="http://ck.kolivas.org/patches/bfs/bfs-faq.txt">Brain Fuck Scheduler FAQ</a></li></ul> <div class="navbox-styles"><style data-mw-deduplicate="TemplateStyles:r1129693374">.mw-parser-output .hlist dl,.mw-parser-output .hlist ol,.mw-parser-output .hlist ul{margin:0;padding:0}.mw-parser-output .hlist dd,.mw-parser-output .hlist dt,.mw-parser-output .hlist li{margin:0;display:inline}.mw-parser-output .hlist.inline,.mw-parser-output .hlist.inline dl,.mw-parser-output .hlist.inline ol,.mw-parser-output .hlist.inline ul,.mw-parser-output .hlist dl dl,.mw-parser-output .hlist dl ol,.mw-parser-output .hlist dl ul,.mw-parser-output .hlist ol dl,.mw-parser-output .hlist ol ol,.mw-parser-output .hlist ol ul,.mw-parser-output .hlist ul dl,.mw-parser-output .hlist ul ol,.mw-parser-output .hlist ul ul{display:inline}.mw-parser-output .hlist .mw-empty-li{display:none}.mw-parser-output .hlist dt::after{content:": "}.mw-parser-output .hlist dd::after,.mw-parser-output .hlist li::after{content:" · ";font-weight:bold}.mw-parser-output .hlist dd:last-child::after,.mw-parser-output .hlist dt:last-child::after,.mw-parser-output .hlist li:last-child::after{content:none}.mw-parser-output .hlist dd dd:first-child::before,.mw-parser-output .hlist dd dt:first-child::before,.mw-parser-output .hlist dd li:first-child::before,.mw-parser-output .hlist dt dd:first-child::before,.mw-parser-output .hlist dt dt:first-child::before,.mw-parser-output .hlist dt li:first-child::before,.mw-parser-output .hlist li dd:first-child::before,.mw-parser-output .hlist li dt:first-child::before,.mw-parser-output .hlist li li:first-child::before{content:" (";font-weight:normal}.mw-parser-output .hlist dd dd:last-child::after,.mw-parser-output .hlist dd dt:last-child::after,.mw-parser-output .hlist dd li:last-child::after,.mw-parser-output .hlist dt dd:last-child::after,.mw-parser-output .hlist dt dt:last-child::after,.mw-parser-output .hlist dt li:last-child::after,.mw-parser-output .hlist li dd:last-child::after,.mw-parser-output .hlist li dt:last-child::after,.mw-parser-output .hlist li li:last-child::after{content:")";font-weight:normal}.mw-parser-output .hlist ol{counter-reset:listitem}.mw-parser-output .hlist ol>li{counter-increment:listitem}.mw-parser-output .hlist ol>li::before{content:" "counter(listitem)"\a0 "}.mw-parser-output .hlist dd ol>li:first-child::before,.mw-parser-output .hlist dt ol>li:first-child::before,.mw-parser-output .hlist li ol>li:first-child::before{content:" ("counter(listitem)"\a0 "}</style><style data-mw-deduplicate="TemplateStyles:r1236075235">.mw-parser-output .navbox{box-sizing:border-box;border:1px solid #a2a9b1;width:100%;clear:both;font-size:88%;text-align:center;padding:1px;margin:1em auto 0}.mw-parser-output .navbox .navbox{margin-top:0}.mw-parser-output .navbox+.navbox,.mw-parser-output .navbox+.navbox-styles+.navbox{margin-top:-1px}.mw-parser-output .navbox-inner,.mw-parser-output .navbox-subgroup{width:100%}.mw-parser-output .navbox-group,.mw-parser-output .navbox-title,.mw-parser-output .navbox-abovebelow{padding:0.25em 1em;line-height:1.5em;text-align:center}.mw-parser-output .navbox-group{white-space:nowrap;text-align:right}.mw-parser-output .navbox,.mw-parser-output .navbox-subgroup{background-color:#fdfdfd}.mw-parser-output .navbox-list{line-height:1.5em;border-color:#fdfdfd}.mw-parser-output .navbox-list-with-group{text-align:left;border-left-width:2px;border-left-style:solid}.mw-parser-output tr+tr>.navbox-abovebelow,.mw-parser-output tr+tr>.navbox-group,.mw-parser-output tr+tr>.navbox-image,.mw-parser-output tr+tr>.navbox-list{border-top:2px solid #fdfdfd}.mw-parser-output .navbox-title{background-color:#ccf}.mw-parser-output .navbox-abovebelow,.mw-parser-output .navbox-group,.mw-parser-output .navbox-subgroup .navbox-title{background-color:#ddf}.mw-parser-output .navbox-subgroup .navbox-group,.mw-parser-output .navbox-subgroup .navbox-abovebelow{background-color:#e6e6ff}.mw-parser-output .navbox-even{background-color:#f7f7f7}.mw-parser-output .navbox-odd{background-color:transparent}.mw-parser-output .navbox .hlist td dl,.mw-parser-output .navbox .hlist td ol,.mw-parser-output .navbox .hlist td ul,.mw-parser-output .navbox td.hlist dl,.mw-parser-output .navbox td.hlist ol,.mw-parser-output .navbox td.hlist ul{padding:0.125em 0}.mw-parser-output .navbox .navbar{display:block;font-size:100%}.mw-parser-output .navbox-title .navbar{float:left;text-align:left;margin-right:0.5em}body.skin--responsive .mw-parser-output .navbox-image img{max-width:none!important}@media print{body.ns-0 .mw-parser-output .navbox{display:none!important}}</style></div><div role="navigation" class="navbox" aria-labelledby="Linux_kernel" style="padding:3px"><table class="nowraplinks hlist mw-collapsible autocollapse navbox-inner" style="border-spacing:0;background:transparent;color:inherit"><tbody><tr><th scope="col" class="navbox-title" colspan="2"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1129693374"><style data-mw-deduplicate="TemplateStyles:r1239400231">.mw-parser-output .navbar{display:inline;font-size:88%;font-weight:normal}.mw-parser-output .navbar-collapse{float:left;text-align:left}.mw-parser-output .navbar-boxtext{word-spacing:0}.mw-parser-output .navbar ul{display:inline-block;white-space:nowrap;line-height:inherit}.mw-parser-output .navbar-brackets::before{margin-right:-0.125em;content:"[ "}.mw-parser-output .navbar-brackets::after{margin-left:-0.125em;content:" ]"}.mw-parser-output .navbar li{word-spacing:-0.125em}.mw-parser-output .navbar a>span,.mw-parser-output .navbar a>abbr{text-decoration:inherit}.mw-parser-output .navbar-mini abbr{font-variant:small-caps;border-bottom:none;text-decoration:none;cursor:inherit}.mw-parser-output .navbar-ct-full{font-size:114%;margin:0 7em}.mw-parser-output .navbar-ct-mini{font-size:114%;margin:0 4em}html.skin-theme-clientpref-night .mw-parser-output .navbar li a abbr{color:var(--color-base)!important}@media(prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .navbar li a abbr{color:var(--color-base)!important}}@media print{.mw-parser-output .navbar{display:none!important}}</style><div class="navbar plainlinks hlist navbar-mini"><ul><li class="nv-view"><a href="/wiki/Template:Linux_kernel" title="Template:Linux kernel"><abbr title="View this template">v</abbr></a></li><li class="nv-talk"><a href="/wiki/Template_talk:Linux_kernel" title="Template talk:Linux kernel"><abbr title="Discuss this template">t</abbr></a></li><li class="nv-edit"><a href="/wiki/Special:EditPage/Template:Linux_kernel" title="Special:EditPage/Template:Linux kernel"><abbr title="Edit this template">e</abbr></a></li></ul></div><div id="Linux_kernel" style="font-size:114%;margin:0 4em"><a href="/wiki/Linux_kernel" title="Linux kernel">Linux kernel</a></div></th></tr><tr><th scope="row" class="navbox-group" style="width:1%">Organization</th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"></div><table class="nowraplinks navbox-subgroup" style="border-spacing:0"><tbody><tr><th id="Kernel" scope="row" class="navbox-group" style="width:1%">Kernel</th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/Linux_Foundation" title="Linux Foundation">Linux Foundation</a></li> <li><a href="/wiki/Linux_Mark_Institute" title="Linux Mark Institute">Linux Mark Institute</a></li> <li><a href="/wiki/Linus%27s_law" title="Linus's law">Linus's law</a></li> <li><a href="/wiki/Tanenbaum%E2%80%93Torvalds_debate" title="Tanenbaum–Torvalds debate">Tanenbaum–Torvalds debate</a></li> <li><a href="/wiki/Tux_(mascot)" title="Tux (mascot)">Tux</a></li> <li><a href="/wiki/SCO%E2%80%93Linux_disputes" title="SCO–Linux disputes">SCO disputes</a></li> <li><a href="/wiki/Linaro" title="Linaro">Linaro</a></li> <li><a href="/wiki/GNU_General_Public_License#Version_2" title="GNU General Public License">GNU GPL v2</a></li> <li><a href="/wiki/Menuconfig" title="Menuconfig">menuconfig</a></li> <li><a href="/wiki/List_of_Linux-supported_computer_architectures" title="List of Linux-supported computer architectures">Supported computer architectures</a></li> <li><a href="/wiki/Linux_kernel_version_history" title="Linux kernel version history">Version history</a></li> <li><a href="/wiki/Criticism_of_Linux" title="Criticism of Linux">Criticism</a></li></ul> </div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">Support</th><td class="navbox-list-with-group navbox-list navbox-even" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li>Developers <ul><li><i><a href="/wiki/The_Linux_Programming_Interface" title="The Linux Programming Interface">The Linux Programming Interface</a></i></li> <li><a href="/wiki/Kernel.org" title="Kernel.org">kernel.org</a></li> <li><a href="/wiki/Linux_kernel_mailing_list" title="Linux kernel mailing list">LKML</a></li> <li><a href="/wiki/Linux_conference" class="mw-redirect" title="Linux conference">Linux conferences</a></li></ul></li> <li>Users <ul><li><a href="/wiki/Linux_user_group" title="Linux user group">Linux User Group (LUG)</a></li></ul></li></ul> </div></td></tr></tbody></table><div></div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">Technical</th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"></div><table class="nowraplinks navbox-subgroup" style="border-spacing:0"><tbody><tr><th scope="row" class="navbox-group" style="width:1%">Debugging</th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/CRIU" title="CRIU">CRIU</a></li> <li><a href="/wiki/Ftrace" title="Ftrace">ftrace</a></li> <li><a href="/wiki/Kdump_(Linux)" title="Kdump (Linux)">kdump</a></li> <li><a href="/wiki/Linux_kernel_oops" title="Linux kernel oops">Linux kernel oops</a></li> <li><a href="/wiki/SystemTap" title="SystemTap">SystemTap</a></li> <li><a href="/wiki/Berkeley_Packet_Filter" title="Berkeley Packet Filter">BPF</a></li></ul> </div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="/wiki/Booting_process_of_Linux" title="Booting process of Linux">Startup</a></th><td class="navbox-list-with-group navbox-list navbox-even" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/Vmlinux" title="Vmlinux">vmlinux</a></li> <li><a href="/wiki/System.map" title="System.map">System.map</a></li> <li><a href="/wiki/Dracut_(software)" title="Dracut (software)">dracut</a></li> <li><a href="/wiki/Initrd" class="mw-redirect" title="Initrd">initrd</a></li> <li><a href="/wiki/Initramfs" class="mw-redirect" title="Initramfs">initramfs</a></li></ul> </div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="/wiki/Linux_kernel_interfaces" title="Linux kernel interfaces">ABIs</a></th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/Linux_Standard_Base" title="Linux Standard Base">Linux Standard Base</a></li> <li><a href="/wiki/X32_ABI" title="X32 ABI">x32 ABI</a></li></ul> </div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="/wiki/Linux_kernel_interfaces" title="Linux kernel interfaces">APIs</a></th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"></div><table class="nowraplinks navbox-subgroup" style="border-spacing:0"><tbody><tr><th scope="row" class="navbox-group" style="width:1%">Kernel</th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"></div><table class="nowraplinks navbox-subgroup" style="border-spacing:0"><tbody><tr><th scope="row" class="navbox-group" style="width:1%"><a href="/wiki/Linux_kernel_interfaces#SCI" title="Linux kernel interfaces">System Call<br />Interface</a></th><td class="navbox-list-with-group navbox-list navbox-even" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/POSIX" title="POSIX">POSIX</a> <ul><li><a href="/wiki/Ioctl" title="Ioctl">ioctl</a></li> <li><a href="/wiki/Select_(Unix)" title="Select (Unix)">select</a></li> <li><a href="/wiki/Open_(system_call)" title="Open (system call)">open</a></li> <li><a href="/wiki/Read_(system_call)" title="Read (system call)">read</a></li> <li><a href="/wiki/Close_(system_call)" title="Close (system call)">close</a></li> <li><a href="/wiki/Sync_(Unix)" title="Sync (Unix)">sync</a></li> <li>…</li></ul></li> <li><a href="/wiki/Linux_kernel_interfaces#Additions_to_POSIX" title="Linux kernel interfaces">Linux-only</a> <ul><li><a href="/wiki/Futex" title="Futex">futex</a></li> <li><a href="/wiki/Epoll" title="Epoll">epoll</a></li> <li><a href="/wiki/Splice_(system_call)" title="Splice (system call)">splice</a></li> <li><a href="/wiki/Dnotify" title="Dnotify">dnotify</a></li> <li><a href="/wiki/Inotify" title="Inotify">inotify</a></li> <li><a href="/wiki/Readahead" title="Readahead">readahead</a></li> <li>…</li></ul></li></ul> </div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="/wiki/Linux_kernel_interfaces#In–kernel_APIs" title="Linux kernel interfaces">In-kernel</a></th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/Advanced_Linux_Sound_Architecture" title="Advanced Linux Sound Architecture">ALSA</a></li> <li><a href="/wiki/Crypto_API_(Linux)" title="Crypto API (Linux)">Crypto API</a></li> <li><a href="/wiki/Io_uring" title="Io uring">io uring</a></li> <li><a href="/wiki/Direct_Rendering_Manager" title="Direct Rendering Manager">DRM</a></li> <li><a href="/wiki/Kernfs_(Linux)" title="Kernfs (Linux)">kernfs</a></li> <li><a href="/wiki/Memory_barrier" title="Memory barrier">Memory barrier</a></li> <li><a href="/wiki/New_API" title="New API">New API</a></li> <li><a href="/wiki/Read-copy-update" title="Read-copy-update">RCU</a></li> <li><a href="/wiki/Video4Linux" title="Video4Linux">Video4Linux</a></li> <li><a href="/wiki/IIO_Framework" title="IIO Framework">IIO</a></li></ul> </div></td></tr></tbody></table><div></div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="/wiki/User_space_and_kernel_space" title="User space and kernel space">Userspace</a></th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"></div><table class="nowraplinks navbox-subgroup" style="border-spacing:0"><tbody><tr><th scope="row" class="navbox-group" style="width:1%"><a href="/wiki/Daemon_(computing)" title="Daemon (computing)">Daemons</a>,<br /><a href="/wiki/Virtual_file_system" title="Virtual file system">File systems</a></th><td class="navbox-list-with-group navbox-list navbox-even" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li>bpffs</li> <li><a href="/wiki/Configfs" title="Configfs">configfs</a></li> <li><a href="/wiki/Devfs" class="mw-redirect" title="Devfs">devfs</a></li> <li><a href="/wiki/Devpts" title="Devpts">devpts</a></li> <li><a href="/wiki/Debugfs" title="Debugfs">debugfs</a></li> <li><a href="/wiki/Filesystem_in_Userspace" title="Filesystem in Userspace">FUSE</a></li> <li>hugetlbfs</li> <li>pipefs</li> <li><a href="/wiki/Procfs" title="Procfs">procfs</a></li> <li>securityfs</li> <li>sockfs</li> <li><a href="/wiki/Sysfs" title="Sysfs">sysfs</a></li> <li><a href="/wiki/Tmpfs" title="Tmpfs">tmpfs</a></li> <li><a href="/wiki/Systemd" title="Systemd">systemd</a> <ul><li><a href="/wiki/Udev" title="Udev">udev</a></li></ul></li> <li><a href="/wiki/Kmscon" title="Kmscon">Kmscon</a></li></ul> </div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="/wiki/Wrapper_library" title="Wrapper library">Wrapper<br />libraries</a></th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/C_standard_library" title="C standard library">C standard library</a> <ul><li><a href="/wiki/Glibc" title="Glibc">glibc</a></li> <li><a href="/wiki/UClibc" title="UClibc">uClibc</a></li> <li><a href="/wiki/Bionic_(software)" title="Bionic (software)">Bionic</a> <ul><li><a href="/wiki/Libhybris" title="Libhybris">libhybris</a></li></ul></li> <li><a href="/wiki/Dietlibc" title="Dietlibc">dietlibc</a></li> <li><a href="/wiki/Embedded_GLIBC" class="mw-redirect" title="Embedded GLIBC">EGLIBC</a></li> <li><a href="/wiki/Klibc" title="Klibc">klibc</a></li> <li><a href="/wiki/Musl" title="Musl">musl</a></li> <li><a href="/wiki/Newlib" title="Newlib">Newlib</a></li></ul></li> <li><a href="/wiki/Cgroups" title="Cgroups">libcgroup</a></li> <li><a href="/wiki/Direct_Rendering_Manager" title="Direct Rendering Manager">libdrm</a></li> <li><a href="/wiki/Advanced_Linux_Sound_Architecture" title="Advanced Linux Sound Architecture">libalsa</a></li> <li><a href="/wiki/Evdev" title="Evdev">libevdev</a></li> <li><a href="/wiki/Libusb" title="Libusb">libusb</a></li> <li><a href="/wiki/Io_uring" title="Io uring">liburing</a></li></ul> </div></td></tr></tbody></table><div></div></td></tr></tbody></table><div></div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">Components</th><td class="navbox-list-with-group navbox-list navbox-even" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/Loadable_kernel_module" title="Loadable kernel module">Kernel modules</a></li> <li><a href="/wiki/BlueZ" class="mw-redirect" title="BlueZ">BlueZ</a></li> <li><a href="/wiki/Cgroups" title="Cgroups">cgroups</a></li> <li><a href="/wiki/Linux_console" title="Linux console">Console</a></li> <li><a href="/wiki/Bcache" title="Bcache">bcache</a></li> <li><a href="/wiki/Device_mapper" title="Device mapper">Device mapper</a></li> <li><a href="/wiki/Dm-cache" title="Dm-cache">dm-cache</a></li> <li><a href="/wiki/Dm-crypt" title="Dm-crypt">dm-crypt</a></li> <li><a href="/wiki/Direct_Rendering_Manager" title="Direct Rendering Manager">DRM</a></li> <li><a href="/wiki/EDAC_(Linux)" class="mw-redirect" title="EDAC (Linux)">EDAC</a></li> <li><a href="/wiki/Evdev" title="Evdev">evdev</a></li> <li><a href="/wiki/Kernel_same-page_merging" title="Kernel same-page merging">Kernel same-page merging</a> (KSM)</li> <li><a href="/wiki/LIO_(SCSI_target)" title="LIO (SCSI target)">LIO</a></li> <li><a href="/wiki/Linux_framebuffer" title="Linux framebuffer">Framebuffer</a></li> <li><a href="/wiki/Logical_Volume_Manager_(Linux)" title="Logical Volume Manager (Linux)">LVM</a></li> <li><a href="/wiki/KMS_driver" class="mw-redirect" title="KMS driver">KMS driver</a></li> <li><a href="/wiki/Netfilter" title="Netfilter">Netfilter</a></li> <li><a href="/wiki/Netlink" title="Netlink">Netlink</a></li> <li><a href="/wiki/Nftables" title="Nftables">nftables</a></li> <li><a href="/wiki/Network_scheduler" title="Network scheduler">Network scheduler</a></li> <li><a href="/wiki/Perf_(Linux)" title="Perf (Linux)">perf</a></li> <li><a href="/wiki/SLUB_(software)" title="SLUB (software)">SLUB</a></li> <li><a href="/wiki/Zram" title="Zram">zram</a></li> <li><a href="/wiki/Zswap" title="Zswap">zswap</a></li></ul> <ul><li><a href="/wiki/Scheduling_(computing)#Linux" title="Scheduling (computing)">Process and I/O schedulers</a>:</li> <li><a class="mw-selflink selflink">Brain Fuck Scheduler</a></li> <li><a href="/wiki/Completely_Fair_Scheduler" title="Completely Fair Scheduler">Completely Fair Scheduler</a> (CFS)</li> <li><a href="/wiki/Earliest_eligible_virtual_deadline_first_scheduling" title="Earliest eligible virtual deadline first scheduling">Earliest eligible virtual deadline first</a> (EEVDF)</li> <li><a href="/wiki/Noop_scheduler" title="Noop scheduler">Noop scheduler</a></li> <li><a href="/wiki/O(n)_scheduler" title="O(n) scheduler">O(n) scheduler</a></li> <li><a href="/wiki/O(1)_scheduler" title="O(1) scheduler">O(1) scheduler</a></li> <li><a href="/wiki/SCHED_DEADLINE" title="SCHED DEADLINE">SCHED_DEADLINE</a></li> <li><a href="/wiki/SCHED_FIFO" class="mw-redirect" title="SCHED FIFO">SCHED_FIFO</a></li> <li><a href="/wiki/SCHED_RR" class="mw-redirect" title="SCHED RR">SCHED_RR</a></li></ul> <ul><li><a href="/wiki/Linux_Security_Modules" title="Linux Security Modules">Security Modules</a>: <a href="/wiki/AppArmor" title="AppArmor">AppArmor</a></li> <li><a href="/wiki/Exec_Shield" title="Exec Shield">Exec Shield</a></li> <li><a href="/wiki/Seccomp" title="Seccomp">seccomp</a></li> <li><a href="/wiki/Security-Enhanced_Linux" title="Security-Enhanced Linux">SELinux</a></li> <li><a href="/wiki/Smack_(software)" title="Smack (software)">Smack</a></li> <li><a href="/wiki/Tomoyo_Linux" title="Tomoyo Linux">Tomoyo Linux</a></li> <li><a href="/wiki/Linux_PAM" title="Linux PAM">Linux PAM</a></li></ul> <ul><li><a href="/wiki/Device_driver" title="Device driver">Device drivers</a> <ul><li><a href="/wiki/Comparison_of_open-source_wireless_drivers" title="Comparison of open-source wireless drivers">802.11</a></li> <li><a href="/wiki/Free_and_open-source_graphics_device_driver" title="Free and open-source graphics device driver">graphics</a></li></ul></li> <li><a href="/wiki/Raw_device" title="Raw device">Raw device</a></li></ul> <ul><li><a href="/wiki/Initramfs" class="mw-redirect" title="Initramfs">initramfs</a></li> <li><a href="/wiki/KernelCare" title="KernelCare">KernelCare</a></li> <li><a href="/wiki/Kexec" title="Kexec">kexec</a></li> <li><a href="/wiki/KGraft" title="KGraft">kGraft</a></li> <li><a href="/wiki/Kpatch" title="Kpatch">kpatch</a></li> <li><a href="/wiki/Ksplice" title="Ksplice">Ksplice</a></li></ul> </div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">Variants</th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/Mainline_Linux" class="mw-redirect" title="Mainline Linux">Mainline</a> <ul><li><a href="/wiki/Linux_kernel" title="Linux kernel">Linux kernel</a></li> <li><a href="/wiki/Linux-libre" title="Linux-libre">Linux-libre</a></li></ul></li> <li><a href="/wiki/High-performance_computing" title="High-performance computing">High-performance computing</a> <ul><li><a href="/wiki/INK_(operating_system)" title="INK (operating system)">INK</a></li> <li><a href="/wiki/Compute_Node_Linux" title="Compute Node Linux">Compute Node Linux</a></li> <li><a href="/wiki/Slurm_Workload_Manager" title="Slurm Workload Manager">SLURM</a></li></ul></li> <li><a href="/wiki/Real-time_computing" title="Real-time computing">Real-time computing</a> <ul><li><a href="/wiki/RTLinux" title="RTLinux">RTLinux</a></li> <li><a href="/wiki/RTAI" title="RTAI">RTAI</a></li> <li><a href="/wiki/Xenomai" title="Xenomai">Xenomai</a></li> <li><a href="/wiki/PREEMPT_RT" title="PREEMPT RT">PREEMPT_RT</a></li></ul></li> <li><a href="/wiki/Memory_management_unit" title="Memory management unit">MMU</a>-less <ul><li><a href="/wiki/%CE%9CClinux" title="ΜClinux">μClinux</a></li> <li><a href="/wiki/PSXLinux" title="PSXLinux">PSXLinux</a></li></ul></li></ul> </div><table class="nowraplinks navbox-subgroup" style="border-spacing:0"><tbody><tr><th id="Virtualization" scope="row" class="navbox-group" style="width:1%"><a href="/wiki/Virtualization" title="Virtualization">Virtualization</a></th><td class="navbox-list-with-group navbox-list navbox-even" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/Hypervisor" title="Hypervisor">Hypervisor</a> <ul><li><a href="/wiki/Kernel-based_Virtual_Machine" title="Kernel-based Virtual Machine">KVM</a></li> <li><a href="/wiki/Xen" title="Xen">Xen</a></li></ul></li> <li><a href="/wiki/OS-level_virtualization" title="OS-level virtualization">OS-level virtualization</a> <ul><li><a href="/wiki/Linux-VServer" title="Linux-VServer">Linux-VServer</a></li> <li><a href="/wiki/Lguest" title="Lguest">Lguest</a></li> <li><a href="/wiki/LXC" title="LXC">LXC</a></li> <li><a href="/wiki/OpenVZ" title="OpenVZ">OpenVZ</a></li></ul></li> <li>Other <ul><li><a href="/wiki/L4Linux" title="L4Linux">L4Linux</a></li> <li><a href="/wiki/ELinOS" title="ELinOS">ELinOS</a></li> <li><a href="/wiki/User-mode_Linux" title="User-mode Linux">User-mode Linux</a></li> <li><a href="/wiki/MkLinux" title="MkLinux">MkLinux</a></li> <li><a href="/wiki/Cooperative_Linux" title="Cooperative Linux">coLinux</a></li></ul></li></ul> </div></td></tr></tbody></table><div> </div></td></tr></tbody></table><div></div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="/wiki/Linux_adoption" title="Linux adoption">Adoption</a></th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"></div><table class="nowraplinks navbox-subgroup" style="border-spacing:0"><tbody><tr><th id="Rangeof_use" scope="row" class="navbox-group" style="width:1%"><a href="/wiki/Linux_range_of_use" title="Linux range of use">Range<br />of use</a></th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/Linux_desktop_environments" class="mw-redirect" title="Linux desktop environments">Desktop</a></li> <li><a href="/wiki/Linux_on_embedded_systems" title="Linux on embedded systems">Embedded</a></li> <li><a href="/wiki/Video_games_and_Linux" title="Video games and Linux">Gaming</a></li> <li>Thin client: <ul><li><a href="/wiki/Linux_Terminal_Server_Project" title="Linux Terminal Server Project">LTSP</a></li></ul></li> <li>Server: <ul><li><a href="/wiki/LAMP_(software_bundle)" title="LAMP (software bundle)">LAMP</a></li> <li><a href="/wiki/LYME_(software_bundle)" title="LYME (software bundle)">LYME-LYCE</a></li></ul></li> <li><a href="/wiki/Linux-powered_device" title="Linux-powered device">Devices</a></li></ul> </div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">Adopters</th><td class="navbox-list-with-group navbox-list navbox-even" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/List_of_Linux_adopters" title="List of Linux adopters">List of Linux adopters</a></li></ul> </div></td></tr></tbody></table><div></div></td></tr><tr><td class="navbox-abovebelow" colspan="2"><div> <ul><li><b><span class="nowrap"><span class="noviewer" typeof="mw:File"><a href="/wiki/File:NewTux.svg" class="mw-file-description"><img alt="icon" src="//upload.wikimedia.org/wikipedia/commons/thumb/b/b0/NewTux.svg/13px-NewTux.svg.png" decoding="async" width="13" height="16" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/b/b0/NewTux.svg/20px-NewTux.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/b/b0/NewTux.svg/27px-NewTux.svg.png 2x" data-file-width="625" data-file-height="750" /></a></span> </span><a href="/wiki/Portal:Linux" title="Portal:Linux">Linux portal</a></b></li> <li><b><span class="nowrap"><span class="noviewer" typeof="mw:File"><span><img alt="" src="//upload.wikimedia.org/wikipedia/commons/thumb/3/31/Free_and_open-source_software_logo_%282009%29.svg/16px-Free_and_open-source_software_logo_%282009%29.svg.png" decoding="async" width="16" height="16" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/3/31/Free_and_open-source_software_logo_%282009%29.svg/24px-Free_and_open-source_software_logo_%282009%29.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/3/31/Free_and_open-source_software_logo_%282009%29.svg/32px-Free_and_open-source_software_logo_%282009%29.svg.png 2x" data-file-width="512" data-file-height="512" /></span></span> </span><a href="/wiki/Portal:Free_and_open-source_software" title="Portal:Free and open-source software">Free and open-source software portal</a></b></li> <li><span class="noviewer" typeof="mw:File"><span title="Category"><img alt="" src="//upload.wikimedia.org/wikipedia/en/thumb/9/96/Symbol_category_class.svg/16px-Symbol_category_class.svg.png" decoding="async" width="16" height="16" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/en/thumb/9/96/Symbol_category_class.svg/23px-Symbol_category_class.svg.png 1.5x, //upload.wikimedia.org/wikipedia/en/thumb/9/96/Symbol_category_class.svg/31px-Symbol_category_class.svg.png 2x" data-file-width="180" data-file-height="185" /></span></span> <b><a href="/wiki/Category:Linux_kernel" title="Category:Linux kernel">Category</a></b></li></ul> </div></td></tr></tbody></table></div> <!-- NewPP limit report Parsed by mw‐web.codfw.main‐f69cdc8f6‐vlr7t Cached time: 20241124090703 Cache expiry: 2592000 Reduced expiry: false Complications: [vary‐revision‐sha1, show‐toc] CPU time usage: 1.066 seconds Real time usage: 1.290 seconds Preprocessor visited node count: 24178/1000000 Post‐expand include size: 189167/2097152 bytes Template argument size: 18816/2097152 bytes Highest expansion depth: 27/100 Expensive parser function count: 9/500 Unstrip recursion depth: 1/20 Unstrip post‐expand size: 122453/5000000 bytes Lua time usage: 0.473/10.000 seconds Lua memory usage: 7318996/52428800 bytes Number of Wikibase entities loaded: 1/400 --> <!-- Transclusion expansion time report (%,ms,calls,template) 100.00% 1084.094 1 -total 38.71% 419.671 83 Template:Rp 36.86% 399.601 83 Template:R/superscript 17.48% 189.482 249 Template:R/where 17.47% 189.367 1 Template:Reflist 14.03% 152.148 23 Template:Cite_web 11.84% 128.375 2 Template:Infobox 10.45% 113.245 8 Template:Navbox 9.38% 101.654 1 Template:Linux_kernel 8.43% 91.358 1 Template:Infobox_software --> <!-- Saved in parser cache with key enwiki:pcache:idhash:24281777-0!canonical and timestamp 20241124090703 and revision id 1258759347. Rendering was triggered because: page-view --> </div><!--esi <esi:include src="/esitest-fa8a495983347898/content" /> --><noscript><img src="https://login.wikimedia.org/wiki/Special:CentralAutoLogin/start?type=1x1" alt="" width="1" height="1" style="border: none; position: absolute;"></noscript> <div class="printfooter" data-nosnippet="">Retrieved from "<a dir="ltr" href="https://en.wikipedia.org/w/index.php?title=Brain_Fuck_Scheduler&oldid=1258759347">https://en.wikipedia.org/w/index.php?title=Brain_Fuck_Scheduler&oldid=1258759347</a>"</div></div> <div id="catlinks" class="catlinks" data-mw="interface"><div id="mw-normal-catlinks" class="mw-normal-catlinks"><a href="/wiki/Help:Category" title="Help:Category">Categories</a>: <ul><li><a href="/wiki/Category:Linux_kernel_process_schedulers" title="Category:Linux kernel process schedulers">Linux kernel process schedulers</a></li><li><a href="/wiki/Category:Free_software_programmed_in_C" title="Category:Free software programmed in C">Free software programmed in C</a></li><li><a href="/wiki/Category:Software_using_the_GPL_license" title="Category:Software using the GPL license">Software using the GPL license</a></li></ul></div><div id="mw-hidden-catlinks" class="mw-hidden-catlinks mw-hidden-cats-hidden">Hidden categories: <ul><li><a href="/wiki/Category:Webarchive_template_wayback_links" title="Category:Webarchive template wayback links">Webarchive template wayback links</a></li><li><a href="/wiki/Category:Articles_with_short_description" title="Category:Articles with short description">Articles with short description</a></li><li><a href="/wiki/Category:Short_description_matches_Wikidata" title="Category:Short description matches Wikidata">Short description matches Wikidata</a></li><li><a href="/wiki/Category:Wikipedia_articles_in_need_of_updating_from_November_2016" title="Category:Wikipedia articles in need of updating from November 2016">Wikipedia articles in need of updating from November 2016</a></li><li><a href="/wiki/Category:All_Wikipedia_articles_in_need_of_updating" title="Category:All Wikipedia articles in need of updating">All Wikipedia articles in need of updating</a></li></ul></div></div> </div> </main> </div> <div class="mw-footer-container"> <footer id="footer" class="mw-footer" > <ul id="footer-info"> <li id="footer-info-lastmod"> This page was last edited on 21 November 2024, at 13:34<span class="anonymous-show"> (UTC)</span>.</li> <li id="footer-info-copyright">Text is available under the <a href="/wiki/Wikipedia:Text_of_the_Creative_Commons_Attribution-ShareAlike_4.0_International_License" title="Wikipedia:Text of the Creative Commons Attribution-ShareAlike 4.0 International License">Creative Commons Attribution-ShareAlike 4.0 License</a>; additional terms may apply. By using this site, you agree to the <a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Terms_of_Use" class="extiw" title="foundation:Special:MyLanguage/Policy:Terms of Use">Terms of Use</a> and <a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Privacy_policy" class="extiw" title="foundation:Special:MyLanguage/Policy:Privacy policy">Privacy Policy</a>. Wikipedia® is a registered trademark of the <a rel="nofollow" class="external text" href="https://wikimediafoundation.org/">Wikimedia Foundation, Inc.</a>, a non-profit organization.</li> </ul> <ul id="footer-places"> <li id="footer-places-privacy"><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Privacy_policy">Privacy policy</a></li> <li id="footer-places-about"><a href="/wiki/Wikipedia:About">About Wikipedia</a></li> <li id="footer-places-disclaimers"><a href="/wiki/Wikipedia:General_disclaimer">Disclaimers</a></li> <li id="footer-places-contact"><a href="//en.wikipedia.org/wiki/Wikipedia:Contact_us">Contact Wikipedia</a></li> <li id="footer-places-wm-codeofconduct"><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Universal_Code_of_Conduct">Code of Conduct</a></li> <li id="footer-places-developers"><a href="https://developer.wikimedia.org">Developers</a></li> <li id="footer-places-statslink"><a href="https://stats.wikimedia.org/#/en.wikipedia.org">Statistics</a></li> <li id="footer-places-cookiestatement"><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Cookie_statement">Cookie statement</a></li> <li id="footer-places-mobileview"><a href="//en.m.wikipedia.org/w/index.php?title=Brain_Fuck_Scheduler&mobileaction=toggle_view_mobile" class="noprint stopMobileRedirectToggle">Mobile view</a></li> </ul> <ul id="footer-icons" class="noprint"> <li id="footer-copyrightico"><a href="https://wikimediafoundation.org/" class="cdx-button cdx-button--fake-button cdx-button--size-large cdx-button--fake-button--enabled"><img src="/static/images/footer/wikimedia-button.svg" width="84" height="29" alt="Wikimedia Foundation" loading="lazy"></a></li> <li id="footer-poweredbyico"><a href="https://www.mediawiki.org/" class="cdx-button cdx-button--fake-button cdx-button--size-large cdx-button--fake-button--enabled"><img src="/w/resources/assets/poweredby_mediawiki.svg" alt="Powered by MediaWiki" width="88" height="31" loading="lazy"></a></li> </ul> </footer> </div> </div> </div> <div class="vector-settings" id="p-dock-bottom"> <ul></ul> </div><script>(RLQ=window.RLQ||[]).push(function(){mw.config.set({"wgHostname":"mw-web.codfw.main-6b7f745dd4-gwq9f","wgBackendResponseTime":133,"wgPageParseReport":{"limitreport":{"cputime":"1.066","walltime":"1.290","ppvisitednodes":{"value":24178,"limit":1000000},"postexpandincludesize":{"value":189167,"limit":2097152},"templateargumentsize":{"value":18816,"limit":2097152},"expansiondepth":{"value":27,"limit":100},"expensivefunctioncount":{"value":9,"limit":500},"unstrip-depth":{"value":1,"limit":20},"unstrip-size":{"value":122453,"limit":5000000},"entityaccesscount":{"value":1,"limit":400},"timingprofile":["100.00% 1084.094 1 -total"," 38.71% 419.671 83 Template:Rp"," 36.86% 399.601 83 Template:R/superscript"," 17.48% 189.482 249 Template:R/where"," 17.47% 189.367 1 Template:Reflist"," 14.03% 152.148 23 Template:Cite_web"," 11.84% 128.375 2 Template:Infobox"," 10.45% 113.245 8 Template:Navbox"," 9.38% 101.654 1 Template:Linux_kernel"," 8.43% 91.358 1 Template:Infobox_software"]},"scribunto":{"limitreport-timeusage":{"value":"0.473","limit":"10.000"},"limitreport-memusage":{"value":7318996,"limit":52428800},"limitreport-logs":"table#1 {\n [\"size\"] = \"tiny\",\n}\ntable#1 {\n [\"size\"] = \"tiny\",\n}\n"},"cachereport":{"origin":"mw-web.codfw.main-f69cdc8f6-vlr7t","timestamp":"20241124090703","ttl":2592000,"transientcontent":false}}});});</script> <script type="application/ld+json">{"@context":"https:\/\/schema.org","@type":"Article","name":"Brain Fuck Scheduler","url":"https:\/\/en.wikipedia.org\/wiki\/Brain_Fuck_Scheduler","sameAs":"http:\/\/www.wikidata.org\/entity\/Q656481","mainEntity":"http:\/\/www.wikidata.org\/entity\/Q656481","author":{"@type":"Organization","name":"Contributors to Wikimedia projects"},"publisher":{"@type":"Organization","name":"Wikimedia Foundation, Inc.","logo":{"@type":"ImageObject","url":"https:\/\/www.wikimedia.org\/static\/images\/wmf-hor-googpub.png"}},"datePublished":"2009-09-09T05:22:43Z","dateModified":"2024-11-21T13:34:45Z","image":"https:\/\/upload.wikimedia.org\/wikipedia\/commons\/6\/65\/Simplified_Structure_of_the_Linux_Kernel.svg","headline":"process scheduler in Linux"}</script> </body> </html>