r4347 - developers/werner

werner at sita.openmoko.org werner at sita.openmoko.org
Fri Apr 11 16:55:25 CEST 2008


Author: werner
Date: 2008-04-11 16:55:21 +0200 (Fri, 11 Apr 2008)
New Revision: 4347

Added:
   developers/werner/bb_slack.pl
Log:
Quick and dirty script to calculate how many "slack" blocks we'd need per
NAND partition for a certain probability that these blocks will indeed be
sufficient to accommodate the bad blocks that may fall into this area.

Assumes that bad blocks are evenly distributed and don't come in clumps.



Added: developers/werner/bb_slack.pl
===================================================================
--- developers/werner/bb_slack.pl	2008-04-11 14:35:12 UTC (rev 4346)
+++ developers/werner/bb_slack.pl	2008-04-11 14:55:21 UTC (rev 4347)
@@ -0,0 +1,77 @@
+#!/usr/bin/perl
+
+#
+# usage: bb_slack.pl [#good_blocks [max_#slack]]
+#
+
+#
+# n = minimum number of good blocks needed
+# b = probability that block is bad
+# s = slack
+# p = probability that slack is sufficient
+# 
+#       s     ( n+s )
+# p =  sum    (     ) * b^i*(1-b)^(n+s-i)
+#     i = 0   (  i  )
+#
+# Note: this assumes that bad blocks are evenly distributed and don't come in
+# clumps.
+#
+
+$n = 2;		# u-boot partition (256kB)
+$b = 40/2048;	# Samsung K5D2G13ACM-D075
+
+sub binom
+{
+    local ($n, $k) = @_;
+    local ($b, $i);
+
+    $b = 1;
+    for ($i = $n-$k+1; $i <= $n; $i++) {
+	$b *= $i;
+    }
+    for ($i = 2; $i <= $k; $i++) {
+	$b /= $i;
+    }
+    return $b;
+}
+
+
+sub exp
+{
+    local ($b, $e) = @_;
+
+    return exp(log($b)*$e);
+}
+
+
+sub p_good
+{
+    local ($s) = @_;
+    local ($p, $i);
+
+    $p = 0;
+    for ($i = 0; $i <= $s; $i++) {
+	$p += &binom($n+$s, $i)*&exp($b, $i)*&exp(1-$b, $n+$s-$i);
+    }
+    return $p;
+}
+
+$n = $ARGV[0] if @ARGV;
+$t = 20;
+$t = $ARGV[1] if defined $ARGV[1];
+
+for ($s = 0; $s <= $t; $s++) {
+    print "$n+$s: 10^", log(1-&p_good($s))/log(10), "\n";
+}
+
+# Some results:
+#                                 <10^-6  <10^-9
+# u-boot          256kB      2     3       5
+# u-boot_env      256kB      2     3       5
+# kernel          8MB       64    10      13
+# splash          640kB      5     4       6
+# factory         256kB      2     3       5
+# rootfs          ~246MB  1973    (don't care)
+# 
+# total slack                     23      34


Property changes on: developers/werner/bb_slack.pl
___________________________________________________________________
Name: svn:executable
   + *





More information about the commitlog mailing list