') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ', 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ', 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ', 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); })(); GitHub - bartman/busyboy: keeps the CPU busy · GitHub
Skip to content

Latest commit

History

6 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

busyboy

This program starts N threads, and tries to loop as fast as possible in each thread. It reports how fast the loops are spinning relative to their best performance. You'd use it along with a workload that is suspected to use more compute resources than is reported by Linux.

history

I have to be honest, I don't remember where this program came from, or who the original author was. To the best of my recollection it was written by someone on LKML, in the early 2000s, and provided as proof that you can get away with running computation on Linux without it being accounted for in top/ps/etc. I have kept it around for ages making small enhancements and eventually put it in a git repo in 2023.

usage

Build the program using make, there are no dependencies other than a standard C development environment with posix threads.

You probably want to run as many busyboy threads as there are logical processors in your system. It is further best to run busy boy with a low scheduling priority, so that it does not impact the actual workload.

$ nice -n19 ./busyboy -n $(nproc)
all cpus started.
100 100 100 99.7 100 99 100 98.9 96.8 99.4 99.1 98.9 95.6 98.7 97.1 98.7
100 99.7 100 98.2 99.4 98.6 98.2 100 97.4 99.8 99.9 99.9 97.9 99.5 99.1 95.2
98.4 99.3 99.6 99 98.9 97.8 95.1 99.2 98.2 99.6 98.9 99.6 95.3 98.5 93.9 97.7
99.2 99.2 99.7 98.2 98.5 99 98 99.2 95.1 98.8 99.7 99.9 99.4 98 99.8 98.2
^C

A line is printed roughly every second, with how fast each thread was able to run as a percentage of the fastest we have observed to this point.

You can also run busyboy in summary mode:

$ nice -n19 ./busyboy -n $(nproc) -s
all cpus started.
0.000 97.053 100.000 97.098
87.127 95.374 100.000 95.427
83.851 96.019 99.176 96.086
94.614 97.068 98.371 97.073
^C

Each line shows: lowest score, mean score, max score, and standard deviation

The values could fall bellow 100% if:

  • system is using CPU frequency scaling and clock cycle goes up and down
  • other threads are using CPU cycles and not letting our busy boy run

About

keeps the CPU busy

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages