diff --git a/404.html b/404.html index d73ba4c9b..47ae40919 100644 --- a/404.html +++ b/404.html @@ -13,13 +13,13 @@ gtag('config', 'G-SMSDTMGLTV'); - - + + -

404

How did we get here?
+ - + diff --git a/_Footer.html b/_Footer.html index 41cc2b76e..b0124a598 100644 --- a/_Footer.html +++ b/_Footer.html @@ -13,8 +13,8 @@ gtag('config', 'G-SMSDTMGLTV'); - - + +
- +

See something missing? Have tips to share? File an issue (opens new window), and we'll follow up as soon as possible. (If you have write permission in this repo, feel free to edit directly.)

Last Updated: 11/27/2023, 2:40:08 AM
+ diff --git a/about/index.html b/about/index.html index dfa852add..1c92a3a99 100644 --- a/about/index.html +++ b/about/index.html @@ -13,8 +13,8 @@ gtag('config', 'G-SMSDTMGLTV'); - - + +
- +

# Mission, Vision, Value

# Contacts

# Resources

+ diff --git a/assets/css/0.styles.40e8f073.css b/assets/css/0.styles.70d1da1f.css similarity index 95% rename from assets/css/0.styles.40e8f073.css rename to assets/css/0.styles.70d1da1f.css index 51cb7f28b..634ed4d67 100644 --- a/assets/css/0.styles.40e8f073.css +++ b/assets/css/0.styles.70d1da1f.css @@ -1 +1 @@ -.medium-zoom-overlay{z-index:100}.medium-zoom-overlay~img{z-index:101}svg[data-v-49140617]{position:absolute;right:7.5px;opacity:.75;cursor:pointer}svg.hover[data-v-49140617]{opacity:0}svg[data-v-49140617]:hover{opacity:1!important}span[data-v-49140617]{position:absolute;font-size:.85rem;line-height:.425rem;right:50px;opacity:0;transition:opacity .5s}.success[data-v-49140617]{opacity:1!important}.code-copy-added:hover>.code-copy svg{opacity:.75}code[class*=language-],pre[class*=language-]{color:#ccc;background:none;font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-ms-hyphens:none;hyphens:none}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto}:not(pre)>code[class*=language-],pre[class*=language-]{background:#2d2d2d}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.token.block-comment,.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#999}.token.punctuation{color:#ccc}.token.attr-name,.token.deleted,.token.namespace,.token.tag{color:#e2777a}.token.function-name{color:#6196cc}.token.boolean,.token.function,.token.number{color:#f08d49}.token.class-name,.token.constant,.token.property,.token.symbol{color:#f8c555}.token.atrule,.token.builtin,.token.important,.token.keyword,.token.selector{color:#cc99cd}.token.attr-value,.token.char,.token.regex,.token.string,.token.variable{color:#7ec699}.token.entity,.token.operator,.token.url{color:#67cdcc}.token.bold,.token.important{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}.token.inserted{color:green}.theme-default-content code{color:#476582;padding:.25rem .5rem;margin:0;font-size:.85em;background-color:rgba(27,31,35,.05);border-radius:3px}.theme-default-content code .token.deleted{color:#ec5975}.theme-default-content code .token.inserted{color:#00d2d6}.theme-default-content pre,.theme-default-content pre[class*=language-]{line-height:1.4;padding:1.25rem 1.5rem;margin:.85rem 0;background-color:#282c34;border-radius:6px;overflow:auto}.theme-default-content pre[class*=language-] code,.theme-default-content pre code{color:#fff;padding:0;background-color:transparent;border-radius:0}div[class*=language-]{position:relative;background-color:#282c34;border-radius:6px}div[class*=language-] .highlight-lines{-webkit-user-select:none;user-select:none;padding-top:1.3rem;position:absolute;top:0;left:0;width:100%;line-height:1.4}div[class*=language-] .highlight-lines .highlighted{background-color:rgba(0,0,0,.66)}div[class*=language-] pre,div[class*=language-] pre[class*=language-]{background:transparent;position:relative;z-index:1}div[class*=language-]:before{position:absolute;z-index:3;top:.8em;right:1em;font-size:.75rem;color:hsla(0,0%,100%,.4)}div[class*=language-]:not(.line-numbers-mode) .line-numbers-wrapper{display:none}div[class*=language-].line-numbers-mode .highlight-lines .highlighted{position:relative}div[class*=language-].line-numbers-mode .highlight-lines .highlighted:before{content:" ";position:absolute;z-index:3;left:0;top:0;display:block;width:3.5rem;height:100%;background-color:rgba(0,0,0,.66)}div[class*=language-].line-numbers-mode pre{padding-left:4.5rem;vertical-align:middle}div[class*=language-].line-numbers-mode .line-numbers-wrapper{position:absolute;top:0;width:3.5rem;text-align:center;color:hsla(0,0%,100%,.3);padding:1.25rem 0;line-height:1.4}div[class*=language-].line-numbers-mode .line-numbers-wrapper br{-webkit-user-select:none;user-select:none}div[class*=language-].line-numbers-mode .line-numbers-wrapper .line-number{position:relative;z-index:4;-webkit-user-select:none;user-select:none;font-size:.85em}div[class*=language-].line-numbers-mode:after{content:"";position:absolute;z-index:2;top:0;left:0;width:3.5rem;height:100%;border-radius:6px 0 0 6px;border-right:1px solid rgba(0,0,0,.66);background-color:#282c34}div[class~=language-js]:before{content:"js"}div[class~=language-ts]:before{content:"ts"}div[class~=language-html]:before{content:"html"}div[class~=language-md]:before{content:"md"}div[class~=language-vue]:before{content:"vue"}div[class~=language-css]:before{content:"css"}div[class~=language-sass]:before{content:"sass"}div[class~=language-scss]:before{content:"scss"}div[class~=language-less]:before{content:"less"}div[class~=language-stylus]:before{content:"stylus"}div[class~=language-go]:before{content:"go"}div[class~=language-java]:before{content:"java"}div[class~=language-c]:before{content:"c"}div[class~=language-sh]:before{content:"sh"}div[class~=language-yaml]:before{content:"yaml"}div[class~=language-py]:before{content:"py"}div[class~=language-docker]:before{content:"docker"}div[class~=language-dockerfile]:before{content:"dockerfile"}div[class~=language-makefile]:before{content:"makefile"}div[class~=language-javascript]:before{content:"js"}div[class~=language-typescript]:before{content:"ts"}div[class~=language-markup]:before{content:"html"}div[class~=language-markdown]:before{content:"md"}div[class~=language-json]:before{content:"json"}div[class~=language-ruby]:before{content:"rb"}div[class~=language-python]:before{content:"py"}div[class~=language-bash]:before{content:"sh"}div[class~=language-php]:before{content:"php"}.custom-block .custom-block-title{font-weight:600;margin-bottom:-.4rem}.custom-block.danger,.custom-block.tip,.custom-block.warning{padding:.1rem 1.5rem;border-left-width:.5rem;border-left-style:solid;margin:1rem 0}.custom-block.tip{background-color:#f3f5f7;border-color:#42b983}.custom-block.warning{background-color:rgba(255,229,100,.3);border-color:#e7c000;color:#6b5900}.custom-block.warning .custom-block-title{color:#b29400}.custom-block.warning a{color:#2c3e50}.custom-block.danger{background-color:#ffe6e6;border-color:#c00;color:#4d0000}.custom-block.danger .custom-block-title{color:#900}.custom-block.danger a{color:#2c3e50}.custom-block.details{display:block;position:relative;border-radius:2px;margin:1.6em 0;padding:1.6em;background-color:#eee}.custom-block.details h4{margin-top:0}.custom-block.details figure:last-child,.custom-block.details p:last-child{margin-bottom:0;padding-bottom:0}.custom-block.details summary{outline:none;cursor:pointer}.arrow{display:inline-block;width:0;height:0}.arrow.up{border-bottom:6px solid #ccc}.arrow.down,.arrow.up{border-left:4px solid transparent;border-right:4px solid transparent}.arrow.down{border-top:6px solid #ccc}.arrow.right{border-left:6px solid #ccc}.arrow.left,.arrow.right{border-top:4px solid transparent;border-bottom:4px solid transparent}.arrow.left{border-right:6px solid #ccc}.theme-default-content:not(.custom){max-width:740px;margin:0 auto;padding:2rem 2.5rem}@media (max-width:959px){.theme-default-content:not(.custom){padding:2rem}}@media (max-width:419px){.theme-default-content:not(.custom){padding:1.5rem}}.table-of-contents .badge{vertical-align:middle}body,html{padding:0;margin:0;background-color:#fff}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-size:16px;color:#2c3e50}.page{padding-left:20rem}.navbar{z-index:20;right:0;height:3.6rem;background-color:#fff;box-sizing:border-box;border-bottom:1px solid #eaecef}.navbar,.sidebar-mask{position:fixed;top:0;left:0}.sidebar-mask{z-index:9;width:100vw;height:100vh;display:none}.sidebar{font-size:16px;background-color:#fff;width:20rem;position:fixed;z-index:10;margin:0;top:3.6rem;left:0;bottom:0;box-sizing:border-box;border-right:1px solid #eaecef;overflow-y:auto}.theme-default-content:not(.custom)>:first-child{margin-top:3.6rem}.theme-default-content:not(.custom) a:hover{text-decoration:underline}.theme-default-content:not(.custom) p.demo{padding:1rem 1.5rem;border:1px solid #ddd;border-radius:4px}.theme-default-content:not(.custom) img{max-width:100%}.theme-default-content.custom{padding:0;margin:0}.theme-default-content.custom img{max-width:100%}a{font-weight:500;text-decoration:none}a,p a code{color:#00d2d6}p a code{font-weight:400}kbd{background:#eee;border:.15rem solid #ddd;border-bottom:.25rem solid #ddd;border-radius:.15rem;padding:0 .15em}blockquote{font-size:1rem;color:#999;border-left:.2rem solid #dfe2e5;margin:1rem 0;padding:.25rem 0 .25rem 1rem}blockquote>p{margin:0}ol,ul{padding-left:1.2em}strong{font-weight:600}h1,h2,h3,h4,h5,h6{font-weight:600;line-height:1.25}.theme-default-content:not(.custom)>h1,.theme-default-content:not(.custom)>h2,.theme-default-content:not(.custom)>h3,.theme-default-content:not(.custom)>h4,.theme-default-content:not(.custom)>h5,.theme-default-content:not(.custom)>h6{margin-top:-3.1rem;padding-top:4.6rem;margin-bottom:0}.theme-default-content:not(.custom)>h1:first-child,.theme-default-content:not(.custom)>h2:first-child,.theme-default-content:not(.custom)>h3:first-child,.theme-default-content:not(.custom)>h4:first-child,.theme-default-content:not(.custom)>h5:first-child,.theme-default-content:not(.custom)>h6:first-child{margin-top:-1.5rem;margin-bottom:1rem}.theme-default-content:not(.custom)>h1:first-child+.custom-block,.theme-default-content:not(.custom)>h1:first-child+p,.theme-default-content:not(.custom)>h1:first-child+pre,.theme-default-content:not(.custom)>h2:first-child+.custom-block,.theme-default-content:not(.custom)>h2:first-child+p,.theme-default-content:not(.custom)>h2:first-child+pre,.theme-default-content:not(.custom)>h3:first-child+.custom-block,.theme-default-content:not(.custom)>h3:first-child+p,.theme-default-content:not(.custom)>h3:first-child+pre,.theme-default-content:not(.custom)>h4:first-child+.custom-block,.theme-default-content:not(.custom)>h4:first-child+p,.theme-default-content:not(.custom)>h4:first-child+pre,.theme-default-content:not(.custom)>h5:first-child+.custom-block,.theme-default-content:not(.custom)>h5:first-child+p,.theme-default-content:not(.custom)>h5:first-child+pre,.theme-default-content:not(.custom)>h6:first-child+.custom-block,.theme-default-content:not(.custom)>h6:first-child+p,.theme-default-content:not(.custom)>h6:first-child+pre{margin-top:2rem}h1:focus .header-anchor,h1:hover .header-anchor,h2:focus .header-anchor,h2:hover .header-anchor,h3:focus .header-anchor,h3:hover .header-anchor,h4:focus .header-anchor,h4:hover .header-anchor,h5:focus .header-anchor,h5:hover .header-anchor,h6:focus .header-anchor,h6:hover .header-anchor{opacity:1}h1{font-size:2.2rem}h2{font-size:1.65rem;padding-bottom:.3rem;border-bottom:1px solid #eaecef}h3{font-size:1.35rem}a.header-anchor{font-size:.85em;float:left;margin-left:-.87em;padding-right:.23em;margin-top:.125em;opacity:0}a.header-anchor:focus,a.header-anchor:hover{text-decoration:none}.line-number,code,kbd{font-family:source-code-pro,Menlo,Monaco,Consolas,Courier New,monospace}ol,p,ul{line-height:1.7}hr{border:0;border-top:1px solid #eaecef}table{border-collapse:collapse;margin:1rem 0;display:block;overflow-x:auto}tr{border-top:1px solid #dfe2e5}tr:nth-child(2n){background-color:#f6f8fa}td,th{border:1px solid #dfe2e5;padding:.6em 1em}.theme-container.sidebar-open .sidebar-mask{display:block}.theme-container.no-navbar .theme-default-content:not(.custom)>h1,.theme-container.no-navbar h2,.theme-container.no-navbar h3,.theme-container.no-navbar h4,.theme-container.no-navbar h5,.theme-container.no-navbar h6{margin-top:1.5rem;padding-top:0}.theme-container.no-navbar .sidebar{top:0}@media (min-width:720px){.theme-container.no-sidebar .sidebar{display:none}.theme-container.no-sidebar .page{padding-left:0}}@media (max-width:959px){.sidebar{font-size:15px;width:16.4rem}.page{padding-left:16.4rem}}@media (max-width:719px){.sidebar{top:0;padding-top:3.6rem;transform:translateX(-100%);transition:transform .2s ease}.page{padding-left:0}.theme-container.sidebar-open .sidebar{transform:translateX(0)}.theme-container.no-navbar .sidebar{padding-top:0}}@media (max-width:419px){h1{font-size:1.9rem}.theme-default-content div[class*=language-]{margin:.85rem -1.5rem;border-radius:0}}a.sidebar-link.active[data-v-5fd4ef0c],a[data-v-5fd4ef0c]{color:#00aaac}.hero h1[data-v-5fd4ef0c],.navbar .site-name[data-v-5fd4ef0c]{font-family:Oxygen}.go-to-top[data-v-5fd4ef0c]{cursor:pointer;position:fixed;bottom:2rem;right:2.5rem;width:2rem;color:#00d2d6;z-index:1}.go-to-top[data-v-5fd4ef0c]:hover{color:#30fbff}@media (max-width:959px){.go-to-top[data-v-5fd4ef0c]{display:none}}.fade-enter-active[data-v-5fd4ef0c],.fade-leave-active[data-v-5fd4ef0c]{transition:opacity .3s}.fade-enter[data-v-5fd4ef0c],.fade-leave-to[data-v-5fd4ef0c]{opacity:0}#nprogress{pointer-events:none}#nprogress .bar{background:#00d2d6;position:fixed;z-index:1031;top:0;left:0;width:100%;height:2px}#nprogress .peg{display:block;position:absolute;right:0;width:100px;height:100%;box-shadow:0 0 10px #00d2d6,0 0 5px #00d2d6;opacity:1;transform:rotate(3deg) translateY(-4px)}#nprogress .spinner{display:block;position:fixed;z-index:1031;top:15px;right:15px}#nprogress .spinner-icon{width:18px;height:18px;box-sizing:border-box;border-color:#00d2d6 transparent transparent #00d2d6;border-style:solid;border-width:2px;border-radius:50%;-webkit-animation:nprogress-spinner .4s linear infinite;animation:nprogress-spinner .4s linear infinite}.nprogress-custom-parent{overflow:hidden;position:relative}.nprogress-custom-parent #nprogress .bar,.nprogress-custom-parent #nprogress .spinner{position:absolute}@-webkit-keyframes nprogress-spinner{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}@keyframes nprogress-spinner{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.icon.outbound{color:#aaa;display:inline-block;vertical-align:middle;position:relative;top:-1px}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.home{padding:3.6rem 2rem 0;max-width:960px;margin:0 auto;display:block}.home .hero{text-align:center}.home .hero img{max-width:100%;max-height:280px;display:block;margin:3rem auto 1.5rem}.home .hero h1{font-size:3rem}.home .hero .action,.home .hero .description,.home .hero h1{margin:1.8rem auto}.home .hero .description{max-width:35rem;font-size:1.6rem;line-height:1.3;color:#6a8bad}.home .hero .action-button{display:inline-block;font-size:1.2rem;color:#fff;background-color:#00d2d6;padding:.8rem 1.6rem;border-radius:4px;transition:background-color .1s ease;box-sizing:border-box;border-bottom:1px solid #00bdc1}.home .hero .action-button:hover{background-color:#00eff4}.home .features{border-top:1px solid #eaecef;padding:1.2rem 0;margin-top:2.5rem;display:flex;flex-wrap:wrap;align-items:flex-start;align-content:stretch;justify-content:space-between}.home .feature{flex-grow:1;flex-basis:30%;max-width:30%}.home .feature h2{font-size:1.4rem;font-weight:500;border-bottom:none;padding-bottom:0;color:#3a5169}.home .feature p{color:#4e6e8e}.home .footer{padding:2.5rem;border-top:1px solid #eaecef;text-align:center;color:#4e6e8e}@media (max-width:719px){.home .features{flex-direction:column}.home .feature{max-width:100%;padding:0 2.5rem}}@media (max-width:419px){.home{padding-left:1.5rem;padding-right:1.5rem}.home .hero img{max-height:210px;margin:2rem auto 1.2rem}.home .hero h1{font-size:2rem}.home .hero .action,.home .hero .description,.home .hero h1{margin:1.2rem auto}.home .hero .description{font-size:1.2rem}.home .hero .action-button{font-size:1rem;padding:.6rem 1.2rem}.home .feature h2{font-size:1.25rem}}.search-box{display:inline-block;position:relative;margin-right:1rem}.search-box input{cursor:text;width:10rem;height:2rem;color:#4e6e8e;display:inline-block;border:1px solid #cfd4db;border-radius:2rem;font-size:.9rem;line-height:2rem;padding:0 .5rem 0 2rem;outline:none;transition:all .2s ease;background:#fff url(/assets/img/search.237d6f6a.svg) .6rem .5rem no-repeat;background-size:1rem}.search-box input:focus{cursor:auto;border-color:#00d2d6}.search-box .suggestions{background:#fff;min-width:500px;max-width:700px;position:absolute;top:2rem;border:1px solid #cfd4db;border-radius:6px;padding:.4rem;list-style-type:none}.search-box .suggestions.align-right{right:0}.search-box .suggestion{line-height:1.4;border-radius:4px;cursor:pointer;width:100%}.search-box .suggestion a{display:block;white-space:normal;color:#415b75;width:100%}.search-box .suggestion a .parent-page-title{color:#fff;font-weight:600;background-color:#00d2d6;padding:5px}.search-box .suggestion a .suggestion-row{border-collapse:collapse;width:100%;display:table}.search-box .suggestion a .suggestion-row .page-title{width:35%;background:#f5f5f5;border:1px solid #eaecef;border-left:none;display:table-cell;text-align:right;padding:5px;font-weight:600}.search-box .suggestion a .suggestion-row .suggestion-content{font-weight:400;border:1px solid #eaecef;border-right:none;width:65%;display:table-cell;padding:5px}.search-box .suggestion a .suggestion-row .suggestion-content .highlight{text-decoration:underline}.search-box .suggestion a .suggestion-row .suggestion-content .header{font-weight:600}.search-box .suggestion.focused{background-color:#f3f4f5}@media (max-width:959px){.search-box input{cursor:pointer;width:0;border-color:transparent;position:relative}.search-box input:focus{cursor:text;left:0;width:10rem}}@media (-ms-high-contrast:none){.search-box input{height:2rem}}@media (max-width:959px) and (min-width:719px){.search-box .suggestions{left:0}}@media (max-width:719px){.search-box{margin-right:0}.search-box input{left:1rem}.search-box .suggestions{right:0}}@media (max-width:419px){.search-box .suggestions{width:calc(100vw - 4rem)}.search-box input:focus{width:8rem}}.sidebar-button{cursor:pointer;display:none;width:1.25rem;height:1.25rem;position:absolute;padding:.6rem;top:.6rem;left:1rem}.sidebar-button .icon{display:block;width:1.25rem;height:1.25rem}@media (max-width:719px){.sidebar-button{display:block}}.dropdown-enter,.dropdown-leave-to{height:0!important}.dropdown-wrapper{cursor:pointer}.dropdown-wrapper .dropdown-title,.dropdown-wrapper .mobile-dropdown-title{display:block;font-size:.9rem;font-family:inherit;cursor:inherit;padding:inherit;line-height:1.4rem;background:transparent;border:none;font-weight:500;color:#2c3e50}.dropdown-wrapper .dropdown-title:hover,.dropdown-wrapper .mobile-dropdown-title:hover{border-color:transparent}.dropdown-wrapper .dropdown-title .arrow,.dropdown-wrapper .mobile-dropdown-title .arrow{vertical-align:middle;margin-top:-1px;margin-left:.4rem}.dropdown-wrapper .mobile-dropdown-title{display:none;font-weight:600}.dropdown-wrapper .mobile-dropdown-title font-size inherit:hover{color:#00d2d6}.dropdown-wrapper .nav-dropdown .dropdown-item{color:inherit;line-height:1.7rem}.dropdown-wrapper .nav-dropdown .dropdown-item h4{margin:.45rem 0 0;border-top:1px solid #eee;padding:1rem 1.5rem .45rem 1.25rem}.dropdown-wrapper .nav-dropdown .dropdown-item .dropdown-subitem-wrapper{padding:0;list-style:none}.dropdown-wrapper .nav-dropdown .dropdown-item .dropdown-subitem-wrapper .dropdown-subitem{font-size:.9em}.dropdown-wrapper .nav-dropdown .dropdown-item a{display:block;line-height:1.7rem;position:relative;border-bottom:none;font-weight:400;margin-bottom:0;padding:0 1.5rem 0 1.25rem}.dropdown-wrapper .nav-dropdown .dropdown-item a.router-link-active,.dropdown-wrapper .nav-dropdown .dropdown-item a:hover{color:#00d2d6}.dropdown-wrapper .nav-dropdown .dropdown-item a.router-link-active:after{content:"";width:0;height:0;border-left:5px solid #00d2d6;border-top:3px solid transparent;border-bottom:3px solid transparent;position:absolute;top:calc(50% - 2px);left:9px}.dropdown-wrapper .nav-dropdown .dropdown-item:first-child h4{margin-top:0;padding-top:0;border-top:0}@media (max-width:719px){.dropdown-wrapper.open .dropdown-title{margin-bottom:.5rem}.dropdown-wrapper .dropdown-title{display:none}.dropdown-wrapper .mobile-dropdown-title{display:block}.dropdown-wrapper .nav-dropdown{transition:height .1s ease-out;overflow:hidden}.dropdown-wrapper .nav-dropdown .dropdown-item h4{border-top:0;margin-top:0;padding-top:0}.dropdown-wrapper .nav-dropdown .dropdown-item>a,.dropdown-wrapper .nav-dropdown .dropdown-item h4{font-size:15px;line-height:2rem}.dropdown-wrapper .nav-dropdown .dropdown-item .dropdown-subitem{font-size:14px;padding-left:1rem}}@media (min-width:719px){.dropdown-wrapper{height:1.8rem}.dropdown-wrapper.open .nav-dropdown,.dropdown-wrapper:hover .nav-dropdown{display:block!important}.dropdown-wrapper.open:blur{display:none}.dropdown-wrapper .nav-dropdown{display:none;height:auto!important;box-sizing:border-box;max-height:calc(100vh - 2.7rem);overflow-y:auto;position:absolute;top:100%;right:0;background-color:#fff;padding:.6rem 0;border:1px solid;border-color:#ddd #ddd #ccc;text-align:left;border-radius:.25rem;white-space:nowrap;margin:0}}.nav-links{display:inline-block}.nav-links a{line-height:1.4rem;color:inherit}.nav-links a.router-link-active,.nav-links a:hover{color:#00d2d6}.nav-links .nav-item{position:relative;display:inline-block;margin-left:1.5rem;line-height:2rem}.nav-links .nav-item:first-child{margin-left:0}.nav-links .repo-link{margin-left:1.5rem}@media (max-width:719px){.nav-links .nav-item,.nav-links .repo-link{margin-left:0}}@media (min-width:719px){.nav-links a.router-link-active,.nav-links a:hover{color:#2c3e50}.nav-item>a:not(.external).router-link-active,.nav-item>a:not(.external):hover{margin-bottom:-2px;border-bottom:2px solid #00e9ee}}.navbar{padding:.7rem 1.5rem;line-height:2.2rem}.navbar a,.navbar img,.navbar span{display:inline-block}.navbar .logo{height:2.2rem;min-width:2.2rem;margin-right:.8rem;vertical-align:top}.navbar .site-name{font-size:1.3rem;font-weight:600;color:#2c3e50;position:relative}.navbar .links{padding-left:1.5rem;box-sizing:border-box;background-color:#fff;white-space:nowrap;font-size:.9rem;position:absolute;right:1.5rem;top:.7rem;display:flex}.navbar .links .search-box{flex:0 0 auto;vertical-align:top}@media (max-width:719px){.navbar{padding-left:4rem}.navbar .can-hide{display:none}.navbar .links{padding-left:1.5rem}.navbar .site-name{width:calc(100vw - 9.4rem);overflow:hidden;white-space:nowrap;text-overflow:ellipsis}}.page-edit{max-width:740px;margin:0 auto;padding:2rem 2.5rem}@media (max-width:959px){.page-edit{padding:2rem}}@media (max-width:419px){.page-edit{padding:1.5rem}}.page-edit{padding-top:1rem;padding-bottom:1rem;overflow:auto}.page-edit .edit-link{display:inline-block}.page-edit .edit-link a{color:#4e6e8e;margin-right:.25rem}.page-edit .last-updated{float:right;font-size:.9em}.page-edit .last-updated .prefix{font-weight:500;color:#4e6e8e}.page-edit .last-updated .time{font-weight:400;color:#767676}@media (max-width:719px){.page-edit .edit-link{margin-bottom:.5rem}.page-edit .last-updated{font-size:.8em;float:none;text-align:left}}.page-nav{max-width:740px;margin:0 auto;padding:2rem 2.5rem}@media (max-width:959px){.page-nav{padding:2rem}}@media (max-width:419px){.page-nav{padding:1.5rem}}.page-nav{padding-top:1rem;padding-bottom:0}.page-nav .inner{min-height:2rem;margin-top:0;border-top:1px solid #eaecef;padding-top:1rem;overflow:auto}.page-nav .next{float:right}.page{padding-bottom:2rem;display:block}.sidebar-group .sidebar-group{padding-left:.5em}.sidebar-group:not(.collapsable) .sidebar-heading:not(.clickable){cursor:auto;color:inherit}.sidebar-group.is-sub-group{padding-left:0}.sidebar-group.is-sub-group>.sidebar-heading{font-size:.95em;line-height:1.4;font-weight:400;padding-left:2rem}.sidebar-group.is-sub-group>.sidebar-heading:not(.clickable){opacity:.5}.sidebar-group.is-sub-group>.sidebar-group-items{padding-left:1rem}.sidebar-group.is-sub-group>.sidebar-group-items>li>.sidebar-link{font-size:.95em;border-left:none}.sidebar-group.depth-2>.sidebar-heading{border-left:none}.sidebar-heading{color:#2c3e50;transition:color .15s ease;cursor:pointer;font-size:1.1em;font-weight:700;padding:.35rem 1.5rem .35rem 1.25rem;width:100%;box-sizing:border-box;margin:0;border-left:.25rem solid transparent}.sidebar-heading.open,.sidebar-heading:hover{color:inherit}.sidebar-heading .arrow{position:relative;top:-.12em;left:.5em}.sidebar-heading.clickable.active{font-weight:600;color:#00d2d6;border-left-color:#00d2d6}.sidebar-heading.clickable:hover{color:#00d2d6}.sidebar-group-items{transition:height .1s ease-out;font-size:.95em;overflow:hidden}.sidebar .sidebar-sub-headers{padding-left:1rem;font-size:.95em}a.sidebar-link{font-size:1em;font-weight:400;display:inline-block;color:#2c3e50;border-left:.25rem solid transparent;padding:.35rem 1rem .35rem 1.25rem;line-height:1.4;width:100%;box-sizing:border-box}a.sidebar-link:hover{color:#00d2d6}a.sidebar-link.active{font-weight:600;color:#00d2d6;border-left-color:#00d2d6}.sidebar-group a.sidebar-link{padding-left:2rem}.sidebar-sub-headers a.sidebar-link{padding-top:.25rem;padding-bottom:.25rem;border-left:none}.sidebar-sub-headers a.sidebar-link.active{font-weight:500}a,a.sidebar-link.active{color:#00aaac}.hero h1,.navbar .site-name{font-family:Oxygen}.sidebar ul{padding:0;margin:0;list-style-type:none}.sidebar a{display:inline-block}.sidebar .nav-links{display:none;border-bottom:1px solid #eaecef;padding:.5rem 0 .75rem}.sidebar .nav-links a{font-weight:600}.sidebar .nav-links .nav-item,.sidebar .nav-links .repo-link{display:block;line-height:1.25rem;font-size:1.1em;padding:.5rem 0 .5rem 1.5rem}.sidebar>.sidebar-links{padding:1.5rem 0}.sidebar>.sidebar-links>li>a.sidebar-link{font-size:1.1em;line-height:1.7;font-weight:700}.sidebar>.sidebar-links>li:not(:first-child){margin-top:.75rem}@media (max-width:719px){.sidebar .nav-links{display:block}.sidebar .nav-links .dropdown-wrapper .nav-dropdown .dropdown-item a.router-link-active:after{top:calc(1rem - 2px)}.sidebar>.sidebar-links{padding:1rem 0}}a.sidebar-link.active[data-v-15b7b770],a[data-v-15b7b770]{color:#00aaac}.hero h1[data-v-15b7b770],.navbar .site-name[data-v-15b7b770]{font-family:Oxygen}.badge[data-v-15b7b770]{display:inline-block;font-size:14px;height:18px;line-height:18px;border-radius:3px;padding:0 6px;color:#fff}.badge.green[data-v-15b7b770],.badge.tip[data-v-15b7b770],.badge[data-v-15b7b770]{background-color:#42b983}.badge.error[data-v-15b7b770]{background-color:#da5961}.badge.warn[data-v-15b7b770],.badge.warning[data-v-15b7b770],.badge.yellow[data-v-15b7b770]{background-color:#e7c000}.badge+.badge[data-v-15b7b770]{margin-left:5px}@font-face{font-family:Oxygen;font-style:normal;font-weight:400;src:url(/assets/fonts/oxygen/Oxygen-Regular.ttf)}@font-face{font-family:Oxygen;font-weight:300;src:url(/assets/fonts/oxygen/Oxygen-Light.ttf)}@font-face{font-family:Oxygen;font-weight:700;src:url(/assets/fonts/oxygen/Oxygen-Bold.ttf)}a.sidebar-link.active[data-v-32c2d7ed],a[data-v-32c2d7ed]{color:#00aaac}.hero h1[data-v-32c2d7ed],.navbar .site-name[data-v-32c2d7ed]{font-family:Oxygen}.theme-code-group__nav[data-v-32c2d7ed]{margin-bottom:-35px;background-color:#282c34;padding-bottom:22px;border-top-left-radius:6px;border-top-right-radius:6px;padding-left:10px;padding-top:10px}.theme-code-group__ul[data-v-32c2d7ed]{margin:auto 0;padding-left:0;display:inline-flex;list-style:none}.theme-code-group__nav-tab[data-v-32c2d7ed]{border:0;padding:5px;cursor:pointer;background-color:transparent;font-size:.85em;line-height:1.4;color:hsla(0,0%,100%,.9);font-weight:600}.theme-code-group__nav-tab-active[data-v-32c2d7ed]{border-bottom:1px solid #42b983}.pre-blank[data-v-32c2d7ed]{color:#42b983}.theme-code-block[data-v-6d04095e]{display:none}.theme-code-block__active[data-v-6d04095e]{display:block}.theme-code-block>pre[data-v-6d04095e]{background-color:orange} \ No newline at end of file +.medium-zoom-overlay{z-index:100}.medium-zoom-overlay~img{z-index:101}svg[data-v-49140617]{position:absolute;right:7.5px;opacity:.75;cursor:pointer}svg.hover[data-v-49140617]{opacity:0}svg[data-v-49140617]:hover{opacity:1!important}span[data-v-49140617]{position:absolute;font-size:.85rem;line-height:.425rem;right:50px;opacity:0;transition:opacity .5s}.success[data-v-49140617]{opacity:1!important}.code-copy-added:hover>.code-copy svg{opacity:.75}code[class*=language-],pre[class*=language-]{color:#ccc;background:none;font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-ms-hyphens:none;hyphens:none}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto}:not(pre)>code[class*=language-],pre[class*=language-]{background:#2d2d2d}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.token.block-comment,.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#999}.token.punctuation{color:#ccc}.token.attr-name,.token.deleted,.token.namespace,.token.tag{color:#e2777a}.token.function-name{color:#6196cc}.token.boolean,.token.function,.token.number{color:#f08d49}.token.class-name,.token.constant,.token.property,.token.symbol{color:#f8c555}.token.atrule,.token.builtin,.token.important,.token.keyword,.token.selector{color:#cc99cd}.token.attr-value,.token.char,.token.regex,.token.string,.token.variable{color:#7ec699}.token.entity,.token.operator,.token.url{color:#67cdcc}.token.bold,.token.important{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}.token.inserted{color:green}.theme-default-content code{color:#476582;padding:.25rem .5rem;margin:0;font-size:.85em;background-color:rgba(27,31,35,.05);border-radius:3px}.theme-default-content code .token.deleted{color:#ec5975}.theme-default-content code .token.inserted{color:#00d2d6}.theme-default-content pre,.theme-default-content pre[class*=language-]{line-height:1.4;padding:1.25rem 1.5rem;margin:.85rem 0;background-color:#282c34;border-radius:6px;overflow:auto}.theme-default-content pre[class*=language-] code,.theme-default-content pre code{color:#fff;padding:0;background-color:transparent;border-radius:0}div[class*=language-]{position:relative;background-color:#282c34;border-radius:6px}div[class*=language-] .highlight-lines{-webkit-user-select:none;user-select:none;padding-top:1.3rem;position:absolute;top:0;left:0;width:100%;line-height:1.4}div[class*=language-] .highlight-lines .highlighted{background-color:rgba(0,0,0,.66)}div[class*=language-] pre,div[class*=language-] pre[class*=language-]{background:transparent;position:relative;z-index:1}div[class*=language-]:before{position:absolute;z-index:3;top:.8em;right:1em;font-size:.75rem;color:hsla(0,0%,100%,.4)}div[class*=language-]:not(.line-numbers-mode) .line-numbers-wrapper{display:none}div[class*=language-].line-numbers-mode .highlight-lines .highlighted{position:relative}div[class*=language-].line-numbers-mode .highlight-lines .highlighted:before{content:" ";position:absolute;z-index:3;left:0;top:0;display:block;width:3.5rem;height:100%;background-color:rgba(0,0,0,.66)}div[class*=language-].line-numbers-mode pre{padding-left:4.5rem;vertical-align:middle}div[class*=language-].line-numbers-mode .line-numbers-wrapper{position:absolute;top:0;width:3.5rem;text-align:center;color:hsla(0,0%,100%,.3);padding:1.25rem 0;line-height:1.4}div[class*=language-].line-numbers-mode .line-numbers-wrapper br{-webkit-user-select:none;user-select:none}div[class*=language-].line-numbers-mode .line-numbers-wrapper .line-number{position:relative;z-index:4;-webkit-user-select:none;user-select:none;font-size:.85em}div[class*=language-].line-numbers-mode:after{content:"";position:absolute;z-index:2;top:0;left:0;width:3.5rem;height:100%;border-radius:6px 0 0 6px;border-right:1px solid rgba(0,0,0,.66);background-color:#282c34}div[class~=language-js]:before{content:"js"}div[class~=language-ts]:before{content:"ts"}div[class~=language-html]:before{content:"html"}div[class~=language-md]:before{content:"md"}div[class~=language-vue]:before{content:"vue"}div[class~=language-css]:before{content:"css"}div[class~=language-sass]:before{content:"sass"}div[class~=language-scss]:before{content:"scss"}div[class~=language-less]:before{content:"less"}div[class~=language-stylus]:before{content:"stylus"}div[class~=language-go]:before{content:"go"}div[class~=language-java]:before{content:"java"}div[class~=language-c]:before{content:"c"}div[class~=language-sh]:before{content:"sh"}div[class~=language-yaml]:before{content:"yaml"}div[class~=language-py]:before{content:"py"}div[class~=language-docker]:before{content:"docker"}div[class~=language-dockerfile]:before{content:"dockerfile"}div[class~=language-makefile]:before{content:"makefile"}div[class~=language-javascript]:before{content:"js"}div[class~=language-typescript]:before{content:"ts"}div[class~=language-markup]:before{content:"html"}div[class~=language-markdown]:before{content:"md"}div[class~=language-json]:before{content:"json"}div[class~=language-ruby]:before{content:"rb"}div[class~=language-python]:before{content:"py"}div[class~=language-bash]:before{content:"sh"}div[class~=language-php]:before{content:"php"}.custom-block .custom-block-title{font-weight:600;margin-bottom:-.4rem}.custom-block.danger,.custom-block.tip,.custom-block.warning{padding:.1rem 1.5rem;border-left-width:.5rem;border-left-style:solid;margin:1rem 0}.custom-block.tip{background-color:#f3f5f7;border-color:#42b983}.custom-block.warning{background-color:rgba(255,229,100,.3);border-color:#e7c000;color:#6b5900}.custom-block.warning .custom-block-title{color:#b29400}.custom-block.warning a{color:#2c3e50}.custom-block.danger{background-color:#ffe6e6;border-color:#c00;color:#4d0000}.custom-block.danger .custom-block-title{color:#900}.custom-block.danger a{color:#2c3e50}.custom-block.details{display:block;position:relative;border-radius:2px;margin:1.6em 0;padding:1.6em;background-color:#eee}.custom-block.details h4{margin-top:0}.custom-block.details figure:last-child,.custom-block.details p:last-child{margin-bottom:0;padding-bottom:0}.custom-block.details summary{outline:none;cursor:pointer}.arrow{display:inline-block;width:0;height:0}.arrow.up{border-bottom:6px solid #ccc}.arrow.down,.arrow.up{border-left:4px solid transparent;border-right:4px solid transparent}.arrow.down{border-top:6px solid #ccc}.arrow.right{border-left:6px solid #ccc}.arrow.left,.arrow.right{border-top:4px solid transparent;border-bottom:4px solid transparent}.arrow.left{border-right:6px solid #ccc}.theme-default-content:not(.custom){max-width:740px;margin:0 auto;padding:2rem 2.5rem}@media (max-width:959px){.theme-default-content:not(.custom){padding:2rem}}@media (max-width:419px){.theme-default-content:not(.custom){padding:1.5rem}}.table-of-contents .badge{vertical-align:middle}body,html{padding:0;margin:0;background-color:#fff}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-size:16px;color:#2c3e50}.page{padding-left:20rem}.navbar{z-index:20;right:0;height:3.6rem;background-color:#fff;box-sizing:border-box;border-bottom:1px solid #eaecef}.navbar,.sidebar-mask{position:fixed;top:0;left:0}.sidebar-mask{z-index:9;width:100vw;height:100vh;display:none}.sidebar{font-size:16px;background-color:#fff;width:20rem;position:fixed;z-index:10;margin:0;top:3.6rem;left:0;bottom:0;box-sizing:border-box;border-right:1px solid #eaecef;overflow-y:auto}.theme-default-content:not(.custom)>:first-child{margin-top:3.6rem}.theme-default-content:not(.custom) a:hover{text-decoration:underline}.theme-default-content:not(.custom) p.demo{padding:1rem 1.5rem;border:1px solid #ddd;border-radius:4px}.theme-default-content:not(.custom) img{max-width:100%}.theme-default-content.custom{padding:0;margin:0}.theme-default-content.custom img{max-width:100%}a{font-weight:500;text-decoration:none}a,p a code{color:#00d2d6}p a code{font-weight:400}kbd{background:#eee;border:.15rem solid #ddd;border-bottom:.25rem solid #ddd;border-radius:.15rem;padding:0 .15em}blockquote{font-size:1rem;color:#999;border-left:.2rem solid #dfe2e5;margin:1rem 0;padding:.25rem 0 .25rem 1rem}blockquote>p{margin:0}ol,ul{padding-left:1.2em}strong{font-weight:600}h1,h2,h3,h4,h5,h6{font-weight:600;line-height:1.25}.theme-default-content:not(.custom)>h1,.theme-default-content:not(.custom)>h2,.theme-default-content:not(.custom)>h3,.theme-default-content:not(.custom)>h4,.theme-default-content:not(.custom)>h5,.theme-default-content:not(.custom)>h6{margin-top:-3.1rem;padding-top:4.6rem;margin-bottom:0}.theme-default-content:not(.custom)>h1:first-child,.theme-default-content:not(.custom)>h2:first-child,.theme-default-content:not(.custom)>h3:first-child,.theme-default-content:not(.custom)>h4:first-child,.theme-default-content:not(.custom)>h5:first-child,.theme-default-content:not(.custom)>h6:first-child{margin-top:-1.5rem;margin-bottom:1rem}.theme-default-content:not(.custom)>h1:first-child+.custom-block,.theme-default-content:not(.custom)>h1:first-child+p,.theme-default-content:not(.custom)>h1:first-child+pre,.theme-default-content:not(.custom)>h2:first-child+.custom-block,.theme-default-content:not(.custom)>h2:first-child+p,.theme-default-content:not(.custom)>h2:first-child+pre,.theme-default-content:not(.custom)>h3:first-child+.custom-block,.theme-default-content:not(.custom)>h3:first-child+p,.theme-default-content:not(.custom)>h3:first-child+pre,.theme-default-content:not(.custom)>h4:first-child+.custom-block,.theme-default-content:not(.custom)>h4:first-child+p,.theme-default-content:not(.custom)>h4:first-child+pre,.theme-default-content:not(.custom)>h5:first-child+.custom-block,.theme-default-content:not(.custom)>h5:first-child+p,.theme-default-content:not(.custom)>h5:first-child+pre,.theme-default-content:not(.custom)>h6:first-child+.custom-block,.theme-default-content:not(.custom)>h6:first-child+p,.theme-default-content:not(.custom)>h6:first-child+pre{margin-top:2rem}h1:focus .header-anchor,h1:hover .header-anchor,h2:focus .header-anchor,h2:hover .header-anchor,h3:focus .header-anchor,h3:hover .header-anchor,h4:focus .header-anchor,h4:hover .header-anchor,h5:focus .header-anchor,h5:hover .header-anchor,h6:focus .header-anchor,h6:hover .header-anchor{opacity:1}h1{font-size:2.2rem}h2{font-size:1.65rem;padding-bottom:.3rem;border-bottom:1px solid #eaecef}h3{font-size:1.35rem}a.header-anchor{font-size:.85em;float:left;margin-left:-.87em;padding-right:.23em;margin-top:.125em;opacity:0}a.header-anchor:focus,a.header-anchor:hover{text-decoration:none}.line-number,code,kbd{font-family:source-code-pro,Menlo,Monaco,Consolas,Courier New,monospace}ol,p,ul{line-height:1.7}hr{border:0;border-top:1px solid #eaecef}table{border-collapse:collapse;margin:1rem 0;display:block;overflow-x:auto}tr{border-top:1px solid #dfe2e5}tr:nth-child(2n){background-color:#f6f8fa}td,th{border:1px solid #dfe2e5;padding:.6em 1em}.theme-container.sidebar-open .sidebar-mask{display:block}.theme-container.no-navbar .theme-default-content:not(.custom)>h1,.theme-container.no-navbar h2,.theme-container.no-navbar h3,.theme-container.no-navbar h4,.theme-container.no-navbar h5,.theme-container.no-navbar h6{margin-top:1.5rem;padding-top:0}.theme-container.no-navbar .sidebar{top:0}@media (min-width:720px){.theme-container.no-sidebar .sidebar{display:none}.theme-container.no-sidebar .page{padding-left:0}}@media (max-width:959px){.sidebar{font-size:15px;width:16.4rem}.page{padding-left:16.4rem}}@media (max-width:719px){.sidebar{top:0;padding-top:3.6rem;transform:translateX(-100%);transition:transform .2s ease}.page{padding-left:0}.theme-container.sidebar-open .sidebar{transform:translateX(0)}.theme-container.no-navbar .sidebar{padding-top:0}}@media (max-width:419px){h1{font-size:1.9rem}.theme-default-content div[class*=language-]{margin:.85rem -1.5rem;border-radius:0}}a.sidebar-link.active[data-v-5fd4ef0c],a[data-v-5fd4ef0c]{color:#00aaac}.hero h1[data-v-5fd4ef0c],.navbar .site-name[data-v-5fd4ef0c]{font-family:Oxygen}.go-to-top[data-v-5fd4ef0c]{cursor:pointer;position:fixed;bottom:2rem;right:2.5rem;width:2rem;color:#00d2d6;z-index:1}.go-to-top[data-v-5fd4ef0c]:hover{color:#30fbff}@media (max-width:959px){.go-to-top[data-v-5fd4ef0c]{display:none}}.fade-enter-active[data-v-5fd4ef0c],.fade-leave-active[data-v-5fd4ef0c]{transition:opacity .3s}.fade-enter[data-v-5fd4ef0c],.fade-leave-to[data-v-5fd4ef0c]{opacity:0}#nprogress{pointer-events:none}#nprogress .bar{background:#00d2d6;position:fixed;z-index:1031;top:0;left:0;width:100%;height:2px}#nprogress .peg{display:block;position:absolute;right:0;width:100px;height:100%;box-shadow:0 0 10px #00d2d6,0 0 5px #00d2d6;opacity:1;transform:rotate(3deg) translateY(-4px)}#nprogress .spinner{display:block;position:fixed;z-index:1031;top:15px;right:15px}#nprogress .spinner-icon{width:18px;height:18px;box-sizing:border-box;border-color:#00d2d6 transparent transparent #00d2d6;border-style:solid;border-width:2px;border-radius:50%;-webkit-animation:nprogress-spinner .4s linear infinite;animation:nprogress-spinner .4s linear infinite}.nprogress-custom-parent{overflow:hidden;position:relative}.nprogress-custom-parent #nprogress .bar,.nprogress-custom-parent #nprogress .spinner{position:absolute}@-webkit-keyframes nprogress-spinner{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}@keyframes nprogress-spinner{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.icon.outbound{color:#aaa;display:inline-block;vertical-align:middle;position:relative;top:-1px}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.home{padding:3.6rem 2rem 0;max-width:960px;margin:0 auto;display:block}.home .hero{text-align:center}.home .hero img{max-width:100%;max-height:280px;display:block;margin:3rem auto 1.5rem}.home .hero h1{font-size:3rem}.home .hero .action,.home .hero .description,.home .hero h1{margin:1.8rem auto}.home .hero .description{max-width:35rem;font-size:1.6rem;line-height:1.3;color:#6a8bad}.home .hero .action-button{display:inline-block;font-size:1.2rem;color:#fff;background-color:#00d2d6;padding:.8rem 1.6rem;border-radius:4px;transition:background-color .1s ease;box-sizing:border-box;border-bottom:1px solid #00bdc1}.home .hero .action-button:hover{background-color:#00eff4}.home .features{border-top:1px solid #eaecef;padding:1.2rem 0;margin-top:2.5rem;display:flex;flex-wrap:wrap;align-items:flex-start;align-content:stretch;justify-content:space-between}.home .feature{flex-grow:1;flex-basis:30%;max-width:30%}.home .feature h2{font-size:1.4rem;font-weight:500;border-bottom:none;padding-bottom:0;color:#3a5169}.home .feature p{color:#4e6e8e}.home .footer{padding:2.5rem;border-top:1px solid #eaecef;text-align:center;color:#4e6e8e}@media (max-width:719px){.home .features{flex-direction:column}.home .feature{max-width:100%;padding:0 2.5rem}}@media (max-width:419px){.home{padding-left:1.5rem;padding-right:1.5rem}.home .hero img{max-height:210px;margin:2rem auto 1.2rem}.home .hero h1{font-size:2rem}.home .hero .action,.home .hero .description,.home .hero h1{margin:1.2rem auto}.home .hero .description{font-size:1.2rem}.home .hero .action-button{font-size:1rem;padding:.6rem 1.2rem}.home .feature h2{font-size:1.25rem}}.search-box{display:inline-block;position:relative;margin-right:1rem}.search-box input{cursor:text;width:10rem;height:2rem;color:#4e6e8e;display:inline-block;border:1px solid #cfd4db;border-radius:2rem;font-size:.9rem;line-height:2rem;padding:0 .5rem 0 2rem;outline:none;transition:all .2s ease;background:#fff url(/assets/img/search.237d6f6a.svg) .6rem .5rem no-repeat;background-size:1rem}.search-box input:focus{cursor:auto;border-color:#00d2d6}.search-box .suggestions{background:#fff;min-width:500px;max-width:700px;position:absolute;top:2rem;border:1px solid #cfd4db;border-radius:6px;padding:.4rem;list-style-type:none}.search-box .suggestions.align-right{right:0}.search-box .suggestion{line-height:1.4;border-radius:4px;cursor:pointer;width:100%}.search-box .suggestion a{display:block;white-space:normal;color:#415b75;width:100%}.search-box .suggestion a .parent-page-title{color:#fff;font-weight:600;background-color:#00d2d6;padding:5px}.search-box .suggestion a .suggestion-row{border-collapse:collapse;width:100%;display:table}.search-box .suggestion a .suggestion-row .page-title{width:35%;background:#f5f5f5;border:1px solid #eaecef;border-left:none;display:table-cell;text-align:right;padding:5px;font-weight:600}.search-box .suggestion a .suggestion-row .suggestion-content{font-weight:400;border:1px solid #eaecef;border-right:none;width:65%;display:table-cell;padding:5px}.search-box .suggestion a .suggestion-row .suggestion-content .highlight{text-decoration:underline}.search-box .suggestion a .suggestion-row .suggestion-content .header{font-weight:600}.search-box .suggestion.focused{background-color:#f3f4f5}@media (max-width:959px){.search-box input{cursor:pointer;width:0;border-color:transparent;position:relative}.search-box input:focus{cursor:text;left:0;width:10rem}}@media (-ms-high-contrast:none){.search-box input{height:2rem}}@media (max-width:959px) and (min-width:719px){.search-box .suggestions{left:0}}@media (max-width:719px){.search-box{margin-right:0}.search-box input{left:1rem}.search-box .suggestions{right:0}}@media (max-width:419px){.search-box .suggestions{width:calc(100vw - 4rem)}.search-box input:focus{width:8rem}}.sidebar-button{cursor:pointer;display:none;width:1.25rem;height:1.25rem;position:absolute;padding:.6rem;top:.6rem;left:1rem}.sidebar-button .icon{display:block;width:1.25rem;height:1.25rem}@media (max-width:719px){.sidebar-button{display:block}}.dropdown-enter,.dropdown-leave-to{height:0!important}.dropdown-wrapper{cursor:pointer}.dropdown-wrapper .dropdown-title,.dropdown-wrapper .mobile-dropdown-title{display:block;font-size:.9rem;font-family:inherit;cursor:inherit;padding:inherit;line-height:1.4rem;background:transparent;border:none;font-weight:500;color:#2c3e50}.dropdown-wrapper .dropdown-title:hover,.dropdown-wrapper .mobile-dropdown-title:hover{border-color:transparent}.dropdown-wrapper .dropdown-title .arrow,.dropdown-wrapper .mobile-dropdown-title .arrow{vertical-align:middle;margin-top:-1px;margin-left:.4rem}.dropdown-wrapper .mobile-dropdown-title{display:none;font-weight:600}.dropdown-wrapper .mobile-dropdown-title font-size inherit:hover{color:#00d2d6}.dropdown-wrapper .nav-dropdown .dropdown-item{color:inherit;line-height:1.7rem}.dropdown-wrapper .nav-dropdown .dropdown-item h4{margin:.45rem 0 0;border-top:1px solid #eee;padding:1rem 1.5rem .45rem 1.25rem}.dropdown-wrapper .nav-dropdown .dropdown-item .dropdown-subitem-wrapper{padding:0;list-style:none}.dropdown-wrapper .nav-dropdown .dropdown-item .dropdown-subitem-wrapper .dropdown-subitem{font-size:.9em}.dropdown-wrapper .nav-dropdown .dropdown-item a{display:block;line-height:1.7rem;position:relative;border-bottom:none;font-weight:400;margin-bottom:0;padding:0 1.5rem 0 1.25rem}.dropdown-wrapper .nav-dropdown .dropdown-item a.router-link-active,.dropdown-wrapper .nav-dropdown .dropdown-item a:hover{color:#00d2d6}.dropdown-wrapper .nav-dropdown .dropdown-item a.router-link-active:after{content:"";width:0;height:0;border-left:5px solid #00d2d6;border-top:3px solid transparent;border-bottom:3px solid transparent;position:absolute;top:calc(50% - 2px);left:9px}.dropdown-wrapper .nav-dropdown .dropdown-item:first-child h4{margin-top:0;padding-top:0;border-top:0}@media (max-width:719px){.dropdown-wrapper.open .dropdown-title{margin-bottom:.5rem}.dropdown-wrapper .dropdown-title{display:none}.dropdown-wrapper .mobile-dropdown-title{display:block}.dropdown-wrapper .nav-dropdown{transition:height .1s ease-out;overflow:hidden}.dropdown-wrapper .nav-dropdown .dropdown-item h4{border-top:0;margin-top:0;padding-top:0}.dropdown-wrapper .nav-dropdown .dropdown-item>a,.dropdown-wrapper .nav-dropdown .dropdown-item h4{font-size:15px;line-height:2rem}.dropdown-wrapper .nav-dropdown .dropdown-item .dropdown-subitem{font-size:14px;padding-left:1rem}}@media (min-width:719px){.dropdown-wrapper{height:1.8rem}.dropdown-wrapper.open .nav-dropdown,.dropdown-wrapper:hover .nav-dropdown{display:block!important}.dropdown-wrapper.open:blur{display:none}.dropdown-wrapper .nav-dropdown{display:none;height:auto!important;box-sizing:border-box;max-height:calc(100vh - 2.7rem);overflow-y:auto;position:absolute;top:100%;right:0;background-color:#fff;padding:.6rem 0;border:1px solid;border-color:#ddd #ddd #ccc;text-align:left;border-radius:.25rem;white-space:nowrap;margin:0}}.nav-links{display:inline-block}.nav-links a{line-height:1.4rem;color:inherit}.nav-links a.router-link-active,.nav-links a:hover{color:#00d2d6}.nav-links .nav-item{position:relative;display:inline-block;margin-left:1.5rem;line-height:2rem}.nav-links .nav-item:first-child{margin-left:0}.nav-links .repo-link{margin-left:1.5rem}@media (max-width:719px){.nav-links .nav-item,.nav-links .repo-link{margin-left:0}}@media (min-width:719px){.nav-links a.router-link-active,.nav-links a:hover{color:#2c3e50}.nav-item>a:not(.external).router-link-active,.nav-item>a:not(.external):hover{margin-bottom:-2px;border-bottom:2px solid #00e9ee}}.navbar{padding:.7rem 1.5rem;line-height:2.2rem}.navbar a,.navbar img,.navbar span{display:inline-block}.navbar .logo{height:2.2rem;min-width:2.2rem;margin-right:.8rem;vertical-align:top}.navbar .site-name{font-size:1.3rem;font-weight:600;color:#2c3e50;position:relative}.navbar .links{padding-left:1.5rem;box-sizing:border-box;background-color:#fff;white-space:nowrap;font-size:.9rem;position:absolute;right:1.5rem;top:.7rem;display:flex}.navbar .links .search-box{flex:0 0 auto;vertical-align:top}@media (max-width:719px){.navbar{padding-left:4rem}.navbar .can-hide{display:none}.navbar .links{padding-left:1.5rem}.navbar .site-name{width:calc(100vw - 9.4rem);overflow:hidden;white-space:nowrap;text-overflow:ellipsis}}.page-edit{max-width:740px;margin:0 auto;padding:2rem 2.5rem}@media (max-width:959px){.page-edit{padding:2rem}}@media (max-width:419px){.page-edit{padding:1.5rem}}.page-edit{padding-top:1rem;padding-bottom:1rem;overflow:auto}.page-edit .edit-link{display:inline-block}.page-edit .edit-link a{color:#4e6e8e;margin-right:.25rem}.page-edit .last-updated{float:right;font-size:.9em}.page-edit .last-updated .prefix{font-weight:500;color:#4e6e8e}.page-edit .last-updated .time{font-weight:400;color:#767676}@media (max-width:719px){.page-edit .edit-link{margin-bottom:.5rem}.page-edit .last-updated{font-size:.8em;float:none;text-align:left}}.page-nav{max-width:740px;margin:0 auto;padding:2rem 2.5rem}@media (max-width:959px){.page-nav{padding:2rem}}@media (max-width:419px){.page-nav{padding:1.5rem}}.page-nav{padding-top:1rem;padding-bottom:0}.page-nav .inner{min-height:2rem;margin-top:0;border-top:1px solid #eaecef;padding-top:1rem;overflow:auto}.page-nav .next{float:right}.page{padding-bottom:2rem;display:block}.sidebar-group .sidebar-group{padding-left:.5em}.sidebar-group:not(.collapsable) .sidebar-heading:not(.clickable){cursor:auto;color:inherit}.sidebar-group.is-sub-group{padding-left:0}.sidebar-group.is-sub-group>.sidebar-heading{font-size:.95em;line-height:1.4;font-weight:400;padding-left:2rem}.sidebar-group.is-sub-group>.sidebar-heading:not(.clickable){opacity:.5}.sidebar-group.is-sub-group>.sidebar-group-items{padding-left:1rem}.sidebar-group.is-sub-group>.sidebar-group-items>li>.sidebar-link{font-size:.95em;border-left:none}.sidebar-group.depth-2>.sidebar-heading{border-left:none}.sidebar-heading{color:#2c3e50;transition:color .15s ease;cursor:pointer;font-size:1.1em;font-weight:700;padding:.35rem 1.5rem .35rem 1.25rem;width:100%;box-sizing:border-box;margin:0;border-left:.25rem solid transparent}.sidebar-heading.open,.sidebar-heading:hover{color:inherit}.sidebar-heading .arrow{position:relative;top:-.12em;left:.5em}.sidebar-heading.clickable.active{font-weight:600;color:#00d2d6;border-left-color:#00d2d6}.sidebar-heading.clickable:hover{color:#00d2d6}.sidebar-group-items{transition:height .1s ease-out;font-size:.95em;overflow:hidden}.sidebar .sidebar-sub-headers{padding-left:1rem;font-size:.95em}a.sidebar-link{font-size:1em;font-weight:400;display:inline-block;color:#2c3e50;border-left:.25rem solid transparent;padding:.35rem 1rem .35rem 1.25rem;line-height:1.4;width:100%;box-sizing:border-box}a.sidebar-link:hover{color:#00d2d6}a.sidebar-link.active{font-weight:600;color:#00d2d6;border-left-color:#00d2d6}.sidebar-group a.sidebar-link{padding-left:2rem}.sidebar-sub-headers a.sidebar-link{padding-top:.25rem;padding-bottom:.25rem;border-left:none}.sidebar-sub-headers a.sidebar-link.active{font-weight:500}a,a.sidebar-link.active{color:#00aaac}.hero h1,.navbar .site-name{font-family:Oxygen}.sidebar ul{padding:0;margin:0;list-style-type:none}.sidebar a{display:inline-block}.sidebar .nav-links{display:none;border-bottom:1px solid #eaecef;padding:.5rem 0 .75rem}.sidebar .nav-links a{font-weight:600}.sidebar .nav-links .nav-item,.sidebar .nav-links .repo-link{display:block;line-height:1.25rem;font-size:1.1em;padding:.5rem 0 .5rem 1.5rem}.sidebar>.sidebar-links{padding:1.5rem 0}.sidebar>.sidebar-links>li>a.sidebar-link{font-size:1.1em;line-height:1.7;font-weight:700}.sidebar>.sidebar-links>li:not(:first-child){margin-top:.75rem}@media (max-width:719px){.sidebar .nav-links{display:block}.sidebar .nav-links .dropdown-wrapper .nav-dropdown .dropdown-item a.router-link-active:after{top:calc(1rem - 2px)}.sidebar>.sidebar-links{padding:1rem 0}}a.sidebar-link.active[data-v-15b7b770],a[data-v-15b7b770]{color:#00aaac}.hero h1[data-v-15b7b770],.navbar .site-name[data-v-15b7b770]{font-family:Oxygen}.badge[data-v-15b7b770]{display:inline-block;font-size:14px;height:18px;line-height:18px;border-radius:3px;padding:0 6px;color:#fff}.badge.green[data-v-15b7b770],.badge.tip[data-v-15b7b770],.badge[data-v-15b7b770]{background-color:#42b983}.badge.error[data-v-15b7b770]{background-color:#da5961}.badge.warn[data-v-15b7b770],.badge.warning[data-v-15b7b770],.badge.yellow[data-v-15b7b770]{background-color:#e7c000}.badge+.badge[data-v-15b7b770]{margin-left:5px}.theme-code-block[data-v-6d04095e]{display:none}.theme-code-block__active[data-v-6d04095e]{display:block}.theme-code-block>pre[data-v-6d04095e]{background-color:orange}@font-face{font-family:Oxygen;font-style:normal;font-weight:400;src:url(/assets/fonts/oxygen/Oxygen-Regular.ttf)}@font-face{font-family:Oxygen;font-weight:300;src:url(/assets/fonts/oxygen/Oxygen-Light.ttf)}@font-face{font-family:Oxygen;font-weight:700;src:url(/assets/fonts/oxygen/Oxygen-Bold.ttf)}a.sidebar-link.active[data-v-32c2d7ed],a[data-v-32c2d7ed]{color:#00aaac}.hero h1[data-v-32c2d7ed],.navbar .site-name[data-v-32c2d7ed]{font-family:Oxygen}.theme-code-group__nav[data-v-32c2d7ed]{margin-bottom:-35px;background-color:#282c34;padding-bottom:22px;border-top-left-radius:6px;border-top-right-radius:6px;padding-left:10px;padding-top:10px}.theme-code-group__ul[data-v-32c2d7ed]{margin:auto 0;padding-left:0;display:inline-flex;list-style:none}.theme-code-group__nav-tab[data-v-32c2d7ed]{border:0;padding:5px;cursor:pointer;background-color:transparent;font-size:.85em;line-height:1.4;color:hsla(0,0%,100%,.9);font-weight:600}.theme-code-group__nav-tab-active[data-v-32c2d7ed]{border-bottom:1px solid #42b983}.pre-blank[data-v-32c2d7ed]{color:#42b983} \ No newline at end of file diff --git a/assets/js/23.09d8a9a8.js b/assets/js/23.d61f9472.js similarity index 98% rename from assets/js/23.09d8a9a8.js rename to assets/js/23.d61f9472.js index c4de76f31..e69e29c94 100644 --- a/assets/js/23.09d8a9a8.js +++ b/assets/js/23.d61f9472.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[23],{405:function(t,s,n){"use strict";n.r(s);var a=n(17),e=Object(a.a)({},(function(){var t=this,s=t.$createElement,n=t._self._c||s;return n("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[n("h2",{attrs:{id:"contributing"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#contributing"}},[t._v("#")]),t._v(" Contributing")]),t._v(" "),n("p",[t._v("PRs, bug reports, and issue suggestions are welcome! For major changes, please propose in an issue first so benefits and impacts can be discussed.")]),t._v(" "),n("p",[t._v("👉 You can also click on click on "),n("code",[t._v("Edit this page")]),t._v(" links at the bottom of each page to jump directly to Edit mode.")]),t._v(" "),n("h2",{attrs:{id:"deployment"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#deployment"}},[t._v("#")]),t._v(" Deployment")]),t._v(" "),n("h3",{attrs:{id:"running-locally"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#running-locally"}},[t._v("#")]),t._v(" Running locally")]),t._v(" "),n("div",{staticClass:"language- extra-class"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[t._v(" $ yarn install\n $ yarn docs:dev \n")])])]),n("h3",{attrs:{id:"building"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#building"}},[t._v("#")]),t._v(" Building")]),t._v(" "),n("div",{staticClass:"language- extra-class"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[t._v(" $ yarn docs:links # verify all links are well-formed\n $ yarn docs:build\n")])])]),n("p",[t._v("Then deploy the "),n("code",[t._v("docs/.vuepress/dist")]),t._v(" directory to the "),n("code",[t._v("gh-pages")]),t._v(" branch of this repo.")]),t._v(" "),n("h3",{attrs:{id:"deploy-script"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#deploy-script"}},[t._v("#")]),t._v(" Deploy script")]),t._v(" "),n("p",[t._v("You can also run the following script to combine building and deployment together. Make sure everything is running okay locally.")]),t._v(" "),n("div",{staticClass:"language-bash extra-class"},[n("pre",{pre:!0,attrs:{class:"language-bash"}},[n("code",[n("span",{pre:!0,attrs:{class:"token shebang important"}},[t._v("#!/usr/bin/env sh")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# abort on errors")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("set")]),t._v(" -e\n\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# build")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("npm")]),t._v(" run docs:build\n\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# navigate into the build output directory")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("cd")]),t._v(" docs/.vuepress/dist\n\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# if you are deploying to a custom domain")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("echo")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v("'venus.filecoin.io'")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" CNAME\n\n"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("git")]),t._v(" init\n"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("git")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("add")]),t._v(" -A\n"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("git")]),t._v(" commit -m "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v("'deploy'")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# if you are deploying to https://.github.io")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# git push -f git@github.com:/.github.io.git master")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# if you are deploying to https://.github.io/")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("git")]),t._v(" push -f git@github.com:filecoin-project/venus-docs.git master:gh-pages\n\n"),n("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("cd")]),t._v(" -\n")])])]),n("h3",{attrs:{id:"notes"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#notes"}},[t._v("#")]),t._v(" Notes:")]),t._v(" "),n("ul",[n("li",[t._v("When new documentation pages are added "),n("code",[t._v("./docs/config.js")]),t._v(" will need to be "),n("strong",[t._v("manually updated")]),t._v(" in this repo")])])])}),[],!1,null,null,null);s.default=e.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[23],{404:function(t,s,n){"use strict";n.r(s);var a=n(17),e=Object(a.a)({},(function(){var t=this,s=t.$createElement,n=t._self._c||s;return n("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[n("h2",{attrs:{id:"contributing"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#contributing"}},[t._v("#")]),t._v(" Contributing")]),t._v(" "),n("p",[t._v("PRs, bug reports, and issue suggestions are welcome! For major changes, please propose in an issue first so benefits and impacts can be discussed.")]),t._v(" "),n("p",[t._v("👉 You can also click on click on "),n("code",[t._v("Edit this page")]),t._v(" links at the bottom of each page to jump directly to Edit mode.")]),t._v(" "),n("h2",{attrs:{id:"deployment"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#deployment"}},[t._v("#")]),t._v(" Deployment")]),t._v(" "),n("h3",{attrs:{id:"running-locally"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#running-locally"}},[t._v("#")]),t._v(" Running locally")]),t._v(" "),n("div",{staticClass:"language- extra-class"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[t._v(" $ yarn install\n $ yarn docs:dev \n")])])]),n("h3",{attrs:{id:"building"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#building"}},[t._v("#")]),t._v(" Building")]),t._v(" "),n("div",{staticClass:"language- extra-class"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[t._v(" $ yarn docs:links # verify all links are well-formed\n $ yarn docs:build\n")])])]),n("p",[t._v("Then deploy the "),n("code",[t._v("docs/.vuepress/dist")]),t._v(" directory to the "),n("code",[t._v("gh-pages")]),t._v(" branch of this repo.")]),t._v(" "),n("h3",{attrs:{id:"deploy-script"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#deploy-script"}},[t._v("#")]),t._v(" Deploy script")]),t._v(" "),n("p",[t._v("You can also run the following script to combine building and deployment together. Make sure everything is running okay locally.")]),t._v(" "),n("div",{staticClass:"language-bash extra-class"},[n("pre",{pre:!0,attrs:{class:"language-bash"}},[n("code",[n("span",{pre:!0,attrs:{class:"token shebang important"}},[t._v("#!/usr/bin/env sh")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# abort on errors")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("set")]),t._v(" -e\n\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# build")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("npm")]),t._v(" run docs:build\n\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# navigate into the build output directory")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("cd")]),t._v(" docs/.vuepress/dist\n\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# if you are deploying to a custom domain")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("echo")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v("'venus.filecoin.io'")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" CNAME\n\n"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("git")]),t._v(" init\n"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("git")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("add")]),t._v(" -A\n"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("git")]),t._v(" commit -m "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v("'deploy'")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# if you are deploying to https://.github.io")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# git push -f git@github.com:/.github.io.git master")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# if you are deploying to https://.github.io/")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("git")]),t._v(" push -f git@github.com:filecoin-project/venus-docs.git master:gh-pages\n\n"),n("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("cd")]),t._v(" -\n")])])]),n("h3",{attrs:{id:"notes"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#notes"}},[t._v("#")]),t._v(" Notes:")]),t._v(" "),n("ul",[n("li",[t._v("When new documentation pages are added "),n("code",[t._v("./docs/config.js")]),t._v(" will need to be "),n("strong",[t._v("manually updated")]),t._v(" in this repo")])])])}),[],!1,null,null,null);s.default=e.exports}}]); \ No newline at end of file diff --git a/assets/js/24.d9e2e989.js b/assets/js/24.665a40db.js similarity index 99% rename from assets/js/24.d9e2e989.js rename to assets/js/24.665a40db.js index ee80e0cfa..741cf00d5 100644 --- a/assets/js/24.d9e2e989.js +++ b/assets/js/24.665a40db.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[24],{410:function(e,s,t){"use strict";t.r(s);var a=t(17),r=Object(a.a)({},(function(){var e=this,s=e.$createElement,t=e._self._c||s;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h2",{attrs:{id:"find-your-optimal-configurations"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#find-your-optimal-configurations"}},[e._v("#")]),e._v(" Find your optimal configurations")]),e._v(" "),t("p",[e._v("Get your filecoin mining operation up and running is hard. Expanding growth of your system is even harder. It will take a lot of time to scale growth and make sure your setup running without errors.")]),e._v(" "),t("h2",{attrs:{id:"overview"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#overview"}},[e._v("#")]),e._v(" Overview")]),e._v(" "),t("p",[e._v("General guidelines to follow when optimizing your sealing pipeline.")]),e._v(" "),t("ul",[t("li",[t("p",[e._v("Pledge 2 to 4 sectors and record the exact time of each task (AP, P1, P2, C2) takes to finish")])]),e._v(" "),t("li",[t("p",[e._v("Make sure all your boxes have tasks assigned to them all the time")])]),e._v(" "),t("li",[t("p",[e._v("Automate your "),t("code",[e._v("sector pledge")]),e._v(" command with "),t("a",{attrs:{href:"https://filecoinproject.slack.com/archives/CPFTWMY7N/p1628092388117700?thread_ts=1628092099.117600&cid=CPFTWMY7N",target:"_blank",rel:"noopener noreferrer"}},[e._v("script"),t("OutboundLink")],1),e._v("/cron")])]),e._v(" "),t("li",[t("p",[e._v("Use "),t("code",[e._v("MaxSealingSectors")]),e._v(" to cap maximum number of sectors sealing in parallel")])]),e._v(" "),t("li",[t("p",[e._v("Every worker can be assigned with a subset of tasks (AP, P1, P2, C2) to specialize")])])]),e._v(" "),t("h2",{attrs:{id:"record-time-for-each-task"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#record-time-for-each-task"}},[e._v("#")]),e._v(" Record time for each task")]),e._v(" "),t("p",[e._v("Types of task that a worker can do.")]),e._v(" "),t("div",{staticClass:"language-go extra-class"},[t("pre",{pre:!0,attrs:{class:"language-go"}},[t("code",[e._v("TTAddPiece TaskType "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"seal/v0/addpiece"')]),e._v("\nTTPreCommit1 TaskType "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"seal/v0/precommit/1"')]),e._v("\nTTPreCommit2 TaskType "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"seal/v0/precommit/2"')]),e._v("\nTTCommit1 TaskType "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"seal/v0/commit/1"')]),e._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("// NOTE: We use this to transfer the sector into miner-local storage for now; Don't use on workers!")]),e._v("\nTTCommit2 TaskType "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"seal/v0/commit/2"')]),e._v("\n\nTTFinalize TaskType "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"seal/v0/finalize"')]),e._v("\nTTFetch TaskType "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"seal/v0/fetch"')]),e._v("\nTTUnseal TaskType "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"seal/v0/unseal"')]),e._v("\n")])])]),t("p",[e._v("Each task shows up in log first with key word of "),t("code",[e._v("prepare")]),e._v(" (start and end) then with key word of "),t("code",[e._v("work")]),e._v(" as another log entry (also start and end).")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# seal/v0/fetch")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("2021")]),e._v("-08-03T14:00:07.925+0800 INFO advmgr sector-storage/sched_worker.go:401 Sector "),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("7")]),e._v(" prepare "),t("span",{pre:!0,attrs:{class:"token keyword"}},[e._v("for")]),e._v(" seal/v0/fetch "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("..")]),e._v(".\n"),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("2021")]),e._v("-08-03T14:05:36.772+0800 INFO advmgr sector-storage/sched_worker.go:403 Sector "),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("7")]),e._v(" prepare "),t("span",{pre:!0,attrs:{class:"token keyword"}},[e._v("for")]),e._v(" seal/v0/fetch end "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("..")]),e._v(".\n\n"),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("2021")]),e._v("-08-03T14:05:36.772+0800 INFO advmgr sector-storage/sched_worker.go:442 Sector "),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("7")]),e._v(" work "),t("span",{pre:!0,attrs:{class:"token keyword"}},[e._v("for")]),e._v(" seal/v0/fetch "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("..")]),e._v(".\n"),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("2021")]),e._v("-08-03T14:05:36.774+0800 INFO advmgr sector-storage/sched_worker.go:444 Sector "),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("7")]),e._v(" work "),t("span",{pre:!0,attrs:{class:"token keyword"}},[e._v("for")]),e._v(" seal/v0/fetch end "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("..")]),e._v(".\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# seal/v0/addpiece")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("2021")]),e._v("-08-03T13:38:37.977+0800 INFO advmgr sector-storage/sched_worker.go:401 Sector "),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("8")]),e._v(" prepare "),t("span",{pre:!0,attrs:{class:"token keyword"}},[e._v("for")]),e._v(" seal/v0/addpiece "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("..")]),e._v(".\n"),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("2021")]),e._v("-08-03T13:38:37.978+0800 INFO advmgr sector-storage/sched_worker.go:403 Sector "),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("8")]),e._v(" prepare "),t("span",{pre:!0,attrs:{class:"token keyword"}},[e._v("for")]),e._v(" seal/v0/addpiece end "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("..")]),e._v(".\n\n"),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("2021")]),e._v("-08-03T13:38:37.978+0800 INFO advmgr sector-storage/sched_worker.go:442 Sector "),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("8")]),e._v(" work "),t("span",{pre:!0,attrs:{class:"token keyword"}},[e._v("for")]),e._v(" seal/v0/addpiece "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("..")]),e._v(".\n"),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("2021")]),e._v("-08-03T13:44:26.295+0800 INFO advmgr sector-storage/sched_worker.go:444 Sector "),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("8")]),e._v(" work "),t("span",{pre:!0,attrs:{class:"token keyword"}},[e._v("for")]),e._v(" seal/v0/addpiece end "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("..")]),e._v(".\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# seal/v0/commit/2")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("2021")]),e._v("-08-03T13:26:02.119+0800 INFO advmgr sector-storage/sched_worker.go:401 Sector "),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("7")]),e._v(" prepare "),t("span",{pre:!0,attrs:{class:"token keyword"}},[e._v("for")]),e._v(" seal/v0/commit/2 "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("..")]),e._v(".\n"),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("2021")]),e._v("-08-03T13:26:02.119+0800 INFO advmgr sector-storage/sched_worker.go:403 Sector "),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("7")]),e._v(" prepare "),t("span",{pre:!0,attrs:{class:"token keyword"}},[e._v("for")]),e._v(" seal/v0/commit/2 end "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("..")]),e._v(".\n\n"),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("2021")]),e._v("-08-03T13:26:02.119+0800 INFO advmgr sector-storage/sched_worker.go:442 Sector "),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("7")]),e._v(" work "),t("span",{pre:!0,attrs:{class:"token keyword"}},[e._v("for")]),e._v(" seal/v0/commit/2 "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("..")]),e._v(".\n"),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("2021")]),e._v("-08-03T13:49:46.180+0800 INFO advmgr sector-storage/sched_worker.go:444 Sector "),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("7")]),e._v(" work "),t("span",{pre:!0,attrs:{class:"token keyword"}},[e._v("for")]),e._v(" seal/v0/commit/2 end "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("..")]),e._v(".\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# seal/v0/finalize")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("2021")]),e._v("-08-03T13:54:17.414+0800 INFO advmgr sector-storage/sched_worker.go:401 Sector "),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("7")]),e._v(" prepare "),t("span",{pre:!0,attrs:{class:"token keyword"}},[e._v("for")]),e._v(" seal/v0/finalize "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("..")]),e._v(".\n"),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("2021")]),e._v("-08-03T13:59:30.471+0800 INFO advmgr sector-storage/sched_worker.go:403 Sector "),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("7")]),e._v(" prepare "),t("span",{pre:!0,attrs:{class:"token keyword"}},[e._v("for")]),e._v(" seal/v0/finalize end "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("..")]),e._v(".\n\n"),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("2021")]),e._v("-08-03T13:59:30.471+0800 INFO advmgr sector-storage/sched_worker.go:442 Sector "),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("7")]),e._v(" work "),t("span",{pre:!0,attrs:{class:"token keyword"}},[e._v("for")]),e._v(" seal/v0/finalize "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("..")]),e._v(".\n"),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("2021")]),e._v("-08-03T14:00:07.915+0800 INFO advmgr sector-storage/sched_worker.go:444 Sector "),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("7")]),e._v(" work "),t("span",{pre:!0,attrs:{class:"token keyword"}},[e._v("for")]),e._v(" seal/v0/finalize end "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("..")]),e._v(".\n")])])]),t("p",[e._v("Some task may take more time in "),t("code",[e._v("prepare")]),e._v(" than"),t("code",[e._v("work")]),e._v(" and some are the other way around. Generally speaking, when task requires network transfer/bandwidth it will consume more time in "),t("code",[e._v("prepare")]),e._v(" while if the task require more computation resources it will consume more time in "),t("code",[e._v("work")]),e._v(". Eg, AP, P1, P2, C2.")]),e._v(" "),t("p",[e._v("To record time of core tasks like AP, P1, P2 and C2, we aggregate both the time of "),t("code",[e._v("fetch")]),e._v(" before it and the task itself. For example, time of P1 = time of P1 + time of fetch before P1.")]),e._v(" "),t("h2",{attrs:{id:"performance-factors"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#performance-factors"}},[e._v("#")]),e._v(" Performance factors")]),e._v(" "),t("p",[e._v("There are many factors cobtributes to the performance of your sealing pipeline.")]),e._v(" "),t("h3",{attrs:{id:"sealing-storage"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#sealing-storage"}},[e._v("#")]),e._v(" Sealing storage")]),e._v(" "),t("p",[e._v("During sealing of a sector, cahce files will be generated by the proof algorithm which requires high disk IO speed. Low IO speed may result in idling of your computation resources (CPUs/GPUs).")]),e._v(" "),t("p",[e._v("Choose apropriate hardware using forumla below.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("file")]),e._v(" size * number of parallel threads / operation "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("time")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v(" average "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("file")]),e._v(" IO speed\n")])])]),t("p",[e._v("To get more precise estimations, sum up per task IO throughput.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[e._v("AP IO throughput "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v(" AP "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v("read")]),e._v(" + AP "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("write")]),e._v("\nP1 IO throughput "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v(" P1 "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v("read")]),e._v(" + P1 "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("write")]),e._v("\nP2 IO throughput "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v(" P2 "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v("read")]),e._v(" + P2 "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("write")]),e._v("\nC2 IO throughput "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v(" C2 "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v("read")]),e._v(" + C2 "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("write")]),e._v("\n")])])]),t("p",[e._v("SSD and NVMe are commonly used for sealing storages. To ensure effcient usage of these faster storage, it is recommended to use software RAID on these SSDs.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("mdadm")]),e._v(" -C /dev/md1 -l "),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("0")]),e._v(" -n "),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("2")]),e._v(" /dev/sdb1 /dev/sdc1\n"),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("mdadm")]),e._v(" -C /dev/md2 -l "),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("5")]),e._v(" -n "),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("6")]),e._v(" /dev/sd"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("[")]),e._v("b-g"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("]")]),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("1")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Options")]),e._v("\n-C, --create\nCreate a new array.\n-l, --level"),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v("\nSet RAID level. \n-n, --raid-devices"),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v("\nSpecify the number of active devices "),t("span",{pre:!0,attrs:{class:"token keyword"}},[e._v("in")]),e._v(" the array.\n-x, --spare-devices"),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v("\nSpecify the number of spare "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("(")]),e._v("eXtra"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(")")]),e._v(" devices "),t("span",{pre:!0,attrs:{class:"token keyword"}},[e._v("in")]),e._v(" the initial array.\n-A, --assemble\nAssemble a pre-existing array.\n")])])]),t("p",[e._v("More on "),t("code",[e._v("mdadm")]),e._v(", please visit "),t("a",{attrs:{href:"http://raid.wiki.kernel.org/",target:"_blank",rel:"noopener noreferrer"}},[e._v("here"),t("OutboundLink")],1),e._v(". Get latest version from "),t("a",{attrs:{href:"http://www.kernel.org/pub/linux/utils/raid/mdadm/",target:"_blank",rel:"noopener noreferrer"}},[e._v("here"),t("OutboundLink")],1),e._v(".")]),e._v(" "),t("h3",{attrs:{id:"permenant-storage"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#permenant-storage"}},[e._v("#")]),e._v(" Permenant storage")]),e._v(" "),t("p",[e._v("Possible adversaries to overcome when setting up permenant storage.")]),e._v(" "),t("ol",[t("li",[e._v("When a sector is sealed, it will be transferred from sealer to permenant storage which takes up network bandwidth and disk IOs.")]),e._v(" "),t("li",[e._v("During a "),t("code",[e._v("windowPost")]),e._v(", random selections files will be read in large number. Slow read may result in failed "),t("code",[e._v("windowPost")]),e._v(".")]),e._v(" "),t("li",[e._v("Choose high RAID level to have redunancy when possible. Eg, RAID5, RAID6, RAID10.")]),e._v(" "),t("li",[e._v("Monitor usage of your disk array.")])]),e._v(" "),t("h3",{attrs:{id:"network-transfer"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#network-transfer"}},[e._v("#")]),e._v(" Network transfer")]),e._v(" "),t("p",[e._v("During sealing, if you specialize your worker in one type of task (to increase efficiency of your resources), it will result in file transfer over the network. If file being copied too slowly over the network, it will drag the speed of your sealing pipeline down. Closely monitor your computation resources and see if there is any idling. For example, if PC2 takes 25 minutes, reads ~400G and writes ~100G, then IO throughput will be ~368 MB/s ("),t("code",[e._v("440 * 1024 / 25 / 60 + 100 * 1024 / 25 / 60")]),e._v(").")]),e._v(" "),t("p",[e._v("After sealing, the sealed sector need to be transferred to permanent storage which can be bottlenecked by the network bandwidth connecting your "),t("code",[e._v("venus-sealer")]),e._v(" and your HDD disk array.")]),e._v(" "),t("h3",{attrs:{id:"environment-variables"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#environment-variables"}},[e._v("#")]),e._v(" Environment variables")]),e._v(" "),t("p",[e._v("SHA extension would make a huge difference in computing P1 tasks. P1 could cost around 250 minutes with SHA extension enabled while may cost 420+ minutes without SHA.")]),e._v(" "),t("p",[e._v("When compiling "),t("code",[e._v("venus-sealer")]),e._v(", make sure you have set "),t("code",[e._v('RUSTFLAGS="-C target-cpu=native -g" FFI_BUILD_FROM_SOURCE="1"')]),e._v(" flags and you shall see the following example output.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[e._v("+ "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v("trap")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v("'{ rm -f "),t("span",{pre:!0,attrs:{class:"token variable"}},[e._v("$__build_output_log_tmp")]),e._v("; }'")]),e._v(" EXIT\n+ "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v("local")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v("'__rust_flags=--print native-static-libs -C target-feature=+sse2'")]),e._v("\n+ "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[e._v("RUSTFLAGS")]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token string"}},[e._v("'--print native-static-libs -C target-feature=+sse2'")]),e._v("\n+ cargo +nightly-2021-04-24 build --release --no-default-features --features multicore-sdr --features pairing,gpu\n+ "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("tee")]),e._v(" /tmp/tmp.IYtnd3xka9\n Compiling autocfg v1.0.1\n Compiling libc v0.2.97\n Compiling cfg-if v1.0.0\n Compiling proc-macro2 v1.0.27\n Compiling unicode-xid v0.2.2\n Compiling syn v1.0.73\n Compiling lazy_static v1.4.0\n Compiling cc v1.0.68\n Compiling typenum v1.13.0\n Compiling serde_derive v1.0.126\n Compiling serde v1.0.126\n")])])]),t("h3",{attrs:{id:"core-restriction"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#core-restriction"}},[e._v("#")]),e._v(" Core restriction")]),e._v(" "),t("p",[e._v("When running two types of tasks on same box, you may want to restrict CPU cores each task may use without competing for resources of the other.")]),e._v(" "),t("p",[e._v("Through "),t("code",[e._v("taskset")]),e._v(". Note you cannot dynamically change core restrictions during execution of the program.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[e._v("TRUST_PARAMS")]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("1")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("nohup")]),e._v(" taskset -c "),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("0")]),e._v("-32 ./venus-worker run\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Non-consecutive core selection ")]),e._v("\ntaskset -c "),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("0")]),e._v("-9,19-29,39-49\n")])])]),t("p",[e._v("Or through "),t("code",[e._v("Cgrep")]),e._v(", which supports dynamic core restrictions during program execution.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("mkdir")]),e._v(" -p /sys/fs/cgroup/cpuset/Pre1-worker\n"),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v("echo")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("0")]),e._v("-31 "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(">")]),e._v(" /sys/fs/cgroup/cpuset/Pre1-worker/cpuset.cpus\n"),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v("echo")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("<")]),e._v("PID"),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(">")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(">")]),e._v(" /sys/fs/cgroup/cpuset/Pre1-worker/cgroup.procs\n")])])]),t("h2",{attrs:{id:"worker-optimization"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#worker-optimization"}},[e._v("#")]),e._v(" Worker optimization")]),e._v(" "),t("p",[e._v("All numbers are for 32G sectors. For 64G sectors, double what the numbers of 32G sector.")]),e._v(" "),t("h3",{attrs:{id:"p1-optimization"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#p1-optimization"}},[e._v("#")]),e._v(" P1 optimization")]),e._v(" "),t("p",[e._v("Set following environment variable to speed up P1.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Store cache files in RAM; for 32G sectors, it will cost 56G RAM")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v("export")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[e._v("FIL_PROOFS_MAXIMIZE_CACHING")]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("1")]),e._v(" \n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Use mutiple cores for P1")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v("export")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[e._v("FIL_PROOFS_USE_MULTICORE_SDR")]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("1")]),e._v("\n")])])]),t("p",[e._v("P1 RAM usage includes 56G cache file and 2 layers of the sector for each sector sealing in parallel.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Assume 10 sector running in parallel")]),e._v("\n56G + 32G * "),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("2")]),e._v(" * "),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("10")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v(" 696G\n")])])]),t("p",[e._v("P1 SSD usage includes 11 layers of the sector, 64G of "),t("code",[e._v("tree-d")]),e._v(" file and 32G of the unsealed sector.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# For 1 sector")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("11")]),e._v(" * 32G + "),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("64")]),e._v(" + "),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("32")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v(" 440G\n")])])]),t("h3",{attrs:{id:"p2-optimization"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#p2-optimization"}},[e._v("#")]),e._v(" P2 optimization")]),e._v(" "),t("p",[e._v("Set following environment variable to speed up P2.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Use GPU for tree-r-last")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v("export")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[e._v("FIL_PROOFS_USE_GPU_COLUMN_BUILDER")]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("1")]),e._v(" \n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Use GPU for tree-c")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v("export")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[e._v("FIL_PROOFS_USE_GPU_TREE_BUILDER")]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("1")]),e._v(" \n")])])]),t("p",[e._v("P2 RAM usage is 96G.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Assume 10 sector running in parallel")]),e._v("\n96G * "),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("10")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v(" 960G\n")])])]),t("p",[e._v("P1 SSD usage includes 4.6G tree-c file * 8, 9.2M tree-r-last file * 8, 4K t_aux file, 4K p_aux file and 32G unsealed sector file.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token number"}},[e._v("4")]),e._v(".6G * "),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("8")]),e._v(" + "),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("8")]),e._v(" * "),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("9")]),e._v(".2M + 4K * "),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("2")]),e._v(" + 32G "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v(" ~70G\n")])])]),t("h3",{attrs:{id:"commit"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#commit"}},[e._v("#")]),e._v(" Commit")]),e._v(" "),t("p",[e._v("C1 cost little CPU usage, but require sum of P1 and P2 SSD usage.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[e._v("P1 440G + P2 79G "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v(" 519G\n")])])]),t("p",[e._v("C2 environment variable")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[e._v("BELLMAN_NO_GPU")]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("1")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Example, if you are using 3090")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[e._v("GPUBELLMAN_CUSTOM_GPU")]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"GeForce RTX 3090:10496"')]),e._v(" \n")])])]),t("p",[e._v("C2 RAM usage.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[e._v("128G + 64G "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v(" 192G\n")])])]),t("h2",{attrs:{id:"optimize-sealing-pipeline"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#optimize-sealing-pipeline"}},[e._v("#")]),e._v(" Optimize sealing pipeline")]),e._v(" "),t("h3",{attrs:{id:"calculate-your-daily-growth"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#calculate-your-daily-growth"}},[e._v("#")]),e._v(" Calculate your daily growth")]),e._v(" "),t("p",[e._v("Calculate how many tasks your sealing pipeline can process.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# for each type of task")]),e._v("\ntasks "),t("span",{pre:!0,attrs:{class:"token keyword"}},[e._v("done")]),e._v(" / "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("time")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v(" production rate\ndaily production rate * "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("(")]),e._v("32G OR 64G"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(")")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v(" daily growth "),t("span",{pre:!0,attrs:{class:"token keyword"}},[e._v("in")]),e._v(" power\n")])])]),t("p",[e._v("For example, if we have one box and can finish P1 in 240 minutes, P2 in 30 minutes and Commit in 35 minutes, then you can derive daily growth by the following chart.")]),e._v(" "),t("table",[t("thead",[t("tr",[t("th",[e._v("Task")]),e._v(" "),t("th",[e._v("Minute")]),e._v(" "),t("th",[e._v("Parallel")]),e._v(" "),t("th",[e._v("Hourly production rate")])])]),e._v(" "),t("tbody",[t("tr",[t("td",[e._v("P1")]),e._v(" "),t("td",[e._v("240")]),e._v(" "),t("td",[e._v("1")]),e._v(" "),t("td",[e._v("0.25 = 1 / (240 /60)")])]),e._v(" "),t("tr",[t("td",[e._v("P2")]),e._v(" "),t("td",[e._v("30")]),e._v(" "),t("td",[e._v("1")]),e._v(" "),t("td",[e._v("2 = 1 / (30 /60)")])]),e._v(" "),t("tr",[t("td",[e._v("Commit")]),e._v(" "),t("td",[e._v("35")]),e._v(" "),t("td",[e._v("1")]),e._v(" "),t("td",[e._v("1.71 = 1 / (35 /60)")])])])]),e._v(" "),t("h3",{attrs:{id:"finding-optimal-task-configurations"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#finding-optimal-task-configurations"}},[e._v("#")]),e._v(" Finding optimal task configurations")]),e._v(" "),t("p",[e._v("From the table above, we know that daily growth will be bottlenecked by P1. Adjust number of parallel tasks for different types of task to achieve maximum efficiency.")]),e._v(" "),t("table",[t("thead",[t("tr",[t("th",[e._v("Task")]),e._v(" "),t("th",[e._v("Minutes")]),e._v(" "),t("th",[e._v("Parallel")]),e._v(" "),t("th",[e._v("Hourly productin")]),e._v(" "),t("th",[e._v("Output")]),e._v(" "),t("th",[e._v("Memory consumption")])])]),e._v(" "),t("tbody",[t("tr",[t("td",[e._v("P1")]),e._v(" "),t("td",[e._v("240")]),e._v(" "),t("td",[e._v("7")]),e._v(" "),t("td",[e._v("1.75 = 7 / (240 /60)")]),e._v(" "),t("td",[e._v("1344 G")]),e._v(" "),t("td",[e._v("504 G = 7*64+56")])]),e._v(" "),t("tr",[t("td",[e._v("P2")]),e._v(" "),t("td",[e._v("30")]),e._v(" "),t("td",[e._v("1")]),e._v(" "),t("td",[e._v("2 = 1 / (30 /60)")]),e._v(" "),t("td",[e._v("1536 G")]),e._v(" "),t("td",[e._v("96 G = 1*96")])]),e._v(" "),t("tr",[t("td",[e._v("Commit")]),e._v(" "),t("td",[e._v("35")]),e._v(" "),t("td",[e._v("1")]),e._v(" "),t("td",[e._v("1.71 = 1 / (35 /60)")]),e._v(" "),t("td",[e._v("1316 G")]),e._v(" "),t("td",[e._v("192 G = 1*128+64")])])])]),e._v(" "),t("p",[e._v("The goal is to have "),t("code",[e._v("output")]),e._v(" for each task to be as close as possilbe so that the sealing pipeline runs in its maximum efficiency. Things to watchout for includes...")]),e._v(" "),t("ol",[t("li",[t("code",[e._v("hourly production")]),e._v(" for Commit is lower than P1, which may result in tasks backlogged in Commit phase.")]),e._v(" "),t("li",[e._v("When one type of tasks being overly efficient than others, resources may become idle.")]),e._v(" "),t("li",[e._v("Miro management is needed to have highest possible efficiency.")])]),e._v(" "),t("h3",{attrs:{id:"finding-optimal-pledging"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#finding-optimal-pledging"}},[e._v("#")]),e._v(" Finding optimal pledging")]),e._v(" "),t("p",[e._v("For example, if you find 7 P1 task to the optimal for your system, change the following venus-sealer configurations.")]),e._v(" "),t("div",{staticClass:"language-toml extra-class"},[t("pre",{pre:!0,attrs:{class:"language-toml"}},[t("code",[t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("[")]),t("span",{pre:!0,attrs:{class:"token table class-name"}},[e._v("Sealing")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("]")]),e._v(" \n "),t("span",{pre:!0,attrs:{class:"token key property"}},[e._v("MaxSealingSectors")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("=")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("7")]),e._v("\n")])])]),t("h2",{attrs:{id:"stop-loss"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#stop-loss"}},[e._v("#")]),e._v(" Stop-loss")]),e._v(" "),t("p",[e._v("If one of tasks fails too many times, manual intervention is needed to get sealing pipeline back to its normal output.")]),e._v(" "),t("p",[e._v("Remove sectors when you have the following issues.")]),e._v(" "),t("ol",[t("li",[e._v("Expired ticket")]),e._v(" "),t("li",[e._v("Expired Commit")]),e._v(" "),t("li",[e._v("Corrupted proof params")])]),e._v(" "),t("p",[e._v("To remove incomplete sectors.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[e._v("venus-sealer sectors remove --really-do-it "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("<")]),e._v("sectorNum"),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(">")]),e._v("\n")])])])])}),[],!1,null,null,null);s.default=r.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[24],{409:function(e,s,t){"use strict";t.r(s);var a=t(17),r=Object(a.a)({},(function(){var e=this,s=e.$createElement,t=e._self._c||s;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h2",{attrs:{id:"find-your-optimal-configurations"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#find-your-optimal-configurations"}},[e._v("#")]),e._v(" Find your optimal configurations")]),e._v(" "),t("p",[e._v("Get your filecoin mining operation up and running is hard. Expanding growth of your system is even harder. It will take a lot of time to scale growth and make sure your setup running without errors.")]),e._v(" "),t("h2",{attrs:{id:"overview"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#overview"}},[e._v("#")]),e._v(" Overview")]),e._v(" "),t("p",[e._v("General guidelines to follow when optimizing your sealing pipeline.")]),e._v(" "),t("ul",[t("li",[t("p",[e._v("Pledge 2 to 4 sectors and record the exact time of each task (AP, P1, P2, C2) takes to finish")])]),e._v(" "),t("li",[t("p",[e._v("Make sure all your boxes have tasks assigned to them all the time")])]),e._v(" "),t("li",[t("p",[e._v("Automate your "),t("code",[e._v("sector pledge")]),e._v(" command with "),t("a",{attrs:{href:"https://filecoinproject.slack.com/archives/CPFTWMY7N/p1628092388117700?thread_ts=1628092099.117600&cid=CPFTWMY7N",target:"_blank",rel:"noopener noreferrer"}},[e._v("script"),t("OutboundLink")],1),e._v("/cron")])]),e._v(" "),t("li",[t("p",[e._v("Use "),t("code",[e._v("MaxSealingSectors")]),e._v(" to cap maximum number of sectors sealing in parallel")])]),e._v(" "),t("li",[t("p",[e._v("Every worker can be assigned with a subset of tasks (AP, P1, P2, C2) to specialize")])])]),e._v(" "),t("h2",{attrs:{id:"record-time-for-each-task"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#record-time-for-each-task"}},[e._v("#")]),e._v(" Record time for each task")]),e._v(" "),t("p",[e._v("Types of task that a worker can do.")]),e._v(" "),t("div",{staticClass:"language-go extra-class"},[t("pre",{pre:!0,attrs:{class:"language-go"}},[t("code",[e._v("TTAddPiece TaskType "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"seal/v0/addpiece"')]),e._v("\nTTPreCommit1 TaskType "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"seal/v0/precommit/1"')]),e._v("\nTTPreCommit2 TaskType "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"seal/v0/precommit/2"')]),e._v("\nTTCommit1 TaskType "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"seal/v0/commit/1"')]),e._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("// NOTE: We use this to transfer the sector into miner-local storage for now; Don't use on workers!")]),e._v("\nTTCommit2 TaskType "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"seal/v0/commit/2"')]),e._v("\n\nTTFinalize TaskType "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"seal/v0/finalize"')]),e._v("\nTTFetch TaskType "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"seal/v0/fetch"')]),e._v("\nTTUnseal TaskType "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"seal/v0/unseal"')]),e._v("\n")])])]),t("p",[e._v("Each task shows up in log first with key word of "),t("code",[e._v("prepare")]),e._v(" (start and end) then with key word of "),t("code",[e._v("work")]),e._v(" as another log entry (also start and end).")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# seal/v0/fetch")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("2021")]),e._v("-08-03T14:00:07.925+0800 INFO advmgr sector-storage/sched_worker.go:401 Sector "),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("7")]),e._v(" prepare "),t("span",{pre:!0,attrs:{class:"token keyword"}},[e._v("for")]),e._v(" seal/v0/fetch "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("..")]),e._v(".\n"),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("2021")]),e._v("-08-03T14:05:36.772+0800 INFO advmgr sector-storage/sched_worker.go:403 Sector "),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("7")]),e._v(" prepare "),t("span",{pre:!0,attrs:{class:"token keyword"}},[e._v("for")]),e._v(" seal/v0/fetch end "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("..")]),e._v(".\n\n"),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("2021")]),e._v("-08-03T14:05:36.772+0800 INFO advmgr sector-storage/sched_worker.go:442 Sector "),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("7")]),e._v(" work "),t("span",{pre:!0,attrs:{class:"token keyword"}},[e._v("for")]),e._v(" seal/v0/fetch "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("..")]),e._v(".\n"),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("2021")]),e._v("-08-03T14:05:36.774+0800 INFO advmgr sector-storage/sched_worker.go:444 Sector "),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("7")]),e._v(" work "),t("span",{pre:!0,attrs:{class:"token keyword"}},[e._v("for")]),e._v(" seal/v0/fetch end "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("..")]),e._v(".\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# seal/v0/addpiece")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("2021")]),e._v("-08-03T13:38:37.977+0800 INFO advmgr sector-storage/sched_worker.go:401 Sector "),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("8")]),e._v(" prepare "),t("span",{pre:!0,attrs:{class:"token keyword"}},[e._v("for")]),e._v(" seal/v0/addpiece "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("..")]),e._v(".\n"),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("2021")]),e._v("-08-03T13:38:37.978+0800 INFO advmgr sector-storage/sched_worker.go:403 Sector "),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("8")]),e._v(" prepare "),t("span",{pre:!0,attrs:{class:"token keyword"}},[e._v("for")]),e._v(" seal/v0/addpiece end "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("..")]),e._v(".\n\n"),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("2021")]),e._v("-08-03T13:38:37.978+0800 INFO advmgr sector-storage/sched_worker.go:442 Sector "),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("8")]),e._v(" work "),t("span",{pre:!0,attrs:{class:"token keyword"}},[e._v("for")]),e._v(" seal/v0/addpiece "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("..")]),e._v(".\n"),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("2021")]),e._v("-08-03T13:44:26.295+0800 INFO advmgr sector-storage/sched_worker.go:444 Sector "),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("8")]),e._v(" work "),t("span",{pre:!0,attrs:{class:"token keyword"}},[e._v("for")]),e._v(" seal/v0/addpiece end "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("..")]),e._v(".\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# seal/v0/commit/2")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("2021")]),e._v("-08-03T13:26:02.119+0800 INFO advmgr sector-storage/sched_worker.go:401 Sector "),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("7")]),e._v(" prepare "),t("span",{pre:!0,attrs:{class:"token keyword"}},[e._v("for")]),e._v(" seal/v0/commit/2 "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("..")]),e._v(".\n"),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("2021")]),e._v("-08-03T13:26:02.119+0800 INFO advmgr sector-storage/sched_worker.go:403 Sector "),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("7")]),e._v(" prepare "),t("span",{pre:!0,attrs:{class:"token keyword"}},[e._v("for")]),e._v(" seal/v0/commit/2 end "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("..")]),e._v(".\n\n"),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("2021")]),e._v("-08-03T13:26:02.119+0800 INFO advmgr sector-storage/sched_worker.go:442 Sector "),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("7")]),e._v(" work "),t("span",{pre:!0,attrs:{class:"token keyword"}},[e._v("for")]),e._v(" seal/v0/commit/2 "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("..")]),e._v(".\n"),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("2021")]),e._v("-08-03T13:49:46.180+0800 INFO advmgr sector-storage/sched_worker.go:444 Sector "),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("7")]),e._v(" work "),t("span",{pre:!0,attrs:{class:"token keyword"}},[e._v("for")]),e._v(" seal/v0/commit/2 end "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("..")]),e._v(".\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# seal/v0/finalize")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("2021")]),e._v("-08-03T13:54:17.414+0800 INFO advmgr sector-storage/sched_worker.go:401 Sector "),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("7")]),e._v(" prepare "),t("span",{pre:!0,attrs:{class:"token keyword"}},[e._v("for")]),e._v(" seal/v0/finalize "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("..")]),e._v(".\n"),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("2021")]),e._v("-08-03T13:59:30.471+0800 INFO advmgr sector-storage/sched_worker.go:403 Sector "),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("7")]),e._v(" prepare "),t("span",{pre:!0,attrs:{class:"token keyword"}},[e._v("for")]),e._v(" seal/v0/finalize end "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("..")]),e._v(".\n\n"),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("2021")]),e._v("-08-03T13:59:30.471+0800 INFO advmgr sector-storage/sched_worker.go:442 Sector "),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("7")]),e._v(" work "),t("span",{pre:!0,attrs:{class:"token keyword"}},[e._v("for")]),e._v(" seal/v0/finalize "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("..")]),e._v(".\n"),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("2021")]),e._v("-08-03T14:00:07.915+0800 INFO advmgr sector-storage/sched_worker.go:444 Sector "),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("7")]),e._v(" work "),t("span",{pre:!0,attrs:{class:"token keyword"}},[e._v("for")]),e._v(" seal/v0/finalize end "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("..")]),e._v(".\n")])])]),t("p",[e._v("Some task may take more time in "),t("code",[e._v("prepare")]),e._v(" than"),t("code",[e._v("work")]),e._v(" and some are the other way around. Generally speaking, when task requires network transfer/bandwidth it will consume more time in "),t("code",[e._v("prepare")]),e._v(" while if the task require more computation resources it will consume more time in "),t("code",[e._v("work")]),e._v(". Eg, AP, P1, P2, C2.")]),e._v(" "),t("p",[e._v("To record time of core tasks like AP, P1, P2 and C2, we aggregate both the time of "),t("code",[e._v("fetch")]),e._v(" before it and the task itself. For example, time of P1 = time of P1 + time of fetch before P1.")]),e._v(" "),t("h2",{attrs:{id:"performance-factors"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#performance-factors"}},[e._v("#")]),e._v(" Performance factors")]),e._v(" "),t("p",[e._v("There are many factors cobtributes to the performance of your sealing pipeline.")]),e._v(" "),t("h3",{attrs:{id:"sealing-storage"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#sealing-storage"}},[e._v("#")]),e._v(" Sealing storage")]),e._v(" "),t("p",[e._v("During sealing of a sector, cahce files will be generated by the proof algorithm which requires high disk IO speed. Low IO speed may result in idling of your computation resources (CPUs/GPUs).")]),e._v(" "),t("p",[e._v("Choose apropriate hardware using forumla below.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("file")]),e._v(" size * number of parallel threads / operation "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("time")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v(" average "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("file")]),e._v(" IO speed\n")])])]),t("p",[e._v("To get more precise estimations, sum up per task IO throughput.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[e._v("AP IO throughput "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v(" AP "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v("read")]),e._v(" + AP "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("write")]),e._v("\nP1 IO throughput "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v(" P1 "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v("read")]),e._v(" + P1 "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("write")]),e._v("\nP2 IO throughput "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v(" P2 "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v("read")]),e._v(" + P2 "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("write")]),e._v("\nC2 IO throughput "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v(" C2 "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v("read")]),e._v(" + C2 "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("write")]),e._v("\n")])])]),t("p",[e._v("SSD and NVMe are commonly used for sealing storages. To ensure effcient usage of these faster storage, it is recommended to use software RAID on these SSDs.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("mdadm")]),e._v(" -C /dev/md1 -l "),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("0")]),e._v(" -n "),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("2")]),e._v(" /dev/sdb1 /dev/sdc1\n"),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("mdadm")]),e._v(" -C /dev/md2 -l "),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("5")]),e._v(" -n "),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("6")]),e._v(" /dev/sd"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("[")]),e._v("b-g"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("]")]),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("1")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Options")]),e._v("\n-C, --create\nCreate a new array.\n-l, --level"),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v("\nSet RAID level. \n-n, --raid-devices"),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v("\nSpecify the number of active devices "),t("span",{pre:!0,attrs:{class:"token keyword"}},[e._v("in")]),e._v(" the array.\n-x, --spare-devices"),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v("\nSpecify the number of spare "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("(")]),e._v("eXtra"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(")")]),e._v(" devices "),t("span",{pre:!0,attrs:{class:"token keyword"}},[e._v("in")]),e._v(" the initial array.\n-A, --assemble\nAssemble a pre-existing array.\n")])])]),t("p",[e._v("More on "),t("code",[e._v("mdadm")]),e._v(", please visit "),t("a",{attrs:{href:"http://raid.wiki.kernel.org/",target:"_blank",rel:"noopener noreferrer"}},[e._v("here"),t("OutboundLink")],1),e._v(". Get latest version from "),t("a",{attrs:{href:"http://www.kernel.org/pub/linux/utils/raid/mdadm/",target:"_blank",rel:"noopener noreferrer"}},[e._v("here"),t("OutboundLink")],1),e._v(".")]),e._v(" "),t("h3",{attrs:{id:"permenant-storage"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#permenant-storage"}},[e._v("#")]),e._v(" Permenant storage")]),e._v(" "),t("p",[e._v("Possible adversaries to overcome when setting up permenant storage.")]),e._v(" "),t("ol",[t("li",[e._v("When a sector is sealed, it will be transferred from sealer to permenant storage which takes up network bandwidth and disk IOs.")]),e._v(" "),t("li",[e._v("During a "),t("code",[e._v("windowPost")]),e._v(", random selections files will be read in large number. Slow read may result in failed "),t("code",[e._v("windowPost")]),e._v(".")]),e._v(" "),t("li",[e._v("Choose high RAID level to have redunancy when possible. Eg, RAID5, RAID6, RAID10.")]),e._v(" "),t("li",[e._v("Monitor usage of your disk array.")])]),e._v(" "),t("h3",{attrs:{id:"network-transfer"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#network-transfer"}},[e._v("#")]),e._v(" Network transfer")]),e._v(" "),t("p",[e._v("During sealing, if you specialize your worker in one type of task (to increase efficiency of your resources), it will result in file transfer over the network. If file being copied too slowly over the network, it will drag the speed of your sealing pipeline down. Closely monitor your computation resources and see if there is any idling. For example, if PC2 takes 25 minutes, reads ~400G and writes ~100G, then IO throughput will be ~368 MB/s ("),t("code",[e._v("440 * 1024 / 25 / 60 + 100 * 1024 / 25 / 60")]),e._v(").")]),e._v(" "),t("p",[e._v("After sealing, the sealed sector need to be transferred to permanent storage which can be bottlenecked by the network bandwidth connecting your "),t("code",[e._v("venus-sealer")]),e._v(" and your HDD disk array.")]),e._v(" "),t("h3",{attrs:{id:"environment-variables"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#environment-variables"}},[e._v("#")]),e._v(" Environment variables")]),e._v(" "),t("p",[e._v("SHA extension would make a huge difference in computing P1 tasks. P1 could cost around 250 minutes with SHA extension enabled while may cost 420+ minutes without SHA.")]),e._v(" "),t("p",[e._v("When compiling "),t("code",[e._v("venus-sealer")]),e._v(", make sure you have set "),t("code",[e._v('RUSTFLAGS="-C target-cpu=native -g" FFI_BUILD_FROM_SOURCE="1"')]),e._v(" flags and you shall see the following example output.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[e._v("+ "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v("trap")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v("'{ rm -f "),t("span",{pre:!0,attrs:{class:"token variable"}},[e._v("$__build_output_log_tmp")]),e._v("; }'")]),e._v(" EXIT\n+ "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v("local")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v("'__rust_flags=--print native-static-libs -C target-feature=+sse2'")]),e._v("\n+ "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[e._v("RUSTFLAGS")]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token string"}},[e._v("'--print native-static-libs -C target-feature=+sse2'")]),e._v("\n+ cargo +nightly-2021-04-24 build --release --no-default-features --features multicore-sdr --features pairing,gpu\n+ "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("tee")]),e._v(" /tmp/tmp.IYtnd3xka9\n Compiling autocfg v1.0.1\n Compiling libc v0.2.97\n Compiling cfg-if v1.0.0\n Compiling proc-macro2 v1.0.27\n Compiling unicode-xid v0.2.2\n Compiling syn v1.0.73\n Compiling lazy_static v1.4.0\n Compiling cc v1.0.68\n Compiling typenum v1.13.0\n Compiling serde_derive v1.0.126\n Compiling serde v1.0.126\n")])])]),t("h3",{attrs:{id:"core-restriction"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#core-restriction"}},[e._v("#")]),e._v(" Core restriction")]),e._v(" "),t("p",[e._v("When running two types of tasks on same box, you may want to restrict CPU cores each task may use without competing for resources of the other.")]),e._v(" "),t("p",[e._v("Through "),t("code",[e._v("taskset")]),e._v(". Note you cannot dynamically change core restrictions during execution of the program.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[e._v("TRUST_PARAMS")]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("1")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("nohup")]),e._v(" taskset -c "),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("0")]),e._v("-32 ./venus-worker run\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Non-consecutive core selection ")]),e._v("\ntaskset -c "),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("0")]),e._v("-9,19-29,39-49\n")])])]),t("p",[e._v("Or through "),t("code",[e._v("Cgrep")]),e._v(", which supports dynamic core restrictions during program execution.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("mkdir")]),e._v(" -p /sys/fs/cgroup/cpuset/Pre1-worker\n"),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v("echo")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("0")]),e._v("-31 "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(">")]),e._v(" /sys/fs/cgroup/cpuset/Pre1-worker/cpuset.cpus\n"),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v("echo")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("<")]),e._v("PID"),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(">")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(">")]),e._v(" /sys/fs/cgroup/cpuset/Pre1-worker/cgroup.procs\n")])])]),t("h2",{attrs:{id:"worker-optimization"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#worker-optimization"}},[e._v("#")]),e._v(" Worker optimization")]),e._v(" "),t("p",[e._v("All numbers are for 32G sectors. For 64G sectors, double what the numbers of 32G sector.")]),e._v(" "),t("h3",{attrs:{id:"p1-optimization"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#p1-optimization"}},[e._v("#")]),e._v(" P1 optimization")]),e._v(" "),t("p",[e._v("Set following environment variable to speed up P1.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Store cache files in RAM; for 32G sectors, it will cost 56G RAM")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v("export")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[e._v("FIL_PROOFS_MAXIMIZE_CACHING")]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("1")]),e._v(" \n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Use mutiple cores for P1")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v("export")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[e._v("FIL_PROOFS_USE_MULTICORE_SDR")]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("1")]),e._v("\n")])])]),t("p",[e._v("P1 RAM usage includes 56G cache file and 2 layers of the sector for each sector sealing in parallel.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Assume 10 sector running in parallel")]),e._v("\n56G + 32G * "),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("2")]),e._v(" * "),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("10")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v(" 696G\n")])])]),t("p",[e._v("P1 SSD usage includes 11 layers of the sector, 64G of "),t("code",[e._v("tree-d")]),e._v(" file and 32G of the unsealed sector.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# For 1 sector")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("11")]),e._v(" * 32G + "),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("64")]),e._v(" + "),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("32")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v(" 440G\n")])])]),t("h3",{attrs:{id:"p2-optimization"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#p2-optimization"}},[e._v("#")]),e._v(" P2 optimization")]),e._v(" "),t("p",[e._v("Set following environment variable to speed up P2.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Use GPU for tree-r-last")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v("export")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[e._v("FIL_PROOFS_USE_GPU_COLUMN_BUILDER")]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("1")]),e._v(" \n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Use GPU for tree-c")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v("export")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[e._v("FIL_PROOFS_USE_GPU_TREE_BUILDER")]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("1")]),e._v(" \n")])])]),t("p",[e._v("P2 RAM usage is 96G.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Assume 10 sector running in parallel")]),e._v("\n96G * "),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("10")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v(" 960G\n")])])]),t("p",[e._v("P1 SSD usage includes 4.6G tree-c file * 8, 9.2M tree-r-last file * 8, 4K t_aux file, 4K p_aux file and 32G unsealed sector file.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token number"}},[e._v("4")]),e._v(".6G * "),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("8")]),e._v(" + "),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("8")]),e._v(" * "),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("9")]),e._v(".2M + 4K * "),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("2")]),e._v(" + 32G "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v(" ~70G\n")])])]),t("h3",{attrs:{id:"commit"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#commit"}},[e._v("#")]),e._v(" Commit")]),e._v(" "),t("p",[e._v("C1 cost little CPU usage, but require sum of P1 and P2 SSD usage.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[e._v("P1 440G + P2 79G "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v(" 519G\n")])])]),t("p",[e._v("C2 environment variable")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[e._v("BELLMAN_NO_GPU")]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("1")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Example, if you are using 3090")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[e._v("GPUBELLMAN_CUSTOM_GPU")]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"GeForce RTX 3090:10496"')]),e._v(" \n")])])]),t("p",[e._v("C2 RAM usage.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[e._v("128G + 64G "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v(" 192G\n")])])]),t("h2",{attrs:{id:"optimize-sealing-pipeline"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#optimize-sealing-pipeline"}},[e._v("#")]),e._v(" Optimize sealing pipeline")]),e._v(" "),t("h3",{attrs:{id:"calculate-your-daily-growth"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#calculate-your-daily-growth"}},[e._v("#")]),e._v(" Calculate your daily growth")]),e._v(" "),t("p",[e._v("Calculate how many tasks your sealing pipeline can process.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# for each type of task")]),e._v("\ntasks "),t("span",{pre:!0,attrs:{class:"token keyword"}},[e._v("done")]),e._v(" / "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("time")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v(" production rate\ndaily production rate * "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("(")]),e._v("32G OR 64G"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(")")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v(" daily growth "),t("span",{pre:!0,attrs:{class:"token keyword"}},[e._v("in")]),e._v(" power\n")])])]),t("p",[e._v("For example, if we have one box and can finish P1 in 240 minutes, P2 in 30 minutes and Commit in 35 minutes, then you can derive daily growth by the following chart.")]),e._v(" "),t("table",[t("thead",[t("tr",[t("th",[e._v("Task")]),e._v(" "),t("th",[e._v("Minute")]),e._v(" "),t("th",[e._v("Parallel")]),e._v(" "),t("th",[e._v("Hourly production rate")])])]),e._v(" "),t("tbody",[t("tr",[t("td",[e._v("P1")]),e._v(" "),t("td",[e._v("240")]),e._v(" "),t("td",[e._v("1")]),e._v(" "),t("td",[e._v("0.25 = 1 / (240 /60)")])]),e._v(" "),t("tr",[t("td",[e._v("P2")]),e._v(" "),t("td",[e._v("30")]),e._v(" "),t("td",[e._v("1")]),e._v(" "),t("td",[e._v("2 = 1 / (30 /60)")])]),e._v(" "),t("tr",[t("td",[e._v("Commit")]),e._v(" "),t("td",[e._v("35")]),e._v(" "),t("td",[e._v("1")]),e._v(" "),t("td",[e._v("1.71 = 1 / (35 /60)")])])])]),e._v(" "),t("h3",{attrs:{id:"finding-optimal-task-configurations"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#finding-optimal-task-configurations"}},[e._v("#")]),e._v(" Finding optimal task configurations")]),e._v(" "),t("p",[e._v("From the table above, we know that daily growth will be bottlenecked by P1. Adjust number of parallel tasks for different types of task to achieve maximum efficiency.")]),e._v(" "),t("table",[t("thead",[t("tr",[t("th",[e._v("Task")]),e._v(" "),t("th",[e._v("Minutes")]),e._v(" "),t("th",[e._v("Parallel")]),e._v(" "),t("th",[e._v("Hourly productin")]),e._v(" "),t("th",[e._v("Output")]),e._v(" "),t("th",[e._v("Memory consumption")])])]),e._v(" "),t("tbody",[t("tr",[t("td",[e._v("P1")]),e._v(" "),t("td",[e._v("240")]),e._v(" "),t("td",[e._v("7")]),e._v(" "),t("td",[e._v("1.75 = 7 / (240 /60)")]),e._v(" "),t("td",[e._v("1344 G")]),e._v(" "),t("td",[e._v("504 G = 7*64+56")])]),e._v(" "),t("tr",[t("td",[e._v("P2")]),e._v(" "),t("td",[e._v("30")]),e._v(" "),t("td",[e._v("1")]),e._v(" "),t("td",[e._v("2 = 1 / (30 /60)")]),e._v(" "),t("td",[e._v("1536 G")]),e._v(" "),t("td",[e._v("96 G = 1*96")])]),e._v(" "),t("tr",[t("td",[e._v("Commit")]),e._v(" "),t("td",[e._v("35")]),e._v(" "),t("td",[e._v("1")]),e._v(" "),t("td",[e._v("1.71 = 1 / (35 /60)")]),e._v(" "),t("td",[e._v("1316 G")]),e._v(" "),t("td",[e._v("192 G = 1*128+64")])])])]),e._v(" "),t("p",[e._v("The goal is to have "),t("code",[e._v("output")]),e._v(" for each task to be as close as possilbe so that the sealing pipeline runs in its maximum efficiency. Things to watchout for includes...")]),e._v(" "),t("ol",[t("li",[t("code",[e._v("hourly production")]),e._v(" for Commit is lower than P1, which may result in tasks backlogged in Commit phase.")]),e._v(" "),t("li",[e._v("When one type of tasks being overly efficient than others, resources may become idle.")]),e._v(" "),t("li",[e._v("Miro management is needed to have highest possible efficiency.")])]),e._v(" "),t("h3",{attrs:{id:"finding-optimal-pledging"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#finding-optimal-pledging"}},[e._v("#")]),e._v(" Finding optimal pledging")]),e._v(" "),t("p",[e._v("For example, if you find 7 P1 task to the optimal for your system, change the following venus-sealer configurations.")]),e._v(" "),t("div",{staticClass:"language-toml extra-class"},[t("pre",{pre:!0,attrs:{class:"language-toml"}},[t("code",[t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("[")]),t("span",{pre:!0,attrs:{class:"token table class-name"}},[e._v("Sealing")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("]")]),e._v(" \n "),t("span",{pre:!0,attrs:{class:"token key property"}},[e._v("MaxSealingSectors")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("=")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("7")]),e._v("\n")])])]),t("h2",{attrs:{id:"stop-loss"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#stop-loss"}},[e._v("#")]),e._v(" Stop-loss")]),e._v(" "),t("p",[e._v("If one of tasks fails too many times, manual intervention is needed to get sealing pipeline back to its normal output.")]),e._v(" "),t("p",[e._v("Remove sectors when you have the following issues.")]),e._v(" "),t("ol",[t("li",[e._v("Expired ticket")]),e._v(" "),t("li",[e._v("Expired Commit")]),e._v(" "),t("li",[e._v("Corrupted proof params")])]),e._v(" "),t("p",[e._v("To remove incomplete sectors.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[e._v("venus-sealer sectors remove --really-do-it "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("<")]),e._v("sectorNum"),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(">")]),e._v("\n")])])])])}),[],!1,null,null,null);s.default=r.exports}}]); \ No newline at end of file diff --git a/assets/js/25.7cec02b5.js b/assets/js/25.4a2e53d4.js similarity index 97% rename from assets/js/25.7cec02b5.js rename to assets/js/25.4a2e53d4.js index 465d0d382..744bb8c78 100644 --- a/assets/js/25.7cec02b5.js +++ b/assets/js/25.4a2e53d4.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[25],{409:function(e,t,r){"use strict";r.r(t);var n=r(17),o=Object(n.a)({},(function(){var e=this,t=e.$createElement,r=e._self._c||t;return r("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[r("h1",{attrs:{id:"deployment-of-a-venus-system"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#deployment-of-a-venus-system"}},[e._v("#")]),e._v(" Deployment of a Venus System")]),e._v(" "),r("p",[r("code",[e._v("Venus")]),e._v(" refers to products developed and maintained by Venus team to interact efficiently and robustly with Filecoin protocol. The target audience are storage providers, storage clients, ecosystem partners and "),r("code",[e._v("Dapp")]),e._v(". "),r("code",[e._v("Venus")]),e._v(" has been widely adopted in SP and SC use cases.")]),e._v(" "),r("h3",{attrs:{id:"deployment"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#deployment"}},[e._v("#")]),e._v(" Deployment")]),e._v(" "),r("p",[e._v("Since the "),r("a",{attrs:{href:"https://github.com/filecoin-project/venus/discussions/5420",target:"_blank",rel:"noopener noreferrer"}},[e._v("rebranding"),r("OutboundLink")],1),e._v(" of "),r("code",[e._v("Venus")]),e._v(" by the end of 2022, three main products has been formed, namely "),r("a",{attrs:{href:"https://sophon.venus-fil.io/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Sophon"),r("OutboundLink")],1),e._v(","),r("a",{attrs:{href:"https://damocles.venus-fil.io/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Damocles"),r("OutboundLink")],1),e._v(" and "),r("a",{attrs:{href:"https://droplet.venus-fil.io/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Droplet"),r("OutboundLink")],1),e._v(". Please refer to each product's own documentation for deployment guide.")]),e._v(" "),r("h3",{attrs:{id:"architecture"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#architecture"}},[e._v("#")]),e._v(" Architecture")]),e._v(" "),r("img",{attrs:{src:"https://github.com/ipfs-force-community/venus-core-devs/assets/1591330/83fabaa2-0da4-48aa-bfdd-1b6032bcf96e",width:"800"}})])}),[],!1,null,null,null);t.default=o.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[25],{410:function(e,t,r){"use strict";r.r(t);var n=r(17),o=Object(n.a)({},(function(){var e=this,t=e.$createElement,r=e._self._c||t;return r("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[r("h1",{attrs:{id:"deployment-of-a-venus-system"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#deployment-of-a-venus-system"}},[e._v("#")]),e._v(" Deployment of a Venus System")]),e._v(" "),r("p",[r("code",[e._v("Venus")]),e._v(" refers to products developed and maintained by Venus team to interact efficiently and robustly with Filecoin protocol. The target audience are storage providers, storage clients, ecosystem partners and "),r("code",[e._v("Dapp")]),e._v(". "),r("code",[e._v("Venus")]),e._v(" has been widely adopted in SP and SC use cases.")]),e._v(" "),r("h3",{attrs:{id:"deployment"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#deployment"}},[e._v("#")]),e._v(" Deployment")]),e._v(" "),r("p",[e._v("Since the "),r("a",{attrs:{href:"https://github.com/filecoin-project/venus/discussions/5420",target:"_blank",rel:"noopener noreferrer"}},[e._v("rebranding"),r("OutboundLink")],1),e._v(" of "),r("code",[e._v("Venus")]),e._v(" by the end of 2022, three main products has been formed, namely "),r("a",{attrs:{href:"https://sophon.venus-fil.io/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Sophon"),r("OutboundLink")],1),e._v(","),r("a",{attrs:{href:"https://damocles.venus-fil.io/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Damocles"),r("OutboundLink")],1),e._v(" and "),r("a",{attrs:{href:"https://droplet.venus-fil.io/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Droplet"),r("OutboundLink")],1),e._v(". Please refer to each product's own documentation for deployment guide.")]),e._v(" "),r("h3",{attrs:{id:"architecture"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#architecture"}},[e._v("#")]),e._v(" Architecture")]),e._v(" "),r("img",{attrs:{src:"https://github.com/ipfs-force-community/venus-core-devs/assets/1591330/83fabaa2-0da4-48aa-bfdd-1b6032bcf96e",width:"800"}})])}),[],!1,null,null,null);t.default=o.exports}}]); \ No newline at end of file diff --git a/assets/js/29.b536a87c.js b/assets/js/29.350338c7.js similarity index 95% rename from assets/js/29.b536a87c.js rename to assets/js/29.350338c7.js index ff50b50ca..48e9cac2b 100644 --- a/assets/js/29.b536a87c.js +++ b/assets/js/29.350338c7.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[29],{415:function(t,e,o){"use strict";o.r(e);var r=o(17),n=Object(r.a)({},(function(){var t=this,e=t.$createElement,o=t._self._c||e;return o("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[o("h2",{attrs:{id:"commands-from-lotus"}},[o("a",{staticClass:"header-anchor",attrs:{href:"#commands-from-lotus"}},[t._v("#")]),t._v(" Commands from Lotus")]),t._v(" "),o("p",[t._v("Many basic commands including but not limited to "),o("a",{attrs:{href:"https://lotus.filecoin.io/docs/storage-providers/addresses/",target:"_blank",rel:"noopener noreferrer"}},[t._v("creating worker/controler addresses"),o("OutboundLink")],1),t._v(", setting different types of "),o("a",{attrs:{href:"https://lotus.filecoin.io/docs/storage-providers/config/",target:"_blank",rel:"noopener noreferrer"}},[t._v("configurations"),o("OutboundLink")],1),t._v(", or "),o("a",{attrs:{href:"https://lotus.filecoin.io/docs/storage-providers/lifecycle/#changing-storage-locations",target:"_blank",rel:"noopener noreferrer"}},[t._v("changing storage locations"),o("OutboundLink")],1),t._v(" apply to both Lotus and Venus. Node operators are expected to follow the same process as what is instructed on the Lotus documentation. If you encounter any questions please do not hesitate to reach out to us on "),o("a",{attrs:{href:"https://filecoinproject.slack.com/archives/CEHHJNJS3",target:"_blank",rel:"noopener noreferrer"}},[t._v("#fil-venus"),o("OutboundLink")],1),t._v(".")])])}),[],!1,null,null,null);e.default=n.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[29],{414:function(t,e,o){"use strict";o.r(e);var r=o(17),n=Object(r.a)({},(function(){var t=this,e=t.$createElement,o=t._self._c||e;return o("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[o("h2",{attrs:{id:"commands-from-lotus"}},[o("a",{staticClass:"header-anchor",attrs:{href:"#commands-from-lotus"}},[t._v("#")]),t._v(" Commands from Lotus")]),t._v(" "),o("p",[t._v("Many basic commands including but not limited to "),o("a",{attrs:{href:"https://lotus.filecoin.io/docs/storage-providers/addresses/",target:"_blank",rel:"noopener noreferrer"}},[t._v("creating worker/controler addresses"),o("OutboundLink")],1),t._v(", setting different types of "),o("a",{attrs:{href:"https://lotus.filecoin.io/docs/storage-providers/config/",target:"_blank",rel:"noopener noreferrer"}},[t._v("configurations"),o("OutboundLink")],1),t._v(", or "),o("a",{attrs:{href:"https://lotus.filecoin.io/docs/storage-providers/lifecycle/#changing-storage-locations",target:"_blank",rel:"noopener noreferrer"}},[t._v("changing storage locations"),o("OutboundLink")],1),t._v(" apply to both Lotus and Venus. Node operators are expected to follow the same process as what is instructed on the Lotus documentation. If you encounter any questions please do not hesitate to reach out to us on "),o("a",{attrs:{href:"https://filecoinproject.slack.com/archives/CEHHJNJS3",target:"_blank",rel:"noopener noreferrer"}},[t._v("#fil-venus"),o("OutboundLink")],1),t._v(".")])])}),[],!1,null,null,null);e.default=n.exports}}]); \ No newline at end of file diff --git a/assets/js/30.22af68d7.js b/assets/js/30.f9819710.js similarity index 99% rename from assets/js/30.22af68d7.js rename to assets/js/30.f9819710.js index 31189ddfb..53b55a224 100644 --- a/assets/js/30.22af68d7.js +++ b/assets/js/30.f9819710.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[30],{414:function(t,e,a){"use strict";a.r(e);var s=a(17),o=Object(s.a)({},(function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h2",{attrs:{id:"upgrading-to-network-version-15"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#upgrading-to-network-version-15"}},[t._v("#")]),t._v(" Upgrading to network version 15")]),t._v(" "),a("p",[t._v("Please upgrade each venus component in the order as it is presented in this document. We recommend that you go through the document before upgrading. When in doubt, please do not hesitate to reach out to us "),a("a",{attrs:{href:"https://github.com/filecoin-project/venus/discussions/4688",target:"_blank",rel:"noopener noreferrer"}},[t._v("here"),a("OutboundLink")],1),t._v(".")]),t._v(" "),a("div",{staticClass:"custom-block warning"},[a("p",{staticClass:"custom-block-title"},[t._v("WARNING")]),t._v(" "),a("p",[t._v("Please make sure that your storage system is not doing any windowPost when you upgrade and leave ample time before the next upcoming windowPost")])]),t._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),a("p",[t._v("If you have partitions in all deadlines, it is recommended that you build another transition environment for the upgrade.")])]),t._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),a("p",[t._v("It is recommended that you backup your old binary and critical data as you go through the upgrade process.")])]),t._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),a("p",[t._v("For large scale storage systems, it is recommended that running chain-co with both venus daemon and venus wrapped daemon.")])]),t._v(" "),a("ol",[a("li",[a("p",[t._v("venus-auth: "),a("code",[t._v("optional")]),t._v(" upgrade; branch/tag "),a("code",[t._v("v1.3.2")]),t._v(";")])]),t._v(" "),a("li",[a("p",[t._v("venus-wallet: "),a("code",[t._v("optional")]),t._v(" upgrade; branch/tag "),a("code",[t._v("v1.4.0")]),t._v(";")])]),t._v(" "),a("li",[a("p",[t._v("venus daemon: "),a("code",[t._v("mandatory")]),t._v(" upgrade; branch/tag "),a("code",[t._v("v1.2.1")]),t._v(";")])])]),t._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),a("p",[t._v("Checkups after upgrading:")]),t._v(" "),a("ul",[a("li",[t._v("integrity of vk files")]),t._v(" "),a("li",[t._v("see if upgrade epochs are properly set in config files")])]),t._v(" "),a("div",{staticClass:"language-toml extra-class"},[a("pre",{pre:!0,attrs:{class:"language-toml"}},[a("code",[t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# cali")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"upgradeOhSnapHeight"')]),t._v(": "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("682006")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# mainnet")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"upgradeOhSnapHeight"')]),t._v(": "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1594680")]),t._v("\n")])])]),a("ul",[a("li",[t._v("see if "),a("code",[t._v("maxfee")]),t._v(" under "),a("code",[t._v("mpool")]),t._v(" section is now in the format of "),a("code",[t._v("[x] Fil")])])]),t._v(" "),a("div",{staticClass:"language- extra-class"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[t._v('"mpool": {\n\t"maxNonceGap": 100,\n \t"maxFee": "10 FIL"\n},\n')])])]),a("ul",[a("li",[t._v("see if chain synchronization is working properly")])])]),t._v(" "),a("div",{staticClass:"custom-block warning"},[a("p",{staticClass:"custom-block-title"},[t._v("WARNING")]),t._v(" "),a("p",[t._v("As a result of a mandatory network upgrade with API changes, sealer connection maybe lost during the this step of the upgrade.")])]),t._v(" "),a("ol",{attrs:{start:"4"}},[a("li",[t._v("venus wrapped deamon: "),a("code",[t._v("mandatory")]),t._v(" upgrade (if you are using "),a("code",[t._v("chain-co")]),t._v("); branch/tag "),a("code",[t._v("venus/v1.14.0")]),t._v(";")])]),t._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),a("p",[t._v("Checkups after upgrading:")]),t._v(" "),a("ul",[a("li",[t._v("see if chain synchronization is working properly")]),t._v(" "),a("li",[t._v("see if connection to venus-auth is okay")])]),t._v(" "),a("div",{staticClass:"language- extra-class"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[t._v('curl http://127.0.0.1:3453/rpc/v0 -X POST -H "Content-Type: application/json" -H "Authorization: Bearer " -d \'{"method": "Filecoin.ChainHead","params":[], "id": 0}\'\n')])])])]),t._v(" "),a("ol",{attrs:{start:"5"}},[a("li",[t._v("chain-co: "),a("code",[t._v("mandatory")]),t._v(" upgrade (if you deployed chain-co for your HA solution); branch/tag "),a("code",[t._v("v0.1.0")]),t._v(";")])]),t._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),a("p",[t._v("Checkups after upgrading:")]),t._v(" "),a("ul",[a("li",[t._v("see if two new API MpoolPending and MpoolGetNonce are working properly")])])]),t._v(" "),a("ol",{attrs:{start:"6"}},[a("li",[a("p",[t._v("venus-messager: "),a("code",[t._v("mandatory")]),t._v(" upgrade; branch/tag "),a("code",[t._v("v1.4.0")]),t._v(";")])]),t._v(" "),a("li",[a("p",[t._v("venus-gateway: "),a("code",[t._v("mandatory")]),t._v(" upgrade; branch/tag "),a("code",[t._v("v1.2.0")]),t._v(";")])])]),t._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),a("ul",[a("li",[t._v("support for both old and new API due to changes in ComputeProof's params")]),t._v(" "),a("li",[t._v("see if both v0 and v1 APIs are working properly")])])]),t._v(" "),a("ol",{attrs:{start:"8"}},[a("li",[t._v("venus-miner: "),a("code",[t._v("mandatory")]),t._v(" upgrade; branch/tag "),a("code",[t._v("v1.4.0")]),t._v(";")])]),t._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),a("p",[t._v("Parameter changes for ComputeProof.")])]),t._v(" "),a("ol",{attrs:{start:"9"}},[a("li",[a("p",[t._v("venus-market: "),a("code",[t._v("optional")]),t._v(" upgrade; branch/tag "),a("code",[t._v("v2.0.0")]),t._v(";")])]),t._v(" "),a("li",[a("p",[t._v("venus-sealer: "),a("code",[t._v("mandatory")]),t._v(" upgrade; branch/tag "),a("code",[t._v("v1.4.0")]),t._v(";")])])]),t._v(" "),a("p",[t._v("For more question regarding nv15 upgrade, please refer to this discussion "),a("a",{attrs:{href:"https://github.com/filecoin-project/venus/discussions/4688",target:"_blank",rel:"noopener noreferrer"}},[t._v("thread"),a("OutboundLink")],1),t._v(".")])])}),[],!1,null,null,null);e.default=o.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[30],{415:function(t,e,a){"use strict";a.r(e);var s=a(17),o=Object(s.a)({},(function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h2",{attrs:{id:"upgrading-to-network-version-15"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#upgrading-to-network-version-15"}},[t._v("#")]),t._v(" Upgrading to network version 15")]),t._v(" "),a("p",[t._v("Please upgrade each venus component in the order as it is presented in this document. We recommend that you go through the document before upgrading. When in doubt, please do not hesitate to reach out to us "),a("a",{attrs:{href:"https://github.com/filecoin-project/venus/discussions/4688",target:"_blank",rel:"noopener noreferrer"}},[t._v("here"),a("OutboundLink")],1),t._v(".")]),t._v(" "),a("div",{staticClass:"custom-block warning"},[a("p",{staticClass:"custom-block-title"},[t._v("WARNING")]),t._v(" "),a("p",[t._v("Please make sure that your storage system is not doing any windowPost when you upgrade and leave ample time before the next upcoming windowPost")])]),t._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),a("p",[t._v("If you have partitions in all deadlines, it is recommended that you build another transition environment for the upgrade.")])]),t._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),a("p",[t._v("It is recommended that you backup your old binary and critical data as you go through the upgrade process.")])]),t._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),a("p",[t._v("For large scale storage systems, it is recommended that running chain-co with both venus daemon and venus wrapped daemon.")])]),t._v(" "),a("ol",[a("li",[a("p",[t._v("venus-auth: "),a("code",[t._v("optional")]),t._v(" upgrade; branch/tag "),a("code",[t._v("v1.3.2")]),t._v(";")])]),t._v(" "),a("li",[a("p",[t._v("venus-wallet: "),a("code",[t._v("optional")]),t._v(" upgrade; branch/tag "),a("code",[t._v("v1.4.0")]),t._v(";")])]),t._v(" "),a("li",[a("p",[t._v("venus daemon: "),a("code",[t._v("mandatory")]),t._v(" upgrade; branch/tag "),a("code",[t._v("v1.2.1")]),t._v(";")])])]),t._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),a("p",[t._v("Checkups after upgrading:")]),t._v(" "),a("ul",[a("li",[t._v("integrity of vk files")]),t._v(" "),a("li",[t._v("see if upgrade epochs are properly set in config files")])]),t._v(" "),a("div",{staticClass:"language-toml extra-class"},[a("pre",{pre:!0,attrs:{class:"language-toml"}},[a("code",[t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# cali")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"upgradeOhSnapHeight"')]),t._v(": "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("682006")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# mainnet")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"upgradeOhSnapHeight"')]),t._v(": "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1594680")]),t._v("\n")])])]),a("ul",[a("li",[t._v("see if "),a("code",[t._v("maxfee")]),t._v(" under "),a("code",[t._v("mpool")]),t._v(" section is now in the format of "),a("code",[t._v("[x] Fil")])])]),t._v(" "),a("div",{staticClass:"language- extra-class"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[t._v('"mpool": {\n\t"maxNonceGap": 100,\n \t"maxFee": "10 FIL"\n},\n')])])]),a("ul",[a("li",[t._v("see if chain synchronization is working properly")])])]),t._v(" "),a("div",{staticClass:"custom-block warning"},[a("p",{staticClass:"custom-block-title"},[t._v("WARNING")]),t._v(" "),a("p",[t._v("As a result of a mandatory network upgrade with API changes, sealer connection maybe lost during the this step of the upgrade.")])]),t._v(" "),a("ol",{attrs:{start:"4"}},[a("li",[t._v("venus wrapped deamon: "),a("code",[t._v("mandatory")]),t._v(" upgrade (if you are using "),a("code",[t._v("chain-co")]),t._v("); branch/tag "),a("code",[t._v("venus/v1.14.0")]),t._v(";")])]),t._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),a("p",[t._v("Checkups after upgrading:")]),t._v(" "),a("ul",[a("li",[t._v("see if chain synchronization is working properly")]),t._v(" "),a("li",[t._v("see if connection to venus-auth is okay")])]),t._v(" "),a("div",{staticClass:"language- extra-class"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[t._v('curl http://127.0.0.1:3453/rpc/v0 -X POST -H "Content-Type: application/json" -H "Authorization: Bearer " -d \'{"method": "Filecoin.ChainHead","params":[], "id": 0}\'\n')])])])]),t._v(" "),a("ol",{attrs:{start:"5"}},[a("li",[t._v("chain-co: "),a("code",[t._v("mandatory")]),t._v(" upgrade (if you deployed chain-co for your HA solution); branch/tag "),a("code",[t._v("v0.1.0")]),t._v(";")])]),t._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),a("p",[t._v("Checkups after upgrading:")]),t._v(" "),a("ul",[a("li",[t._v("see if two new API MpoolPending and MpoolGetNonce are working properly")])])]),t._v(" "),a("ol",{attrs:{start:"6"}},[a("li",[a("p",[t._v("venus-messager: "),a("code",[t._v("mandatory")]),t._v(" upgrade; branch/tag "),a("code",[t._v("v1.4.0")]),t._v(";")])]),t._v(" "),a("li",[a("p",[t._v("venus-gateway: "),a("code",[t._v("mandatory")]),t._v(" upgrade; branch/tag "),a("code",[t._v("v1.2.0")]),t._v(";")])])]),t._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),a("ul",[a("li",[t._v("support for both old and new API due to changes in ComputeProof's params")]),t._v(" "),a("li",[t._v("see if both v0 and v1 APIs are working properly")])])]),t._v(" "),a("ol",{attrs:{start:"8"}},[a("li",[t._v("venus-miner: "),a("code",[t._v("mandatory")]),t._v(" upgrade; branch/tag "),a("code",[t._v("v1.4.0")]),t._v(";")])]),t._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),a("p",[t._v("Parameter changes for ComputeProof.")])]),t._v(" "),a("ol",{attrs:{start:"9"}},[a("li",[a("p",[t._v("venus-market: "),a("code",[t._v("optional")]),t._v(" upgrade; branch/tag "),a("code",[t._v("v2.0.0")]),t._v(";")])]),t._v(" "),a("li",[a("p",[t._v("venus-sealer: "),a("code",[t._v("mandatory")]),t._v(" upgrade; branch/tag "),a("code",[t._v("v1.4.0")]),t._v(";")])])]),t._v(" "),a("p",[t._v("For more question regarding nv15 upgrade, please refer to this discussion "),a("a",{attrs:{href:"https://github.com/filecoin-project/venus/discussions/4688",target:"_blank",rel:"noopener noreferrer"}},[t._v("thread"),a("OutboundLink")],1),t._v(".")])])}),[],!1,null,null,null);e.default=o.exports}}]); \ No newline at end of file diff --git a/assets/js/4.68e635da.js b/assets/js/4.506518be.js similarity index 62% rename from assets/js/4.68e635da.js rename to assets/js/4.506518be.js index 8fc0bc77f..d639216c5 100644 --- a/assets/js/4.68e635da.js +++ b/assets/js/4.506518be.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[4],{352:function(e,t,c){},393:function(e,t,c){"use strict";c(352)},398:function(e,t,c){"use strict";c.r(t);var i={name:"CodeBlock",props:{title:{type:String,required:!0},active:{type:Boolean,default:!1}}},n=(c(393),c(17)),s=Object(n.a)(i,(function(){var e=this.$createElement;return(this._self._c||e)("div",{staticClass:"theme-code-block",class:{"theme-code-block__active":this.active}},[this._t("default")],2)}),[],!1,null,"6d04095e",null);t.default=s.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[4],{351:function(e,t,c){},392:function(e,t,c){"use strict";c(351)},397:function(e,t,c){"use strict";c.r(t);var i={name:"CodeBlock",props:{title:{type:String,required:!0},active:{type:Boolean,default:!1}}},n=(c(392),c(17)),s=Object(n.a)(i,(function(){var e=this.$createElement;return(this._self._c||e)("div",{staticClass:"theme-code-block",class:{"theme-code-block__active":this.active}},[this._t("default")],2)}),[],!1,null,"6d04095e",null);t.default=s.exports}}]); \ No newline at end of file diff --git a/assets/js/5.45d22d5f.js b/assets/js/5.34e2ab1e.js similarity index 88% rename from assets/js/5.45d22d5f.js rename to assets/js/5.34e2ab1e.js index dd6270796..95347cac7 100644 --- a/assets/js/5.45d22d5f.js +++ b/assets/js/5.34e2ab1e.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[5],{351:function(e,t,o){},392:function(e,t,o){"use strict";o(351)},397:function(e,t,o){"use strict";o.r(t);o(22),o(50),o(71),o(51);var a={name:"CodeGroup",data:function(){return{codeTabs:[],activeCodeTabIndex:-1}},watch:{activeCodeTabIndex:function(e){this.codeTabs.forEach((function(e){e.elm.classList.remove("theme-code-block__active")})),this.codeTabs[e].elm.classList.add("theme-code-block__active")}},mounted:function(){var e=this;this.codeTabs=(this.$slots.default||[]).filter((function(e){return Boolean(e.componentOptions)})).map((function(t,o){return""===t.componentOptions.propsData.active&&(e.activeCodeTabIndex=o),{title:t.componentOptions.propsData.title,elm:t.elm}})),-1===this.activeCodeTabIndex&&this.codeTabs.length>0&&(this.activeCodeTabIndex=0)},methods:{changeCodeTab:function(e){this.activeCodeTabIndex=e}}},c=(o(392),o(17)),n=Object(c.a)(a,(function(){var e=this,t=e.$createElement,o=e._self._c||t;return o("div",{staticClass:"theme-code-group"},[o("div",{staticClass:"theme-code-group__nav"},[o("ul",{staticClass:"theme-code-group__ul"},e._l(e.codeTabs,(function(t,a){return o("li",{key:t.title,staticClass:"theme-code-group__li"},[o("button",{staticClass:"theme-code-group__nav-tab",class:{"theme-code-group__nav-tab-active":a===e.activeCodeTabIndex},on:{click:function(t){return e.changeCodeTab(a)}}},[e._v("\n "+e._s(t.title)+"\n ")])])})),0)]),e._v(" "),e._t("default"),e._v(" "),e.codeTabs.length<1?o("pre",{staticClass:"pre-blank"},[e._v("// Make sure to add code blocks to your code group")]):e._e()],2)}),[],!1,null,"32c2d7ed",null);t.default=n.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[5],{352:function(e,t,o){},393:function(e,t,o){"use strict";o(352)},398:function(e,t,o){"use strict";o.r(t);o(22),o(50),o(71),o(51);var a={name:"CodeGroup",data:function(){return{codeTabs:[],activeCodeTabIndex:-1}},watch:{activeCodeTabIndex:function(e){this.codeTabs.forEach((function(e){e.elm.classList.remove("theme-code-block__active")})),this.codeTabs[e].elm.classList.add("theme-code-block__active")}},mounted:function(){var e=this;this.codeTabs=(this.$slots.default||[]).filter((function(e){return Boolean(e.componentOptions)})).map((function(t,o){return""===t.componentOptions.propsData.active&&(e.activeCodeTabIndex=o),{title:t.componentOptions.propsData.title,elm:t.elm}})),-1===this.activeCodeTabIndex&&this.codeTabs.length>0&&(this.activeCodeTabIndex=0)},methods:{changeCodeTab:function(e){this.activeCodeTabIndex=e}}},c=(o(393),o(17)),n=Object(c.a)(a,(function(){var e=this,t=e.$createElement,o=e._self._c||t;return o("div",{staticClass:"theme-code-group"},[o("div",{staticClass:"theme-code-group__nav"},[o("ul",{staticClass:"theme-code-group__ul"},e._l(e.codeTabs,(function(t,a){return o("li",{key:t.title,staticClass:"theme-code-group__li"},[o("button",{staticClass:"theme-code-group__nav-tab",class:{"theme-code-group__nav-tab-active":a===e.activeCodeTabIndex},on:{click:function(t){return e.changeCodeTab(a)}}},[e._v("\n "+e._s(t.title)+"\n ")])])})),0)]),e._v(" "),e._t("default"),e._v(" "),e.codeTabs.length<1?o("pre",{staticClass:"pre-blank"},[e._v("// Make sure to add code blocks to your code group")]):e._e()],2)}),[],!1,null,"32c2d7ed",null);t.default=n.exports}}]); \ No newline at end of file diff --git a/assets/js/8.0f750869.js b/assets/js/8.5880ef83.js similarity index 92% rename from assets/js/8.0f750869.js rename to assets/js/8.5880ef83.js index 2c59fde29..74916d0f2 100644 --- a/assets/js/8.0f750869.js +++ b/assets/js/8.5880ef83.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[8],{329:function(e,t,s){e.exports=s.p+"assets/img/damocles-banner.cdc65a5a.jpg"},404:function(e,t,s){"use strict";s.r(t);var r=s(17),a=Object(r.a)({},(function(){var e=this,t=e.$createElement,r=e._self._c||t;return r("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[r("p",[r("img",{attrs:{src:s(329),alt:"damocles"}})]),e._v(" "),r("h3",{attrs:{id:"damocles"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#damocles"}},[e._v("#")]),e._v(" Damocles")]),e._v(" "),r("p",[e._v("Damocles, formerly known as Venus Power Service, is THE Filecoin storage power solution. Learn more about Damocles "),r("a",{attrs:{href:"https://damocles.venus-fil.io/",target:"_blank",rel:"noopener noreferrer"}},[e._v("here"),r("OutboundLink")],1),e._v(".")])])}),[],!1,null,null,null);t.default=a.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[8],{329:function(e,t,s){e.exports=s.p+"assets/img/damocles-banner.cdc65a5a.jpg"},405:function(e,t,s){"use strict";s.r(t);var r=s(17),a=Object(r.a)({},(function(){var e=this,t=e.$createElement,r=e._self._c||t;return r("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[r("p",[r("img",{attrs:{src:s(329),alt:"damocles"}})]),e._v(" "),r("h3",{attrs:{id:"damocles"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#damocles"}},[e._v("#")]),e._v(" Damocles")]),e._v(" "),r("p",[e._v("Damocles, formerly known as Venus Power Service, is THE Filecoin storage power solution. Learn more about Damocles "),r("a",{attrs:{href:"https://damocles.venus-fil.io/",target:"_blank",rel:"noopener noreferrer"}},[e._v("here"),r("OutboundLink")],1),e._v(".")])])}),[],!1,null,null,null);t.default=a.exports}}]); \ No newline at end of file diff --git a/assets/js/app.09449910.js b/assets/js/app.0efef577.js similarity index 92% rename from assets/js/app.09449910.js rename to assets/js/app.0efef577.js index 28f97fdd6..b91a0a8ea 100644 --- a/assets/js/app.09449910.js +++ b/assets/js/app.0efef577.js @@ -1,8 +1,8 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[0],[]]);!function(e){function n(n){for(var r,i,s=n[0],c=n[1],l=n[2],p=0,d=[];p0?o(r(e),9007199254740991):0}},function(e,n){var t=Array.isArray;e.exports=t},function(e,n,t){var r=t(152),o="object"==typeof self&&self&&self.Object===Object&&self,a=r||o||Function("return this")();e.exports=a},function(e,n,t){"use strict";function r(e,n,t,r,o,a,i,s){var c,l="function"==typeof e?e.options:e;if(n&&(l.render=n,l.staticRenderFns=t,l._compiled=!0),r&&(l.functional=!0),a&&(l._scopeId="data-v-"+a),i?(c=function(e){(e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext)||"undefined"==typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),o&&o.call(this,e),e&&e._registeredComponents&&e._registeredComponents.add(i)},l._ssrRegister=c):o&&(c=s?function(){o.call(this,(l.functional?this.parent:this).$root.$options.shadowRoot)}:o),c)if(l.functional){l._injectStyles=c;var u=l.render;l.render=function(e,n){return c.call(n),u(e,n)}}else{var p=l.beforeCreate;l.beforeCreate=p?[].concat(p,c):[c]}return{exports:e,options:l}}t.d(n,"a",(function(){return r}))},function(e,n,t){var r=t(5),o=t(1),a=t(7),i=Object.defineProperty,s={},c=function(e){throw e};e.exports=function(e,n){if(a(s,e))return s[e];n||(n={});var t=[][e],l=!!a(n,"ACCESSORS")&&n.ACCESSORS,u=a(n,0)?n[0]:c,p=a(n,1)?n[1]:void 0;return s[e]=!!t&&!o((function(){if(l&&!r)return!0;var e={length:-1};l?i(e,1,{enumerable:!0,get:c}):e[1]=1,t.call(e,u,p)}))}},function(e,n,t){var r=t(126),o=t(2),a=function(e){return"function"==typeof e?e:void 0};e.exports=function(e,n){return arguments.length<2?a(r[e])||a(o[e]):r[e]&&r[e][n]||o[e]&&o[e][n]}},function(e,n,t){var r=t(5),o=t(84),a=t(35),i=t(11),s=t(39),c=t(7),l=t(121),u=Object.getOwnPropertyDescriptor;n.f=r?u:function(e,n){if(e=i(e),n=s(n,!0),l)try{return u(e,n)}catch(e){}if(c(e,n))return a(!o.f.call(e,n),e[n])}},function(e,n){e.exports=function(e){if(null==e)throw TypeError("Can't call method on "+e);return e}},function(e,n,t){"use strict";var r=t(0),o=t(32).filter,a=t(59),i=t(18),s=a("filter"),c=i("filter");r({target:"Array",proto:!0,forced:!s||!c},{filter:function(e){return o(this,e,arguments.length>1?arguments[1]:void 0)}})},function(e,n){e.exports=!1},function(e,n){var t={}.toString;e.exports=function(e){return t.call(e).slice(8,-1)}},function(e,n){e.exports=function(e){if("function"!=typeof e)throw TypeError(String(e)+" is not a function");return e}},function(e,n,t){var r=t(235),o=t(238);e.exports=function(e,n){var t=o(e,n);return r(t)?t:void 0}},function(e,n,t){"use strict";var r=t(114).charAt,o=t(31),a=t(127),i=o.set,s=o.getterFor("String Iterator");a(String,"String",(function(e){i(this,{type:"String Iterator",string:String(e),index:0})}),(function(){var e,n=s(this),t=n.string,o=n.index;return o>=t.length?{value:void 0,done:!0}:(e=r(t,o),n.index+=e.length,{value:e,done:!1})}))},function(e,n,t){var r,o=t(6),a=t(110),i=t(82),s=t(40),c=t(125),l=t(79),u=t(55),p=u("IE_PROTO"),d=function(){},f=function(e){return" - - + +

Distributed Infrastructure

Adhering to design principles of distributed systems, Venus chain service enables you to scale and guarantees availability to your storage providing systems

Optimized Storage Deal

Solution for both storage client and storage provider enables seamless storage deal process

Reimagined Storage Power

Completely revamped sealer submodule to help you to grow and maintain your storage power with more efficiency and stability

- + diff --git a/intro/_Footer.html b/intro/_Footer.html index 4bb8424ff..fcf01fb62 100644 --- a/intro/_Footer.html +++ b/intro/_Footer.html @@ -13,8 +13,8 @@ gtag('config', 'G-SMSDTMGLTV'); - - + +
- +

See something missing? Have tips to share? File an issue (opens new window), and we'll follow up as soon as possible. (If you have write permission in this repo, feel free to edit directly.)

Last Updated: 11/27/2023, 2:40:08 AM
+ diff --git a/intro/contribute-docs.html b/intro/contribute-docs.html index 2fd2660bf..aa2390db6 100644 --- a/intro/contribute-docs.html +++ b/intro/contribute-docs.html @@ -13,8 +13,8 @@ gtag('config', 'G-SMSDTMGLTV'); - - + +
Last Updated: 11/27/2023, 2:40:08 AM
- + diff --git a/intro/damocles.html b/intro/damocles.html index 8d1455828..39aac5063 100644 --- a/intro/damocles.html +++ b/intro/damocles.html @@ -13,8 +13,8 @@ gtag('config', 'G-SMSDTMGLTV'); - - + +
- +

damocles

# Damocles

Damocles, formerly known as Venus Power Service, is THE Filecoin storage power solution. Learn more about Damocles here (opens new window).

Last Updated: 11/27/2023, 2:40:08 AM
+ diff --git a/intro/droplet.html b/intro/droplet.html index 8cdb1f5cc..34ddb3c94 100644 --- a/intro/droplet.html +++ b/intro/droplet.html @@ -13,8 +13,8 @@ gtag('config', 'G-SMSDTMGLTV'); - - + +
- +

droplet

# Droplet

Droplet, formerly known as Venus Deal Service, is THE Filecoin storage deal solution. Learn more about Droplet here (opens new window).

Last Updated: 11/27/2023, 2:40:08 AM
+ diff --git a/intro/index.html b/intro/index.html index 6a335e30b..416e58304 100644 --- a/intro/index.html +++ b/intro/index.html @@ -13,8 +13,8 @@ gtag('config', 'G-SMSDTMGLTV'); - - + +

# Preface

Multiple interoperable implementations are required on the same public blockchain. Each implementation may has its own set of security issues, but they are not all the same . Therefore, launching cryptocurrency networks with multiple implementations can reduce the catastrophic errors. Venus is one of the four implementations in Filecoin network.

Venus (Capital V) refers to one of the general implementations of Filecoin, while venus (v in lowercase) refers to one of the components of Venus. Venus is committed to helping small and medium-sized storage providers to join the Filecoin ecosystem network with a lower barrier.

Now Venus has lead the way to the distributed storage pool of Filecoin through components like venus、damocles, sophon-miner, venus-wallet, sophon-messager, sophon-auth, sophon-gateway. In the future, Venus will continue its evolvement and jointly promote the open source development of Filecoin ecosystem.

# Why are we doing this

On June 2020, Protocol Labs launched an RFP to handover the maintenance of go-filecoin to another community member, and IPFSForce applied for it and successfully obtain the project. In October, We renamed go-filecoin as Venus, and take over the maintenance of Venus Implementation.

Before IPFSForce’s application, maintenance effort is seriously lacking in Venus project. In terms of protocols and components, vm,mpool, chain, rpc are all available, but all have different kind of issue. It takes Venus team more than 3 months to gradually fix protocol layer, code layer, and problematic fuctions, making Venus complete the interoperability with Lotus, so that the nodes using Venus can run smoothly in the Filecoin network. And then we let Venus support calibration and 2K networks.

After completing the above work, we start to set the roadmap of Venus development.

We plan to let Venus support the development of storage pool. At the begining, we decide to achieve the best of expansion from a single storage provider. It is technically feasible, but the biggest problem was caused by the mechanism of Filecoin proofs. Storage providers in the Filecoin network have to submit the PoSt periodically, and in order to generate the proof, they need to read the data of a whole Partition. If all sectors are distributed in different places, to read the data through the public network will be heavy time-consuming.

After that, through several times of re-design and modification, we finally decide to build it as a distributed storage pool. Distributed storage pool will not completely in charge with any single storage provider, but managed by multiple storage providers, which is more like a storage provider group/union.

The external features of Venus distributed storage pool are similar to other pools. Storage Providers can store their resources in distributed geographic nodes. As long as there is a stable connection to the network, the storage provider can create a node accessible to Venus storage pool; The probability of earning the block reward is proportional to the amount of storage the storage provider contributes to the Filecoin network, and the final result of separate calculation and overall calculation should be the same: n1/p+ n2/p+n3/p......= (n1+n2+n3+.....)/p, which provides a theoretical basis on the algorithm.

For the storage and retrieval, storage providers can access the network through the venus unified entrance or by themselves. In the design and with the permission from storage providers, venus will select the appropriate node to store data according to specific requirements, so that the data is closer to the real scenario.

  1. Data storage: component sharing is supported, and the storage will be gradually migrated to MySQL to ensure the metadata security of Venus through some highly available solutions.

  2. Shared Modules: support high availability, ensure the quality of service, reduce the time cost and maintenance cost of storage providers, which make it easier for storage providers to join the storage pool. Nowadays, mining is a high-tech activity, but to achieve Filecoin's goal to get the utmost out of storage resources, it is inevitable to lower the threshold to attract more participants.

  3. Combine the right for more block rewards: storage providers can integrate resources together and help each other pack messages, so as to avoid the situation of small storage providers that no one can pack messages.

  4. Improve the TPS of Filecoin network: if there are multiple blocks at the same height, sophon-miner can ensure that the messages in each block are different, as the avoidance of highly-repeated messages when blocks are separated.

  5. Improve the stability of messages: messages in storing activities can be separated from nodes and managed by sophon-messager, which can track the latest state of the chain to set a relatively reasonable estimated gas parameter, and also supports users to set a message parameter themselves.

  6. Improve the speed of data access: the current Filecoin network is more like a pool which is merely for data storage, but as a complete data service, it also needs data retrieval to realize its real value. With sufficient miner users, Venus has more chances to promote the real data application. For example, for data distribution, Venus can distribute the data to some storage providers' nodes nearest to the customers, which can improve the access speed; some public data can distribute these data to more nodes as much as possible to ensure that access at any location is effective, which can greatly improve the performance of IPFS network and further realize the goal of IPFS, as one of the Web3.0 solutions.

# How Venus works

# Architecture

Venus architecture includes venus, sophon-miner, damocles, sophon-messager, venus-wallet, sophon-auth, and droplet. In the classic architecture, venus, sophon-miner, sophon-auth, sophon-messager and droplet are public components, and damocles and venus-wallet are local components.

Public components can be established by service providers or by multiple storage providers, and they only need to run damocles and venus-wallet locally. In fact, all components of Venus are protocol oriented. If storage providers have sufficient skills, they can also deploy all or part of the public components locally, so the deployment can be more flexible.

The following figure is a typical application scenario in our design.

The following contents show the relationship between components, which are similar in function, but with more powerful expanded functions in details and uses.

  • sophon-auth --> token authentication service extend lotus jwt
  • sophon-miner --> lotus-miner block produce part
  • damocles --> lotus-miner sealer scheduler part/wd
  • venus daemon --> lotus daemon
  • venus-wallet -> lotus wallet part
  • sophon-messager --> lotus mpool

# venus

venus is similar to lotus-daemon, which is used to support all nodes. venus is connected to the Filecoin blockchain network to provide data support for Venus. venus can be used as an ordinary node. It has all the necessary functions of blockchain nodes, such as chain, mpool and wallet. The APIs of venus are almost compatible with those of lotus (you can mention the issue of incompatible APIs). On venus, you can create private keys, query assets, transfer funds, etc. In a typical deployment environment, venus only provides data query service on the basic chain without private key restoration. The block data needed by slashfilter is stored in the database, and the node itself is stateless. In this case, venus node can realize its high availability through nginx reverse proxy.

# Venus and Lotus,The Difference

  1. External signature is supported in the API of creating block (request will be proposed to lotus too).
  2. The API of message selection supports the selection of multiple batches of messages at the same time, which is used to select messages when multiple storage providers get the block rewards.
  3. Support the centralized authorization access to sophon-auth.

Therefore, if you are interested in the mixed deployment of venus / lotus, you need to use Venus project which is compatible to Lotus (opens new window) or pick your own CCS.

# sophon-auth

sophon-auth (opens new window) (formerly venus-auth) is a component used for authorization. In a typical deployment environment, sophon-auth is used to provide authorization services to venus, sophon-miner and sophon-messager. Local nodes need to be authorized to have access to the shared components. Based on the authorization, sophon-auth will expand its functions, such as security control, including access restriction and blacklist.

# sophon-miner

The function of sophon-miner (opens new window) (formerly venus-miner) is to combine the rights to earn block rewards. The program can configure the location of multiple storage providers and their sealers and wallets, and generate blocks for these storage providers at the same time. sophon-miner has the following features:

  1. Separate data: because the process of generating blocks needs to access data, and storage provider's sealer may be heterogeneous, but now most storage providers will use their own codes, so there is a problem about how to access these data to realize joint mining. By sophon-miner’s independence on the storage organization mode and completing the proofs by storage providers, no matter how the miner's sealer organizes the storage, as long as the Computeproof API is implemented, sophon-miner can generate the proof through it.
  2. Separate private key: when calculating random numbers and signature blocks, all operations about private key are accessed through remote wallet, which can improve the security of mining activities.
  3. Improve storage providers' wincount and TPS: when the miner who uses sophon-miner rto get multiple (> 1) rights of block rewards in a period, sophon-miner will try to select different messages from the message pool for packaging, which can somehow improve the speed of these messages on the chain, and make the block get more gas premium.

# sophon-messenger

The goal of sophon-messager (opens new window) (formerly venus-messager) is to help messages on chain more efficiently, and to flexibly control the timing of messages on chain to reduce gas consumption and control the data traffic, etc. It includes remote wallet management, address management and message management.

  1. Wallet management: sophon-messager connects multiple wallets and scans these addresses into the list.
  2. Address management: the major purpose is to manage the nonce value to ensure that the value can be assigned in the correct order.
  3. Message management: it is divided into three parts, namely "message receiving and saving", "message selection and pushing" and "tracking the status of message on the chain".

In terms of functions:

  1. Support remote wallet: one messenger supports multiple wallets to manage their message separately.
  2. Support local storage of SQLite and remote storage of MySQL for more secure and stable storage.
  3. Dynamic Fill: gas related parameters and nonce are to be filled out when sending a message on chain according to gas and push policy, to make sure the gas-estimation and other setting are valid.
  4. Maintain message status, including whether the message is chained and replaced and save the results of the execution.
  5. Multi-point message delivery (directly to the blockchain network with libp2p, push to the node by Mpool API), to make sure that messages are propagated over the network.
  6. Flexible config includes gas estimate, msg push strategy, etc.

# venus-wallet

venus-wallet is a remote wallet, which can support both Lotus and Venus in terms of protocols. In a typical deployment environment, this module is deployed locally by storage providers, and the security of assets is guaranteed by certain policy configuration. venus-wallet has the following features:

  1. Private key management function: currently it supports the private key management of asymmetric algorithms BLS and SECP, and it can generate random private key, and uses aes128 to encrypt and store the private key symmetrically whilst supports the private key to sign the data.
  2. Signature verification: each signature type has its verification policy, which ensures that the signer won't do deceits the wallet through non-credible signature type.
  3. Signature tactics module: for the Lotus and Venus implementation of Filecoin, the module is created to manage 10 existing data structures and more than 60 signature types in message data structure, and configure various combination methods on demand to bind private key signature rules, and then integrate several different private key signature rules and authorize them to external components for further usage.

# droplet

Droplet (formerly venus-market) is the market component in the Venus system. Its vision is to create a distributed storage and retrieval market in the Filecoin network. Currently, it has realized order storage and retrieval compatible with the Lotus protocol, and is gradually moving towards receiving orders from multiple clusters of droplet services and providing unified retrieval services to the outside world. You can refer to droplet design and roadmap (opens new window).

# sophon-gateway

sophon-gateway (opens new window) (formerly venus-gateway) is a bridge between independent components and the chain service layer. It is used to simplify deployment and reduce the complexity of storage provider access, and increase the security of storage provider access. When the independent component is started, its service interface is registered with sophon-gateway. The chain service component needs to request the corresponding cluster’s service API through sophon-gateway.

  • Storage providers do not need external IP and exposed wallet service;
  • After the storage pool is configured with an SSL certificate, the connection between the cluster and the storage pool is secure;
  • Storage providers can simply register multiple clients (wallets/proofs) with the storage pool to achieve high availability.

sophon-gateway

# damocles

damocles (opens new window) (formerly venus-cluster) is a new version of sector sealing and computing power maintenance components launched by Venus. Compared with the original venus-sealer, it has certain advantages in task scheduling and maximizing system resources, and its target users will also be different

# Learn more about Venus

Last Updated: 11/27/2023, 2:40:08 AM
- + diff --git a/intro/one-pager.html b/intro/one-pager.html index 6a05abd31..94c8611ef 100644 --- a/intro/one-pager.html +++ b/intro/one-pager.html @@ -13,8 +13,8 @@ gtag('config', 'G-SMSDTMGLTV'); - - + +
- + diff --git a/intro/sophon.html b/intro/sophon.html index 0402128e2..1b1233b6f 100644 --- a/intro/sophon.html +++ b/intro/sophon.html @@ -13,8 +13,8 @@ gtag('config', 'G-SMSDTMGLTV'); - - + +
- +

sophon

# Sophon

Sophon, formerly known as Venus chain service, is THE Filecoin super node solution. Learn more about Sophon here (opens new window).

Last Updated: 11/27/2023, 2:40:08 AM
+ diff --git a/operation/Efficiency_of_sealing.html b/operation/Efficiency_of_sealing.html index 5513a4bc9..f3ac7e6bc 100644 --- a/operation/Efficiency_of_sealing.html +++ b/operation/Efficiency_of_sealing.html @@ -13,8 +13,8 @@ gtag('config', 'G-SMSDTMGLTV'); - - + +
- +
Last Updated: 11/27/2023, 2:40:08 AM
+ diff --git a/operation/System_monitor_of_Zabbix.html b/operation/System_monitor_of_Zabbix.html index 19369dead..212202270 100644 --- a/operation/System_monitor_of_Zabbix.html +++ b/operation/System_monitor_of_Zabbix.html @@ -13,8 +13,8 @@ gtag('config', 'G-SMSDTMGLTV'); - - + +
Last Updated: 11/27/2023, 2:40:08 AM
+ diff --git a/operation/_Footer.html b/operation/_Footer.html index bfac2a815..928507dc9 100644 --- a/operation/_Footer.html +++ b/operation/_Footer.html @@ -13,8 +13,8 @@ gtag('config', 'G-SMSDTMGLTV'); - - + +
- +

See something missing? Have tips to share? File an issue (opens new window), and we'll follow up as soon as possible. (If you have write permission in this repo, feel free to edit directly.)

Last Updated: 11/27/2023, 2:40:08 AM
+ diff --git a/operation/example-single-box.html b/operation/example-single-box.html index 965109e40..4ae789e3b 100644 --- a/operation/example-single-box.html +++ b/operation/example-single-box.html @@ -13,8 +13,8 @@ gtag('config', 'G-SMSDTMGLTV'); - - + +
- +

# Venus Single box setup

This is an exmaple venus single box setup that is estimated to grow 1TiB power per day.

# Specs

Parts Recommendation
CPU 3970X * 1 (32 core)
RAM 512G
NVMe (for sealing) 3T/SSD
SSD (for OS) 500G
GPU RTX 3080 * 1

# Job scheduling

Task Core limit Minutes RAM(G) Hourly production rate Daily growth(T)
P1 * 5 20 220 376 1.3636 1.0227
AP, P2, Commit 12 10 120 3 1.125

For more information on core limit, please refer to the next tutorial.

Last Updated: 11/27/2023, 2:40:08 AM
+ diff --git a/operation/index.html b/operation/index.html index 353e9717d..bff3287c4 100644 --- a/operation/index.html +++ b/operation/index.html @@ -13,8 +13,8 @@ gtag('config', 'G-SMSDTMGLTV'); - - + +

# Deployment of a Venus System

Venus refers to products developed and maintained by Venus team to interact efficiently and robustly with Filecoin protocol. The target audience are storage providers, storage clients, ecosystem partners and Dapp. Venus has been widely adopted in SP and SC use cases.

# Deployment

Since the rebranding (opens new window) of Venus by the end of 2022, three main products has been formed, namely Sophon (opens new window)Damocles (opens new window) and Droplet (opens new window). Please refer to each product's own documentation for deployment guide.

# Architecture

Last Updated: 11/27/2023, 2:40:08 AM
- + diff --git a/operation/lotus-vs-venus.html b/operation/lotus-vs-venus.html index 8a618dbc6..58285b5cb 100644 --- a/operation/lotus-vs-venus.html +++ b/operation/lotus-vs-venus.html @@ -13,8 +13,8 @@ gtag('config', 'G-SMSDTMGLTV'); - - + +
- +

# Commands from Lotus

Many basic commands including but not limited to creating worker/controler addresses (opens new window), setting different types of configurations (opens new window), or changing storage locations (opens new window) apply to both Lotus and Venus. Node operators are expected to follow the same process as what is instructed on the Lotus documentation. If you encounter any questions please do not hesitate to reach out to us on #fil-venus (opens new window).

Last Updated: 11/27/2023, 2:40:08 AM
+ diff --git a/operation/nv15-upgrade.html b/operation/nv15-upgrade.html index ae1b6913d..bf56efdc4 100644 --- a/operation/nv15-upgrade.html +++ b/operation/nv15-upgrade.html @@ -13,8 +13,8 @@ gtag('config', 'G-SMSDTMGLTV'); - - + +
  1. chain-co: mandatory upgrade (if you deployed chain-co for your HA solution); branch/tag v0.1.0;

TIP

Checkups after upgrading:

  • see if two new API MpoolPending and MpoolGetNonce are working properly
  1. venus-messager: mandatory upgrade; branch/tag v1.4.0;

  2. venus-gateway: mandatory upgrade; branch/tag v1.2.0;

TIP

  • support for both old and new API due to changes in ComputeProof's params
  • see if both v0 and v1 APIs are working properly
  1. venus-miner: mandatory upgrade; branch/tag v1.4.0;

TIP

Parameter changes for ComputeProof.

  1. venus-market: optional upgrade; branch/tag v2.0.0;

  2. venus-sealer: mandatory upgrade; branch/tag v1.4.0;

For more question regarding nv15 upgrade, please refer to this discussion thread (opens new window).

Last Updated: 11/27/2023, 2:40:08 AM
- + diff --git a/operation/nv16-upgrade.html b/operation/nv16-upgrade.html index b8ad3fef6..049d2ee87 100644 --- a/operation/nv16-upgrade.html +++ b/operation/nv16-upgrade.html @@ -13,8 +13,8 @@ gtag('config', 'G-SMSDTMGLTV'); - - + +
Last Updated: 11/27/2023, 2:40:08 AM
- + diff --git a/operation/nv17-upgrade.html b/operation/nv17-upgrade.html index d44242d30..a744b88a4 100644 --- a/operation/nv17-upgrade.html +++ b/operation/nv17-upgrade.html @@ -13,8 +13,8 @@ gtag('config', 'G-SMSDTMGLTV'); - - + +
Last Updated: 11/27/2023, 2:40:08 AM
- + diff --git a/operation/nv18-upgrade.html b/operation/nv18-upgrade.html index 3846429b8..f6be1c0e9 100644 --- a/operation/nv18-upgrade.html +++ b/operation/nv18-upgrade.html @@ -13,8 +13,8 @@ gtag('config', 'G-SMSDTMGLTV'); - - + +
Last Updated: 11/27/2023, 2:40:08 AM
- + diff --git a/operation/nv19-upgrade.html b/operation/nv19-upgrade.html index cea9b2d1e..cfcbb9773 100644 --- a/operation/nv19-upgrade.html +++ b/operation/nv19-upgrade.html @@ -13,8 +13,8 @@ gtag('config', 'G-SMSDTMGLTV'); - - + +
Last Updated: 11/27/2023, 2:40:08 AM
- + diff --git a/operation/nv21-upgrade.html b/operation/nv21-upgrade.html index e1e65c19f..90de67af7 100644 --- a/operation/nv21-upgrade.html +++ b/operation/nv21-upgrade.html @@ -13,8 +13,8 @@ gtag('config', 'G-SMSDTMGLTV'); - - + +
Last Updated: 11/27/2023, 2:39:32 AM

# sophon-gateway

Functions affected:

  • None

Dependency:

  • sophon-auth

Precautions:

  • When compiling, you need to first make dist-clean and then make

# sophon-messager

Affected functions:

  • None

Dependency:

  • venus
  • sophon-auth
  • sophon-gateway

Precautions:

  • After the upgrade, monitor whether the messages can be received normally and whether the messages can be on-chained normally.

# sophon-miner

Affect functions:

Dependency:

  • auth
  • venus
  • gateway

Precautions:

  • [Auth].[Token] in the configuration file must be configured, and the token must be created with admin permission from sophon-auth. It is recommended that one does not use the token from defaultLocalToken, one should create one manually.

# Droplet

Affected functions:

  • Support v2 version of storage deal protocol
  • Support offline computation of commP

Dependency:

  • auth
  • venus
  • gateway
  • messager

Precautions:

  • Monitor deals and retrievals

# venus-wallet

Affected functions:

  • None

Dependency:

  • gateway

Precautions:

  • After the upgrade, monitor whether the signature is normal and whether the message can be on-chained normally.

# damocles-manager

Dependency:

  • Sophon service

Precautions:

  • When compiling, you need to first make dist-clean and then make

# damocles-worker

Dependency:

  • damocles-manager

Precautions:

  • The new proof type SyntheticPoRep uses a new proof parameter file. If SyntheticPoRep is enabled, it is best to prepare new proof parameters in advance. Failing to do so may cause SyntheticPoRep deadlock.

Upgrade result verification steps:

  1. Check if program starts normally
  2. Check if Pre & prove messages are on-chained normally
  3. Check if block producing is normal
  4. Check if window post is normal
  5. Check if storage power grows normally
  6. Check if storage deal retrieval is normal
  7. Check if various gas, life cycle, and aggregation settings of the database are normal.

# Database changes

  1. Add id field to droplet storage_deals table ==> ALTER TABLE storage_deals ADD id varchar(128)
Last Updated: 11/27/2023, 2:40:08 AM
- + diff --git a/questions.html b/questions.html index 4f1090c0a..e9f50262a 100644 --- a/questions.html +++ b/questions.html @@ -13,8 +13,8 @@ gtag('config', 'G-SMSDTMGLTV'); - - + +
- +

# Have a question?

Filecoin.io (opens new window) - general information about the Filecoin network

Community Channels (opens new window) - links to Filecoin community chat and forum

Last Updated: 11/27/2023, 2:40:08 AM
+ diff --git a/zh/TODO.html b/zh/TODO.html index 2b2539052..50d28c3f7 100644 --- a/zh/TODO.html +++ b/zh/TODO.html @@ -13,8 +13,8 @@ gtag('config', 'G-SMSDTMGLTV'); - - + +
- +
  • [ ] market 和 cluster 归属到链服务部署和独立组件部署文档
  • [ ] .fil_withdraw_and_send.md.swp 文件删除
  • [ ] sealer 文档放到单独的目录
  • [ ] Troubleshooting-&-FAQ.md 用超链接方式管理 venus discussion
  • [ ] 移除没有价值或过时的文档

  • [ ] 在很多模块中重复的内容整合

  • [ ] 每个项目搬过来的内容使用超链接

  • + diff --git a/zh/about/index.html b/zh/about/index.html index 16c7ed64d..6267ca014 100644 --- a/zh/about/index.html +++ b/zh/about/index.html @@ -13,8 +13,8 @@ gtag('config', 'G-SMSDTMGLTV'); - - + +
    - +

    # 使命,愿景,价值观

    • ❗️使命:建设 Filecoin 基础设施和工具,支持生态繁荣发展
    • 🌏 愿景:人人都能参与 Filecoin 生态
    • ☯️ 价值观:开放并且去信任

    # 联系方式

    # 其他资源

    + diff --git a/zh/index.html b/zh/index.html index 299757a3c..17c15f140 100644 --- a/zh/index.html +++ b/zh/index.html @@ -13,8 +13,8 @@ gtag('config', 'G-SMSDTMGLTV'); - - + +

    分布式架构

    依照分布式系统的设计理念和原则,实现了一套快速扩展,高可用的分布式基础架构

    优化订单体验

    完善了一整套方便存储提供者接收真实存储订单,同时也方便存储客户发送存储订单的解决方案

    全新的算力服务

    安全,有韧性的算力维持服务;高效,灵活,可扩容的算力增长服务

    - + diff --git a/zh/intro/_Footer.html b/zh/intro/_Footer.html index 0cb1e3001..b3b720ad6 100644 --- a/zh/intro/_Footer.html +++ b/zh/intro/_Footer.html @@ -13,8 +13,8 @@ gtag('config', 'G-SMSDTMGLTV'); - - + +
    - +

    See something missing? Have tips to share? File an issue (opens new window), and we'll follow up as soon as possible. (If you have write permission in this repo, feel free to edit directly.)

    + diff --git a/zh/intro/contribute-doc.html b/zh/intro/contribute-doc.html index f41dd09d7..87ec761d2 100644 --- a/zh/intro/contribute-doc.html +++ b/zh/intro/contribute-doc.html @@ -13,8 +13,8 @@ gtag('config', 'G-SMSDTMGLTV'); - - + +
    - + diff --git a/zh/intro/damocles.html b/zh/intro/damocles.html index baf266250..16749ec99 100644 --- a/zh/intro/damocles.html +++ b/zh/intro/damocles.html @@ -13,8 +13,8 @@ gtag('config', 'G-SMSDTMGLTV'); - - + +
    - +

    damocles

    # 执剑人

    执剑人,原 Venus 算力服务,是一个Filecoin存储算力解决方案。请在 (opens new window)了解更多关于执剑人的信息。

    + diff --git a/zh/intro/droplet.html b/zh/intro/droplet.html index c171baa6e..b0ea7d0f3 100644 --- a/zh/intro/droplet.html +++ b/zh/intro/droplet.html @@ -13,8 +13,8 @@ gtag('config', 'G-SMSDTMGLTV'); - - + +
    - +

    droplet

    # 水滴

    水滴,原 Venus 订单服务,是一个Filecoin存储订单解决方案。请在 (opens new window)了解更多关于水滴的信息。

    + diff --git a/zh/intro/index.html b/zh/intro/index.html index 663f4d171..6d97c86a0 100644 --- a/zh/intro/index.html +++ b/zh/intro/index.html @@ -13,8 +13,8 @@ gtag('config', 'G-SMSDTMGLTV'); - - + +

    # 前言

    在同一条区块链上需要具有多个互操作的软件实现,每个实现都有自己的安全问题集,但是所有实现不尽相同,因此,启动具有多种实现方式的加密货币网络可降低发生灾难性错误的可能性,Venus 正是 Filecoin 的实现之一。

    Venus 代指 Filecoin 的通用实现之一,venus 则代指 Venus 的组件之一。Venus 致力于帮助中小存储提供者能够更加简单的加入到 Filecoin 生态网络建设中。

    目前 Venus 通过 venus、damocles、sophon-miner、venus-wallet、sophon-messager、sophon-auth、sophon-gateway 组件,已经实现了 Filecoin 分布式矿池的支持,未来,Venus 将持续完善自身,并共同推进开源的 Filecoin 开发与生态的发展。

    # 为什么我们要这样做

    2020 年 6 月,Protocol Lab 发起了关于由社区后续维护 go-filecoin 的 RFP,IPFSForce 随后申请并获得了维护权。10 月,go-filecoin 更名为 Venus,我们继续推进对 Venus 项目的维护工作。

    在重新保持维护之前,Venus 是一个严重缺乏维护的项目。协议和组件上,vm/mpool/chain/rpc 虽然都有了,但是全都存在不同程度的问题,我们用了三个多月的时间,逐渐修复很多协议层、代码层,、性能的问题,使得 Venus 完成了与 Lotus 的互操作,让使用 Venus 的节点可以正常的在网络上运行。后续我们又逐渐的让 Venus 支持了 Calibration、2k 网络。

    完成以上工作后,我们着手于 Venus 的开发方向。

    我们的设计是让 Venus 向矿池的发展角度去支持,最初的设计是从“如何扩展单一存储提供者”思考,这个方向存在理论上的可行性,但是最大的问题在于 Filecoin 独特的证明机制。因为 Filecoin 网络的存储提供者必须周期性的提交‘时空证明’,而为了生成证明,存储提供者必须读取一整个 partition 的数据,如果 sector 极其分散的分布到不同的地方,通过公网读取,则不是一个可执行的方案。

    后来我们通过数次的设计与修改,最终产生了现在的方案,就是分布式矿池。分布式矿池并非体现在单一存储提供者,而是将分布式的概念体现在多存储提供者的管理,这更像一个存储提供者联合体。

    Venus 分布式矿池在外部的体现和传统的分布式矿池是相似的。在存储资源上体现在地域分布性,只要有网络可以访问的地方,都可以使节点接入到 Venus 矿池;在出块的角度上,因为 Filecoin 按算力比例来计算出块机率,所以分散的计算和整体的计算的最终结果应该是相同:n1/p+ n2/p+n3/p......= (n1+n2+n3+.....)/p,这在算法的基础上提供了理论基础。

    在真实数据存储检索上,存储提供者可以通过 venus 统一入口接入网络或者自主接入。设计中,venus 会在获得存储提供者允许的条件下,按照数据的访问需求来选择合适的节点存储数据,使得数据更贴近真实的使用场景。

    1. 数据存储:支持组件共享,存储会逐渐迁移到 MySQL,通过一些高可用的方案保证 Venus 的元数据安全。
    2. 共享组件:支持高可用,保证服务的质量,减少存储提供者的时间成本与维护成本,这使得存储提供者能够更容易加入到矿池生态中。现在的挖矿活动专业性很强,而实现 Filecoin 利用闲散存储资源的梦想则不可避免需要降低参与门槛,才能吸引更多的参与者进来。
    3. 聚集出块权:存储提供者能够将资源整合在一起,互相帮助打包消息,这样可以避免小存储提供者的消息无人打包的困境。
    4. 提升 Filecoin 网络的吞吐量:如果同一高度存在多个区块,venus-miner 能够保证每个区块中的消息都是不同的,而如果各自出块,消息则很可能大量重复。
    5. 提升消息的稳定性:挖矿活动中的消息可以和节点分开,由 venus-messager 来管理,venus-messager 会跟踪链的最新状态来设置一个相对合理的预估的 gas 参数,同时也支持用户自己设置一个消息参数。
    6. 提升数据访问速度:目前的 Filecoin 网络更多的还是存储,但是作为一个存储服务,最终需要对外输出检索服务才能实现根本价值。如果有足够多的存储提供者使用 Venus,那么 Venus 在真实数据的处理上就有更多的可能,比如数据的分布,Venus 可以将数据分布到距离客户最近的一些存储提供者节点,这样可以提高客户的访问速度;比如一些公有数据可以把这些数据尽可能的分散到更多的节点上,保障在任意位置的访问都有效,这可以大大提升 IPFS 网络的效能,进一步实现 IPFS Web3.0 的梦想。

    # venus 如何工作

    Venus 是 Filecoin 的通用实现之一,致力于分布式的集群架构及更简洁的职责划分。

    Venus 分布式存储池在外部的呈现和传统的分布式矿池是相似的。在存储资源上体现在地域分布性,只要有网络可以访问的地方,都可以使节点接入到 Venus 矿池。

    # venus

    venus (opens new window) 类似 lotus-daemon,用于实现全节点。venus 接入 Filecoin 区块链网络,为 Venus 提供数据支持。可以把 venus 当作普通节点来使用,它具有区块链节点必备的所有功能,如 chain、mpool、wallet。venus 的接口和 lotus 基本兼容(如果存在不兼容的接口,欢迎发布 Issue),你可以在 venus 上创建私钥、查询资产、转账等等。在典型部署环境里,venus 仅仅提供基础链上数据查询服务,本身不保存私钥。slashfilter 所需要的区块数据,存储到数据库里,节点本身是无状态的,这样通过 nginx 反向代理后就可以实现 venus 节点的高可用。

    venus 节点自身有一些区别与 lotus 的地方:

    1. 创建区块的接口中支持了外部签名(后续会向 Lotus 提 PR)
    2. 消息选择的接口支持同时选择多个批次的消息,用于多存储提供者出块时选择消息。
    3. 支持 sophon-auth 的的中心访问授权

    因此如果对 Venus/Lotus 混合部署感兴趣,需要使用我们维护的 lotus 兼容 venus 的项目 (opens new window),可自行 pick 代码编译。

    # sophon-auth

    sophon-auth (opens new window) (原 venus-auth) 是用于授权的组件,在典型的部署环境下 sophon-auth 用于给 venus、sophon-miner、sophon-messager 提供授权服务,每个本地的节点访问共享组件都要经过授权,后续会在这个基础上进行功能扩充,做一些安全方面的控制,比如访问限流、黑名单。

    # sophon-miner

    sophon-miner (opens new window) (原 venus-miner) 的作用是聚集出块权,可以为接入链服务的多个集群执行出块逻辑。sophon-miner 有以下特点:

    1. 分离数据:由于生成区块的过程需要访问数据,并且存储提供者的 sealer 可能是异构的,但目前多数存储提供者会使用自己定制的代码,那么要实现联合挖矿就存在如何访问到这些数据的问题。通过隔断 sophon-miner 对存储组织方式的依赖,通过让证明在存储提供者侧完成,无论存储提供者的 sealer 如何组织存储,只要实现了ComputeProof接口,sophon-miner 就可以通过这个接口来生成证明。
    2. 分离私钥:计算随机数及签名区块的过程中,所有涉及到私钥的操作都通过远程钱包的方式来访问,这样既无泄漏集群私钥,又能保证出块逻辑正常运行。
    3. 提高网络 TPS:当 sophon-miner 负责的存储提供者在一个周期获得多个(>1)出块权,sophon-miner 会尽量从消息池中选择不同的消息进行打包,这样一定程度上可以提升消息上链的速度,同时使该出块可能获得更多的小费奖励(Premium)。
    4. 收益稳定性:多存储提供者联合挖矿配套奖励池分配系统可以让小存储提供者每天都能获得区块奖励,也可以减少某些存储提供者偶发性出块错误造成的损失。

    # sophon-messager

    sophon-messager (opens new window) (原 venus-messager) 组件的目标是更好的帮助消息上链,并能够灵活的控制消息上链的时机,减少 gas 消耗,流量控制等。其中包括远程钱包管理、地址管理、消息管理。

    1. 地址管理:主要是管理 nonce 值,保证 nonce 值能够按照正确的顺序分配。
    2. 消息管理:消息管理分成三个部分,分别是“消息接收和保存”、“消息选择及推送”“消息上链状态的追踪”。
    3. GasFee 管理:可以按地址分别设置 gasLimit 的系数和 maxFee。

    从功能性上来说:

    1. 远程钱包支持:一个 sophon-messager 支持多个钱包,分别管理自己的 message。
    2. 支持 sqlite 本地存储和 mysql 远程存储:存储更加安全稳定。
    3. 动态填充:根据 gas 和 push 策略,在链上发送消息时,需要填写 gas 相关参数和 nonce,以确保 gas 估算和其他设置有效。
    4. 维护消息状态:包括消息是否被链接和替换,保存执行结果。
    5. 多点消息传递(通过 Mpool API 推送到多个节点):确保消息在网络上传播。
    6. 灵活配置:包括 gas 估算、消息推送策略等。

    # venus-wallet

    venus-wallet (opens new window) 是一个远程钱包,协议上能够同时支持 lotus 和 venus。在典型的部署环境中,这个组件由存储提供者部署在本地,并通过一定的策略配置保证资产的安全。venus-wallet 有以下功能特点:

    1. 私钥管理模块:目前支持非对称算法 BLS 和 SECP 的私钥管理,能够生成随机私钥,并运用 aes128 对私钥进行对称加密存储,同时支持私钥对数据进行签名。
    2. 签名验证:每种签名类型都有对应验证策略,保证了签名方不能在签名类型上欺骗钱包。
    3. 签名策略模块:针对 Filecoin 的 Lotus 及 Venus 实现,对存在的数 10 种数据结构以及 message 数据结构中的 60 余种签名类型进行统一管理,按需配置各种组合方式绑定私钥签名规则,而后可以将数种不同的私钥签名规则组成一个整体,授权于外部组件使用。

    # droplet

    droplet (opens new window) (原 venus-market) 是 Venus 系统中的市场组件。其愿景是打造 Filecoin 网络中分布式的存储和检索市场。目前已经实现了兼容 Lotus 协议的订单存储和检索,逐渐向着 droplet 服务多个集群的接单,对外提供统一的检索服务方向发展。可参见droplet 设计与路线图 (opens new window)

    # sophon-gateway

    sophon-gateway (opens new window) (原 venus-gateway) 是独立组件与链服务层的桥梁,用于简化部署并降低存储提供者访问的复杂性、增加存储提供者访问的安全性。独立组件启动时将其服务接口注册到 sophon-gateway,链服务组件需要时通过 sophon-gateway 请求对应集群的服务接口。

    • 存储提供者不需要外部 IP 和曝露钱包服务;
    • 存储池配置 SSL 证书后,集群与存储池的连接是安全的;
    • 存储提供者可以简单地将多个客户端(钱包/证明)注册到存储池以获得高可用性。

    sophon-gateway

    # damocles

    damocles (opens new window) (原 venus-cluster) 是 Venus 推出的新版本扇区封装、算力维持组件,相对于原本的 venus-sealer,在任务调度、最大化系统资源方面有一定优势,其面向的用户受众也将有所不同。

    - + diff --git a/zh/intro/one-pager.html b/zh/intro/one-pager.html index e23311504..51f50c84c 100644 --- a/zh/intro/one-pager.html +++ b/zh/intro/one-pager.html @@ -13,8 +13,8 @@ gtag('config', 'G-SMSDTMGLTV'); - - + +
    - + diff --git a/zh/intro/sophon.html b/zh/intro/sophon.html index f69c075a1..6fcc24dd0 100644 --- a/zh/intro/sophon.html +++ b/zh/intro/sophon.html @@ -13,8 +13,8 @@ gtag('config', 'G-SMSDTMGLTV'); - - + +
    - +

    sophon

    # 智子

    智子,原 Venus 链服务,是一个 Filecoin 超级节点解决方案。请在 (opens new window)了解更多关于智子的信息。

    + diff --git a/zh/operation/Efficiency_of_sealing.html b/zh/operation/Efficiency_of_sealing.html index 20f74e788..29a6ed2f2 100644 --- a/zh/operation/Efficiency_of_sealing.html +++ b/zh/operation/Efficiency_of_sealing.html @@ -13,8 +13,8 @@ gtag('config', 'G-SMSDTMGLTV'); - - + +
    - +

    如遇到无法彻底删除请查询:顽固扇区如何删除 (opens new window)

    + diff --git a/zh/operation/Independent_com_access_analysis.html b/zh/operation/Independent_com_access_analysis.html index 4fc50fbe1..495a1cb57 100644 --- a/zh/operation/Independent_com_access_analysis.html +++ b/zh/operation/Independent_com_access_analysis.html @@ -13,8 +13,8 @@ gtag('config', 'G-SMSDTMGLTV'); - - + + - +
    + diff --git a/zh/operation/Sealing_deploy_plan_1.html b/zh/operation/Sealing_deploy_plan_1.html index 9c299a27f..7beb3ac53 100644 --- a/zh/operation/Sealing_deploy_plan_1.html +++ b/zh/operation/Sealing_deploy_plan_1.html @@ -13,8 +13,8 @@ gtag('config', 'G-SMSDTMGLTV'); - - + +
    - +   ./venus-sealer sectors pledge 发送一个密封任务,通常写一个定时脚本或系统事务,每隔一段时间发送一个 sector 任务;配置文件 MaxSealingSectors 控制同时进行的 sector 上限数。
    + diff --git a/zh/operation/Sealing_deploy_plan_2.html b/zh/operation/Sealing_deploy_plan_2.html index 9653daf88..001b1f476 100644 --- a/zh/operation/Sealing_deploy_plan_2.html +++ b/zh/operation/Sealing_deploy_plan_2.html @@ -13,8 +13,8 @@ gtag('config', 'G-SMSDTMGLTV'); - - + + - +

    PID: 进程 ID 号;

    每次 worker 重启后 PID 会变化,需要更新文件。

    /sys/fs/cgroup/cpuset是系统目录,worker是自己创建的.

    + diff --git a/zh/operation/System_monitor_of_Zabbix.html b/zh/operation/System_monitor_of_Zabbix.html index ddd317813..24b9e7911 100644 --- a/zh/operation/System_monitor_of_Zabbix.html +++ b/zh/operation/System_monitor_of_Zabbix.html @@ -13,8 +13,8 @@ gtag('config', 'G-SMSDTMGLTV'); - - + +
    + diff --git a/zh/operation/_Footer.html b/zh/operation/_Footer.html index 70820470c..d7809b5a2 100644 --- a/zh/operation/_Footer.html +++ b/zh/operation/_Footer.html @@ -13,8 +13,8 @@ gtag('config', 'G-SMSDTMGLTV'); - - + +
    - +

    See something missing? Have tips to share? File an issue (opens new window), and we'll follow up as soon as possible. (If you have write permission in this repo, feel free to edit directly.)

    + diff --git a/zh/operation/example-single-box.html b/zh/operation/example-single-box.html index d0b4a71f6..657415736 100644 --- a/zh/operation/example-single-box.html +++ b/zh/operation/example-single-box.html @@ -13,8 +13,8 @@ gtag('config', 'G-SMSDTMGLTV'); - - + +
    - +

    # venus 集群日增算力 1T 机器选型方案

    # 机器配置

    资源 配置
    CPU 3970X * 1 (32c)
    内存 512G
    硬盘 3T/SSD
    网卡 千兆
    系统盘 500G
    显卡 3080 * 1

    台数:1 台

    # 任务配比

    任务分为 AP,P1,P2,Commit 阶段

    运行方式 核数限制 耗时 (分钟) 内存消耗 (G) 效率 (个/小时) 日产量 (T)
    P1 * 5 20 220 376 1.3636 1.0227
    P2,AP,Commit 12 10 120 3 1.125

    关于限核,配置执行任务类型,并发任务数等请参考 venus-docs 项目中相关文档。

    + diff --git a/zh/operation/index.html b/zh/operation/index.html index 9d07961ee..5eaa8950b 100644 --- a/zh/operation/index.html +++ b/zh/operation/index.html @@ -13,8 +13,8 @@ gtag('config', 'G-SMSDTMGLTV'); - - + +

    # 部署Venus解决方案

    Venus泛指一系列与filecoin协议稳定/高效互动的软件产品。Venus的,目标群体大致分为4类。SP存储提供者,SC存储客户,生态合作伙伴,以及去中心化应用DappVenus解决方案当前被广泛应用于SPSC的场景中。

    # 部署

    经过Venus在 2022 年底的品牌重塑 (opens new window)之后,Venus拆分出 3 个产品,分别是智子 (opens new window)执剑人 (opens new window)以及水滴 (opens new window)。关于各产品的具体部署流程,请参见各产品的文档。

    # 架构

    - + diff --git a/zh/operation/lotus-vs-venus.html b/zh/operation/lotus-vs-venus.html index 9697d0482..47513d218 100644 --- a/zh/operation/lotus-vs-venus.html +++ b/zh/operation/lotus-vs-venus.html @@ -13,8 +13,8 @@ gtag('config', 'G-SMSDTMGLTV'); - - + +
    - +

    # 从 Lotus 来的命令

    很多日常的命令包括但不限于创建worker/controler地址 (opens new window),设置不同的配置 (opens new window),或者修改存储路径 (opens new window)等等,都同时适用于LotusVenus。节点运维工程师可以按照 Lotus 文档中的步骤来操作。如果遇到任何问题,欢迎到#fil-venus-cn (opens new window)来提出问题。

    + diff --git a/zh/operation/migrate_market_v1_to_v2.html b/zh/operation/migrate_market_v1_to_v2.html index f431a39f8..cd5ee2fe7 100644 --- a/zh/operation/migrate_market_v1_to_v2.html +++ b/zh/operation/migrate_market_v1_to_v2.html @@ -13,8 +13,8 @@ gtag('config', 'G-SMSDTMGLTV'); - - + +
    - + diff --git a/zh/operation/nv15-upgrade.html b/zh/operation/nv15-upgrade.html index 5e6d28086..48c6aa3af 100644 --- a/zh/operation/nv15-upgrade.html +++ b/zh/operation/nv15-upgrade.html @@ -13,8 +13,8 @@ gtag('config', 'G-SMSDTMGLTV'); - - + +
    - + diff --git a/zh/operation/nv16-upgrade.html b/zh/operation/nv16-upgrade.html index c93e8ba03..5cf6fda8f 100644 --- a/zh/operation/nv16-upgrade.html +++ b/zh/operation/nv16-upgrade.html @@ -13,8 +13,8 @@ gtag('config', 'G-SMSDTMGLTV'); - - + +
    - + diff --git a/zh/operation/nv17-upgrade.html b/zh/operation/nv17-upgrade.html index 78a0f75fe..897f8213d 100644 --- a/zh/operation/nv17-upgrade.html +++ b/zh/operation/nv17-upgrade.html @@ -13,8 +13,8 @@ gtag('config', 'G-SMSDTMGLTV'); - - + +
    - + diff --git a/zh/operation/nv18-upgrade.html b/zh/operation/nv18-upgrade.html index 4c1c64fdd..ec567ea09 100644 --- a/zh/operation/nv18-upgrade.html +++ b/zh/operation/nv18-upgrade.html @@ -13,8 +13,8 @@ gtag('config', 'G-SMSDTMGLTV'); - - + +
    - + diff --git a/zh/operation/nv19-upgrade.html b/zh/operation/nv19-upgrade.html index 2bf50c51f..dc51a700c 100644 --- a/zh/operation/nv19-upgrade.html +++ b/zh/operation/nv19-upgrade.html @@ -13,8 +13,8 @@ gtag('config', 'G-SMSDTMGLTV'); - - + +
    - + diff --git a/zh/operation/nv21-upgrade.html b/zh/operation/nv21-upgrade.html index 5f8284133..4f546a041 100644 --- a/zh/operation/nv21-upgrade.html +++ b/zh/operation/nv21-upgrade.html @@ -13,8 +13,8 @@ gtag('config', 'G-SMSDTMGLTV'); - - + +
    - + diff --git a/zh/operation/prometheus-instruction.html b/zh/operation/prometheus-instruction.html index 57ef06fee..3b2c5c1e1 100644 --- a/zh/operation/prometheus-instruction.html +++ b/zh/operation/prometheus-instruction.html @@ -13,8 +13,8 @@ gtag('config', 'G-SMSDTMGLTV'); - - + +
    - +

    使用http://localhost:9090/targets, 可查询组件的指标。

    + diff --git a/zh/operation/troubleshoot-consensus-fault.html b/zh/operation/troubleshoot-consensus-fault.html index a1228b6db..c2d85dae4 100644 --- a/zh/operation/troubleshoot-consensus-fault.html +++ b/zh/operation/troubleshoot-consensus-fault.html @@ -13,8 +13,8 @@ gtag('config', 'G-SMSDTMGLTV'); - - + + - +

    程序会打印出不同的 execution-trace 的消息,以及不匹配的调用堆栈,可以方便快速定位问题。

    +