Bitsum’s innovative (though now over 15 years old!) ProBalance algorithm will mitigate the effects of excessive CPU loads on system responsiveness. This is proven in both synthetic and real-world tests, even on the highest-end multi-core processors available today.
Put simply, during a high CPU load, without ProBalance, you can expect lags in keyboard and mouse activity, as well as other I/O, but with ProBalance, mouse and keyboard activity will be absolutely fluid.
Our algorithm has always been surprisingly efficacious and we’ve fine tuned it over the last 15 years! It is designed to act conservatively and safely. It makes only marginal, temporary changes during it’s activities and has no deleterious effects. It is able to do this because it takes only a small fraction of CPU cycles to restore basic responsiveness, thus taking these from the overall pool has a negligible impact on performance, but a huge impact on responsiveness.
Put simply, during a high CPU load, without ProBalance, you can expect lags in keyboard and mouse activity, as well as other I/O, but with ProBalance, mouse and keyboard activity will be absolutely fluid.
Bitsum is the ONLY provider of the original and well-maintained ProBalance algorithm. Cheap copies have many issues, things we’ve sorted out over the last 15 years. It is recommended that you use our implementation, else you may do more harm than good.
How is a CPU shared among all running processes?
A CPU core can only do one thing at a time. Therefore, to multi-task, a CPU core is quickly switched between all active threads on the system. It switches between threads so quickly that it appears multiple processes are running at the exact same time (simultaneously), when in fact they are just taking turns – concurrently. For multi-core systems, this is still true, except that there are more CPU’s available for thread execution, thus allowing some true simultaneous execution instead of just concurrent execution.
When the threads of multiple processes need to use the CPU at the same time, the priority level of each thread is used to help determine which should get the CPU next (which is most important). By temporarily lowering the priority class of overly active background processes, as ProBalance does, your PC is kept responsive even in the face of high CPU loads. Lowering the priority class of a process lowers the priority of all threads in that process. When acting on a process, you are essentially changing the base priority from which the individual priorities of all threads of that process are derived from. In this way, the relative priorities between threads in a process are kept the same.
Process Priority Classes
The purpose of priority classes is to keep all thread priorities relative to one another. For instance, when you lower a process priority class, it’s lower priority propagates to all individual thread priorities (the actual priority used is a sort of sum of the two). Thus, it does not affect the priority relationship between the threads themselves. So an app can have a high and low priority thread, which *it* set , and the relation between them will always be high/low no matter what the process priority class is.
Reserved for time critical processes. Has a security privilege usually not available to limited users.
Processes that should take the most precedence, except for time critical processes.
Processes that should take a little precedence over most other processes.
Processes whose CPU servicing is not as critical as others.
Processes whose CPU servicing is not at all time critical.
*Remember, each thread within a process has its own priority too (defined differently than above). Thread priorities are combined with the process priority class to yield the effective priorities as used by the CPU scheduler.
What’s the problem?
Windows has a particularly bad problem dealing with threads that decide they want to consume every bit of CPU time they can get their hands on (CPU bound threads). A single CPU bound thread running at Normal priority can bring an entire single-CPU system to a stall, as demonstrated by our graphical proof of concept below. Yes, it is true – believe it or not! It is this worst case scenario that Process Lasso was originally written to address. By temporarily lowering the priority of the offending process, your PC can be saved from a full stall.
Additional testing and refinement revealed that our algorithm not only protected against this worst-case scenario, but also was immensely useful at balancing average CPU loads. The small and conservative adjustments ProBalance makes are truly efficacious at helping to retain PC responsiveness and CPU fairness to all processes.
To improve fairness, the CPU scheduler of some operating systems, such as Linux, penalize CPU bound processes while rewarding I/O bound processes. This concept is similar to what ProBalance effectively does. Most threads are I/O bound. They give up their time slices pre-maturely as they enter a wait state for some type of I/O. However, CPU bound (CPU hungry) threads also exist from time to time, and do a real number of the less greedy I/O bound threads. These ‘greedy threads’ are at the heart of the scheduling problem mitigated by Process Lasso’s ProBalance.
What is ‘ProBalance’ optimization?
ProBalance (Process Balance), is the name of our proprietary algorithm that dynamically adjusts the priority of running processes in an effort to keep your system responsive during high loads.
When there is a high load on the system CPU(s), the responsiveness of the PC can be severely impacted. On a single processor PC, it takes only one CPU hungry thread running at normal priority to bring the entire system to stall. Even high priority threads get totally starved of CPU cycles by a CPU hungry thread running at normal priority. This problem is inherent to the design of the Windows CPU scheduler and general OS architecture. Sure, it seems like such a problem should NOT exist — but it does, and its easily demonstrated (see ‘skeptics’ section below).
The casual user will often find their PC’s responsiveness diminished for brief periods of time (a micro lag). Sometimes this is due to an error occurring in a background process, and other times it is simply because there is such a high load on the CPU. You probably have experienced this before – mouse movement gets jerky and every action is terribly slow.
Process Lasso’s ProBalance intelligently lowers the priority class of background processes when they may be interfering with system responsiveness. This doesn’t hurt the performance of background processes since they still get a considerable amount of the available CPU time, but it helps the responsiveness of foreground processes tremendously. After all, usually it just takes a few CPU cycles to keep the foreground process responsive. Taking these from background processes, when necessary, is hardly detrimental to them. Also, the adjustment is temporary, so its undone as soon as system conditions change. Process Lasso is designed to be minimally obtrusive, lowering priorities only when appropriate, and making sure that the background processes still perform just fine.
Phrased another way (from a question we had asked):
So how does ProBalance make a difference? Well, it turns out that by *marginally*, dynamically, and temporarily decreasing the priority class of problematic background processes, that 1% or less of CPU cycles necessary to let you have fluid mouse and keyboard movement, or in worst case scenarios, control of your PC at all, is available.
Betanews on ProBalance:
“Process Lasso’s headline technology is ProBalance, a smart tool which monitors running processes and intelligently adjusts the priority of resource hogs as they appear.
Can this really make a difference? We used the developer’s (Bitsum) “CPU Eater” demo to create a process with 48 active threads, and tried launching Chrome (with its core files cached). It took 30-40 seconds to appear with ProBalance disabled, under 1 second with it turned on.
That was a very extreme example, so we tried again with 16 threads (one per core), and Chrome loaded in 5 seconds; 8 threads and it loaded in around 2, still more than twice the ProBalance-enabled time.
We tried a few other CPU-stressing apps with similar results. If you’re running multiple applications at the same time, and something tries to hog your CPU, then Process Lasso’s priority tweaks generally mean your system stays very responsive.”
Reference – Betanews Mike Williams
Is ProBalance effective for multi-core PCs?
Yes, unquestionably ProBalance has efficacy even on the latest generation of processors, and this is expected to continue to be true for the foreseeable future.
Central Processing Units are no longer getting that much faster. We’ve approached physical limitations of the underlying silicon, reached the thermal limit that most cooling systems can handle, and entered a new era of energy efficiency. That means that instead of making processors that much faster in each passing generation, the chip makers instead went parallel. This means more CPU’s are available to execute code, but since most applications are still primarily single-threaded, there is still a substantial CPU bottleneck.
At Bitsum we’ve also well demonstrated that even on a multi-core system, if a single core is fully consumed by a CPU bound thread, the PC as a whole can suffer odd and unpredictable effects on overall responsiveness. Lags, stalls, and freezes all start to occur as soon as a single core is fully saturated.
Should I re-prioritize all my processes, ranking them in importance to me?
Absolutely NOT. Some programs out there encourage you to do just that, but it is dangerous. The authors of these programs are probably not aware of the dangers, or otherwise don’t care. While Process Lasso supports setting default (sticky) priorities, it is only meant to be used under certain appropriate circumstances. If you aren’t an expert, it is best to let Process Lasso’s carefully designed ProBalance algorithm dynamically adjust process priorities as necessary.
Proof of Concept – Does Process Lasso’s ProBalance really work?
With all the various scams out there, such as RAM defragmentation software (ugh!), it is natural for some users to be skeptical. The most common argument comes from those who have overconfidence in the performance of the Windows CPU scheduler. These people believe that *if* the Windows scheduler is written as it should be, then surely normal priority threads can’t substantially interfere with the performance of other normal (and above) priority threads. This argument is echoed particularly in non-Windows crowds who haven’t experienced the real-world performance of the Windows CPU scheduler.
Most Windows developers will tell you they are disappointed with the Windows CPU scheduler. They will tell you of a time when they had a bug that caused an infinite loop in a normal priority thread running in a process of normal priority class. Much to their dismay, their system was brought to a stall. They’ve seen this happen. They’ve stood in disbelief.
The truth is that, on a single CPU system, a single thread of normal priority can bring the entire PC to a near freeze! Even high priority threads can get starved of CPU time by a CPU hungry thread of normal priority. Yes, amazing but true. For multi-CPU systems, the number of threads required to bring the system to a complete stall is equal to the number of CPU’s available. Don’t believe us? Try our demonstration app, or write your own. Any thread that does nothing but eat up CPU cycles without restraint will demonstrate this phenomenon.
We have developed a ‘CPU eater’ that you can test Process Lasso with. This CPU Eater creates a handful of CPU consuming threads running at normal priority. Now, if the Windows CPU scheduler behaved like we would expect, the PC would handle this small load of normal priority threads just fine. That’s not what occurs though. Instead, the Windows CPU Scheduler allows for complete monopolization of the CPU! Now, see for yourself …
Download 32-bit CPUEater or Download 64-bit CPUEater
How to use the CPU Eater to demonstrate Process Lasso’s ProBalance efficacy:
- Download and run the CPU Eater (32-bit or 64-bit)
- Press the ‘START’ button to start the CPU Eater
- Your PC should grind to a near halt! Don’t worry, it will stop ‘eating’ in a few seconds
- NOW, download and install Process Lasso
- Press the ‘START’ button to start the CPU Eater once again
- With Process Lasso’s ProBalance, responsiveness is retained during even this high CPU load!
Keep in mind that the threads of the background process the CPU Eater launches are all running at NORMAL priority, and they aren’t doing anything besides run in pointless infinite loops. No adjustments are made, we just let Windows handle it. Any application running on your computer has the potential to cause the same effect as our CPU Eater did.
The above simple test takes 2 minutes. Give it a try!
This is no trick! You can create your own CPU Eater with a simple while(1) loop at NORMAL priority. If you run at a higher or lower priority class, you will need to change the ProBalance option ‘Ignore processes of non-normal priority’. This is done by default to exclude processes that have set their own specific priority class, under the assumption that they did such for a good reason.
How our test works
A demonstration of the deficiencies in the Windows scheduler is easy. First, for the sake of simplicity, we’ll start describing a system that has a single CPU. The demonstration is easily scaled to multiple cores, but it is easier to describe the concept for a single CPU system.
First, create a process that does nothing but run in an infinite loop, thereby consuming all CPU cycles available to it. We’ll call this a ‘CPU eater’. Now, launch this process as any other application, at a normal priority class. If the Windows CPU scheduler works as one would expect it to, the performance of other processes on the system, and the foreground process, shouldn’t be severely impacted. Unfortunately, you’ll find that this single process, running at normal priority, actually so starves other processes of CPU cycles that the system grinds to a near halt — even termination of the offending process is very difficult. This is true even with the Vista CPU scheduler, despite its improvements.
To scale this argument up to multiple CPU’s, simply allow the ‘CPU eater’ process to have multiple threads, or launch more instances of the CPU eater process. The same effect will be seen.
ThreadRacer is a separate benchmarking tool in EARLY ALPHA. See this page for information on it. It’s intent is NOT to show the effects of ProBalance, though could be used for that. It is more to show the effects of modern multi-core designs by AMD and Intel, where logical processors share computational resources (e.g. Intel HyperThreading and AMD Bulldozer Core Modules).
Why no fix from Microsoft?
At worst, this problem would be considered an edge case at Microsoft, and not worth the risk inherent in making a major change to their CPU scheduler. Such a change could affect legacy software. Further, they anticipate applications to mostly control themselves, and not monopolize the CPU.
Further, in a high CPU load situation with equal thread priorities, it is impossible for Microsoft to know for sure which thread really needs the CPU most.
With a little ‘market intelligence’, some logic, and help from the user, Process Lasso’s ProBalance can do better by making intelligent, dynamic, temporary , and marginal adjustments to the process priority class of offending applications — saving your PC from a total stall or simply increasing responsiveness.
What about Foreground Boosting?
Foreground boosting is a common scheme used by some snake-oil software. The foreground process is that which currently has the keyboard and mouse focus. This means there is only ever one foreground process at a time. Windows already applies foreground boosting by giving the foreground thread longer time slices. Further increasing the priority of the foreground process and/or the specific foreground thread is not effective and can be harmful. Remember, giving a process a higher priority does not mean it will run faster. It simply means if several processes are active at once, it will have a higher precedence. However, if any single process has too high a precedence over other processes, as foreground boosting would result in, complications can occur.
Be very wary of any utility that claims to boost PC performance by increasing the priority of the foreground process. In some cases, the author of the program simply doesn’t understand the CPU scheduler and why this is a bad idea. In other cases, companies don’t care and are just trying to make a profit. In short, it is a very wrong solution and should be avoided at all costs.
Research and links (external and internal)
The issues that Process Lasso’s ProBalance addresses are well documented throughout the internet. Since we may be perceived to have a bias (though we are biased only towards the truth), we decided to publish some of this third party research. Here are some quick links, and we’ll add more soon.
- Everything you never wanted to know about OS multi-tasking (and why out of control processes need priority adjustment)
“I should also note that Windows has other scheduling complications, such as “foreground” and “background” tasks […] However, the bottom line, in my humble opinion, is that the operating system is more concerned in ensuring that a task that is not ready to run does not, than making sure all tasks get a fair shake. […] We can, however, detect thread and process CPU utilization, and help the operating system to adjust the prioritization.”
– TMergent Technologies
- Hardware Virtualization: the Nuts and Bolts
“One process that takes up 100% of the CPU time may slow the other applications to snail speed for example, despite the fact that modern OSes use preemptive multitasking.”
– Johan De Gelas, AnandTech
- From a former competitor that popped up briefly:
“Priorities and their purpose are often poorly understood. Usually the misapprehension exists that if a process is taking a long time to complete then, if anything, its priority should be increased with the intent to make it finish faster. In most cases the CPU is spending near to all of its time executing the process anyway, so increasing the priority is only going to tell the scheduler to do what it is already doing. It may seem paradox but it is in fact more sensible to reduce the priority of the busy process so that the system is prepared to let other processes have some time thus allowing them to remain functional. In most cases other processes will not be using a significant amount of the CPU’s time and allowing them to execute when they want to will not slow the busy process by any notable amount. Computer applications simply have to be idle practically all of the time in order for them to react quickly when the user interacts with them. Therefore, allowing a well behaved application to continue to respond in such a way will not take a significant amount of time away from the busy process.”
– Peter Ball
- Quote from Inside the Linux scheduler (IBM) – an example of another OS scheduler’s attempt to address this
To prevent tasks from hogging the CPU and thus starving other tasks that need CPU access, the Linux 2.6 scheduler can dynamically alter a task’s priority. It does so by penalizing tasks that are bound to a CPU and rewarding tasks that are I/O bound. I/O-bound tasks commonly use the CPU to set up an I/O and then sleep awaiting the completion of the I/O. This type of behavior gives other tasks access to the CPU.
FIRST RULE OF BITSUM – DO NO HARM
Process Lasso was created with one primary rule ‘Do no harm’. Therefore, its ProBalance algorithm only makes changes believed to be entirely safe. Further, when a change is needed, it makes the most minimal one possible. We look at this as a conservative approach. We’ve seen other software not be so kind, believe it or not. Beware of gimmicks out there that boost priorities carelessly. Many of these gimmicks boost the foreground process priority to High, which is not only unhelpful, but is also unsafe. Try those utilities with our demo – or write your own CPU Eater if you don’t trust ours, it couldn’t be more simple to create. In C, a ‘while(1);’ (infinite loop) is all it takes…
When you go to make manual changes to certain system processes, or enable certain features of Process Lasso, warnings are shown that inform you of possible risks. However, we can’t possibly account for every conceivable user induced error and/or software environment, so its possible custom modifications to Process Lasso’s configuration could cause unforeseen negative consequences. We furthermore can’t warn of all possible risks, so we simply recommend NOT changing the default settings unless you are an expert. Carelessly changing the priority class of processes is potentially detrimental to the stability of your PC. We recommend you just let Process Lasso’s ProBalance algorithm do its job, unless you know what you are doing.
Since Process Lasso allows such advanced configuration tweaks, we must issue a legal warning at install (a EULA). As always, you assume all risk and liability for any damages, tangible or intangible, resulting from the use or misuse of our software. If you do not agree with that, then we can not allow use of our software. The full EULA is presented prior to install. If you can not read AND agree to it, then you must cancel the install.