Tag Archives: Terminal Services

Threadlocker 128x128

ThreadLocker 2.0 is live!

Threadlocker 128x128Back in 2012 I wrote a utility called “ThreadLocker” for dealing with CPU heavy processes or multi threaded processes that have a nasty tendency to cause sluggish performance or even hangs in shared computing environments.

You can read all about the original concept here. My good friend and fellow CTP Barry Schiffer also wrote a really good article about the need for a product like ThreadLocker here.


Some history:

In essence, ThreadLocker was a utility for both shared and 1:1 desktop environments. It allowed you to layer in rules for processes that had a history of high or discruptive CPU usage, to protect the other users (in a shared environment) or to protect other running processes and the users interface (explorer.exe) while a large compute job was occurring.

ThreadLocker exploded with popularity and has received well over 100,000 downloads in the last three years. Alike ThinKiosk, ThreadLocker is a tool I regularly come across in my customers environments while consulting and it always suprised me with it’s uptake and popularity. I have observed ThreadLocker in VDI, SBC and even on stand alone workstations with great levels of success.


Moving on:

One of the frustrations I had with ThreadLocker, was any .NET based language (c#, vb.net, etc.) was never quick enough to be able to add an intelligent aspect to the utility without actually making CPU usage worse by implementing. ThreadLocker 1.0 relied on static rules and any new processes would have to be observed and added.

Recently David Coombes and I undertook the side project of redesigning ThreadLocker to run in c++, adding the raw speed we needed to be able to make intelligent decisions based on CPU usage and react in a fraction of a second to a sudden CPU spike. ThreadLocker 2.0 was designed to specifically tackle two issues:

  • Processes comsuming a large % of CPU and is multithreaded.
  • Many buggy or heavy processes, each consuming a core each.

We didnt want to tackle this with the approach of many others, where they’ll pause and resume threads many times a second creating a “SawTooth” effect on the processes CPU usage. We wanted the processes to run as fast as they need up to a certain threshold and only be restricted when contention is likely.

Having experienced other vendors approaches where process priority is dropped, many times this simply does not cut it as a heavy process, even at idle priority, will cause the other users and processes to feel slow and sluggish.

Why is ThreadLocker different?

With ThreadLocker 2.0, you can elect a percentage of your CPU cores that ThreadLocker can use for isolating these processes. When a process violates the ThreadLocking criteria, they are locked into these subset of cores to contend with any other processes that are also ThreadLocked, leaving well behaved processes to be able to take advantage of all cores in system. Once they start to behave again and do so for a certain amount of time, the processes are dropped back into the “wild” unless they decide to misbehave again.

This approach is extremely fast (ThreadLocker consumes less CPU than Microsoft’s own Task Manager) from a processing point of view and also has the benefit of allowing users to multitask with other applications while, for example, Excel hammers the ThreadLocking cores during a calculation.

The end result has been fantastic. Threadlocker can be installed and up and running in seconds. There is no longer a requirement for static rules and out of box, all aspects of the logic can be tuned to suit your environment, but more than likely wont be needed.

 Demo Video:



We are proud to announce the general availability of ThreadLocker 2.0 and more information can be found on our website at http://www.thinscaletechnology.com/threadlocker.


Announcing the ThinKiosk v4 Release


Thinkiosk Version 4.0 is the culmination of 9 months hard work, rebuilding ThinKiosk in a new development style to include the enterprise features many of you requested, adding a management server, secure key redirection technologies, local group policy control and a number of other features. After weeks of rigorous testing we’re delighted to announce the availability of ThinKiosk version 4… Today!

With the release of Version 4.0 we’re lifting the cloak on the company we’ve setup in order to support and further develop ThinKiosk, ThinScale Technology. We’ve set up ThinScale as a little software company to publish applications to the virtualisation community, tackling the smaller issues and annoyances we face day to day as consultants and administrators. More clever little products are in the pipeline, but for now enough about the company! Continue reading

Problems using Group Policy to set a mandatory profile…

Here’s a weird one i came across this week while configuring a mandatory profile, I was using my local laptop to configure group policy over the domain and could set the mandatory profile, but could not set the “Do not append the user name to the profile path” as it was missing from the group policy object!

After much head scratching we discovered an extra registry setting embedded in the group policy:

HKEY_LOCAL_MACHINESOFTWAREPoliciesMicrosoftWindows NTTerminal
ServicesWFDontAppendUserNameToProfile dword = 1.

Still none the wiser to the issue we found the following article http://support.microsoft.com/kb/908011. With this we put two and two together, and logged into a 2003 domain controller (sp2) and low and behold the policy setting was available.

It seems the group policy were updated in service pack 2 to reflect an issue when trying to configure mandatory profiles, I do aim to copy the policies to my laptop and see if i can update them to reflect the change but I’ve been to lazy so far :)

Update: Well i got around to testing the policy copy, if you copy the .adm files from the domain controller to your local machine with the problem, it will resolve the issue.

Heres an example of scripting the change:

pushd domaincontrollerc$windowsinf
copy *.adm %windir%inf

That’s it. reload gpedit.msc and you should see hte entries correctly.