Richard's blog analyzes MTTDL as a function of N+P+S:
    http://blogs.sun.com/relling/entry/raid_recommendations_space_vs_mttdl

But to understand how to best utilize an array with a fixed number of 
drives, I add the following constraints:
  - N+P should follow ZFS best-practice rule of N={2,4,8} and P={1,2}
  - all sets in an array should be configured similarly
  - the MTTDL for S sets is equal to (MTTDL for one set)/S

I got the following results by varying the NUM_BAYS parameter in the 
source code below:

    *_4 bays w/ 300 GB drives having MTBF=4 years_*
      - can have 1 (2+1) w/ 1 spares providing 600 GB with MTTDL of
    5840.00 years
      - can have 1 (2+2) w/ 0 spares providing 600 GB with MTTDL of
    799350.00 years
      - can have 0 (4+1) w/ 4 spares providing 0 GB with MTTDL of Inf years
      - can have 0 (4+2) w/ 4 spares providing 0 GB with MTTDL of Inf years
      - can have 0 (8+1) w/ 4 spares providing 0 GB with MTTDL of Inf years
      - can have 0 (8+2) w/ 4 spares providing 0 GB with MTTDL of Inf years

    *_8 bays w/ 300 GB drives having MTBF=4 years_*
      - can have 2 (2+1) w/ 2 spares providing 1200 GB with MTTDL of
    2920.00 years
      - can have 2 (2+2) w/ 0 spares providing 1200 GB with MTTDL of
    399675.00 years
      - can have 1 (4+1) w/ 3 spares providing 1200 GB with MTTDL of
    1752.00 years
      - can have 1 (4+2) w/ 2 spares providing 1200 GB with MTTDL of
    2557920.00 years
      - can have 0 (8+1) w/ 8 spares providing 0 GB with MTTDL of Inf years
      - can have 0 (8+2) w/ 8 spares providing 0 GB with MTTDL of Inf years

    *_12 bays w/ 300 GB drives having MTBF=4 years_*
      - can have 4 (2+1) w/ 0 spares providing 2400 GB with MTTDL of
    365.00 years
      - can have 3 (2+2) w/ 0 spares providing 1800 GB with MTTDL of
    266450.00 years
      - can have 2 (4+1) w/ 2 spares providing 2400 GB with MTTDL of
    876.00 years
      - can have 2 (4+2) w/ 0 spares providing 2400 GB with MTTDL of
    79935.00 years
      - can have 1 (8+1) w/ 3 spares providing 2400 GB with MTTDL of
    486.67 years
      - can have 1 (8+2) w/ 2 spares providing 2400 GB with MTTDL of
    426320.00 years

    *_16 bays w/ 300 GB drives having MTBF=4 years_*
      - can have 5 (2+1) w/ 1 spares providing 3000 GB with MTTDL of
    1168.00 years
      - can have 4 (2+2) w/ 0 spares providing 2400 GB with MTTDL of
    199837.50 years
      - can have 3 (4+1) w/ 1 spares providing 3600 GB with MTTDL of
    584.00 years
      - can have 2 (4+2) w/ 4 spares providing 2400 GB with MTTDL of
    1278960.00 years
      - can have 1 (8+1) w/ 7 spares providing 2400 GB with MTTDL of
    486.67 years
      - can have 1 (8+2) w/ 6 spares providing 2400 GB with MTTDL of
    426320.00 years

    *_20 bays w/ 300 GB drives having MTBF=4 years_*
      - can have 6 (2+1) w/ 2 spares providing 3600 GB with MTTDL of
    973.33 years
      - can have 5 (2+2) w/ 0 spares providing 3000 GB with MTTDL of
    159870.00 years
      - can have 4 (4+1) w/ 0 spares providing 4800 GB with MTTDL of
    109.50 years
      - can have 3 (4+2) w/ 2 spares providing 3600 GB with MTTDL of
    852640.00 years
      - can have 2 (8+1) w/ 2 spares providing 4800 GB with MTTDL of
    243.33 years
      - can have 2 (8+2) w/ 0 spares providing 4800 GB with MTTDL of
    13322.50 years

    *_24 bays w/ 300 GB drives having MTBF=4 years_*
      - can have 8 (2+1) w/ 0 spares providing 4800 GB with MTTDL of
    182.50 years
      - can have 6 (2+2) w/ 0 spares providing 3600 GB with MTTDL of
    133225.00 years
      - can have 4 (4+1) w/ 4 spares providing 4800 GB with MTTDL of
    438.00 years
      - can have 4 (4+2) w/ 0 spares providing 4800 GB with MTTDL of
    39967.50 years
      - can have 2 (8+1) w/ 6 spares providing 4800 GB with MTTDL of
    243.33 years
      - can have 2 (8+2) w/ 4 spares providing 4800 GB with MTTDL of
    213160.00 years

While its true that RAIDZ2 is /much /safer that RAIDZ, it seems that 
/any /RAIDZ configuration will outlive me and so I conclude that RAIDZ2 
is unnecessary in a practical sense...  This conclusion surprises me 
given the amount of attention people give to double-parity solutions - 
what am I overlooking?

Thanks,
Kent



_*Source Code*_  (compile with: cc -std:c99 -lm <filename>) [its more 
than 80 columns - sorry!]

#include <stdio.h>
#include <math.h>

#define NUM_BAYS 24
#define DRIVE_SIZE_GB 300
#define MTBF_YEARS 4
#define MTTR_HOURS_NO_SPARE 16
#define MTTR_HOURS_SPARE 4

int main() {

    printf("\n");
    printf("%u bays w/ %u GB drives having MTBF=%u years\n", NUM_BAYS, 
DRIVE_SIZE_GB, MTBF_YEARS);
    for (int num_drives=2; num_drives<=8; num_drives*=2) {
        for (int num_parity=1; num_parity<=2; num_parity++) {
            double  mttdl;

            int     mtbf_hours          = MTBF_YEARS * 365 * 24;
            int     total_num_drives    = num_drives + num_parity;
            int     num_instances       = NUM_BAYS / total_num_drives;
            int     num_spares          = NUM_BAYS % total_num_drives;
            double  mttr                = num_spares==0 ? 
MTTR_HOURS_NO_SPARE : MTTR_HOURS_SPARE;
            int     total_capacity      = num_drives * num_instances * 
DRIVE_SIZE_GB;

            if (num_parity==1) {
                    mttdl = pow(mtbf_hours, 2.0) / (total_num_drives * 
(total_num_drives-1) * mttr );
            } else if (num_parity==2) {
                    mttdl = pow(mtbf_hours, 3.0) / (total_num_drives * 
(total_num_drives-1) * (total_num_drives-2) * pow(mttr, 2.
            }

            printf("  - can have %u (%u+%u) w/ %u spares providing %u GB 
with MTTDL of %.2f years\n",
                    num_instances,
                    num_drives, num_parity,
                    num_spares,
                    total_capacity,
                    mttdl/24/365/num_instances
                );
        }
    }
}



_______________________________________________
zfs-discuss mailing list
zfs-discuss@opensolaris.org
http://mail.opensolaris.org/mailman/listinfo/zfs-discuss

Reply via email to