Is there any performance impact due to different sized vdev's in a single pool ?

Is there any performance impact due to different sized vdev's in a single pool ?

I have existing pool eg. MyPool with 1 raidz vdev(3 x 500GB, 15000 rpm) and its almost 80% full. Now i want to add
5 X 1TB (15000rpm) disks on a raidz1 configuration to MyPool. But on doing so i get below warning
mismatched replication level: pool uses 3-way raidz and new vdev uses 5-way raidz
im concerned with
  1. What would be the total usable storage space i get from the newly added vdev with 1 TB disks(i assume it to be 5-1=4TB ) will it be 4TB or 1TB(same as existing raidz vdev 3-1=two 500GB disks=1TB )
  2. Are there any impact if i forcefully add them ignoring above message ?Yes, there's a performance impact. It may or may not be critical for you, and it will usually still mean better performance than having one vdev fewer in your pool.
    Let's say you have a pool with one 1T vdev. This pool, regardless of the type of vdev, will approximate the IOPS of a single disk under heavy load. (Exception: a mirror vdev will follow this rule for writes, but read IOPS will approximate the read IOPS of the total number of disks in the mirror vdev.)
    Now, let's say you have a pool with two 1T vdevs. Being of equal size, the pool will generally allocate writes evenly between the two vdevs. This pool has IOPS approximating the IOPS of two disks when under heavy load.
    Now, let's say you have a pool with one 1T vdev and one 2T vdev. The pool will generally distributes writes such that the vdevs fill up at an even rate, meaning double the writes to the 2T vdev that the 1T vdev experiences. This pool will most frequently approximate the IOPS of 1.5 disks when under heavy load - a full disk's worth of IOPS for the 2T vdev, and half a disk's worth of IOPS for the 1T vdev, which will tend to spend half its time binding on waiting for the 2T vdev to finish its crap.
    Of course, this all assumes that the pool and its vdevs are empty at the start: if you have, instead, a half-full 2T vdev and you add a new, empty 2T vdev, then even though the vdevs are the same size, you'll still approximate 1.5 disks worth of IOPS for the pool, because ZFS will still write twice as many records to the empty 2T vdev as to the already-half-full vdev, so that they'll fill up at the same rate and become full at the same time.
    It's also worth noting that reads of things already written solely to the first vdev will still come solely from that vdev, which will impact the IOPS profile of your system according to how many reads are from distributed data vs from the original data which was only one the original vdevs.
    Whew. Still with me so far?
    At the end of the day, adding the new vdev is unlikely to make your performance worse than it was before adding the new vdev - and if you're starting out with a ton of data already on one vdev with no plans to rebalance it, it probably won't be any worse than it would've been if you added a matching vdev, either.
does adding new raidz vdev with 5x 1TB disks to existing raidz vdev (3x500GB) give me additonal 4TB

Yes, roughly speaking. The size of your existing pool has no impact on how much usable space is on the new vdev; all usable space in the new vdev becomes usable space in the pool itself, no matter what.
"4T" is only roughly accurate, though. A RAIDz vdev approximates the amount of space of n-y disks, where n is the total number of disks in the vdev and y is the parity level. But it's only an approximation; you can consult an online storage calculator for a much closer estimate.

No comments:

Post a Comment