[OpenIndiana-discuss] RAIDZ performance
Sašo Kiselkov
skiselkov.ml at gmail.com
Thu Feb 21 20:08:15 UTC 2013
On 02/21/2013 07:27 PM, Timothy Coalson wrote:
> I think last time this was asked, the consensus was that the implementation
> was based on linear feedback shift registers and xor, which happens to be a
> reed-solomon code (not as clear on this part, but what matters is what it
> is, not what it isn't). Regardless, from reading the source previously, I
> am fairly sure it operates bytewise, with xor for first syndrome (parity),
> and LFSR and then xor for the other syndromes.
>
> See
> http://openindiana.org/pipermail/openindiana-discuss/2012-October/010419.html
I tore out the parity calculations for raidz1 and raidz2 (attached) from
vdev_raidz.c and here are the results:
("5 1 32 1000000" below means 1000000 iterations over a 5-drive
raidz-1 at 32k per data drive; 4 data drives * 32k = 128k block)
$ for ((I=0; $I < 2 ; I=$I + 1 )); do time ./raidz_test 5 1 32 1000000 &
done
real 0m32.045s
user 0m32.336s
sys 0m0.015s
real 0m32.372s
user 0m32.486s
sys 0m0.017s
So combined raidz1 throughput is:
128 * 1024 * 1000000 / 2^30 / 32 * 2 = 7.6293 GB/s
("4 2 64 1000000" below means 1000000 iterations over a 4-drive
raidz-2 at 64k per data drive; 2 data drives * 64k = 128k block)
RAIDZ2:
for ((I=0; $I < 2 ; I=$I + 1 )); do time ./raidz_test 4 2 64 1000000 & done
real 3m3.040s
user 3m0.920s
sys 0m0.078s
real 3m3.082s
user 3m1.092s
sys 0m0.058s
So combined raidz2 throughput is:
128 * 1024 * 1000000 / 2^30 / 183 * 2 = 1.3341 GB/s
Next comes the factor of reduced data spindle count. A 4-drive raidz1
will contain 3 data spindles, while a 4-drive raidz2 will only contain 2
data spindles. Fewer spindles = less raw throughput.
I think we can thus conclude that the performance drop Reginald is
seeing is entirely expected.
Cheers,
--
Saso
More information about the OpenIndiana-discuss
mailing list