Can I make Duplicati run slower?

I like Duplicati so much that I have donated to it twice. I have used it to recover files after computer crashes and failures and it has worked perfectly.

However, I do have one problem with it. It ties up my computer (a Quad core i7 Windows 7 with 16 Gb RAM) while it is running so that the computer becomes very unresponsive. It is not the CPU load but the disk IO. Since the disks are busy, any program that needs disk access has to wait.

I have set the Thread Priority to run at idle. I have set the throttle-upload. However, there are still times where my computer is non responsive because the disk drives are kept busy by Duplicati.

I have a suggestion. Is it possible to put a sleep(X) function in the main loop to slow the program down by a user selectable amount? I really don’t care if Duplicati runs slow on my machine. In fact I would prefer that it does run slowly if it meant that Duplicati had a negligible impact on my computer. That would allow me to run more frequent backups. I am constantly having to open the Duplicati GUI to set it to pause for 1 hour when I need to get work done. I would rather have it run slowly in the background

If there is some setting already there that can help, please let me know.

Thanks!

It is possible and I have experimented with it, but I did not think it worked so great. I was also looking into measuring the CPU usage so I could keep it under a specific threshold (say 50%), but I did not get it working reliably.

1 Like

Ken,
The problem I am having is not with CPU usage but IO usage. Disk drives are the bottleneck. Once the drives are busy, Windows and any other programs will slow to a crawl.

I believe I have a solution for you. In addition to being able to set the CPU priority, it is possible to separately set the IO priority of a program. Here is a link that explains it further, windows 7 - How to change I/O priority of a process or thread in Win7? - Super User

From the link, “The answer is a simple API call to an NT Native API, NTSetInformationProcess. It is defined as the class ‘IoPriority’ in the 2008 DDK. In NT6 only two levels supported: Very Low (background) and Normal. There are technically 5 levels defined – Critical, High, Normal, Low, and Very Low. The Critical level is reserved for paging operations. No data on the others.

However, the proper way to use the I/O priority is only to start a ‘background mode’ via a call to the Windows API SetProcessPriorityClass, supplying PROCESSS_MODE_BACKGROUND_BEGIN. This will cause it to use the very Low (background) I/O priority, along with an IDLE CPU priority class. When done, revert via PROCESS_MODE_BACKGROUND_END.
The SetThreadPriority API will also allow this same background mode for specific threads. Here you’d supply THREAD_MODE_BACKGROUND_BEGIN/END”

In the meantime I have found a free utility called ProcessHacker (https://processhacker.sourceforge.io/) that allows you to set the IO priority of a program. I set Duplicati’s IO priority to very low. My computer now runs Duplicati well in the background (Duplicati is running a backup as I type this) without affecting my computer’s performance.

It would be nice to include this feature directly into Duplicati if possible.

2 Likes

Ok, I will look into that. I did think up another idea that would limit the number of scanned files and the number of read blocks to a certain amount pr. second, which can be used to limit the intrusiveness, both in terms of disk, but also in terms of CPU.

Ok, so I added this to Duplicati for all three OS’s:

3 Likes