Hi, thanks for the answer, I will answer between the lines.

On 15.12.2014 08:45, Robert White wrote:
> On 12/14/2014 08:50 PM, Nick Dimov wrote:
>> Hello everyone!
>>
>> First, thanks for amazing work on btrfs filesystem!
>>
>> Now the problem:
>> I use a ssd as my system drive (/dev/sda2) and use daily snapshots on
>> it. Then, from time to time, i sync those on HDD (/dev/sdb4) by using
>> btrfs send / receive like this:
>>
>> ionice -c3 btrfs send -p /ssd/previously_synced_snapshot /ssd/snapshot-X
>> | pv | btrfs receive /hdd/snapshots
>>
>> I use pv to measure speed and i get ridiculos speeds like 5-200kiB/s!
>> (rarely it goes over 1miB). However if i replace the btrfs receive with
>> cat >/dev/null - the speed is 400-500MiB/s (almost full SSD speed) so I
>> understand that the problem is the fs on the HDD... Do you have any idea
>> of how to trace this problem down?
>
>
> You have _lots_ of problems with that above...
>
> (1) your ionice is causing the SSD to stall the send every time the
> receiver does _anything_.
I will try to remove completely ionice - but them my system becomes
irresponsive :(
>
> (1a) The ionice doesn't apply to the pipeline, it only applies to the
> command it proceeds. So it's "ionice -c btrfs send..." then pipeline
> then "btrfs receive" at the default io scheduling class. You need to
> specify it twice, or wrap it all in a script.
>
> ionice -c 3 btrfs send -p /ssd/parent /ssd/snapshot-X |
> ionice -c 3 btrfs receive /hdd/snapshots
This is usually what i do but I wanted to show that there is no throtle
on the receiver. (i tested it with and without - the result is the same)
>
> (1b) Your comparison case is flawed because cat >/dev/null results in
> no actual IO (e.g. writing to dev-null doesn't transfer any data
> anywhere, it just gets rubber-stamped okay at the kernel method level).
This was only an intention to show that the sender itself is OK.
>
> (2) You probably get negative-to-no value from using ionice on the
> sending side, particularly since SSDs don't have physical heads to
> seek around.
yeah in theory it should be like this, but in practice on my system -
when i use no ionice my system becomes very unresponsive (ubuntu 14.10).
>
> (2a) The value of nicing your IO is trivial on the actual SATA buss,
> the real value is only realized on a rotating media where the cost of
> interrupting other-normal-process is very high because you have to
> seek the heads way over there---> when other-normal-process needs them
> right here.
>
> (2b) Any pipeline will naturally throttle a more-left-end process to
> wait for a more-right-end process to read the data. The default buffer
> is really small, living in the neighborhood of "MAX_PIPE" so like 5k
> last time I looked. If you want to throttle this sort of transfer just
> throttle the writer. So..
>
> btrfs send -p /ssd/parent /ssd/snapshot-X |
> ionice -c 3 btrfs receive /hdd/snapshots
>
> (3) You need to find out if you are treating things nicely on
> /hdd/snapshots. If you've hoarded a lot of snapshots on there, or your
> snapshot history is really deep, or you are using the drive for other
> purposes that are unfriendly to large allocations, or you've laid out
> a multi-drive array poorly, then it may need some maintenance.
Yes this is what I suspect too, that the system is too fragmented. I
have about 15 snapshots now, but new snapshots are created and older
ones are deleted, is it possible that this caused the problem?
is there a way to tell how badly the file system is fragmented?
>
> (3a) Test the raw receive throughput if you have the space to share.
> To do this save the output of btrfs send to a file with -f some_file.
> Then run the receive with -f some_file. Ideally some_file will be on
> yet a third media, but it's okay if its on /hdd/snapshot somewhere.
> Watch the output of iotop or your favorite graphical monitoring
> daemon. If the write throughput is suspiciously low you may be dealing
> with a fragmented filesystem.
Great idea. Will try this.
>
> (3b) If /hdd/snapshots is a multi-device filesystem and you are using
> "single" for data extents, try switching to RAID0. It's just as
> _unsafe_ as "single" but its distributed write layout will speed up
> your storage.
Its single device.
>
> (4) If your system is busy enough that you really need the ionice, you
> likely just need to really re-think your storage layouts and whatnot.
Well, its a laptop :) and i'm not doing anything when the sync happens.
I do ionice because without it - the system becomes unresponsive and I
can't even browse the internet (it just freezes for 20 seconds or so).
But this has to do with the sender somehow... (probably saturates the
SATA throughput at 500mb/s?)
>
> (5) Remember to evaluate the secondary system effects. For example If
> /hdd/snapshots is really a USB attached external storage unit, make
> sure it's USB3 and so is the port you're plugging it into. Make sure
> you aren't paging/swapping in the general sense (or just on the cusp
> of doing so) as both of the programs are going to start competing with
> your system for buffer cache and whatnot. A "nearly busy" system can
> be pushed over the edge into thrashing by adding two large-IO tasks
> like these.
>
> (5b) Give /hdd/snapshots the once-over with smartmontools, especially
> if it's old, to make sure its not starting to have read/write retry
> delays. Old disks can get "slower" before the get all "failed".
>
> And remember, you may not be able to do squat about your results. If
> you are I/O bound, and you just _can't_ bear to part wiht some subset
> of your snapshot hoard for any reason (e.g. I know some government
> programs with hellish retention policies), then you might just be
> living the practical outcome of your policies and available hardware.
>
>
Thanks again for the answer I will try to do the tests described here
and get back.
Cheers!
--
To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to