From 6f01329374e6f27b1b32a26820b5c359a22cfc3f Mon Sep 17 00:00:00 2001 From: Vitaliy Filippov Date: Tue, 7 Dec 2021 22:56:46 +0300 Subject: [PATCH] Experimental: specify avg recovery time instead of speed --- README.md | 2 +- afr.js | 17 +++++++++-- fontello/config.json | 24 +++++++++++++++ fontello/css/fontello.css | 57 +++++++++++++++++++++++++++++++++++ fontello/font/fontello.eot | Bin 0 -> 5764 bytes fontello/font/fontello.svg | 12 ++++++++ fontello/font/fontello.ttf | Bin 0 -> 5596 bytes fontello/font/fontello.woff | Bin 0 -> 3120 bytes fontello/font/fontello.woff2 | Bin 0 -> 2448 bytes index.html | 9 ++++++ main.js | 37 +++++++++++++++++++---- 11 files changed, 148 insertions(+), 10 deletions(-) create mode 100644 fontello/config.json create mode 100644 fontello/css/fontello.css create mode 100644 fontello/font/fontello.eot create mode 100644 fontello/font/fontello.svg create mode 100644 fontello/font/fontello.ttf create mode 100644 fontello/font/fontello.woff create mode 100644 fontello/font/fontello.woff2 diff --git a/README.md b/README.md index 8398efd..8d0bc89 100644 --- a/README.md +++ b/README.md @@ -45,7 +45,7 @@ https://yourcmc.ru/git/vitalif/vitastor/ AFR сервера эмпирически поделен на число дисков, чтобы "размазать" вероятность отказа сервера по его дискам. -Парадоксы дней рождений: +## Парадокс дней рождений - PG почти гарантированно пересекаются, особенно в небольших кластерах. Степень их пересечения очень полезно учитывать. diff --git a/afr.js b/afr.js index b0fde1d..d3dcfb1 100644 --- a/afr.js +++ b/afr.js @@ -55,7 +55,8 @@ function failure_rate_fullmesh(n, a, f) // is that, with k=2, total failure rate doesn't depend on number of peers per OSD, // because it gets increased linearly by increased number of peers to fail // and decreased linearly by reduced rebalance time. -function cluster_afr({ n_hosts, n_drives, afr_drive, afr_host, capacity, speed, ec, ec_data, ec_parity, replicas, pgs = 1, osd_rm, degraded_replacement, down_out_interval = 600 }) +function cluster_afr({ n_hosts, n_drives, afr_drive, afr_host, capacity, speed, disk_heal_hours, host_heal_hours, + ec, ec_data, ec_parity, replicas, pgs = 1, osd_rm, degraded_replacement, down_out_interval = 0 }) { const pg_size = (ec ? ec_data+ec_parity : replicas); // is a number of non-intersecting PGs that a single OSD/drive has on average @@ -66,8 +67,18 @@ function cluster_afr({ n_hosts, n_drives, afr_drive, afr_host, capacity, speed, const resilver_peers = n_drives == 1 || osd_rm ? avg_distinct((n_hosts-1)*n_drives, pgs) : avg_distinct(n_drives-1, pgs); // other drives participate in resilvering of a failed host const host_resilver_peers = avg_distinct((n_hosts-1)*n_drives, n_drives*pgs); - const disk_heal_time = (down_out_interval + capacity/(degraded_replacement ? 1 : resilver_peers)/speed)/86400/365; - const host_heal_time = (down_out_interval + n_drives*capacity/host_resilver_peers/speed)/86400/365; + let disk_heal_time, host_heal_time; + if (speed) + disk_heal_time = (down_out_interval + capacity/(degraded_replacement ? 1 : resilver_peers)/speed)/86400/365; + else + { + disk_heal_time = disk_heal_hours/24/365; + speed = capacity / (degraded_replacement ? 1 : resilver_peers) / (disk_heal_hours*3600 - down_out_interval); + } + if (host_heal_hours) + host_heal_time = host_heal_hours/24/365; + else + host_heal_time = (down_out_interval + n_drives*capacity/host_resilver_peers/speed)/86400/365; const disk_heal_fail = ((afr_drive+afr_host/n_drives)*disk_heal_time); const host_heal_fail = ((afr_drive+afr_host/n_drives)*host_heal_time); const disk_pg_fail = ec diff --git a/fontello/config.json b/fontello/config.json new file mode 100644 index 0000000..17b57bf --- /dev/null +++ b/fontello/config.json @@ -0,0 +1,24 @@ +{ + "name": "fontello", + "css_prefix_text": "icon-", + "css_use_suffix": false, + "hinting": true, + "units_per_em": 1000, + "ascent": 850, + "glyphs": [ + { + "uid": "0430f56230dd33f67f26be82b07a84fc", + "css": "arw-down", + "code": 59412, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M800 956C828.7 956 857.4 945.1 879.2 923.2L1567.2 235.2C1610.9 191.5 1610.9 120.5 1567.2 76.8 1523.4 33 1452.5 33 1408.7 76.8L800 685.5 191.3 76.8C147.5 33.1 76.6 33.1 32.8 76.8-10.9 120.6-10.9 191.5 32.8 235.3L720.8 923.2C742.7 945.1 771.3 956 800 956Z", + "width": 1600 + }, + "search": [ + "arw-down" + ] + } + ] +} \ No newline at end of file diff --git a/fontello/css/fontello.css b/fontello/css/fontello.css new file mode 100644 index 0000000..864b169 --- /dev/null +++ b/fontello/css/fontello.css @@ -0,0 +1,57 @@ +@font-face { + font-family: 'fontello'; + src: url('../font/fontello.eot?162972'); + src: url('../font/fontello.eot?162972#iefix') format('embedded-opentype'), + url('../font/fontello.woff2?162972') format('woff2'), + url('../font/fontello.woff?162972') format('woff'), + url('../font/fontello.ttf?162972') format('truetype'), + url('../font/fontello.svg?162972#fontello') format('svg'); + font-weight: normal; + font-style: normal; +} +/* Chrome hack: SVG is rendered more smooth in Windozze. 100% magic, uncomment if you need it. */ +/* Note, that will break hinting! In other OS-es font will be not as sharp as it could be */ +/* +@media screen and (-webkit-min-device-pixel-ratio:0) { + @font-face { + font-family: 'fontello'; + src: url('../font/fontello.svg?162972#fontello') format('svg'); + } +} +*/ +[class^="icon-"]:before, [class*=" icon-"]:before { + font-family: "fontello"; + font-style: normal; + font-weight: normal; + speak: never; + + display: inline-block; + text-decoration: inherit; + width: 1em; + margin-right: .2em; + text-align: center; + /* opacity: .8; */ + + /* For safety - reset parent styles, that can break glyph codes*/ + font-variant: normal; + text-transform: none; + + /* fix buttons height, for twitter bootstrap */ + line-height: 1em; + + /* Animation center compensation - margins should be symmetric */ + /* remove if not needed */ + margin-left: .2em; + + /* you can be more comfortable with increased icons size */ + /* font-size: 120%; */ + + /* Font smoothing. That was taken from TWBS */ + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + + /* Uncomment for 3D effect */ + /* text-shadow: 1px 1px 1px rgba(127, 127, 127, 0.3); */ +} + +.icon-arw-down:before { content: '\e814'; } /* '' */ diff --git a/fontello/font/fontello.eot b/fontello/font/fontello.eot new file mode 100644 index 0000000000000000000000000000000000000000..acea7863003729df1cc32ea7644d65e535e1ce36 GIT binary patch literal 5764 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 + + +Copyright (C) 2021 by original authors @ fontello.com + + + + + + + + diff --git a/fontello/font/fontello.ttf b/fontello/font/fontello.ttf new file mode 100644 index 0000000000000000000000000000000000000000..68135f4a157255fbaefcc5cbba144b81eef5f5e9 GIT binary patch literal 5596 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 literal 0 HcmV?d00001 diff --git a/fontello/font/fontello.woff2 b/fontello/font/fontello.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..2d7d22f2d36cbed84a7fc1f22a910889fe2b69ec GIT binary patch literal 2448 zcmV;B32*jyPew8T0RR91011!)4*&oF02SN-00}t&0RR9100000000000000000000 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 literal 0 HcmV?d00001 diff --git a/index.html b/index.html index 4170695..5a5a4e2 100644 --- a/index.html +++ b/index.html @@ -4,6 +4,7 @@ Калькулятор вероятности отказа кластера Ceph/Vitastor + diff --git a/main.js b/main.js index dd8d059..fe0a67b 100644 --- a/main.js +++ b/main.js @@ -11,7 +11,7 @@ class Calc extends preact.Component afr_host: 5, capacity: 8, speed: 20, - pg_per_osd: 50, + pg_per_osd: 100, ec: false, replicas: 2, ec_data: 2, @@ -19,6 +19,7 @@ class Calc extends preact.Component eager: false, same_host: true, result: 0, + use_speed: true, } calc(st) @@ -30,7 +31,8 @@ class Calc extends preact.Component afr_drive: st.afr_drive/100, afr_host: st.afr_host/100, capacity: st.capacity*1000, - speed: st.speed/1000, + speed: st.use_speed ? st.speed/1000 : null, + disk_heal_hours: st.use_speed ? null : st.disk_heal_hours, ec: st.ec, ec_data: st.ec_data, ec_parity: st.ec_parity, @@ -38,6 +40,7 @@ class Calc extends preact.Component pgs: st.pg_per_osd, osd_rm: !st.same_host, degraded_replacement: st.eager, + down_out_interval: 600, }); this.setState(st); } @@ -69,6 +72,16 @@ class Calc extends preact.Component this.calc({ eager: event.target.checked }); } + useSpeed = () => + { + this.calc({ use_speed: true, speed: this.state.speed || 20 }); + } + + useTime = () => + { + this.calc({ use_speed: false, disk_heal_hours: 12 }); + } + setSameHost = (event) => { this.calc({ same_host: event.target.checked }); @@ -110,7 +123,7 @@ class Calc extends preact.Component Калькулятор вероятности отказа кластера Ceph/Vitastor

- Вероятность полного отказа кластера зависит от числа серверов и дисков + Вероятность потери данных в кластере зависит от числа серверов и дисков (чем их больше, тем вероятность больше), от схемы избыточности, скорости ребаланса (восстановления), и, конечно, непосредственно вероятности выхода из строя самих дисков и серверов.

@@ -154,11 +167,23 @@ class Calc extends preact.Component : null} - Оценочная скорость
восстановления на 1 OSD - МБ/с + + {state.use_speed ? 'Оценочная' : 'Оценочное'}  + + {state.use_speed ? 'скорость' : 'время'} + + скорость + время + + +
восстановления на 1 OSD + + {state.use_speed + ? МБ/с + : час(ов)} - PG на OSD + PG на OSD