Resent as HTML to avoid line-wrapping:

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