Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.os.linux.hardware > #3261
| From | David Brown <david.brown@hesbynett.no> |
|---|---|
| Newsgroups | comp.os.linux.hardware |
| Subject | Re: Speed ups for a disk IO bound machine |
| Date | 2016-12-15 12:55 +0100 |
| Organization | A noiseless patient Spider |
| Message-ID | <o2u094$s1f$1@dont-email.me> (permalink) |
| References | (3 earlier) <ppauhd-rn2.ln1@lazy.lzy> <bcrvhdxjip.ln2@phoenix.vfire> <6rvvhd-1d5.ln1@lazy.lzy> <o2oe99$23j$1@dont-email.me> <ebdmriFk19eU1@mid.individual.net> |
On 14/12/16 21:03, Peter Chant wrote: > On 12/13/2016 09:17 AM, David Brown wrote: > >>>> OK, so having done some reading up but not carried out any testing I >>>> think the following is a possible setup. Note I am using LUKS so I will >>>> add this extra layer to the mix. I have not noticed any significant >>>> performance difference with and without it. >> >> This makes me even more suspicious that you (the OP) really have an I/O >> problem, or have identified where it is. >> > > > I've had periods where the disks have been solidly at 80-90% utalisation > for many seconds yet the CPU has been lightly loaded. What is the computer doing at the time? Is this actually slowing down something that you are waiting for? It is /normal/ for a computer to run at maximum in some aspects, for some time. If you are transferring a large file, you /want/ the disks to be as close to 100% as possible. If you are doing a raid1 scrub, you /want/ the disks to be close to 100%, perhaps for hours at a time if the disks are big (but at low I/O priority so that other tasks can also run). So far, you have just told me that your system is working. > > >>>> Create raid 10 far 2 raid array with mdadm for example (need to check >>>> what metadata means!): >>>> mdadm --create /dev/md-ssd --level=10 --metadata=0.90 --raid-devices=2 >>>> --layout=f2 /dev/sda4 /dev/sdb >> >> That looks like you are raiding a partition on one device with the >> entire second device. Are you sure that is what you want? >> > > Well. If raiding SSD's there is some logic to this horrible looking > asymetric setup. I'm using an SSD for the OS and that has plenty of > free space. I've also the older smaller SSD it replaced. Although it > looks messy I could free up some space on the current system SSD to use > a partition for RAID and use that in combination with the old, currently > unused SSD. That saves shelling out for another SSD if I want to RAID a > pair. Anaesthetically it is horrid and obviously would impact the speed > of OS access. But is it hardware I have so the monetary cost is no > issue. The time and hair loss cost might not be so trivial. OK - my first thought was that it was a mistake (possibly just a missing character from a cut-and-paste). Now I see it is intentional. I am not convinced this will be a good thing - in fact, I am confident that it is a /bad/ thing. An old small SSD can easily be a /lot/ slower than a new one - typically, old and small SSDs have poor garbage collection and little over-provisioning. This means they get very slow at writes when they are full - even slower, sometimes, than hard disks. When you create an md raid1 array like this, the first thing md will do is copy block-for-block from /dev/sda4 to /dev/sdb. It will write to the entire disk - the old SSD will think that /all/ its normal blocks are full of important data. As soon as you try to write something else to it, it must now try to do garbage collection in "panic" mode with minimal free space - you might find your write latencies measured in /seconds/. And if the SSD is old enough, then it won't be able to handle reads during the erases and garbage collection. If you are lucky, reads will come from the other disk. If you are unlucky, reads will be stalled too. So I would expect your system to be a good deal slower by doing this, compared to simply using the new SSD on its own. /If/ your old SSD is reasonably fast, you can first run a secure erase to tell it to drop all data. Then partition it, leaving a little extra space unused - this overprovisioning can help a lot. And use it with btrfs raid1, not md raid1, so that only the actual useful data is replicated. > > Would image the SSD in case of mess ups before resizing partitions. > > As for the whole of /dev/sdb - I've been using btrfs for a while and it > is normal to give it whole disks, a simple slip of the finger. I always use partitions, but I usually want a couple of partitions for other things (like swap). > >> I don't think anything has been said about the sizes and partitioning of >> the SSD. For smaller or cheaper SSDs, it is worth leaving a small >> amount of unpartitioned space at the end of the disk to give it more >> flexibility in garbage collection. (Do a secure erase before >> partitioning if it is not a new clean SSD.) >> > > Have done that already. Including the unused space at the end? > >>> >>> Metadata 1.0, 1.1 and 1.2 are the new ones, use these, >>> not the 0.90, which have less features. >>> >>> Maybe, not really sure, but partitioning /dev/sdb might >>> be better. >>> >>>> Use crypt setup to create an encrypted block device on top of this raid >>>> 10 far 2 device. >>>> >>>> Use LVM to create a volume group on top of the encrypted raid 10 far 2 >>>> device. >>> >>> Or the other way around. >>> I'm not sure which is better, maybe your proposal. >> >> Neither is better, IMHO, unless you have some reason to be seriously >> paranoid. It is understandable why one would want to encrypt a portable >> machine that you use a lot while travelling, but a home desktop? Think >> about whether encryption here is really a useful thing - adding layers >> of complexity does not make anything faster, and it makes it a whole lot >> more difficult if something goes wrong or if you want to recover your >> files from a different system. >> > > Well, in this day and age it seemed like a reasonable idea. It can be fun to play around with this sort of thing, but that doesn't mean it is a good idea if you are aiming for a useful system. One particular thing that can be a serious pain with such complex setups is if something goes wrong. If something breaks badly, you might have to put the disks in a different machine to recover the data, or boot the same machine from a live USB. If you have a lvm cache or bcache in writeback mode and you have both the SSD and the HD online, and you may need a system with the right kernel and utilities in order to get the disks working. Even then, it's easy to accidentally corrupt things along the way such as by writing to the HD while there are uncommitted changes on the SSD part. I have enough experience with complicated recoveries to know that when something goes wrong, you'll be glad you kept things simple - and that you documented everything :-) > >>> >>>> Create a logical volume on top of the above to use as the cache device. >>> >>> Yep, if you use lvmcache, maybe bcache can do as well. >> >> Again, that's unnecessary complexity for a system like this. The >> benefits of lvmcache and bcache are debatable even for loads that match >> them. >> > > So it is about as fast as it will get now? > > I've a spare hdd and ssd so I'll have a play when I get time. Need to > think about a useful benchmark. It's all about the type of load you are using. lvmcache and/or bcache can help a lot in some cases - but be no faster than a single HD in other cases. And for many of the things that /do/ run faster with the caches, you could just as easily run them entirely from the SSD significantly faster - or get even better results by adding more RAM. The key to getting /really/ optimal systems is, as you say, useful benchmarks. There is no benefit in looking at the timings of a test that writes lots of small blocks from lots of threads unless that really is what you are doing in practice. There is no benefit in running a benchmark after clearing your caches, because you don't clear your caches in practice - but if you run without clearing the caches, you are not testing your disk performance. The only "true" benchmark is to run your system with your typical real tasks and see how it performs. > > > >> >> btrfs does not have raid10, and it does not share significant raid1 or >> raid0 code with md. (It /does/ share code for calculating raid5 and >> raid6 parities, but that's another issue - and don't use btrfs raid5/6 >> until the bugs are sorted out!). > > Oh yes it does. :-). But I don't see anything about far 2. Btrfs "raid10" is (roughly) traditional raid1+0, where you have two mirrors which are striped. (I say roughly, because btrfs handles this at the level of extents, rather than raw disk blocks.) Linux md raid10 is quite a bit more sophisticated than just layered raid1 and raid0 - which is why it works on any number of disks, not just multiples of 4. > >> >> You only want the raid1 at one level. Your choice is raid1 on btrfs for >> best performance and efficiency (since only the actual useful data is >> mirrored, rather than the entire raw disk), or raid10,far on the md >> layer (for greater large file streaming read speed). This can be a big >> issue with SSDs - with btrfs raid1 you avoid initially copying over an >> entire diskful of data from one device to the other. > > replacing a disk and the associated balance took a week. If you have a lot of data, it takes a while to copy it all over. And a re-balance actually does a good deal more work than just a plain copy. But at least it doesn't copy the unused space too. > > > I'm at RAID1 with btrfs now. Yes, not RAIDing btrfs over another RAID > as that make little sense here. > >>> >>>> Of course, I could have got completely the wrong idea above and invented >>>> some horrid monster! >>> >>> If I understood it right, it sounds OK to me. >>> >>> I would, in any case, strongly suggest to experiment, >>> maybe, as mentioned above, with loop devices. >> >> Agreed. > > Spare hdd and ssd. Could use loop devices but perhaps real hw is useful, > though not enough to RAID. Loop devices work well in testing, especially for seeing how to add disks, replace disks, resize things, etc. Of course they are of little help in speed testing. I usually testing using loop devices made in a tmpfs mount - but then, my machines normally have lots of ram. > >> >>> Not for performances, but for practising possible >
Back to comp.os.linux.hardware | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
Speed ups for a disk IO bound machine Peter Chant <pete@petezilla.co.uk> - 2016-12-07 22:41 +0000
Re: Speed ups for a disk IO bound machine Roger Blake <rogblake@iname.invalid> - 2016-12-08 16:44 +0000
Re: Speed ups for a disk IO bound machine Peter Chant <pete@petezilla.co.uk> - 2016-12-10 11:24 +0000
Re: Speed ups for a disk IO bound machine Roger Blake <rogblake@iname.invalid> - 2016-12-11 01:34 +0000
Re: Speed ups for a disk IO bound machine Peter Chant <pete@petezilla.co.uk> - 2016-12-11 22:07 +0000
Re: Speed ups for a disk IO bound machine Piergiorgio Sartor <piergiorgio.sartor.this.should.not.be.used@nexgo.REMOVETHIS.de> - 2016-12-10 12:43 +0100
Re: Speed ups for a disk IO bound machine Peter Chant <pete@petezilla.co.uk> - 2016-12-10 20:44 +0000
Re: Speed ups for a disk IO bound machine Piergiorgio Sartor <piergiorgio.sartor.this.should.not.be.used@nexgo.REMOVETHIS.de> - 2016-12-10 23:05 +0100
Re: Speed ups for a disk IO bound machine Peter Chant <pete@petezilla.co.uk> - 2016-12-11 11:54 +0000
Re: Speed ups for a disk IO bound machine Piergiorgio Sartor <piergiorgio.sartor.this.should.not.be.used@nexgo.REMOVETHIS.de> - 2016-12-11 14:10 +0100
Re: Speed ups for a disk IO bound machine Peter Chant <pete@petezilla.co.uk> - 2016-12-11 22:46 +0000
Re: Speed ups for a disk IO bound machine Piergiorgio Sartor <piergiorgio.sartor.this.should.not.be.used@nexgo.REMOVETHIS.de> - 2016-12-12 19:22 +0100
Re: Speed ups for a disk IO bound machine David Brown <david.brown@hesbynett.no> - 2016-12-13 10:17 +0100
Re: Speed ups for a disk IO bound machine Peter Chant <pete@petezilla.co.uk> - 2016-12-14 20:03 +0000
Re: Speed ups for a disk IO bound machine David Brown <david.brown@hesbynett.no> - 2016-12-15 12:55 +0100
Re: Speed ups for a disk IO bound machine Peter Chant <pete@petezilla.co.uk> - 2016-12-15 23:18 +0000
Re: Speed ups for a disk IO bound machine David Brown <david.brown@hesbynett.no> - 2016-12-16 09:34 +0100
Re: Speed ups for a disk IO bound machine David Brown <david.brown@hesbynett.no> - 2016-12-13 09:57 +0100
Re: Speed ups for a disk IO bound machine David Brown <david.brown@hesbynett.no> - 2016-12-12 09:11 +0100
Re: Speed ups for a disk IO bound machine Peter Chant <pete@petezilla.co.uk> - 2016-12-12 23:08 +0000
Re: Speed ups for a disk IO bound machine David Brown <david.brown@hesbynett.no> - 2016-12-13 09:29 +0100
Re: Speed ups for a disk IO bound machine Peter Chant <pete@petezilla.co.uk> - 2016-12-14 23:16 +0000
Re: Speed ups for a disk IO bound machine David Brown <david.brown@hesbynett.no> - 2016-12-15 13:15 +0100
Re: Speed ups for a disk IO bound machine Peter Chant <pete@petezilla.co.uk> - 2016-12-15 22:50 +0000
Re: Speed ups for a disk IO bound machine David Brown <david.brown@hesbynett.no> - 2016-12-16 09:39 +0100
csiph-web