25

My HDD is slow 5400RPM and when working with 10GB size files it is impossible to use the computer until that big file finish re-creating a new copy/muxing/writing/etc. depends on process, the thing is it eats up all HDD speed and no other program can be used while this process runs.

So I was thinking maybe I could limit HDD write speed for programs I work with, so then it would reserve free HDD leftover speed to use for browsing internet or playing mp3s while the big files are being processed.

5 Answers5

14

Unfortunately, you can't do that. Hardware is abstracted from applications and even parts of the OS. In essence, the application says "write this to disk" and the OS handles it. The application doesn't handle how or even when it gets written. All of this is handled at the driver and kernel level and there is no real way to change this.

Even if you could do this, the fact is you are using a spinning magnetic disk - and a very slow one at that - you wouldn't see much gain. The drive is constantly spinning and the heads are moving along the disk. Even if you wrote to your file less, the disk will constantly be seeking the right areas on the disk to read/write to/from.

Your best option would be to get another drive and do your work on that drive, leaving your first drive for your internet, MP3s, etc.

P.S. You didn't mention how much RAM you have. Swapping could be a factor in the slow speed. Depending on how much RAM you have, adding more will only help.

Glorfindel
  • 4,158
Keltari
  • 75,447
10

Process Lasso allows you to prioritize I/O. From their FAQ:

New in v4.1 (v4.09 beta), Process Lasso has explicit current and default I/O priority settings available those who require them. This only applies to NT6+ (Vista,Win7,...).

HOWEVER, Vista's I/O prioritization is based on the priority of the thread doing the I/O, which is dependent on the priority class of the process doing the I/O. There are actually only two levels of priority usable by applications, Normal and Very Low. Although there are technically 5, only these two are implemented or usable by processes.

Therefore, adjustment of the thread priorities will propagate to the I/O of that thread. In this way, Process Lasso already does I/O prioritization. Microsoft recommends applications adjust their I/O priority based by setting the calling thread's priority (directly or by adjustment of the process priority base class).

See also the paper on I/O prioritization from Microsoft.

niutech
  • 1,126
1

Use the Sysinternals "Process Explorer" to set the priority to 'Background: 4 (Low I/O and Memory Priority)'

Find the process that is using Disk I/O by right-clicking the Column Headings and under Process I/O add the column I/O Delta Writes. Then click on that column to sort by it, and the offender is likely to be the top process. Whatever way you use to find the process, then right-click the process and set it to Background: 4 priority.

Subsequently right-click the process again, go to Properties and look at the Performance tab and you should see I/O Priority set to Very Low.

This would be the equivalent of using nice and ionice under Linux.

You should find a significant improvement to the system performance and responsiveness after doing this. You will have to re-do this after rebooting and/or after the process exits and restarts.

1

What I do when I have a process that keeps eating all my disk I/O on Windows is bringing up Process Explorer and pausing the offending process. After I'm done with my business and am ready to wait a bit I resume it. It's definitely not the most productive way of doing it since it's all-or-nothing way of controlling disk I/O and your process will have to wait while you use your computer, but so far I haven't seen any better alternative.

On the other hand, if you can do your process on Cygwin, you can install pv on your computer and use it as the first or final step with an option (I think it's -r) to throttle pv's output rate.

RAKK
  • 355
  • 5
  • 14
0

I will rephrase the question and also ask it, and I hope I have luck:

How can you limit a program its HD connection speed, required for read/write data on the hardone. Why would you want that? Couse in case of B/uTorrents .exe-s if you have CPU input for the required data transfer too much to handle properly or you have slow external hard drive or combo, then when downloading with high speed internet or checking torrent's data analysis the interface of the OS will start lagging badly - like 5 seconds lag. In case of high speed connection and high HD usage you can just lower the maximum download rate. But in case of "Checking..." torrent status how do you lower the "high speed HD connection".

Windows 11 here but I think it hardly matters. The case is the talk between the .exe, the HD, and the CPU and other hardware but basically low budget ones.

The control I want is to be able to limit the connection speed between the .exe and the hard drive to acheive similar effect on the HD speed like when lowering the internet connection speed?