Skip to content

Minio calculator

Krishna Srinivas edited this page May 21, 2021 · 13 revisions
Number of servers (num_servers)
Number of drives per server (drives_per_server)
Drive capacity (drive_capacity)
EC Stripe size (stripe_size)
EC Parity (parity_count)

num_servers_per_shard is calculated as follows:

var num_servers_per_shard = num_servers
num_shards = 1

while(num_servers_per_shard > 16) {
  num_shards++
  
  if ((num_servers % num_shards) == 0) {
    num_servers_per_shard = num_servers/num_shards
  }
}
                                                                                                                                                                                                                   
if (num_servers_per_shard == 2 || num_servers_per_shard == 1 ) {                                                                                                                                                                                  
  // raise exception                                                                                                                                                                                               
}                                                                                                                                                                                                                  

User will first input num_servers and drives_per_server - this will result in specific choices in the drop down list of stripe_size. Once the user selects a stripe_size, it will further result in specific choices in drop down list of parity_count Once the user selects parity_count, the rest of the fields (in the right side of the calculator gets calculated and filled)

stripe_size drop down values are populated like this:

if (num_shards == 1) {
stripe_size = [num_servers_per_shard*1, num_servers_per_shard*2, num_servers_per_shard*3 ...., num_servers_per_shard*n] WHERE num_servers_per_shard*n <= 16 AND (num_servers_per_shard*drives_per_server)%stripe_size == 0
} else {
stripe_size = [num_servers_per_shard]
}

(num_servers_per_shard*drives_per_server)%stripe_size == 0 : this ensures that all the drives get utilized

for ex.
if num_servers_per_shard=4 drives_per_server=12, stripe_size = [4,8,12,16]
if num_servers_per_shard=4 drives_per_server=10, stripe_size = [4,8]
if num_servers_per_shard=4 drives_per_server=7,  stripe_size = [4]
parity_count = [2, 3, .. n] where n <= stripe_size/2
for ex.
if stripe_size = 4, then parity_count = [2]
if stripe_size = 5, then parity_count = [2]
if stripe_size = 6, then parity_count = [2,3]
if stripe_size = 7, then parity_count = [2,3]
if stripe_size = 8, then parity_count = [2,3,4]
if stripe_size = 9, then parity_count = [2,3,4]
if stripe_size = 10, then parity_count = [2,3,4,5]

Once all the fields on the left side of the calculator is filled, the fields on the right side can be calculated automatically.

dft = parity_count
if (dft == stripe_size/2) {
  dft--
}

raw_capacity = num_servers*drives_per_server*drive_capacity
storage_efficiency = (stripe_size-parity_count)/stripe_size
usable_capacity = raw_capacity * storage_efficiency
drive_failure_tolerance = (dft/stripe_size)*num_servers*drives_per_server in total
                          ( dft out of stripe_size )
server_failure_tolerance = (dft*num_servers_per_shard)/stripe_size)*num_shards in total
                           ( (dft*num_servers_per_shard)/stripe_size out of num_servers_per_shard )

Clone this wiki locally