#StackBounty: How to solve a very sluggish Windows 10 UI

Bounty: 250

Just recently my PC’s performance has become dismal, I even got about 10 ‘pauses’ in the editor while typing these two sentences. Now if I used Process Explorer, I can sort by CPU, memory, and IO, descending, so the culprits are always visible at the top of the table.

The problem with that is that the top resource hogs change very rapidly, and it is hard to narrow down processes that are long term hogs. I would like to monitor per process CPU, memory, and IO over several hours or days, and log this data, and then extract reports to identify the lager and more consistent hogs.

I have looked at Process Monitor, but that seems more oriented to capture process activities vs. overall resource usage, and I haven’t yet found a way to aggregate these activities by summing and grouping by process.

The problem sometimes seems to be I/O related, based on Process Explorer, and sometimes on CPU “overloading”. I would like to track and log usage of these resources per process, for every process, over a period of 24 to 48 hours, as the sluggishness is transient.

It is however more pronounced in some applications, like Chrome and Visual Studio, while e.g. Notepad++ suffers no bad performance. I am also starting to suspect slow memory paging to and from disk, and am anxiously awaiting opportunity to get an SSD for the OS and one or two large on I/O apps, but that will take some time.

Get this bounty!!!

#StackBounty: Copying files using MTP leads to 99% disk utilization

Bounty: 50

Since Android phones are no longer mounted as an external drive I’m having an issue with a copying of large amount of photos from the phone (no matter what – LG G3, Galaxy S7) to the laptop (Windows 10).

It starts at pretty good speed – I can see file name changing 3-4 times per second in the copying dialog – and then getting slower and slower till the moment when single file name could be displayed for up to 10 sec.

I would probably just live with it but I found that laptop’s performance degrades as well during this process as copying brings 99% disk utilization while transfer speed is far below the maximum for the SSD:

99% Disk utilization with transfer speed of 1.4MB/s

How to track down and fix the reason it is happening?

Get this bounty!!!


What is Gearman?

Gearman provides a generic application framework to farm out work to other machines or processes that are better suited to do the work. It allows you to do work in parallel, to load balance processing, and to call functions between languages. It can be used in a variety of applications, from high-availability web sites to the transport of database replication events. In other words, it is the nervous system for how distributed processing communicates. A few strong points about Gearman:

  • Open Source It’s free! (in both meanings of the word) Gearman has an active open source community that is easy to get involved with if you need help or want to contribute. Worried about licensing? Gearman is BSD.
  • Multi-language – There are interfaces for a number of languages, and this list is growing. You also have the option to write heterogeneous applications with clients submitting work in one language and workers performing that work in another.
  • Flexible – You are not tied to any specific design pattern. You can quickly put together distributed applications using any model you choose, one of those options being Map/Reduce.
  • Fast – Gearman has a simple protocol and interface with an optimized, and threaded, server written in C/C++ to minimize your application overhead.
  • Embeddable – Since Gearman is fast and lightweight, it is great for applications of all sizes. It is also easy to introduce into existing applications with minimal overhead.
  • No single point of failure – Gearman can not only help scale systems, but can do it in a fault tolerant way.
  • No limits on message size – Gearman supports single messages up to 4gig in size. Need to do something bigger? No problem Gearman can chunk messages.
  • Worried about scaling? – Don’t worry about it with Gearman. Craig’s List, Tumblr, Yelp, Etsy,… discover what others have known for years.

Content is being updated regularly, so please check back often. You may also want to check out other forms of communication if you would like to learn more or get involved!

How Does Gearman Work?

Gearman Architecture

A Gearman powered application consists of three parts: a client, a worker, and a job server. The client is responsible for creating a job to be run and sending it to a job server. The job server will find a suitable worker that can run the job and forwards the job on. The worker performs the work requested by the client and sends a response to the client through the job server. Gearman provides client and worker APIs that your applications call to talk with the Gearman job server (also known as gearmand) so you don’t need to deal with networking or mapping of jobs. Internally, the Gearman client and worker APIs communicate with the job server using TCP sockets. To explain how Gearman works in more detail, lets look at a simple application that will reverse the order of characters in a string. The example is given in PHP, although other APIs will look quite similar.

How Is Gearman Useful?

Gearman Working

You can use Gearman as an interface between a client and a worker written in different languages. If you want your PHP web application to call a function written in C, you could use the PHP client API with the C worker API, and stick a job server in the middle.

Gearman can also be useful when the worker code is put on a separate machine (or cluster of machines) that are better suited to do the work.
Say your PHP web application wants to do image conversion, but this is too much processing to run it on the web server machines.
You could instead ship the image off to a separate set of worker machines to do the conversion, this way the load does not impact the performance of your web server and other PHP scripts. By doing this, you also get a natural form of load balancing since the job server only sends new jobs to idle workers. If all the workers running on a given machine are busy, you don’t need to worry about new jobs being sent there. This makes scale-out with multi-core servers quite simple. You may have 16 cores on a worker machine. Start up 16 instances of your worker (or perhaps more if they are not CPU bound). It is also seamless to add new machines to expand your worker pool, just boot them up, install the worker code, and have them connect to the existing job server.

For more details on specific uses and installations, go to Gearman’s examples page.