On 12/23/2017 12:19 PM, James Courtier-Dutton wrote: > Hi, > > During a btrfs balance, the process hogs all CPU. > Or, to be exact, any other program that wishes to use the SSD during a > btrfs balance is blocked for long periods. Long periods being more > than 5 seconds. > Is there any way to multiplex SSD access while btrfs balance is > operating, so that other applications can still access the SSD with > relatively low latency? > > My guess is that btrfs is doing a transaction with a large number of > SSD blocks at a time, and thus blocking other applications. > > This makes for atrocious user interactivity as well as applications > failing because they cannot access the disk in a relatively low latent > manner. > For, example, this is causing a High Definition network CCTV > application to fail. > > What I would really like, is for some way to limit SSD bandwidths to > applications. > For example the CCTV app always gets the bandwidth it needs, and all > other applications can still access the SSD, but are rate limited. > This would fix my particular problem. > We have rate limiting for network applications, why not disk access also? > > Kind Regards > > James > On most I/O intensive programs in Linux you can use "ionice" tool to change the disk access priority of a process. [1] This allows me to run I/O intensive background scripts in servers without the users noticing slowdowns or lagging, of course this means the process doing heavy I/O will run more slowly or get outright paused if higher-priority processes need a lot of access to the disk. It works on btrfs balance too, see (commandline example) [2]. If you don't start the process with ionice as in [2], you can always change the priority later if you get the get the process ID. I use iotop [3], which also supports commandline arguments to integrate its output in scripts. For btrfs scrub it seems to be possible to specify the ionice options directly, while btrfs balance does not seem to have them (would be nice to add them imho). [4] For the sake of completeness, there is also "nice" tool for CPU usage priority (also used in my scripts on servers to keep the scripts from hogging the CPU for what is just a background process, and seen in [2] commandline too). [5] 1. http://man7.org/linux/man-pages/man1/ionice.1.html 2. https://unix.stackexchange.com/questions/390480/nice-and-ionice-which-one-should-come-first 3. http://man7.org/linux/man-pages/man8/iotop.8.html 4. https://btrfs.wiki.kernel.org/index.php/Manpage/btrfs-scrub 5. http://man7.org/linux/man-pages/man1/nice.1.html -Alberto ��.n��������+%������w��{.n�����{����n�r������&��z�ޗ�zf���h���~����������_��+v���)ߣ�
