{"id":340716,"date":"2022-11-03T09:00:58","date_gmt":"2022-11-03T09:00:58","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=340716"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=340716","title":{"rendered":"<span>\u041e\u0431\u043b\u0430\u0447\u043d\u0430\u044f \u043a\u0443\u0445\u043d\u044f: \u0440\u0435\u0446\u0435\u043f\u0442 \u043f\u0440\u0438\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0442\u0435\u0441\u0442\u043e\u0432 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0434\u0438\u0441\u043a\u043e\u0432\u043e\u0439 \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0441\u0435\u0440\u0432\u0435\u0440\u0430<\/span>"},"content":{"rendered":"<div><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p><em>\u0425\u0430\u0431\u0440, \u043f\u0440\u0438\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e! \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u0441 \u0432\u0430\u043c\u0438 \u0414\u043c\u0438\u0442\u0440\u0438\u0439 \u041c\u0438\u0445\u0430\u0439\u043b\u043e\u0432, \u0418\u0422-\u0438\u043d\u0436\u0435\u043d\u0435\u0440 Cloud4Y, \u0438 \u0432 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u043f\u043e\u0434\u0435\u043b\u044e\u0441\u044c \u0441 \u0432\u0430\u043c\u0438 \u043e\u043f\u044b\u0442\u043e\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u0434\u0438\u0441\u043a\u043e\u0432. \u0420\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u0438 \u043f\u043e\u043a\u0430\u0436\u0443, \u0447\u0442\u043e \u0442\u0443\u0442 \u0438 \u043a\u0430\u043a, \u0430 \u043f\u043e\u0449\u0443\u043f\u0430\u0442\u044c \u0432\u0441\u0451 \u0432\u0436\u0438\u0432\u0443\u044e \u0432\u044b \u0441\u043c\u043e\u0436\u0435\u0442\u0435, \u0432\u0437\u044f\u0432 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 \u043f\u0430\u043f\u043a\u0438, <\/em><a href=\"https:\/\/nc.cloud4y.ru\/index.php\/s\/x36KRgX5ZjS8MbN\"><em>\u043a\u043e\u0442\u043e\u0440\u0443\u044e \u044f \u043f\u043e\u043b\u043e\u0436\u0438\u043b \u0432 Nextcloud<\/em><\/a><em>. <\/em><\/p>\n<h4>\u0417\u0430\u0447\u0435\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c?<\/h4>\n<p>\u0412\u043e-\u043f\u0435\u0440\u0432\u044b\u0445, \u044d\u0442\u043e \u043e\u0434\u043d\u0430 \u0438\u0437 \u0447\u0430\u0441\u0442\u044b\u0445 \u0442\u0435\u043c \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0439 \u0432 \u0442\u0435\u0445\u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443. \u0418\u043d\u043e\u0433\u0434\u0430 \u043f\u0440\u0438\u0447\u0438\u043d\u0430 \u043b\u0435\u0436\u0438\u0442 \u043d\u0430 \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u0438: \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043a\u043b\u0438\u0435\u043d\u0442\u044b \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u044e\u0442 \u0447\u0442\u043e-\u043d\u0438\u0431\u0443\u0434\u044c \u0438\u0437 \u0441\u0435\u0440\u0438\u0438 CrystalMark \u0438 \u043f\u0440\u0438\u0441\u044b\u043b\u0430\u044e\u0442 \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442\u044b \u0437\u0430\u043c\u0435\u0440\u043e\u0432, \u0441\u043e\u043f\u0440\u043e\u0432\u043e\u0436\u0434\u0430\u044f \u0438\u0445 \u0441\u0432\u043e\u0435\u0439 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0446\u0438\u0435\u0439. \u0418\u043d\u044b\u0435 \u043e\u0431\u0440\u0430\u0449\u0430\u044e\u0442\u0441\u044f \u0441 \u043e\u0431\u0449\u0435\u0439 \u0436\u0430\u043b\u043e\u0431\u043e\u0439 \u043d\u0430 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u0443\u044e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0412\u041c \u0432 \u0446\u0435\u043b\u043e\u043c \u0438\u043b\u0438 \u0441\u0432\u043e\u0435\u0433\u043e \u041f\u041e\/\u0411\u0414. \u0412 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u0440\u0430\u0437\u0443\u043c\u0435\u0435\u0442\u0441\u044f, \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0431\u043e\u043b\u0435\u0435 \u0433\u043b\u0443\u0431\u043e\u043a\u0430\u044f \u0434\u0438\u0430\u0433\u043d\u043e\u0441\u0442\u0438\u043a\u0430. \u0412\u043e-\u0432\u0442\u043e\u0440\u044b\u0445, \u0441\u0430\u043c\u0438\u043c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e :). \u0422\u0430\u043a \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u043d\u043e\u0432\u044b\u0435 \u0438 \u0442\u0435\u043a\u0443\u0449\u0438\u0435 \u0442\u043e\u043c\u0430 \u0421\u0425\u0414 \u0438 \u0441\u0440\u0430\u0432\u043d\u0438\u0442\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u0431\u043e\u0439. \u041a\u0430\u043a \u0431\u044b \u0442\u0430\u043c \u043d\u0438 \u0431\u044b\u043b\u043e, \u043c\u0435\u0442\u043e\u0434\u0438\u043a\u0430 \u043f\u043b\u044e\u0441-\u043c\u0438\u043d\u0443\u0441 \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u0432 \u043e\u0431\u043e\u0438\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445.<\/p>\n<h4>\u0427\u0442\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f?<\/h4>\n<p>\u041c\u0435\u0442\u043e\u0434\u0438\u043a\u0430 \u043e\u0446\u0435\u043d\u0438\u0432\u0430\u0435\u0442 \u0434\u0438\u0441\u043a\u043e\u0432\u0443\u044e \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0438\u043c\u0435\u043d\u043d\u043e \u0432 \u0433\u043e\u0441\u0442\u0435\u0432\u043e\u0439 \u041e\u0421 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u044b. \u0415\u0441\u043b\u0438 \u0432 \u0441\u0430\u043c\u043e\u0439 \u041e\u0421 \u0432\u0441\u0451 \u0432 \u043f\u043e\u0440\u044f\u0434\u043a\u0435, \u044d\u0442\u043e \u043a\u043e\u0441\u0432\u0435\u043d\u043d\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u0446\u0435\u043d\u0438\u0442\u044c \u0441 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0439 \u0434\u043b\u044f \u0434\u0438\u0441\u043a\u0430 \u043f\u0440\u043e\u0444\u0438\u043b\u044c \u043d\u0430 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0435 \u043a\u0430\u043a \u0437\u0430\u044f\u0432\u043b\u0435\u043d\u043d\u044b\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c, \u0442\u0430\u043a \u0438 \u0441\u0432\u043e\u0438\u043c \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f\u043c. \u0418 \u043c\u043e\u0436\u043d\u043e \u043b\u0438\u0431\u043e \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u041f\u041e\/\u041e\u0421, \u043b\u0438\u0431\u043e \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u043d\u0430 \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0434\u0438\u0441\u043a\u043e\u0432\u044b\u0439 \u043f\u0440\u043e\u0444\u0438\u043b\u044c.<\/p>\n<h4>\u041a\u0430\u043a \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f?<\/h4>\n<p>\u0418\u0434\u0435\u044f \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0441\u0435\u0440\u0438\u0438 \u0437\u0430\u043c\u0435\u0440\u043e\u0432 \u0443\u0442\u0438\u043b\u0438\u0442\u043e\u0439 <code>iostat<\/code> \u0432 \u0442\u0435\u0447\u0435\u043d\u0438\u0438 \u0432\u0441\u0435\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0441 \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u043e\u043c \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u0439 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0432 \u0432\u0438\u0434\u0435 <code>fio<\/code>. \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u0441\u0440\u0430\u0432\u043d\u0438\u0442\u044c \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u0431\u043e\u0439 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u0438\u044f &#171;\u0445\u043e\u043b\u043e\u0441\u0442\u043e\u0433\u043e \u0445\u043e\u0434\u0430&#187; \u0438 \u043f\u043e\u0434 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u043e\u0439. \u041e\u0447\u0435\u043d\u044c \u0443\u0434\u043e\u0431\u043d\u043e, \u0447\u0442\u043e <strong>iostat<\/strong> \u0443\u043c\u0435\u0435\u0442 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 json. \u042d\u0442\u043e \u0438\u0437\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u043e\u0442 \u043a\u043e\u0441\u0442\u044b\u043b\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043e\u043a \u0434\u043b\u044f \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430 \u043a\u043e\u043d\u0441\u043e\u043b\u044c\u043d\u043e\u0433\u043e \u0432\u044b\u0432\u043e\u0434\u0430. \u041f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0435 json-\u0444\u0430\u0439\u043b\u044b \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a Pandas \u0438 MatPlotLib: \u0432 JupyterLab \u0441\u0442\u0440\u043e\u044f\u0442\u0441\u044f \u0433\u0440\u0430\u0444\u0438\u043a\u0438 \u0434\u043b\u044f \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u0433\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430.<\/p>\n<p>\u0420\u0430\u0431\u043e\u0442\u0430 \u0443\u0442\u0438\u043b\u0438\u0442 \u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0435 \u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0432 \u0432\u0438\u0434\u0435 json \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u043b\u0438 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0434\u0438\u0430\u0433\u043d\u043e\u0441\u0442\u0438\u043a\u0438. \u0421 \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b, \u044d\u0442\u043e \u0441\u0443\u0436\u0430\u0435\u0442 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u043c\u043e\u0441\u0442\u044c \u043c\u0435\u0442\u043e\u0434\u0438\u043a\u0438 \u0434\u043e \u043a\u0440\u0443\u0433\u0430 <code>*nix<\/code>-\u0441\u0438\u0441\u0442\u0435\u043c.<\/p>\n<h2>\u041f\u0440\u0430\u043a\u0442\u0438\u043a\u0430 \u21161<\/h2>\n<p>\u0422\u0435\u0441\u0442\u043e\u0432\u044b\u0439 \u0441\u0442\u0435\u043d\u0434 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u0412\u041c \u0441 <code>Ubuntu 20.04<\/code> \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0433\u043e\u0441\u0442\u0435\u0432\u043e\u0439 \u041e\u0421, CPU 2 \u044f\u0434\u0440\u0430, RAM 4 \u0413\u0411.<\/p>\n<p>Cloud4Y \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0434\u0438\u0441\u043a\u043e\u0432\u044b\u0445 \u043f\u043e\u043b\u0438\u0442\u0438\u043a \u043d\u0430 \u0432\u044b\u0431\u043e\u0440, \u043c\u044b \u043f\u043e\u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0443\u0435\u043c\u0441\u044f \u043d\u0430 \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u043e\u0439 \u0438\u0437 \u043d\u0438\u0445, <code>vcd-type-med<\/code>. \u0412 \u043a\u043e\u043d\u0444\u0438\u0433\u0435 <code>runfio.cfg<\/code> (\u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0432 \u041f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u043a \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435) \u043e\u0442\u0440\u0430\u0436\u0435\u043d\u044b \u0435\u0451 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0438\u0437 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0433\u043e \u0434\u043e\u0433\u043e\u0432\u043e\u0440\u0430:<\/p>\n<ul>\n<li>\n<p>\u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f, \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u0434\u0438\u0441\u043a\u0430, \u0434\u043e 1000 iops \u043d\u0430 \u0434\u0438\u0441\u043a \u0441 latency \u043c\u0435\u043d\u0435\u0435 30 \u043c\u0441 \u043f\u0440\u0438 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0435 <\/p>\n<\/li>\n<li>\n<p>70% \u043d\u0430 \u0447\u0442\u0435\u043d\u0438\u0435 <\/p>\n<\/li>\n<li>\n<p>30% \u043d\u0430 \u0437\u0430\u043f\u0438\u0441\u044c <\/p>\n<\/li>\n<li>\n<p>\u0431\u043b\u043e\u043a 4 \u041a\u0411 <\/p>\n<\/li>\n<li>\n<p>\u043f\u0440\u0438 50% random&#8217;\u0435 <\/p>\n<\/li>\n<\/ul>\n<p>\u0422. \u0435. \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u043c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0435 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0437\u0430\u044f\u0432\u043b\u0435\u043d\u043d\u044b\u043c. \u041f\u043e\u0441\u043b\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0442\u0435\u0441\u0442\u043e\u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/aad\/e8a\/d7c\/aade8ad7c7b977be6ddc7e1fcdd5cf40.png\" width=\"2152\" height=\"285\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/aad\/e8a\/d7c\/aade8ad7c7b977be6ddc7e1fcdd5cf40.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u041d\u0430 \u0433\u0440\u0430\u0444\u0438\u043a\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u044b \u0432\u0441\u0435 \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u0435 \u043c\u0435\u0442\u0440\u0438\u043a\u0438, \u0441\u043e\u0431\u0440\u0430\u043d\u043d\u044b\u0435 \u0432 \u0433\u043e\u0441\u0442\u0435\u0432\u043e\u0439 \u041e\u0421. \u0422\u0435\u0441\u0442\u043e\u0432\u0430\u044f \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u043f\u043e\u0445\u043e\u0436\u0430 \u043d\u0430 \u0434\u0432\u0430 &#171;\u0432\u0435\u0440\u0431\u043b\u044e\u0436\u044c\u0438\u0445 \u0433\u043e\u0440\u0431\u0430&#187; \u0438 \u0441\u043e\u0441\u0442\u0430\u0432\u0438\u043b\u0430 700 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u043d\u0430 \u0447\u0442\u0435\u043d\u0438\u0435 \u0438 300 \u043d\u0430 \u0437\u0430\u043f\u0438\u0441\u044c \u043f\u0440\u0438 latency \u043e\u043a\u043e\u043b\u043e 1 \u043c\u0441, \u0447\u0442\u043e \u0435\u0449\u0451 \u043e\u0447\u0435\u043d\u044c \u0434\u0430\u043b\u0435\u043a\u043e \u0434\u043e \u043e\u0433\u043e\u0432\u043e\u0440\u0451\u043d\u043d\u044b\u0445 30 \u043c\u0441. \u0423\u0442\u0438\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0434\u0438\u0441\u043a\u0430 \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u043e \u0441\u043e\u0433\u043b\u0430\u0441\u0443\u0435\u0442\u0441\u044f \u0441 \u0442\u0435\u0441\u0442\u0430\u043c\u0438 \u2014 100% \u043f\u0440\u0438 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0435 \u0438 \u043e\u043a\u043e\u043b\u043e 0% \u0431\u0435\u0437 \u043d\u0435\u0451. \u0414\u043b\u0438\u043d\u0430 \u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u043f\u043e\u0434 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u043e\u0439 \u0431\u044b\u043b\u0430 \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 5 \u041a\u0411.<\/p>\n<p>\u0422\u0435\u0441\u0442 \u043f\u043e\u0434 100% \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u043e\u0439 \u043f\u0440\u043e\u0439\u0434\u0451\u043d. \u0418\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e, \u0430 \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0434\u0451\u0442 \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u0433\u0440\u0443\u0437\u043a\u0435 \u0438 \u043f\u043e\u0447\u0435\u043c\u0443?<\/p>\n<h2>\u041f\u0440\u0430\u043a\u0442\u0438\u043a\u0430 \u21162<\/h2>\n<details class=\"spoiler\">\n<summary>\u041f\u043e\u0434 \u0441\u043f\u043e\u0439\u043b\u0435\u0440\u043e\u043c \u0433\u0440\u0430\u0444\u0438\u043a\u0438 \u0434\u043b\u044f \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0432 50%, 100%, 200%, 500% \u0438 1000% \u043e\u0442 \u043d\u043e\u043c\u0438\u043d\u0430\u043b\u0430 <\/summary>\n<div class=\"spoiler__content\">\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/b03\/31e\/01e\/b0331e01ec1acee8797e68e79e18e230.png\" alt=\"fio rate 50%  graphs\" title=\"fio rate 50%  graphs\" width=\"2152\" height=\"285\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b03\/31e\/01e\/b0331e01ec1acee8797e68e79e18e230.png\"\/><figcaption>fio rate 50%  graphs<\/figcaption><\/figure>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/de8\/c56\/cc7\/de8c56cc77a5f9d82d82a2bfa93d3030.png\" alt=\"fio rate 100% graphs\" title=\"fio rate 100% graphs\" width=\"2152\" height=\"285\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/de8\/c56\/cc7\/de8c56cc77a5f9d82d82a2bfa93d3030.png\"\/><figcaption>fio rate 100% graphs<\/figcaption><\/figure>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/ba3\/664\/952\/ba36649528fe1cee7cd004938bbafd95.png\" alt=\"fio rate 200% graphs\" title=\"fio rate 200% graphs\" width=\"2152\" height=\"285\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/ba3\/664\/952\/ba36649528fe1cee7cd004938bbafd95.png\"\/><figcaption>fio rate 200% graphs<\/figcaption><\/figure>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/014\/940\/5fd\/0149405fd6330d3b40604880f8dbffe0.png\" alt=\"fio rate 500% graphs\" title=\"fio rate 500% graphs\" width=\"2152\" height=\"285\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/014\/940\/5fd\/0149405fd6330d3b40604880f8dbffe0.png\"\/><figcaption>fio rate 500% graphs<\/figcaption><\/figure>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/21d\/95a\/ea6\/21d95aea6450a210c77f0e4566f62e13.png\" alt=\"fio rate 1000% graphs\" title=\"fio rate 1000% graphs\" width=\"2152\" height=\"285\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/21d\/95a\/ea6\/21d95aea6450a210c77f0e4566f62e13.png\"\/><figcaption>fio rate 1000% graphs<\/figcaption><\/figure>\n<\/p>\n<\/div>\n<\/details>\n<blockquote>\n<p>x10 \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 1000% \u043e\u0442 \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u043e\u0439 \u043d\u043e\u043c\u0438\u043d\u0430\u043b\u0430<\/p>\n<p>\u0442.\u0435. <strong>fio<\/strong> \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043b\u0430\u0441\u044c \u0441 \u043a\u043e\u043d\u0444\u0438\u0433\u043e\u043c <code>rate_iops=7000,3000,<\/code> \u0432\u043c\u0435\u0441\u0442\u043e \u043e\u0431\u044b\u0447\u043d\u044b\u0445 <code>700,300,<\/code><\/p>\n<\/blockquote>\n<p>\u041f\u043e\u043b\u043e\u0432\u0438\u043d\u043d\u0430\u044f \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u043d\u0438\u0447\u0435\u043c \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0438\u0430\u043b\u044c\u043d\u043e \u043d\u0435 \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0442 \u043f\u043e\u043b\u043d\u043e\u0439, \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0435 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u0433\u0440\u0443\u0437\u043a\u0435. \u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u0442\u0440\u0438 \u0433\u0440\u0430\u0444\u0438\u043a\u0430 \u043f\u043e \u0441\u0443\u0442\u0438 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b. \u0412\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u0443\u0442\u0438\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0434\u0438\u0441\u043a\u0430 \u0432 \u043c\u043e\u043c\u0435\u043d\u0442\u044b \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0442\u0430\u043a\u0436\u0435 \u0434\u043e\u0441\u0442\u0438\u0433\u0430\u0435\u0442 100%, \u043a\u0430\u043a \u0438 \u0440\u0430\u043d\u0435\u0435. IOPS&#8217;\u044b \u043f\u043e\u0434\u0440\u043e\u0441\u043b\u0438 \u043d\u0435\u043c\u043d\u043e\u0433\u043e, \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u043d\u0430 +20% \u043e\u0442 \u043d\u043e\u043c\u0438\u043d\u0430\u043b\u0430, \u0438 \u0441\u043e\u0441\u0442\u0430\u0432\u0438\u043b\u0438 800 \u043d\u0430 \u0437\u0430\u043f\u0438\u0441\u044c \u0438 400 \u043d\u0430 \u0447\u0442\u0435\u043d\u0438\u0435. \u0410 \u0432\u043e\u0442 \u0434\u043b\u0438\u043d\u0430 \u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u0438 latency \u0432\u044b\u0440\u043e\u0441\u043b\u0438 \u043c\u043d\u043e\u0433\u043e\u043a\u0440\u0430\u0442\u043d\u043e.<\/p>\n<p>\u041f\u043e\u0447\u0435\u043c\u0443 \u0442\u0430\u043a \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442?<\/p>\n<p>\u0414\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043a\u043e\u0433\u0434\u0430 \u0433\u043e\u0441\u0442\u0435\u0432\u0430\u044f \u041e\u0421 \u0432\u044b\u0445\u043e\u0434\u0438\u0442 <s>\u0438\u0437 \u0437\u043e\u043d\u044b \u043a\u043e\u043c\u0444\u043e\u0440\u0442\u0430<\/s> \u0437\u0430 \u0440\u0430\u043c\u043a\u0438 \u0434\u0438\u0441\u043a\u043e\u0432\u043e\u0439 \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0438, vSphere \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u0442\u0440\u043e\u0442\u0442\u043b\u0438\u043d\u0433: \u043f\u0440\u0438\u0442\u043e\u0440\u043c\u0430\u0436\u0438\u0432\u0430\u0435\u0442 &#171;\u043b\u0438\u0448\u043d\u0438\u0435&#187; IO-\u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438, \u043f\u043e\u043c\u0435\u0449\u0430\u044f \u0438\u0445 \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u043f\u0435\u0440\u0435\u0434 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u043e\u0439 \u043a \u0421\u0425\u0414 \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0412\u041c \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u0432 \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u0435 \u0433\u0440\u0430\u043d\u0438\u0446\u044b. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043f\u043e\u043f\u044b\u0442\u043a\u0438 \u0441\u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0442\u044c \u043d\u0430 \u0434\u0438\u0441\u043a\u0430\u0445 \u043f\u0440\u0438\u0432\u0435\u0434\u0443\u0442 \u043b\u0438\u0448\u044c \u043a \u043d\u0435\u043e\u0436\u0438\u0434\u0430\u043d\u043d\u044b\u043c \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c &#171;\u0442\u043e\u0440\u043c\u043e\u0437\u0430\u043c&#187; \u041f\u041e <em>by design<\/em>.<\/p>\n<h3>\u0412\u044b\u0432\u043e\u0434\u044b<\/h3>\n<p>\u0412 \u0438\u0442\u043e\u0433\u0435 \u0438\u043c\u0435\u0435\u043c \u0432\u043f\u043e\u043b\u043d\u0435 \u0440\u0430\u0431\u043e\u0447\u0438\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0434\u043b\u044f \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u0438 \u0434\u0438\u0430\u0433\u043d\u043e\u0441\u0442\u0438\u043a\u0438 \u0434\u0438\u0441\u043a\u043e\u0432\u043e\u0439 \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0434\u043e\u0439\u0434\u0451\u0442 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u043c\u0430\u0448\u0438\u043d, \u043d\u043e \u0438 \u0434\u043b\u044f &#171;\u0436\u0435\u043b\u0435\u0437\u043d\u044b\u0445&#187; \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432. \u0414\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u0439 \u043c\u043e\u0436\u043d\u043e \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0442\u044c \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0441\u0438\u043b\u044c\u043d\u043e, \u0430 \u0432\u043c\u0435\u0441\u0442\u0435 \u0438\u043b\u0438 \u0432\u043c\u0435\u0441\u0442\u043e \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u0439 fio-\u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0432\u043a\u043b\u044e\u0447\u0430\u0442\u044c\/\u0432\u044b\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u0431\u043e\u0435\u0432\u043e\u0435 \u041f\u041e. \u0422\u0430\u043a \u0434\u0438\u0430\u0433\u043d\u043e\u0441\u0442\u0438\u043a\u0430 \u0431\u0443\u0434\u0435\u0442 \u0433\u043b\u0443\u0431\u0436\u0435 \u0438 \u0432\u044b \u0441\u043c\u043e\u0436\u0435\u0442\u0435 \u0442\u043e\u0447\u043d\u0435\u0435 \u043b\u043e\u043a\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0431\u043e\u043b\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b \u0434\u0438\u0441\u043a\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u0432\u0438\u0434\u043d\u043e \u043a\u0430\u0440\u0442\u0438\u043d\u0443 \u0432 \u0446\u0435\u043b\u043e\u043c: \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0438 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430.<\/p>\n<p>\u041d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435 \u0443 \u043d\u0430\u0441 \u0431\u044b\u043b \u043a\u0435\u0439\u0441, \u043a\u043e\u0433\u0434\u0430 \u043a\u043b\u0438\u0435\u043d\u0442 \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u043b\u0441\u044f \u0441 \u043d\u0438\u0437\u043a\u043e\u0439 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e \u0441\u043e\u0444\u0442\u0430 \u043f\u043e \u043e\u0431\u0441\u0447\u0451\u0442\u0443 \u043a\u0443\u0431\u043e\u0432 \u0434\u0430\u043d\u043d\u044b\u0445. \u0421\u0435\u0440\u0432\u0435\u0440 \u0431\u044b\u043b &#171;\u0436\u0435\u043b\u0435\u0437\u043d\u044b\u0439&#187;, \u0431\u0435\u0437 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438. \u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u041f\u041e \u043e\u0442\u0432\u0435\u0447\u0430\u043b\u0438 \u043a\u043b\u0438\u0435\u043d\u0442\u0443, \u0447\u0442\u043e \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0432 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0434\u0438\u0441\u043a\u043e\u0432\u043e\u0439 \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u044b. \u041c\u044b \u043f\u0440\u043e\u0432\u0435\u043b\u0438 \u0434\u0438\u0430\u0433\u043d\u043e\u0441\u0442\u0438\u043a\u0443, \u0444\u0438\u043a\u0441\u0438\u0440\u0443\u044f \u043c\u0435\u0442\u0440\u0438\u043a\u0438 \u043d\u0430 \u043f\u0440\u043e\u0442\u044f\u0436\u0435\u043d\u0438\u0438 24 \u0447\u0430\u0441\u043e\u0432, \u0438 \u0434\u0430\u043b\u0438 \u043a\u043b\u0438\u0435\u043d\u0442\u0443 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u044b\u0439 \u043e\u0442\u0447\u0451\u0442, \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u0438\u0432 \u0435\u043c\u0443 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e \u0434\u043b\u044f \u0434\u0438\u0430\u043b\u043e\u0433\u0430 \u0441 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c\u0438 \u041f\u041e.<\/p>\n<p>\u041f\u043e\u0434 \u0441\u043f\u043e\u0439\u043b\u0435\u0440\u043e\u043c \u043d\u0438\u0436\u0435 \u2014 \u0433\u0440\u0430\u0444\u0438\u043a \u0438\u0437 \u044d\u0442\u043e\u0433\u043e \u043a\u0435\u0439\u0441\u0430, \u0432 \u0442. \u0447. \u043a\u0430\u043a \u0438\u043b\u043b\u044e\u0441\u0442\u0440\u0430\u0446\u0438\u044f \u0431\u043e\u043b\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b: \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0434\u0438\u0441\u043a\u0438 \u0431\u044b\u043b\u0438 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u044b \u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u044b\u0439 \u0440\u0435\u0439\u0434, \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u0430\u043d\u0430 LVM-\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0442\u043e\u043c\u043e\u0432.<\/p>\n<details class=\"spoiler\">\n<summary>\u0413\u0440\u0430\u0444\u0438\u043a<\/summary>\n<div class=\"spoiler__content\">\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/226\/b5f\/815\/226b5f815a96c79872cca4299b77780a.png\" alt=\"complex disk subsystem graphs expample\" title=\"complex disk subsystem graphs expample\" width=\"2080\" height=\"1126\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/226\/b5f\/815\/226b5f815a96c79872cca4299b77780a.png\"\/><figcaption>complex disk subsystem graphs expample<\/figcaption><\/figure>\n<\/p>\n<\/div>\n<\/details>\n<h2>\u041f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f<\/h2>\n<h3>\u0421\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044b<\/h3>\n<ol>\n<li>\n<p><a href=\"https:\/\/core.vmware.com\/resource\/vsan-operations-guide#sec6732-sub5\">\u041e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u0430\u044f \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f VMWare<\/a> <\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/communities.vmware.com\/t5\/vSphere-Hypervisor-Discussions\/After-apply-the-DISK-IOPS-limit-my-storage-latency-increased\/m-p\/1344871\/highlight\/true#M2945\">\u041a\u0440\u0430\u0442\u043a\u043e \u043e \u0442\u0440\u043e\u0442\u043b\u0438\u043d\u0433\u0435 \u043f\u0440\u0438 \u043f\u0440\u0435\u0432\u044b\u0448\u0435\u043d\u0438\u0438 \u043b\u0438\u043c\u0438\u0442\u0430 IOPS<\/a> <\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/core.vmware.com\/blog\/performance-metrics-when-using-iops-limits-vsan-what-you-need-know\">\u0421\u0442\u0430\u0442\u044c\u044f VMWare \u043e \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u0430\u0445 \u043b\u0438\u043c\u0438\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f<\/a> <\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/www.vmgu.ru\/news\/vmware-vsphere-virtual-disk-vmdk-iops-limit\">\u0414\u043b\u044f \u0447\u0435\u0433\u043e \u043d\u0443\u0436\u043d\u044b \u043b\u0438\u043c\u0438\u0442\u044b<\/a> <\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/client.cloud4y.ru\/knowledgebase.php?action=displayarticle&amp;catid=71&amp;id=714\">\u0421\u0442\u0430\u0442\u044c\u044f \u0432 knowledge base Cloud4Y <\/a><\/p>\n<\/li>\n<\/ol>\n<h3>\u0417\u0430\u043f\u0443\u0441\u043a \u0442\u0435\u0441\u0442\u043e\u0432<\/h3>\n<pre><code>cat .\/runfio.cfg .\/runfio.sh    --repeat 2 --time  60 >> runfio.sh.log     &amp; .\/runiostat.sh --repeat 1 --count 30 >> runiostat.sh.log  &amp; <\/code><\/pre>\n<p>\u041d\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u0441\u044f \u0434\u0432\u0430\u0436\u0434\u044b \u043d\u0430 60 \u0441\u0435\u043a\u0443\u043d\u0434 \u0441 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u043e\u043c \u0432 60 \u0441\u0435\u043a\u0443\u043d\u0434, \u0442.\u0435. \u043f\u0435\u0440\u0432\u0430\u044f, \u0442\u0440\u0435\u0442\u044c\u044f \u0438 \u043f\u044f\u0442\u0430\u044f \u043c\u0438\u043d\u0443\u0442\u044b \u2014 \u0445\u043e\u043b\u043e\u0441\u0442\u043e\u0439 \u0445\u043e\u0434, \u0430 \u0432\u0442\u043e\u0440\u0430\u044f \u0438 \u0447\u0435\u0442\u0432\u0451\u0440\u0442\u0430\u044f \u2014 \u043f\u043e\u0434 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u043e\u0439.<\/p>\n<p>\u0417\u0430 \u044d\u0442\u043e \u0432\u0440\u0435\u043c\u044f \u0431\u0443\u0434\u0435\u0442 \u0441\u0434\u0435\u043b\u0430\u043d\u043e 30 \u0437\u0430\u043c\u0435\u0440\u043e\u0432 \u0441 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u043e\u043c \u0432 10 \u0441\u0435\u043a\u0443\u043d\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0437\u0430\u0434\u0430\u043d \u0432 \u0442\u0435\u043b\u0435 \u0441\u043a\u0440\u0438\u043f\u0442\u0430.<\/p>\n<pre><code>               minutes         | 1 | 2 | 3 | 4 | 5 | --------|---|---|---|---|---| iostat  | + | + | + | + | + | --------|---|---|---|---|---| fio     |   | + |   | + |   |<\/code><\/pre>\n<h4>\u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u0439 \u0438 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043d\u0430 Bash<\/h4>\n<details class=\"spoiler\">\n<summary>runfio.sh<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>#!\/usr\/bin\/env bash # https:\/\/brianchildress.co\/named-parameters-in-bash\/ repeat=${repeat:-1} time=${time:-10} while [ $# -gt 0 ]; do if [[ * ]]; then         param=\"\" class=\"formula inline\">{1\/--\/}\" declare \" class=\"formula inline\">2\" # echo $1 $2  # Optional to see the parameter:value result fi shift done for i in &lt;\/SPAN>seq &lt;SPAN class=m>1&lt;\/SPAN> &lt;SPAN class=nv>$repeat&lt;\/SPAN>&lt;SPAN class=sb>; do sleep &lt;SPAN class=nv>$time&lt;\/SPAN>  &lt;SPAN class=c1># fio   --bs=4k --rw=randrw --percentage_random=50 --rwmixread=70 --rwmixwrite=30 --direct=1 --iodepth=256 --time_based --group_reporting --name=iops-test-job --eta-newline=1 --numjobs=1 --filename=runfio.sh.test --runtime=$time --size=1GB --ioengine=libaio --rate_iops=700,300,&lt;\/SPAN>  fio --runtime&lt;SPAN class=o>=&lt;\/SPAN>&lt;SPAN class=nv>$time&lt;\/SPAN> --eta-newline&lt;SPAN class=o>=&lt;\/SPAN>&lt;SPAN class=m>1&lt;\/SPAN> runfio.cfg  done <\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>runfio.cfg<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>[c4y] bs=4k rw=randrw percentage_random=50 rwmixread=70 rwmixwrite=30 direct=1 iodepth=256 time_based group_reporting name=iops-test-job numjobs=1 filename=runfio.sh.test size=1GB ioengine=libaio rate_iops=700,300, <\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>runiostat.sh<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>#!\/usr\/bin\/env bash # https:\/\/brianchildress.co\/named-parameters-in-bash\/ repeat=${repeat:-1} count=${count:-1} while [ $# -gt 0 ]; do if [[ * ]]; then         param=\"\" class=\"formula inline\">{1\/--\/}\" declare \" class=\"formula inline\">2\" # echo $1 $2  # Optional to see the parameter:value result fi shift done for i in &lt;\/SPAN>seq &lt;SPAN class=m>1&lt;\/SPAN> &lt;SPAN class=nv>$repeat&lt;\/SPAN>&lt;SPAN class=sb>; do &lt;SPAN class=nv>dt&lt;\/SPAN>&lt;SPAN class=o>=&lt;\/SPAN>&lt;SPAN class=sb>`&lt;\/SPAN>date &lt;SPAN class=s1>'+%Y-%m-%d_%H-%M-%S'&lt;\/SPAN>&lt;SPAN class=sb>`&lt;\/SPAN>  &lt;SPAN class=nb>echo&lt;\/SPAN> &lt;SPAN class=s2>\"&lt;\/SPAN>&lt;SPAN class=nv>$i&lt;\/SPAN>&lt;SPAN class=s2>    &lt;\/SPAN>&lt;SPAN class=nv>$dt&lt;\/SPAN>&lt;SPAN class=s2>\"&lt;\/SPAN>  .\/sysstat\/iostat -x -t -o JSON &lt;SPAN class=m>10&lt;\/SPAN> &lt;SPAN class=nv>$count&lt;\/SPAN> &amp;gt; &lt;SPAN class=s2>\".\/runiostat.sh-&lt;\/SPAN>&lt;SPAN class=nv>$dt&lt;\/SPAN>&lt;SPAN class=s2>.json\"&lt;\/SPAN>  done <\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<h4>\u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0432 \u043d\u0430 Python3<\/h4>\n<details class=\"spoiler\">\n<summary>conf.py<\/summary>\n<div class=\"spoiler__content\">\n<pre><code># \u043c\u0430\u0441\u043a\u0430 \u0434\u043b\u044f \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u043f\u0438\u0441\u043a\u0430 \u0444\u0430\u0439\u043b\u043e\u0432 \u0432 \u043f\u043e\u0434\u043f\u0430\u043f\u043a\u0435 mask = '*.json' # \u043a\u043e\u0440\u043d\u0435\u0432\u0430\u044f \u043f\u0430\u043f\u043a\u0430 \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0440\u0430\u0431\u043e\u0447\u0435\u0439 \u043f\u0430\u043f\u043a\u043e\u0439 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e base_dir = '.' # \u0438\u0441\u043a\u043b\u044e\u0447\u0430\u044e\u0449\u0438\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u0430\u043f\u043e\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u044f get_folders \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u0442 exclude_dirs = ['pycache', '.idea', '.ipynb_checkpoints', '_shell-scripts', '__stuff'] # \u0438\u0441\u043a\u043b\u044e\u0447\u0430\u044e\u0449\u0438\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432, \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0433\u0440\u0430\u0444\u0438\u043a\u0438 exclude_dev = [ 'fd0', 'sr0', 'loop0', 'loop1', 'loop2', 'loop3', 'loop4', 'loop5', 'loop6', 'loop7', 'loop8', 'loop9', 'loop10', 'loop11', 'loop12', 'loop13', 'loop14', 'loop15', ] # \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0432: \u043a\u0430\u043a\u0443\u044e \u0433\u0440\u0443\u043f\u043f\u0443 \u043c\u0435\u0442\u0440\u0438\u043a \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u044c, \u043a\u0430\u043a \u043f\u043e\u0434\u043f\u0438\u0441\u0430\u0442\u044c \u043e\u0441\u044c Y \u0438 \u043a\u0430\u043a\u0438\u0435 \u0443 \u043d\u0435\u0451 \u0435\u0434\u0438\u043d\u0438\u0446\u044b \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f figures = [ {  # 1\u0439 \u0433\u0440\u0430\u0444\u0438\u043a 'labels':   'CPU utilization', 'units':    '%', 'metrics':  ['avg-cpu.idle', 'avg-cpu.system', 'avg-cpu.user', 'avg-cpu.nice', 'avg-cpu.iowait', 'avg-cpu.steal'], 'legends':  ['idle', 'system', 'user', 'nice', 'iowait', 'steal'], }, {  # 2\u0439 \u0433\u0440\u0430\u0444\u0438\u043a 'labels':   'harddisk utilization', 'units':    '%', 'metrics':  ['rrqm', 'wrqm', 'util', 'drqm'] }, { 'labels':   'harddisk iops', 'units':    'iops', 'metrics':  ['r\/s', 'w\/s', 'rrqm\/s', 'wrqm\/s', 'd\/s', 'drqm\/s'] }, { 'labels':   'harddisk latency', 'units':    's', 'metrics':  ['r_await', 'w_await', 'd_await'] }, { 'labels':   'harddisk queue sizes', 'units':    'B', 'metrics':  ['rareq-sz', 'wareq-sz', 'aqu-sz', 'dareq-sz'] }, { 'labels':   'harddisk traffic', 'units':    'B\/s', 'metrics':  ['rkB\/s', 'wkB\/s', 'dkB\/s'] }, ] <\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>helper.py<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"python\">import json import glob import pandas as pd import matplotlib.pyplot as plt import matplotlib.dates as mpl_dates from matplotlib.ticker import EngFormatter import os # \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0447\u0435\u0440\u0435\u0437 isinstance import matplotlib import numpy import conf # \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u0430\u043f\u043e\u043a \u0432\u043d\u0443\u0442\u0440\u0438 conf.base_dir \u0432 \u0432\u0438\u0434\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 &lt;DirEntry ...> \u0441\u043e \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430\u043c\u0438 .name \u0438 .path def get_folders(base_dir=None, exclude_dirs=None): if base_dir is None: base_dir = conf.base_dir &lt;SPAN class=k>if&lt;\/SPAN> &lt;SPAN class=n>exclude_dirs&lt;\/SPAN> &lt;SPAN class=ow>is&lt;\/SPAN> &lt;SPAN class=kc>None&lt;\/SPAN>&lt;SPAN class=p>:&lt;\/SPAN>     &lt;SPAN class=n>exclude_dirs&lt;\/SPAN> &lt;SPAN class=o>=&lt;\/SPAN> &lt;SPAN class=n>conf&lt;\/SPAN>&lt;SPAN class=o>.&lt;\/SPAN>&lt;SPAN class=n>exclude_dirs&lt;\/SPAN>  &lt;SPAN class=k>return&lt;\/SPAN> &lt;SPAN class=p>[&lt;\/SPAN>&lt;SPAN class=n>f&lt;\/SPAN> &lt;SPAN class=k>for&lt;\/SPAN> &lt;SPAN class=n>f&lt;\/SPAN> &lt;SPAN class=ow>in&lt;\/SPAN> &lt;SPAN class=n>os&lt;\/SPAN>&lt;SPAN class=o>.&lt;\/SPAN>&lt;SPAN class=n>scandir&lt;\/SPAN>&lt;SPAN class=p>(&lt;\/SPAN>&lt;SPAN class=n>base_dir&lt;\/SPAN>&lt;SPAN class=p>)&lt;\/SPAN> &lt;SPAN class=k>if&lt;\/SPAN> &lt;SPAN class=n>f&lt;\/SPAN>&lt;SPAN class=o>.&lt;\/SPAN>&lt;SPAN class=n>is_dir&lt;\/SPAN>&lt;SPAN class=p>()&lt;\/SPAN> &lt;SPAN class=ow>and&lt;\/SPAN> &lt;SPAN class=n>f&lt;\/SPAN>&lt;SPAN class=o>.&lt;\/SPAN>&lt;SPAN class=n>name&lt;\/SPAN> &lt;SPAN class=ow>not&lt;\/SPAN> &lt;SPAN class=ow>in&lt;\/SPAN> &lt;SPAN class=n>exclude_dirs&lt;\/SPAN>&lt;SPAN class=p>]&lt;\/SPAN>  # \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0441\u043f\u0438\u0441\u043e\u043a \u0444\u0430\u0439\u043b\u043e\u0432 \u043f\u043e \u043c\u0430\u0441\u043a\u0435 conf.mask \u0432 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0439 \u043f\u0430\u043f\u043a\u0435 def get_files(folder, mask=None): if not isinstance(folder, str): folder = '' &lt;SPAN class=n>files&lt;\/SPAN> &lt;SPAN class=o>=&lt;\/SPAN> &lt;SPAN class=p>[]&lt;\/SPAN>  &lt;SPAN class=k>if&lt;\/SPAN> &lt;SPAN class=n>mask&lt;\/SPAN> &lt;SPAN class=ow>is&lt;\/SPAN> &lt;SPAN class=kc>None&lt;\/SPAN>&lt;SPAN class=p>:&lt;\/SPAN>     &lt;SPAN class=n>files&lt;\/SPAN> &lt;SPAN class=o>+=&lt;\/SPAN> &lt;SPAN class=n>glob&lt;\/SPAN>&lt;SPAN class=o>.&lt;\/SPAN>&lt;SPAN class=n>glob&lt;\/SPAN>&lt;SPAN class=p>(&lt;\/SPAN>&lt;SPAN class=n>os&lt;\/SPAN>&lt;SPAN class=o>.&lt;\/SPAN>&lt;SPAN class=n>path&lt;\/SPAN>&lt;SPAN class=o>.&lt;\/SPAN>&lt;SPAN class=n>join&lt;\/SPAN>&lt;SPAN class=p>(&lt;\/SPAN>&lt;SPAN class=n>folder&lt;\/SPAN>&lt;SPAN class=p>,&lt;\/SPAN> &lt;SPAN class=n>conf&lt;\/SPAN>&lt;SPAN class=o>.&lt;\/SPAN>&lt;SPAN class=n>mask&lt;\/SPAN>&lt;SPAN class=p>))&lt;\/SPAN> &lt;SPAN class=k>else&lt;\/SPAN>&lt;SPAN class=p>:&lt;\/SPAN>     &lt;SPAN class=n>files&lt;\/SPAN> &lt;SPAN class=o>+=&lt;\/SPAN> &lt;SPAN class=n>glob&lt;\/SPAN>&lt;SPAN class=o>.&lt;\/SPAN>&lt;SPAN class=n>glob&lt;\/SPAN>&lt;SPAN class=p>(&lt;\/SPAN>&lt;SPAN class=n>os&lt;\/SPAN>&lt;SPAN class=o>.&lt;\/SPAN>&lt;SPAN class=n>path&lt;\/SPAN>&lt;SPAN class=o>.&lt;\/SPAN>&lt;SPAN class=n>join&lt;\/SPAN>&lt;SPAN class=p>(&lt;\/SPAN>&lt;SPAN class=n>folder&lt;\/SPAN>&lt;SPAN class=p>,&lt;\/SPAN> &lt;SPAN class=n>mask&lt;\/SPAN>&lt;SPAN class=p>))&lt;\/SPAN>  &lt;SPAN class=k>return&lt;\/SPAN> &lt;SPAN class=n>files&lt;\/SPAN>  # def get_json(file=None): if file: with open(file) as f:  # \u0438\u043c\u043f\u043e\u0440\u0442 json \u0438\u0437 \u0441\u043f\u0438\u0441\u043a\u0430 \u0444\u0430\u0439\u043b\u043e\u0432 js = json.load(f) return js # def normalize(df=None):  # \u043d\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u043a\u043e\u043b\u043e\u043d\u043a\u0438 \u0434\u043b\u044f \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0433\u043e \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043f\u0440\u0438\u0441\u0442\u0430\u0432\u043e\u043a \u043f\u0435\u0440\u0435\u0434 \u0435\u0434\u0438\u043d\u0438\u0446\u0430\u043c\u0438 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f if 'r_await' in df.columns: df['r_await'] = df['r_await'] \/ 1000  # milliseconds -> seconds if 'w_await' in df.columns: df['w_await'] = df['w_await'] \/ 1000  # milliseconds -> seconds if 'd_await' in df.columns: df['d_await'] = df['d_await'] \/ 1000  # milliseconds -> seconds &lt;SPAN class=k>if&lt;\/SPAN> &lt;SPAN class=s1>'rareq-sz'&lt;\/SPAN> &lt;SPAN class=ow>in&lt;\/SPAN> &lt;SPAN class=n>df&lt;\/SPAN>&lt;SPAN class=o>.&lt;\/SPAN>&lt;SPAN class=n>columns&lt;\/SPAN>&lt;SPAN class=p>:&lt;\/SPAN>     &lt;SPAN class=n>df&lt;\/SPAN>&lt;SPAN class=p>[&lt;\/SPAN>&lt;SPAN class=s1>'rareq-sz'&lt;\/SPAN>&lt;SPAN class=p>]&lt;\/SPAN> &lt;SPAN class=o>=&lt;\/SPAN> &lt;SPAN class=n>df&lt;\/SPAN>&lt;SPAN class=p>[&lt;\/SPAN>&lt;SPAN class=s1>'rareq-sz'&lt;\/SPAN>&lt;SPAN class=p>]&lt;\/SPAN> &lt;SPAN class=o>*&lt;\/SPAN> &lt;SPAN class=mi>1024&lt;\/SPAN>  &lt;SPAN class=c1># kBytes -&amp;gt; Bytes&lt;\/SPAN> &lt;SPAN class=k>if&lt;\/SPAN> &lt;SPAN class=s1>'wareq-sz'&lt;\/SPAN> &lt;SPAN class=ow>in&lt;\/SPAN> &lt;SPAN class=n>df&lt;\/SPAN>&lt;SPAN class=o>.&lt;\/SPAN>&lt;SPAN class=n>columns&lt;\/SPAN>&lt;SPAN class=p>:&lt;\/SPAN>     &lt;SPAN class=n>df&lt;\/SPAN>&lt;SPAN class=p>[&lt;\/SPAN>&lt;SPAN class=s1>'wareq-sz'&lt;\/SPAN>&lt;SPAN class=p>]&lt;\/SPAN> &lt;SPAN class=o>=&lt;\/SPAN> &lt;SPAN class=n>df&lt;\/SPAN>&lt;SPAN class=p>[&lt;\/SPAN>&lt;SPAN class=s1>'wareq-sz'&lt;\/SPAN>&lt;SPAN class=p>]&lt;\/SPAN> &lt;SPAN class=o>*&lt;\/SPAN> &lt;SPAN class=mi>1024&lt;\/SPAN>  &lt;SPAN class=c1># kBytes -&amp;gt; Bytes&lt;\/SPAN> &lt;SPAN class=k>if&lt;\/SPAN> &lt;SPAN class=s1>'dareq-sz'&lt;\/SPAN> &lt;SPAN class=ow>in&lt;\/SPAN> &lt;SPAN class=n>df&lt;\/SPAN>&lt;SPAN class=o>.&lt;\/SPAN>&lt;SPAN class=n>columns&lt;\/SPAN>&lt;SPAN class=p>:&lt;\/SPAN>     &lt;SPAN class=n>df&lt;\/SPAN>&lt;SPAN class=p>[&lt;\/SPAN>&lt;SPAN class=s1>'dareq-sz'&lt;\/SPAN>&lt;SPAN class=p>]&lt;\/SPAN> &lt;SPAN class=o>=&lt;\/SPAN> &lt;SPAN class=n>df&lt;\/SPAN>&lt;SPAN class=p>[&lt;\/SPAN>&lt;SPAN class=s1>'dareq-sz'&lt;\/SPAN>&lt;SPAN class=p>]&lt;\/SPAN> &lt;SPAN class=o>*&lt;\/SPAN> &lt;SPAN class=mi>1024&lt;\/SPAN>  &lt;SPAN class=c1># kBytes -&amp;gt; Bytes&lt;\/SPAN> &lt;SPAN class=k>if&lt;\/SPAN> &lt;SPAN class=s1>'aqu-sz'&lt;\/SPAN> &lt;SPAN class=ow>in&lt;\/SPAN> &lt;SPAN class=n>df&lt;\/SPAN>&lt;SPAN class=o>.&lt;\/SPAN>&lt;SPAN class=n>columns&lt;\/SPAN>&lt;SPAN class=p>:&lt;\/SPAN>     &lt;SPAN class=n>df&lt;\/SPAN>&lt;SPAN class=p>[&lt;\/SPAN>&lt;SPAN class=s1>'aqu-sz'&lt;\/SPAN>&lt;SPAN class=p>]&lt;\/SPAN> &lt;SPAN class=o>=&lt;\/SPAN> &lt;SPAN class=n>df&lt;\/SPAN>&lt;SPAN class=p>[&lt;\/SPAN>&lt;SPAN class=s1>'aqu-sz'&lt;\/SPAN>&lt;SPAN class=p>]&lt;\/SPAN> &lt;SPAN class=o>*&lt;\/SPAN> &lt;SPAN class=mi>1024&lt;\/SPAN>  &lt;SPAN class=c1># kBytes -&amp;gt; Bytes&lt;\/SPAN>  &lt;SPAN class=k>if&lt;\/SPAN> &lt;SPAN class=s1>'rkB\/s'&lt;\/SPAN> &lt;SPAN class=ow>in&lt;\/SPAN> &lt;SPAN class=n>df&lt;\/SPAN>&lt;SPAN class=o>.&lt;\/SPAN>&lt;SPAN class=n>columns&lt;\/SPAN>&lt;SPAN class=p>:&lt;\/SPAN>     &lt;SPAN class=n>df&lt;\/SPAN>&lt;SPAN class=p>[&lt;\/SPAN>&lt;SPAN class=s1>'rkB\/s'&lt;\/SPAN>&lt;SPAN class=p>]&lt;\/SPAN> &lt;SPAN class=o>=&lt;\/SPAN> &lt;SPAN class=n>df&lt;\/SPAN>&lt;SPAN class=p>[&lt;\/SPAN>&lt;SPAN class=s1>'rkB\/s'&lt;\/SPAN>&lt;SPAN class=p>]&lt;\/SPAN> &lt;SPAN class=o>*&lt;\/SPAN> &lt;SPAN class=mi>1024&lt;\/SPAN>  &lt;SPAN class=c1># kBytes\/s -&amp;gt; Bytes\/s&lt;\/SPAN> &lt;SPAN class=k>if&lt;\/SPAN> &lt;SPAN class=s1>'wkB\/s'&lt;\/SPAN> &lt;SPAN class=ow>in&lt;\/SPAN> &lt;SPAN class=n>df&lt;\/SPAN>&lt;SPAN class=o>.&lt;\/SPAN>&lt;SPAN class=n>columns&lt;\/SPAN>&lt;SPAN class=p>:&lt;\/SPAN>     &lt;SPAN class=n>df&lt;\/SPAN>&lt;SPAN class=p>[&lt;\/SPAN>&lt;SPAN class=s1>'wkB\/s'&lt;\/SPAN>&lt;SPAN class=p>]&lt;\/SPAN> &lt;SPAN class=o>=&lt;\/SPAN> &lt;SPAN class=n>df&lt;\/SPAN>&lt;SPAN class=p>[&lt;\/SPAN>&lt;SPAN class=s1>'wkB\/s'&lt;\/SPAN>&lt;SPAN class=p>]&lt;\/SPAN> &lt;SPAN class=o>*&lt;\/SPAN> &lt;SPAN class=mi>1024&lt;\/SPAN>  &lt;SPAN class=c1># kBytes\/s -&amp;gt; Bytes\/s&lt;\/SPAN> &lt;SPAN class=k>if&lt;\/SPAN> &lt;SPAN class=s1>'dkB\/s'&lt;\/SPAN> &lt;SPAN class=ow>in&lt;\/SPAN> &lt;SPAN class=n>df&lt;\/SPAN>&lt;SPAN class=o>.&lt;\/SPAN>&lt;SPAN class=n>columns&lt;\/SPAN>&lt;SPAN class=p>:&lt;\/SPAN>     &lt;SPAN class=n>df&lt;\/SPAN>&lt;SPAN class=p>[&lt;\/SPAN>&lt;SPAN class=s1>'dkB\/s'&lt;\/SPAN>&lt;SPAN class=p>]&lt;\/SPAN> &lt;SPAN class=o>=&lt;\/SPAN> &lt;SPAN class=n>df&lt;\/SPAN>&lt;SPAN class=p>[&lt;\/SPAN>&lt;SPAN class=s1>'dkB\/s'&lt;\/SPAN>&lt;SPAN class=p>]&lt;\/SPAN> &lt;SPAN class=o>*&lt;\/SPAN> &lt;SPAN class=mi>1024&lt;\/SPAN>  &lt;SPAN class=c1># kBytes\/s -&amp;gt; Bytes\/s&lt;\/SPAN>  &lt;SPAN class=k>return&lt;\/SPAN> &lt;SPAN class=n>df&lt;\/SPAN>  # def merge_dataframes(gen_data=None, dev_data=None, device=None, datetime_format=None): if gen_data is None or dev_data is None or device is None: return None &lt;SPAN class=n>df&lt;\/SPAN> &lt;SPAN class=o>=&lt;\/SPAN> &lt;SPAN class=n>pd&lt;\/SPAN>&lt;SPAN class=o>.&lt;\/SPAN>&lt;SPAN class=n>concat&lt;\/SPAN>&lt;SPAN class=p>([&lt;\/SPAN>     &lt;SPAN class=n>dev_data&lt;\/SPAN>&lt;SPAN class=p>[&lt;\/SPAN>&lt;SPAN class=n>dev_data&lt;\/SPAN>&lt;SPAN class=p>[&lt;\/SPAN>&lt;SPAN class=s1>'disk_device'&lt;\/SPAN>&lt;SPAN class=p>]&lt;\/SPAN> &lt;SPAN class=o>==&lt;\/SPAN> &lt;SPAN class=n>device&lt;\/SPAN>&lt;SPAN class=p>]&lt;\/SPAN>&lt;SPAN class=o>.&lt;\/SPAN>&lt;SPAN class=n>reset_index&lt;\/SPAN>&lt;SPAN class=p>(),&lt;\/SPAN>     &lt;SPAN class=n>gen_data&lt;\/SPAN>&lt;SPAN class=p>[&lt;\/SPAN>&lt;SPAN class=s1>'timestamp'&lt;\/SPAN>&lt;SPAN class=p>],&lt;\/SPAN>     &lt;SPAN class=n>gen_data&lt;\/SPAN>&lt;SPAN class=p>[&lt;\/SPAN>&lt;SPAN class=s1>'avg-cpu.user'&lt;\/SPAN>&lt;SPAN class=p>],&lt;\/SPAN>     &lt;SPAN class=n>gen_data&lt;\/SPAN>&lt;SPAN class=p>[&lt;\/SPAN>&lt;SPAN class=s1>'avg-cpu.nice'&lt;\/SPAN>&lt;SPAN class=p>],&lt;\/SPAN>     &lt;SPAN class=n>gen_data&lt;\/SPAN>&lt;SPAN class=p>[&lt;\/SPAN>&lt;SPAN class=s1>'avg-cpu.system'&lt;\/SPAN>&lt;SPAN class=p>],&lt;\/SPAN>     &lt;SPAN class=n>gen_data&lt;\/SPAN>&lt;SPAN class=p>[&lt;\/SPAN>&lt;SPAN class=s1>'avg-cpu.iowait'&lt;\/SPAN>&lt;SPAN class=p>],&lt;\/SPAN>     &lt;SPAN class=n>gen_data&lt;\/SPAN>&lt;SPAN class=p>[&lt;\/SPAN>&lt;SPAN class=s1>'avg-cpu.steal'&lt;\/SPAN>&lt;SPAN class=p>],&lt;\/SPAN>     &lt;SPAN class=n>gen_data&lt;\/SPAN>&lt;SPAN class=p>[&lt;\/SPAN>&lt;SPAN class=s1>'avg-cpu.idle'&lt;\/SPAN>&lt;SPAN class=p>],&lt;\/SPAN> &lt;SPAN class=p>],&lt;\/SPAN> &lt;SPAN class=n>join&lt;\/SPAN>&lt;SPAN class=o>=&lt;\/SPAN>&lt;SPAN class=s1>'inner'&lt;\/SPAN>&lt;SPAN class=p>,&lt;\/SPAN> &lt;SPAN class=n>axis&lt;\/SPAN>&lt;SPAN class=o>=&lt;\/SPAN>&lt;SPAN class=mi>1&lt;\/SPAN>&lt;SPAN class=p>)&lt;\/SPAN>  &lt;SPAN class=n>df&lt;\/SPAN>&lt;SPAN class=o>.&lt;\/SPAN>&lt;SPAN class=n>drop&lt;\/SPAN>&lt;SPAN class=p>([&lt;\/SPAN>&lt;SPAN class=s1>'index'&lt;\/SPAN>&lt;SPAN class=p>],&lt;\/SPAN> &lt;SPAN class=n>inplace&lt;\/SPAN>&lt;SPAN class=o>=&lt;\/SPAN>&lt;SPAN class=kc>True&lt;\/SPAN>&lt;SPAN class=p>,&lt;\/SPAN> &lt;SPAN class=n>axis&lt;\/SPAN>&lt;SPAN class=o>=&lt;\/SPAN>&lt;SPAN class=mi>1&lt;\/SPAN>&lt;SPAN class=p>)&lt;\/SPAN> &lt;SPAN class=n>df&lt;\/SPAN>&lt;SPAN class=o>.&lt;\/SPAN>&lt;SPAN class=n>index&lt;\/SPAN> &lt;SPAN class=o>=&lt;\/SPAN> &lt;SPAN class=n>pd&lt;\/SPAN>&lt;SPAN class=o>.&lt;\/SPAN>&lt;SPAN class=n>to_datetime&lt;\/SPAN>&lt;SPAN class=p>(&lt;\/SPAN>&lt;SPAN class=n>df&lt;\/SPAN>&lt;SPAN class=p>[&lt;\/SPAN>&lt;SPAN class=s1>'timestamp'&lt;\/SPAN>&lt;SPAN class=p>],&lt;\/SPAN> &lt;SPAN class=nb>format&lt;\/SPAN>&lt;SPAN class=o>=&lt;\/SPAN>&lt;SPAN class=n>datetime_format&lt;\/SPAN>&lt;SPAN class=p>)&lt;\/SPAN>  &lt;SPAN class=c1># '%d.%m.%Y %H:%M:%S'  # https:\/\/nbviewer.jupyter.org\/gist\/nipunbatra\/6947228  # df['time'] = pd.to_datetime(df['timestamp'], format='%d.%m.%Y %H:%M:%S')&lt;\/SPAN> &lt;SPAN class=n>df&lt;\/SPAN> &lt;SPAN class=o>=&lt;\/SPAN> &lt;SPAN class=n>normalize&lt;\/SPAN>&lt;SPAN class=p>(&lt;\/SPAN>&lt;SPAN class=n>df&lt;\/SPAN>&lt;SPAN class=o>=&lt;\/SPAN>&lt;SPAN class=n>df&lt;\/SPAN>&lt;SPAN class=p>)&lt;\/SPAN>  &lt;SPAN class=k>return&lt;\/SPAN> &lt;SPAN class=n>df&lt;\/SPAN>  # def plot( files=None,             # \u0441\u043f\u0438\u0441\u043e\u043a \u0444\u0430\u0439\u043b\u043e\u0432, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043d\u0443\u0436\u043d\u043e \u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0433\u0440\u0430\u0444\u0438\u043a\u0438 w=4,                    # \u0448\u0438\u0440\u0438\u043d\u0430 \u0433\u0440\u0430\u0444\u0438\u043a\u0430 h=3,                    # \u0432\u044b\u0441\u043e\u0442\u0430 \u0433\u0440\u0430\u0444\u0438\u043a\u0430 datetime_format=None,   # \u0444\u043e\u0440\u043c\u0430\u0442 \u043e\u0442\u043c\u0435\u0442\u043e\u043a \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0432 json-\u0444\u0430\u0439\u043b\u0435 first=0,                # \u043f\u0435\u0440\u0432\u0430\u044f \u0442\u043e\u0447\u043a\u0430 last=None,              # \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044f\u044f \u0442\u043e\u0447\u043a\u0430 dev_desc=None,          # \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432, \u0443\u0437\u043d\u0430\u0442\u044c \u043c\u043e\u0436\u043d\u043e \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 ls -l \/dev\/mapper dev_placement='col',    # \u043a\u0430\u043a \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u0442\u044c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430, \u0432 \u043a\u043e\u043b\u043e\u043d\u043a\u0430\u0445 \u0438\u043b\u0438 \u0441\u0442\u0440\u043e\u043a\u0430\u0445 ):  # \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0440\u0438\u0441\u0443\u0435\u0442 \u0433\u0440\u0430\u0444\u0438\u043a\u0438 &lt;SPAN class=k>if&lt;\/SPAN> &lt;SPAN class=n>dev_desc&lt;\/SPAN> &lt;SPAN class=ow>is&lt;\/SPAN> &lt;SPAN class=kc>None&lt;\/SPAN>&lt;SPAN class=p>:&lt;\/SPAN>     &lt;SPAN class=n>dev_desc&lt;\/SPAN> &lt;SPAN class=o>=&lt;\/SPAN> &lt;SPAN class=p>{}&lt;\/SPAN>  &lt;SPAN class=k>if&lt;\/SPAN> &lt;SPAN class=n>files&lt;\/SPAN> &lt;SPAN class=ow>is&lt;\/SPAN> &lt;SPAN class=kc>None&lt;\/SPAN>&lt;SPAN class=p>:&lt;\/SPAN>     &lt;SPAN class=k>return&lt;\/SPAN> &lt;SPAN class=o>-&lt;\/SPAN>&lt;SPAN class=mi>1&lt;\/SPAN>  &lt;SPAN class=k>if&lt;\/SPAN> &lt;SPAN class=nb>isinstance&lt;\/SPAN>&lt;SPAN class=p>(&lt;\/SPAN>&lt;SPAN class=n>files&lt;\/SPAN>&lt;SPAN class=p>,&lt;\/SPAN> &lt;SPAN class=nb>str&lt;\/SPAN>&lt;SPAN class=p>):&lt;\/SPAN>     &lt;SPAN class=n>files&lt;\/SPAN> &lt;SPAN class=o>=&lt;\/SPAN> &lt;SPAN class=p>[&lt;\/SPAN>&lt;SPAN class=n>files&lt;\/SPAN>&lt;SPAN class=p>]&lt;\/SPAN>  &lt;SPAN class=k>for&lt;\/SPAN> &lt;SPAN class=n>file&lt;\/SPAN> &lt;SPAN class=ow>in&lt;\/SPAN> &lt;SPAN class=n>files&lt;\/SPAN>&lt;SPAN class=p>:&lt;\/SPAN>     &lt;SPAN class=c1># \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 (\u0438\u043c\u043f\u043e\u0440\u0442 \u0434\u0430\u043d\u043d\u044b\u0445, \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0435 \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0432) \u043f\u043e \u043e\u0434\u043d\u043e\u043c\u0443 \u0444\u0430\u0439\u043b\u0443 \u0437\u0430 \u0440\u0430\u0437&lt;\/SPAN>     &lt;SPAN class=k>with&lt;\/SPAN> &lt;SPAN class=nb>open&lt;\/SPAN>&lt;SPAN class=p>(&lt;\/SPAN>&lt;SPAN class=n>file&lt;\/SPAN>&lt;SPAN class=p>)&lt;\/SPAN> &lt;SPAN class=k>as&lt;\/SPAN> &lt;SPAN class=n>f&lt;\/SPAN>&lt;SPAN class=p>:&lt;\/SPAN>  &lt;SPAN class=c1># \u0438\u043c\u043f\u043e\u0440\u0442 json \u0438\u0437 \u0441\u043f\u0438\u0441\u043a\u0430 \u0444\u0430\u0439\u043b\u043e\u0432&lt;\/SPAN>         &lt;SPAN class=n>j&lt;\/SPAN> &lt;SPAN class=o>=&lt;\/SPAN> &lt;SPAN class=n>json&lt;\/SPAN>&lt;SPAN class=o>.&lt;\/SPAN>&lt;SPAN class=n>load&lt;\/SPAN>&lt;SPAN class=p>(&lt;\/SPAN>&lt;SPAN class=n>f&lt;\/SPAN>&lt;SPAN class=p>)&lt;\/SPAN>      &lt;SPAN class=c1># \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 json \u0432 dataframe  https:\/\/towardsdatascience.com\/all-pandas-json-normalize-you-should-know-for-flattening-json-13eae1dfb7dd&lt;\/SPAN>     &lt;SPAN class=n>general&lt;\/SPAN> &lt;SPAN class=o>=&lt;\/SPAN> &lt;SPAN class=n>pd&lt;\/SPAN>&lt;SPAN class=o>.&lt;\/SPAN>&lt;SPAN class=n>json_normalize&lt;\/SPAN>&lt;SPAN class=p>(&lt;\/SPAN>&lt;SPAN class=n>j&lt;\/SPAN>&lt;SPAN class=p>[&lt;\/SPAN>&lt;SPAN class=s1>'sysstat'&lt;\/SPAN>&lt;SPAN class=p>][&lt;\/SPAN>&lt;SPAN class=s1>'hosts'&lt;\/SPAN>&lt;SPAN class=p>][&lt;\/SPAN>&lt;SPAN class=mi>0&lt;\/SPAN>&lt;SPAN class=p>][&lt;\/SPAN>&lt;SPAN class=s1>'statistics'&lt;\/SPAN>&lt;SPAN class=p>])&lt;\/SPAN>  &lt;SPAN class=c1># \u043c\u0435\u0442\u043a\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438&lt;\/SPAN>     &lt;SPAN class=n>device&lt;\/SPAN> &lt;SPAN class=o>=&lt;\/SPAN> &lt;SPAN class=n>pd&lt;\/SPAN>&lt;SPAN class=o>.&lt;\/SPAN>&lt;SPAN class=n>json_normalize&lt;\/SPAN>&lt;SPAN class=p>(&lt;\/SPAN>&lt;SPAN class=n>j&lt;\/SPAN>&lt;SPAN class=p>[&lt;\/SPAN>&lt;SPAN class=s1>'sysstat'&lt;\/SPAN>&lt;SPAN class=p>][&lt;\/SPAN>&lt;SPAN class=s1>'hosts'&lt;\/SPAN>&lt;SPAN class=p>][&lt;\/SPAN>&lt;SPAN class=mi>0&lt;\/SPAN>&lt;SPAN class=p>][&lt;\/SPAN>&lt;SPAN class=s1>'statistics'&lt;\/SPAN>&lt;SPAN class=p>],&lt;\/SPAN> &lt;SPAN class=n>record_path&lt;\/SPAN>&lt;SPAN class=o>=&lt;\/SPAN>&lt;SPAN class=p>[&lt;\/SPAN>&lt;SPAN class=s1>'disk'&lt;\/SPAN>&lt;SPAN class=p>])&lt;\/SPAN>  &lt;SPAN class=c1># \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0430 \u0434\u0438\u0441\u043a\u043e\u0432&lt;\/SPAN>      &lt;SPAN class=n>devs&lt;\/SPAN> &lt;SPAN class=o>=&lt;\/SPAN> &lt;SPAN class=p>[&lt;\/SPAN>&lt;SPAN class=n>dev&lt;\/SPAN>&lt;SPAN class=p>[&lt;\/SPAN>&lt;SPAN class=s1>'disk_device'&lt;\/SPAN>&lt;SPAN class=p>]&lt;\/SPAN> &lt;SPAN class=k>for&lt;\/SPAN> &lt;SPAN class=n>dev&lt;\/SPAN> &lt;SPAN class=ow>in&lt;\/SPAN> &lt;SPAN class=n>j&lt;\/SPAN>&lt;SPAN class=p>[&lt;\/SPAN>&lt;SPAN class=s1>'sysstat'&lt;\/SPAN>&lt;SPAN class=p>][&lt;\/SPAN>&lt;SPAN class=s1>'hosts'&lt;\/SPAN>&lt;SPAN class=p>][&lt;\/SPAN>&lt;SPAN class=mi>0&lt;\/SPAN>&lt;SPAN class=p>][&lt;\/SPAN>&lt;SPAN class=s1>'statistics'&lt;\/SPAN>&lt;SPAN class=p>][&lt;\/SPAN>&lt;SPAN class=mi>0&lt;\/SPAN>&lt;SPAN class=p>][&lt;\/SPAN>&lt;SPAN class=s1>'disk'&lt;\/SPAN>&lt;SPAN class=p>]&lt;\/SPAN> &lt;SPAN class=k>if&lt;\/SPAN> &lt;SPAN class=n>dev&lt;\/SPAN>&lt;SPAN class=p>[&lt;\/SPAN>&lt;SPAN class=s1>'disk_device'&lt;\/SPAN>&lt;SPAN class=p>]&lt;\/SPAN> &lt;SPAN class=ow>not&lt;\/SPAN> &lt;SPAN class=ow>in&lt;\/SPAN> &lt;SPAN class=n>conf&lt;\/SPAN>&lt;SPAN class=o>.&lt;\/SPAN>&lt;SPAN class=n>exclude_dev&lt;\/SPAN>&lt;SPAN class=p>]&lt;\/SPAN>     &lt;SPAN class=c1># devs.sort(reverse=True)&lt;\/SPAN>      &lt;SPAN class=k>if&lt;\/SPAN> &lt;SPAN class=n>dev_placement&lt;\/SPAN> &lt;SPAN class=o>==&lt;\/SPAN> &lt;SPAN class=s1>'col'&lt;\/SPAN>&lt;SPAN class=p>:&lt;\/SPAN>         &lt;SPAN class=n>fig&lt;\/SPAN>&lt;SPAN class=p>,&lt;\/SPAN> &lt;SPAN class=n>axs&lt;\/SPAN> &lt;SPAN class=o>=&lt;\/SPAN> &lt;SPAN class=n>plt&lt;\/SPAN>&lt;SPAN class=o>.&lt;\/SPAN>&lt;SPAN class=n>subplots&lt;\/SPAN>&lt;SPAN class=p>(&lt;\/SPAN>&lt;SPAN class=nb>len&lt;\/SPAN>&lt;SPAN class=p>(&lt;\/SPAN>&lt;SPAN class=n>conf&lt;\/SPAN>&lt;SPAN class=o>.&lt;\/SPAN>&lt;SPAN class=n>figures&lt;\/SPAN>&lt;SPAN class=p>),&lt;\/SPAN> &lt;SPAN class=nb>len&lt;\/SPAN>&lt;SPAN class=p>(&lt;\/SPAN>&lt;SPAN class=n>devs&lt;\/SPAN>&lt;SPAN class=p>),&lt;\/SPAN> &lt;SPAN class=n>figsize&lt;\/SPAN>&lt;SPAN class=o>=&lt;\/SPAN>&lt;SPAN class=p>(&lt;\/SPAN>&lt;SPAN class=n>w&lt;\/SPAN> &lt;SPAN class=o>*&lt;\/SPAN> &lt;SPAN class=nb>len&lt;\/SPAN>&lt;SPAN class=p>(&lt;\/SPAN>&lt;SPAN class=n>devs&lt;\/SPAN>&lt;SPAN class=p>),&lt;\/SPAN> &lt;SPAN class=n>h&lt;\/SPAN> &lt;SPAN class=o>*&lt;\/SPAN> &lt;SPAN class=nb>len&lt;\/SPAN>&lt;SPAN class=p>(&lt;\/SPAN>&lt;SPAN class=n>conf&lt;\/SPAN>&lt;SPAN class=o>.&lt;\/SPAN>&lt;SPAN class=n>figures&lt;\/SPAN>&lt;SPAN class=p>)),&lt;\/SPAN> &lt;SPAN class=p>)&lt;\/SPAN>  &lt;SPAN class=c1># sharex='col',)  # sharey='row')  # , gridspec_kw=dict(hspace=0.1, wspace=0, ))&lt;\/SPAN>     &lt;SPAN class=k>elif&lt;\/SPAN> &lt;SPAN class=n>dev_placement&lt;\/SPAN> &lt;SPAN class=o>==&lt;\/SPAN> &lt;SPAN class=s1>'row'&lt;\/SPAN>&lt;SPAN class=p>:&lt;\/SPAN>         &lt;SPAN class=n>fig&lt;\/SPAN>&lt;SPAN class=p>,&lt;\/SPAN> &lt;SPAN class=n>axs&lt;\/SPAN> &lt;SPAN class=o>=&lt;\/SPAN> &lt;SPAN class=n>plt&lt;\/SPAN>&lt;SPAN class=o>.&lt;\/SPAN>&lt;SPAN class=n>subplots&lt;\/SPAN>&lt;SPAN class=p>(&lt;\/SPAN>&lt;SPAN class=nb>len&lt;\/SPAN>&lt;SPAN class=p>(&lt;\/SPAN>&lt;SPAN class=n>devs&lt;\/SPAN>&lt;SPAN class=p>),&lt;\/SPAN> &lt;SPAN class=nb>len&lt;\/SPAN>&lt;SPAN class=p>(&lt;\/SPAN>&lt;SPAN class=n>conf&lt;\/SPAN>&lt;SPAN class=o>.&lt;\/SPAN>&lt;SPAN class=n>figures&lt;\/SPAN>&lt;SPAN class=p>),&lt;\/SPAN> &lt;SPAN class=n>figsize&lt;\/SPAN>&lt;SPAN class=o>=&lt;\/SPAN>&lt;SPAN class=p>(&lt;\/SPAN>&lt;SPAN class=n>w&lt;\/SPAN> &lt;SPAN class=o>*&lt;\/SPAN> &lt;SPAN class=nb>len&lt;\/SPAN>&lt;SPAN class=p>(&lt;\/SPAN>&lt;SPAN class=n>conf&lt;\/SPAN>&lt;SPAN class=o>.&lt;\/SPAN>&lt;SPAN class=n>figures&lt;\/SPAN>&lt;SPAN class=p>),&lt;\/SPAN> &lt;SPAN class=n>h&lt;\/SPAN> &lt;SPAN class=o>*&lt;\/SPAN> &lt;SPAN class=nb>len&lt;\/SPAN>&lt;SPAN class=p>(&lt;\/SPAN>&lt;SPAN class=n>devs&lt;\/SPAN>&lt;SPAN class=p>)),&lt;\/SPAN> &lt;SPAN class=p>)&lt;\/SPAN>  &lt;SPAN class=c1># sharex='col',)  # sharey='row')  # , gridspec_kw=dict(hspace=0.1, wspace=0, ))&lt;\/SPAN>      &lt;SPAN class=k>for&lt;\/SPAN> &lt;SPAN class=n>dev&lt;\/SPAN> &lt;SPAN class=ow>in&lt;\/SPAN> &lt;SPAN class=n>devs&lt;\/SPAN>&lt;SPAN class=p>:&lt;\/SPAN>         &lt;SPAN class=c1># \u0441\u0431\u043e\u0440\u043a\u0430 \u0440\u0430\u0431\u043e\u0447\u0435\u0433\u043e \u043d\u0430\u0431\u043e\u0440\u0430 \u0434\u0430\u043d\u043d\u044b\u0445&lt;\/SPAN>         &lt;SPAN class=n>df&lt;\/SPAN> &lt;SPAN class=o>=&lt;\/SPAN> &lt;SPAN class=n>merge_dataframes&lt;\/SPAN>&lt;SPAN class=p>(&lt;\/SPAN>&lt;SPAN class=n>gen_data&lt;\/SPAN>&lt;SPAN class=o>=&lt;\/SPAN>&lt;SPAN class=n>general&lt;\/SPAN>&lt;SPAN class=p>,&lt;\/SPAN> &lt;SPAN class=n>dev_data&lt;\/SPAN>&lt;SPAN class=o>=&lt;\/SPAN>&lt;SPAN class=n>device&lt;\/SPAN>&lt;SPAN class=p>,&lt;\/SPAN> &lt;SPAN class=n>device&lt;\/SPAN>&lt;SPAN class=o>=&lt;\/SPAN>&lt;SPAN class=n>dev&lt;\/SPAN>&lt;SPAN class=p>,&lt;\/SPAN> &lt;SPAN class=n>datetime_format&lt;\/SPAN>&lt;SPAN class=o>=&lt;\/SPAN>&lt;SPAN class=n>datetime_format&lt;\/SPAN>&lt;SPAN class=p>)&lt;\/SPAN>         &lt;SPAN class=n>df&lt;\/SPAN> &lt;SPAN class=o>=&lt;\/SPAN> &lt;SPAN class=n>df&lt;\/SPAN>&lt;SPAN class=p>[&lt;\/SPAN>&lt;SPAN class=n>first&lt;\/SPAN>&lt;SPAN class=p>:&lt;\/SPAN>&lt;SPAN class=n>last&lt;\/SPAN>&lt;SPAN class=p>]&lt;\/SPAN>  &lt;SPAN class=c1># print(df.info())    # print(df1.info(), df2.info())&lt;\/SPAN>          &lt;SPAN class=c1># \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c \u043d\u0430\u043f\u0440. \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f&lt;\/SPAN>         &lt;SPAN class=k>if&lt;\/SPAN> &lt;SPAN class=nb>isinstance&lt;\/SPAN>&lt;SPAN class=p>(&lt;\/SPAN>&lt;SPAN class=n>axs&lt;\/SPAN>&lt;SPAN class=p>[&lt;\/SPAN>&lt;SPAN class=mi>0&lt;\/SPAN>&lt;SPAN class=p>],&lt;\/SPAN> &lt;SPAN class=n>matplotlib&lt;\/SPAN>&lt;SPAN class=o>.&lt;\/SPAN>&lt;SPAN class=n>axes&lt;\/SPAN>&lt;SPAN class=o>.&lt;\/SPAN>&lt;SPAN class=n>_subplots&lt;\/SPAN>&lt;SPAN class=o>.&lt;\/SPAN>&lt;SPAN class=n>Axes&lt;\/SPAN>&lt;SPAN class=p>):&lt;\/SPAN>  &lt;SPAN class=c1># 1-D \u043d\u0430\u0431\u043e\u0440 \u0440\u0438\u0441\u0443\u043d\u043a\u043e\u0432&lt;\/SPAN>             &lt;SPAN class=n>axrow&lt;\/SPAN> &lt;SPAN class=o>=&lt;\/SPAN> &lt;SPAN class=n>axs&lt;\/SPAN>&lt;SPAN class=p>[:]&lt;\/SPAN>         &lt;SPAN class=k>elif&lt;\/SPAN> &lt;SPAN class=nb>isinstance&lt;\/SPAN>&lt;SPAN class=p>(&lt;\/SPAN>&lt;SPAN class=n>axs&lt;\/SPAN>&lt;SPAN class=p>[&lt;\/SPAN>&lt;SPAN class=mi>0&lt;\/SPAN>&lt;SPAN class=p>],&lt;\/SPAN> &lt;SPAN class=n>numpy&lt;\/SPAN>&lt;SPAN class=o>.&lt;\/SPAN>&lt;SPAN class=n>ndarray&lt;\/SPAN>&lt;SPAN class=p>)&lt;\/SPAN> &lt;SPAN class=ow>and&lt;\/SPAN> &lt;SPAN class=n>dev_placement&lt;\/SPAN> &lt;SPAN class=o>==&lt;\/SPAN> &lt;SPAN class=s1>'col'&lt;\/SPAN>&lt;SPAN class=p>:&lt;\/SPAN>  &lt;SPAN class=c1># 2-D \u043d\u0430\u0431\u043e\u0440 \u0440\u0438\u0441\u0443\u043d\u043a\u043e\u0432&lt;\/SPAN>             &lt;SPAN class=n>axrow&lt;\/SPAN> &lt;SPAN class=o>=&lt;\/SPAN> &lt;SPAN class=n>axs&lt;\/SPAN>&lt;SPAN class=p>[:,&lt;\/SPAN> &lt;SPAN class=n>devs&lt;\/SPAN>&lt;SPAN class=o>.&lt;\/SPAN>&lt;SPAN class=n>index&lt;\/SPAN>&lt;SPAN class=p>(&lt;\/SPAN>&lt;SPAN class=n>dev&lt;\/SPAN>&lt;SPAN class=p>)]&lt;\/SPAN>         &lt;SPAN class=k>elif&lt;\/SPAN> &lt;SPAN class=nb>isinstance&lt;\/SPAN>&lt;SPAN class=p>(&lt;\/SPAN>&lt;SPAN class=n>axs&lt;\/SPAN>&lt;SPAN class=p>[&lt;\/SPAN>&lt;SPAN class=mi>0&lt;\/SPAN>&lt;SPAN class=p>],&lt;\/SPAN> &lt;SPAN class=n>numpy&lt;\/SPAN>&lt;SPAN class=o>.&lt;\/SPAN>&lt;SPAN class=n>ndarray&lt;\/SPAN>&lt;SPAN class=p>)&lt;\/SPAN> &lt;SPAN class=ow>and&lt;\/SPAN> &lt;SPAN class=n>dev_placement&lt;\/SPAN> &lt;SPAN class=o>==&lt;\/SPAN> &lt;SPAN class=s1>'row'&lt;\/SPAN>&lt;SPAN class=p>:&lt;\/SPAN>  &lt;SPAN class=c1># 2-D \u043d\u0430\u0431\u043e\u0440 \u0440\u0438\u0441\u0443\u043d\u043a\u043e\u0432&lt;\/SPAN>             &lt;SPAN class=n>axrow&lt;\/SPAN> &lt;SPAN class=o>=&lt;\/SPAN> &lt;SPAN class=n>axs&lt;\/SPAN>&lt;SPAN class=p>[&lt;\/SPAN>&lt;SPAN class=n>devs&lt;\/SPAN>&lt;SPAN class=o>.&lt;\/SPAN>&lt;SPAN class=n>index&lt;\/SPAN>&lt;SPAN class=p>(&lt;\/SPAN>&lt;SPAN class=n>dev&lt;\/SPAN>&lt;SPAN class=p>),&lt;\/SPAN> &lt;SPAN class=p>:]&lt;\/SPAN>          &lt;SPAN class=c1># \u043f\u043e\u0434\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0433\u0440\u0430\u0444\u0438\u043a\u0438 \u0432\u0432\u0435\u0440\u0445\u0443 \u0438 \u0441\u043b\u0435\u0432\u0430&lt;\/SPAN>         &lt;SPAN class=k>if&lt;\/SPAN> &lt;SPAN class=n>dev_placement&lt;\/SPAN> &lt;SPAN class=o>==&lt;\/SPAN> &lt;SPAN class=s1>'col'&lt;\/SPAN>&lt;SPAN class=p>:&lt;\/SPAN>             &lt;SPAN class=p>[&lt;\/SPAN>&lt;SPAN class=n>ax&lt;\/SPAN>&lt;SPAN class=o>.&lt;\/SPAN>&lt;SPAN class=n>set_ylabel&lt;\/SPAN>&lt;SPAN class=p>(&lt;\/SPAN>&lt;SPAN class=n>fd&lt;\/SPAN>&lt;SPAN class=p>[&lt;\/SPAN>&lt;SPAN class=s1>'labels'&lt;\/SPAN>&lt;SPAN class=p>])&lt;\/SPAN> &lt;SPAN class=k>for&lt;\/SPAN> &lt;SPAN class=n>ax&lt;\/SPAN>&lt;SPAN class=p>,&lt;\/SPAN> &lt;SPAN class=n>fd&lt;\/SPAN> &lt;SPAN class=ow>in&lt;\/SPAN> &lt;SPAN class=nb>zip&lt;\/SPAN>&lt;SPAN class=p>(&lt;\/SPAN>&lt;SPAN class=n>axrow&lt;\/SPAN>&lt;SPAN class=p>,&lt;\/SPAN> &lt;SPAN class=n>conf&lt;\/SPAN>&lt;SPAN class=o>.&lt;\/SPAN>&lt;SPAN class=n>figures&lt;\/SPAN>&lt;SPAN class=p>)&lt;\/SPAN> &lt;SPAN class=k>if&lt;\/SPAN> &lt;SPAN class=n>devs&lt;\/SPAN>&lt;SPAN class=o>.&lt;\/SPAN>&lt;SPAN class=n>index&lt;\/SPAN>&lt;SPAN class=p>(&lt;\/SPAN>&lt;SPAN class=n>dev&lt;\/SPAN>&lt;SPAN class=p>)&lt;\/SPAN> &lt;SPAN class=o>==&lt;\/SPAN> &lt;SPAN class=mi>0&lt;\/SPAN>&lt;SPAN class=p>]&lt;\/SPAN>  &lt;SPAN class=c1># \u0441\u043b\u0435\u0432\u0430 \u043c\u0435\u0442\u0440\u0438\u043a\u0438&lt;\/SPAN>             &lt;SPAN class=n>axrow&lt;\/SPAN>&lt;SPAN class=p>[&lt;\/SPAN>&lt;SPAN class=mi>0&lt;\/SPAN>&lt;SPAN class=p>]&lt;\/SPAN>&lt;SPAN class=o>.&lt;\/SPAN>&lt;SPAN class=n>set_title&lt;\/SPAN>&lt;SPAN class=p>(&lt;\/SPAN>&lt;SPAN class=sa>f&lt;\/SPAN>&lt;SPAN class=s2>\"&lt;\/SPAN>&lt;SPAN class=si>{&lt;\/SPAN>&lt;SPAN class=n>dev&lt;\/SPAN>&lt;SPAN class=si>}&lt;\/SPAN>&lt;SPAN class=s2> (&lt;\/SPAN>&lt;SPAN class=si>{&lt;\/SPAN>&lt;SPAN class=n>dev_desc&lt;\/SPAN>&lt;SPAN class=o>.&lt;\/SPAN>&lt;SPAN class=n>get&lt;\/SPAN>&lt;SPAN class=p>(&lt;\/SPAN>&lt;SPAN class=n>dev&lt;\/SPAN>&lt;SPAN class=p>,&lt;\/SPAN> &lt;SPAN class=kc>None&lt;\/SPAN>&lt;SPAN class=p>)&lt;\/SPAN>&lt;SPAN class=si>}&lt;\/SPAN>&lt;SPAN class=s2>)\"&lt;\/SPAN> &lt;SPAN class=k>if&lt;\/SPAN> &lt;SPAN class=n>dev_desc&lt;\/SPAN> &lt;SPAN class=k>else&lt;\/SPAN> &lt;SPAN class=sa>f&lt;\/SPAN>&lt;SPAN class=s2>\"&lt;\/SPAN>&lt;SPAN class=si>{&lt;\/SPAN>&lt;SPAN class=n>dev&lt;\/SPAN>&lt;SPAN class=si>}&lt;\/SPAN>&lt;SPAN class=s2>\"&lt;\/SPAN>&lt;SPAN class=p>)&lt;\/SPAN>  &lt;SPAN class=c1># \u0432\u0435\u0440\u0445\u0443 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430&lt;\/SPAN>         &lt;SPAN class=k>elif&lt;\/SPAN> &lt;SPAN class=n>dev_placement&lt;\/SPAN> &lt;SPAN class=o>==&lt;\/SPAN> &lt;SPAN class=s1>'row'&lt;\/SPAN>&lt;SPAN class=p>:&lt;\/SPAN>             &lt;SPAN class=p>[&lt;\/SPAN>&lt;SPAN class=n>ax&lt;\/SPAN>&lt;SPAN class=o>.&lt;\/SPAN>&lt;SPAN class=n>set_title&lt;\/SPAN>&lt;SPAN class=p>(&lt;\/SPAN>&lt;SPAN class=sa>f&lt;\/SPAN>&lt;SPAN class=s2>\"&lt;\/SPAN>&lt;SPAN class=si>{&lt;\/SPAN>&lt;SPAN class=n>fd&lt;\/SPAN>&lt;SPAN class=p>[&lt;\/SPAN>&lt;SPAN class=s1>'labels'&lt;\/SPAN>&lt;SPAN class=p>]&lt;\/SPAN>&lt;SPAN class=si>}&lt;\/SPAN>&lt;SPAN class=s2>\"&lt;\/SPAN>&lt;SPAN class=p>)&lt;\/SPAN> &lt;SPAN class=k>for&lt;\/SPAN> &lt;SPAN class=n>ax&lt;\/SPAN>&lt;SPAN class=p>,&lt;\/SPAN> &lt;SPAN class=n>fd&lt;\/SPAN> &lt;SPAN class=ow>in&lt;\/SPAN> &lt;SPAN class=nb>zip&lt;\/SPAN>&lt;SPAN class=p>(&lt;\/SPAN>&lt;SPAN class=n>axrow&lt;\/SPAN>&lt;SPAN class=p>,&lt;\/SPAN> &lt;SPAN class=n>conf&lt;\/SPAN>&lt;SPAN class=o>.&lt;\/SPAN>&lt;SPAN class=n>figures&lt;\/SPAN>&lt;SPAN class=p>)&lt;\/SPAN> &lt;SPAN class=k>if&lt;\/SPAN> &lt;SPAN class=n>devs&lt;\/SPAN>&lt;SPAN class=o>.&lt;\/SPAN>&lt;SPAN class=n>index&lt;\/SPAN>&lt;SPAN class=p>(&lt;\/SPAN>&lt;SPAN class=n>dev&lt;\/SPAN>&lt;SPAN class=p>)&lt;\/SPAN> &lt;SPAN class=o>==&lt;\/SPAN> &lt;SPAN class=mi>0&lt;\/SPAN>&lt;SPAN class=p>]&lt;\/SPAN>  &lt;SPAN class=c1># \u0432\u0435\u0440\u0445\u0443 \u043c\u0435\u0442\u0440\u0438\u043a\u0438&lt;\/SPAN>             &lt;SPAN class=n>axrow&lt;\/SPAN>&lt;SPAN class=p>[&lt;\/SPAN>&lt;SPAN class=mi>0&lt;\/SPAN>&lt;SPAN class=p>]&lt;\/SPAN>&lt;SPAN class=o>.&lt;\/SPAN>&lt;SPAN class=n>set_ylabel&lt;\/SPAN>&lt;SPAN class=p>(&lt;\/SPAN>&lt;SPAN class=sa>f&lt;\/SPAN>&lt;SPAN class=s2>\"&lt;\/SPAN>&lt;SPAN class=si>{&lt;\/SPAN>&lt;SPAN class=n>dev&lt;\/SPAN>&lt;SPAN class=si>}&lt;\/SPAN>&lt;SPAN class=s2> (&lt;\/SPAN>&lt;SPAN class=si>{&lt;\/SPAN>&lt;SPAN class=n>dev_desc&lt;\/SPAN>&lt;SPAN class=o>.&lt;\/SPAN>&lt;SPAN class=n>get&lt;\/SPAN>&lt;SPAN class=p>(&lt;\/SPAN>&lt;SPAN class=n>dev&lt;\/SPAN>&lt;SPAN class=p>,&lt;\/SPAN> &lt;SPAN class=kc>None&lt;\/SPAN>&lt;SPAN class=p>)&lt;\/SPAN>&lt;SPAN class=si>}&lt;\/SPAN>&lt;SPAN class=s2>)\"&lt;\/SPAN> &lt;SPAN class=k>if&lt;\/SPAN> &lt;SPAN class=n>dev_desc&lt;\/SPAN> &lt;SPAN class=k>else&lt;\/SPAN> &lt;SPAN class=sa>f&lt;\/SPAN>&lt;SPAN class=s2>\"&lt;\/SPAN>&lt;SPAN class=si>{&lt;\/SPAN>&lt;SPAN class=n>dev&lt;\/SPAN>&lt;SPAN class=si>}&lt;\/SPAN>&lt;SPAN class=s2>\"&lt;\/SPAN>&lt;SPAN class=p>)&lt;\/SPAN>  &lt;SPAN class=c1># \u0441\u043b\u0435\u0432\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430&lt;\/SPAN>          &lt;SPAN class=k>for&lt;\/SPAN> &lt;SPAN class=n>ax&lt;\/SPAN>&lt;SPAN class=p>,&lt;\/SPAN> &lt;SPAN class=n>fd&lt;\/SPAN> &lt;SPAN class=ow>in&lt;\/SPAN> &lt;SPAN class=nb>zip&lt;\/SPAN>&lt;SPAN class=p>(&lt;\/SPAN>&lt;SPAN class=n>axrow&lt;\/SPAN>&lt;SPAN class=p>,&lt;\/SPAN> &lt;SPAN class=n>conf&lt;\/SPAN>&lt;SPAN class=o>.&lt;\/SPAN>&lt;SPAN class=n>figures&lt;\/SPAN>&lt;SPAN class=p>):&lt;\/SPAN>  &lt;SPAN class=c1># \u043f\u0440\u0438 \u043e\u0442\u043b\u0430\u0434\u043a\u0435 \u043c\u043e\u0436\u043d\u043e \u043b\u0438\u0431\u043e \u0441\u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0432\u0430\u0442\u044c \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u0438 \u043b\u0438\u0431\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 Watches \u043a\u043e\u043c\u0430\u043d\u0434\u044b fig.xxx \u0438 plt.show() \u0447\u0442\u043e\u0431\u044b \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0442\u044c \u0437\u0430 \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435\u043c \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0432&lt;\/SPAN>             &lt;SPAN class=n>metric_exist&lt;\/SPAN> &lt;SPAN class=o>=&lt;\/SPAN> &lt;SPAN class=p>[&lt;\/SPAN>&lt;SPAN class=n>c&lt;\/SPAN> &lt;SPAN class=k>for&lt;\/SPAN> &lt;SPAN class=n>c&lt;\/SPAN> &lt;SPAN class=ow>in&lt;\/SPAN> &lt;SPAN class=n>fd&lt;\/SPAN>&lt;SPAN class=p>[&lt;\/SPAN>&lt;SPAN class=s1>'metrics'&lt;\/SPAN>&lt;SPAN class=p>]&lt;\/SPAN> &lt;SPAN class=k>if&lt;\/SPAN> &lt;SPAN class=n>c&lt;\/SPAN> &lt;SPAN class=ow>in&lt;\/SPAN> &lt;SPAN class=n>df&lt;\/SPAN>&lt;SPAN class=o>.&lt;\/SPAN>&lt;SPAN class=n>columns&lt;\/SPAN>&lt;SPAN class=p>]&lt;\/SPAN>  &lt;SPAN class=c1># \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u0432 json \u043c\u0435\u0442\u0440\u0438\u043a&lt;\/SPAN>             &lt;SPAN class=n>ax&lt;\/SPAN>&lt;SPAN class=o>.&lt;\/SPAN>&lt;SPAN class=n>plot&lt;\/SPAN>&lt;SPAN class=p>(&lt;\/SPAN>&lt;SPAN class=n>df&lt;\/SPAN>&lt;SPAN class=o>.&lt;\/SPAN>&lt;SPAN class=n>index&lt;\/SPAN>&lt;SPAN class=o>.&lt;\/SPAN>&lt;SPAN class=n>values&lt;\/SPAN>&lt;SPAN class=p>,&lt;\/SPAN> &lt;SPAN class=n>df&lt;\/SPAN>&lt;SPAN class=p>[&lt;\/SPAN>&lt;SPAN class=n>metric_exist&lt;\/SPAN>&lt;SPAN class=p>])&lt;\/SPAN>              &lt;SPAN class=n>ax&lt;\/SPAN>&lt;SPAN class=o>.&lt;\/SPAN>&lt;SPAN class=n>grid&lt;\/SPAN>&lt;SPAN class=p>(&lt;\/SPAN>&lt;SPAN class=n>axis&lt;\/SPAN>&lt;SPAN class=o>=&lt;\/SPAN>&lt;SPAN class=s1>'x'&lt;\/SPAN>&lt;SPAN class=p>)&lt;\/SPAN>             &lt;SPAN class=n>ax&lt;\/SPAN>&lt;SPAN class=o>.&lt;\/SPAN>&lt;SPAN class=n>grid&lt;\/SPAN>&lt;SPAN class=p>(&lt;\/SPAN>&lt;SPAN class=n>axis&lt;\/SPAN>&lt;SPAN class=o>=&lt;\/SPAN>&lt;SPAN class=s1>'y'&lt;\/SPAN>&lt;SPAN class=p>)&lt;\/SPAN>              &lt;SPAN class=c1># ax.xaxis.set_major_locator(mdates.DayLocator((1, 15)))&lt;\/SPAN>             &lt;SPAN class=n>ax&lt;\/SPAN>&lt;SPAN class=o>.&lt;\/SPAN>&lt;SPAN class=n>xaxis&lt;\/SPAN>&lt;SPAN class=o>.&lt;\/SPAN>&lt;SPAN class=n>set_major_formatter&lt;\/SPAN>&lt;SPAN class=p>(&lt;\/SPAN>&lt;SPAN class=n>mpl_dates&lt;\/SPAN>&lt;SPAN class=o>.&lt;\/SPAN>&lt;SPAN class=n>DateFormatter&lt;\/SPAN>&lt;SPAN class=p>(&lt;\/SPAN>&lt;SPAN class=s2>\"&lt;\/SPAN>&lt;SPAN class=si>%d&lt;\/SPAN>&lt;SPAN class=s2> %b %H:%M\"&lt;\/SPAN>&lt;SPAN class=p>))&lt;\/SPAN>             &lt;SPAN class=n>ax&lt;\/SPAN>&lt;SPAN class=o>.&lt;\/SPAN>&lt;SPAN class=n>yaxis&lt;\/SPAN>&lt;SPAN class=o>.&lt;\/SPAN>&lt;SPAN class=n>set_major_formatter&lt;\/SPAN>&lt;SPAN class=p>(&lt;\/SPAN>&lt;SPAN class=n>EngFormatter&lt;\/SPAN>&lt;SPAN class=p>(&lt;\/SPAN>&lt;SPAN class=n>fd&lt;\/SPAN>&lt;SPAN class=p>[&lt;\/SPAN>&lt;SPAN class=s1>'units'&lt;\/SPAN>&lt;SPAN class=p>]))&lt;\/SPAN>              &lt;SPAN class=c1># \u043d\u043e\u043c\u0435\u0440 \u0440\u0438\u0441\u0443\u043d\u043a\u0430&lt;\/SPAN>             &lt;SPAN class=n>n&lt;\/SPAN> &lt;SPAN class=o>=&lt;\/SPAN> &lt;SPAN class=sa>f&lt;\/SPAN>&lt;SPAN class=s2>\"#&lt;\/SPAN>&lt;SPAN class=si>{&lt;\/SPAN>&lt;SPAN class=n>files&lt;\/SPAN>&lt;SPAN class=o>.&lt;\/SPAN>&lt;SPAN class=n>index&lt;\/SPAN>&lt;SPAN class=p>(&lt;\/SPAN>&lt;SPAN class=n>file&lt;\/SPAN>&lt;SPAN class=p>)&lt;\/SPAN> &lt;SPAN class=o>+&lt;\/SPAN> &lt;SPAN class=mi>1&lt;\/SPAN>&lt;SPAN class=si>}{&lt;\/SPAN>&lt;SPAN class=n>devs&lt;\/SPAN>&lt;SPAN class=o>.&lt;\/SPAN>&lt;SPAN class=n>index&lt;\/SPAN>&lt;SPAN class=p>(&lt;\/SPAN>&lt;SPAN class=n>dev&lt;\/SPAN>&lt;SPAN class=p>)&lt;\/SPAN> &lt;SPAN class=o>+&lt;\/SPAN> &lt;SPAN class=mi>1&lt;\/SPAN>&lt;SPAN class=si>}{&lt;\/SPAN>&lt;SPAN class=n>conf&lt;\/SPAN>&lt;SPAN class=o>.&lt;\/SPAN>&lt;SPAN class=n>figures&lt;\/SPAN>&lt;SPAN class=o>.&lt;\/SPAN>&lt;SPAN class=n>index&lt;\/SPAN>&lt;SPAN class=p>(&lt;\/SPAN>&lt;SPAN class=n>fd&lt;\/SPAN>&lt;SPAN class=p>)&lt;\/SPAN> &lt;SPAN class=o>+&lt;\/SPAN> &lt;SPAN class=mi>1&lt;\/SPAN>&lt;SPAN class=si>}&lt;\/SPAN>&lt;SPAN class=s2>\"&lt;\/SPAN>             &lt;SPAN class=n>ax&lt;\/SPAN>&lt;SPAN class=o>.&lt;\/SPAN>&lt;SPAN class=n>set_title&lt;\/SPAN>&lt;SPAN class=p>(&lt;\/SPAN>&lt;SPAN class=sa>f&lt;\/SPAN>&lt;SPAN class=s2>\"&lt;\/SPAN>&lt;SPAN class=si>{&lt;\/SPAN>&lt;SPAN class=n>ax&lt;\/SPAN>&lt;SPAN class=o>.&lt;\/SPAN>&lt;SPAN class=n>get_title&lt;\/SPAN>&lt;SPAN class=p>()&lt;\/SPAN>&lt;SPAN class=si>}&lt;\/SPAN>&lt;SPAN class=s2> &lt;\/SPAN>&lt;SPAN class=se>\\n&lt;\/SPAN>&lt;SPAN class=si>{&lt;\/SPAN>&lt;SPAN class=n>n&lt;\/SPAN>&lt;SPAN class=si>}&lt;\/SPAN>&lt;SPAN class=s2>\"&lt;\/SPAN> &lt;SPAN class=k>if&lt;\/SPAN> &lt;SPAN class=n>ax&lt;\/SPAN>&lt;SPAN class=o>.&lt;\/SPAN>&lt;SPAN class=n>get_title&lt;\/SPAN>&lt;SPAN class=p>()&lt;\/SPAN> &lt;SPAN class=k>else&lt;\/SPAN> &lt;SPAN class=sa>f&lt;\/SPAN>&lt;SPAN class=s2>\"&lt;\/SPAN>&lt;SPAN class=se>\\n&lt;\/SPAN>&lt;SPAN class=si>{&lt;\/SPAN>&lt;SPAN class=n>n&lt;\/SPAN>&lt;SPAN class=si>}&lt;\/SPAN>&lt;SPAN class=s2>\"&lt;\/SPAN>&lt;SPAN class=p>)&lt;\/SPAN>             &lt;SPAN class=n>ax&lt;\/SPAN>&lt;SPAN class=o>.&lt;\/SPAN>&lt;SPAN class=n>legend&lt;\/SPAN>&lt;SPAN class=p>(&lt;\/SPAN>&lt;SPAN class=n>fd&lt;\/SPAN>&lt;SPAN class=o>.&lt;\/SPAN>&lt;SPAN class=n>get&lt;\/SPAN>&lt;SPAN class=p>(&lt;\/SPAN>&lt;SPAN class=s1>'legends'&lt;\/SPAN>&lt;SPAN class=p>,&lt;\/SPAN> &lt;SPAN class=n>fd&lt;\/SPAN>&lt;SPAN class=p>[&lt;\/SPAN>&lt;SPAN class=s1>'metrics'&lt;\/SPAN>&lt;SPAN class=p>]),&lt;\/SPAN> &lt;SPAN class=n>fontsize&lt;\/SPAN>&lt;SPAN class=o>=&lt;\/SPAN>&lt;SPAN class=mi>8&lt;\/SPAN>&lt;SPAN class=p>,&lt;\/SPAN> &lt;SPAN class=n>loc&lt;\/SPAN>&lt;SPAN class=o>=&lt;\/SPAN>&lt;SPAN class=s1>'upper left'&lt;\/SPAN>&lt;SPAN class=p>,&lt;\/SPAN> &lt;SPAN class=n>bbox_to_anchor&lt;\/SPAN>&lt;SPAN class=o>=&lt;\/SPAN>&lt;SPAN class=p>(&lt;\/SPAN>&lt;SPAN class=mf>1.&lt;\/SPAN>&lt;SPAN class=p>,&lt;\/SPAN> &lt;SPAN class=mf>1.&lt;\/SPAN>&lt;SPAN class=p>,&lt;\/SPAN> &lt;SPAN class=mf>0.&lt;\/SPAN>&lt;SPAN class=p>,&lt;\/SPAN> &lt;SPAN class=mf>0.&lt;\/SPAN>&lt;SPAN class=p>))&lt;\/SPAN>  &lt;SPAN class=c1># 1\u044f, \u043e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u043b\u0435\u0433\u0435\u043d\u0434\u0430 \u0441 \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u043a\u043e\u0439 \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0432&lt;\/SPAN>             &lt;SPAN class=c1># ax.add_artist(ax.legend([f\"{n}\"], fontsize=8, numpoints=1000, loc='upper left', bbox_to_anchor=(1., 1., 0., 0.)))  # 2\u044f \u043b\u0435\u0433\u0435\u043d\u0434\u0430 \u0441 \u043d\u043e\u043c\u0435\u0440\u043e\u043c \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438&lt;\/SPAN>      &lt;SPAN class=k>if&lt;\/SPAN> &lt;SPAN class=n>dev_placement&lt;\/SPAN> &lt;SPAN class=o>==&lt;\/SPAN> &lt;SPAN class=s1>'col'&lt;\/SPAN>&lt;SPAN class=p>:&lt;\/SPAN>         &lt;SPAN class=n>fig&lt;\/SPAN>&lt;SPAN class=o>.&lt;\/SPAN>&lt;SPAN class=n>suptitle&lt;\/SPAN>&lt;SPAN class=p>(&lt;\/SPAN>&lt;SPAN class=sa>f&lt;\/SPAN>&lt;SPAN class=s2>\"Fig. &lt;\/SPAN>&lt;SPAN class=si>{&lt;\/SPAN>&lt;SPAN class=n>files&lt;\/SPAN>&lt;SPAN class=o>.&lt;\/SPAN>&lt;SPAN class=n>index&lt;\/SPAN>&lt;SPAN class=p>(&lt;\/SPAN>&lt;SPAN class=n>file&lt;\/SPAN>&lt;SPAN class=p>)&lt;\/SPAN> &lt;SPAN class=o>+&lt;\/SPAN> &lt;SPAN class=mi>1&lt;\/SPAN>&lt;SPAN class=si>}&lt;\/SPAN>&lt;SPAN class=s2> - '&lt;\/SPAN>&lt;SPAN class=si>{&lt;\/SPAN>&lt;SPAN class=n>file&lt;\/SPAN>&lt;SPAN class=si>}&lt;\/SPAN>&lt;SPAN class=s2>'&lt;\/SPAN>&lt;SPAN class=se>\\n&lt;\/SPAN>&lt;SPAN class=s2>\"&lt;\/SPAN>&lt;SPAN class=p>)&lt;\/SPAN>     &lt;SPAN class=k>else&lt;\/SPAN>&lt;SPAN class=p>:&lt;\/SPAN>         &lt;SPAN class=n>fig&lt;\/SPAN>&lt;SPAN class=o>.&lt;\/SPAN>&lt;SPAN class=n>suptitle&lt;\/SPAN>&lt;SPAN class=p>(&lt;\/SPAN>&lt;SPAN class=sa>f&lt;\/SPAN>&lt;SPAN class=s2>\"Fig. &lt;\/SPAN>&lt;SPAN class=si>{&lt;\/SPAN>&lt;SPAN class=n>files&lt;\/SPAN>&lt;SPAN class=o>.&lt;\/SPAN>&lt;SPAN class=n>index&lt;\/SPAN>&lt;SPAN class=p>(&lt;\/SPAN>&lt;SPAN class=n>file&lt;\/SPAN>&lt;SPAN class=p>)&lt;\/SPAN> &lt;SPAN class=o>+&lt;\/SPAN> &lt;SPAN class=mi>1&lt;\/SPAN>&lt;SPAN class=si>}&lt;\/SPAN>&lt;SPAN class=s2> - '&lt;\/SPAN>&lt;SPAN class=si>{&lt;\/SPAN>&lt;SPAN class=n>file&lt;\/SPAN>&lt;SPAN class=si>}&lt;\/SPAN>&lt;SPAN class=s2>'\"&lt;\/SPAN>&lt;SPAN class=p>)&lt;\/SPAN>     &lt;SPAN class=n>fig&lt;\/SPAN>&lt;SPAN class=o>.&lt;\/SPAN>&lt;SPAN class=n>patch&lt;\/SPAN>&lt;SPAN class=o>.&lt;\/SPAN>&lt;SPAN class=n>set_facecolor&lt;\/SPAN>&lt;SPAN class=p>(&lt;\/SPAN>&lt;SPAN class=s1>'white'&lt;\/SPAN>&lt;SPAN class=p>)&lt;\/SPAN>     &lt;SPAN class=n>fig&lt;\/SPAN>&lt;SPAN class=o>.&lt;\/SPAN>&lt;SPAN class=n>autofmt_xdate&lt;\/SPAN>&lt;SPAN class=p>(&lt;\/SPAN>&lt;SPAN class=n>rotation&lt;\/SPAN>&lt;SPAN class=o>=&lt;\/SPAN>&lt;SPAN class=mi>45&lt;\/SPAN>&lt;SPAN class=p>)&lt;\/SPAN>     &lt;SPAN class=n>fig&lt;\/SPAN>&lt;SPAN class=o>.&lt;\/SPAN>&lt;SPAN class=n>tight_layout&lt;\/SPAN>&lt;SPAN class=p>()&lt;\/SPAN>     &lt;SPAN class=n>plt&lt;\/SPAN>&lt;SPAN class=o>.&lt;\/SPAN>&lt;SPAN class=n>show&lt;\/SPAN>&lt;SPAN class=p>()&lt;\/SPAN>  # bbox_to_anchor=(1., 0., 0., 0.)), loc='center left' #                  \\   \\   \\   \\            &lt;\/SPAN> #                   \\   \\   \\   \\            - \u0442\u043e\u0447\u043a\u0430 \u043b\u0435\u0433\u0435\u043d\u0434\u044b, \u043a \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0431\u0443\u0434\u0443\u0442 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u0441\u044f \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b #                    \\   \\   \\   ------------- \u0434\u0435\u043b\u044c\u0442\u0430 loc \u043f\u043e Y #                     \\   \\   ---------------- \u0434\u0435\u043b\u044c\u0442\u0430 loc \u043f\u043e X #                      \\   ------------------- \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0430 loc \u043f\u043e Y #                       ---------------------- \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0430 loc \u043f\u043e X # # Loc Number        Loc String #   0               best #   1               upper right #   2               upper left #   3               lower left #   4               lower right #   5               right #   6               center left #   7               center right #   8               lower center #   9               upper center #  10               center <\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043f\u0440\u0438\u043b\u043e\u0436\u0438\u0442\u044c \u043a \u0441\u0442\u0430\u0442\u044c\u0435 json-\u0444\u0430\u0439\u043b\u044b \u043d\u0438\u043a\u0430\u043a, \u043f\u043e\u0438\u0433\u0440\u0430\u0442\u044c\u0441\u044f \u0438 \u043f\u043e\u0449\u0443\u043f\u0430\u0442\u044c \u043c\u043e\u0436\u043d\u043e, \u0432\u0437\u044f\u0432 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 \u043f\u0430\u043f\u043a\u0438, <a href=\"https:\/\/nc.cloud4y.ru\/index.php\/s\/x36KRgX5ZjS8MbN\">\u043a\u043e\u0442\u043e\u0440\u0443\u044e \u044f \u043f\u043e\u043b\u043e\u0436\u0438\u043b \u0432 Nextcloud<\/a>. \u0415\u0441\u043b\u0438 \u0435\u0441\u0442\u044c \u0432\u043e\u043f\u0440\u043e\u0441\u044b \u2014 \u0437\u0430\u0434\u0430\u0432\u0430\u0439\u0442\u0435, \u043f\u043e\u0441\u0442\u0430\u0440\u0430\u044e\u0441\u044c \u043e\u0442\u0432\u0435\u0442\u0438\u0442\u044c.<\/p>\n<details class=\"spoiler\">\n<summary>\u041f\u0440\u0438\u043c\u0435\u0440 \u043a\u043e\u0434\u0430 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0438 \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0432 \u043f\u043e json-\u0444\u0430\u0439\u043b\u0430\u043c \u0438\u0437 \u043f\u0430\u043f\u043a\u0438 &#8216;.\/log_h-art&#8217;<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>import helper params = { 'files': helper.get_files(folder='log_h-art'),              # \u0441\u043f\u0438\u0441\u043e\u043a \u0444\u0430\u0439\u043b\u043e\u0432 \u0432 \u043f\u0430\u043f\u043a\u0435 folder='&lt;\u0438\u043c\u044f_\u0432\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0439_\u043f\u0430\u043f\u043a\u0438>', \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043d\u0443\u0436\u043d\u043e \u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0433\u0440\u0430\u0444\u0438\u043a\u0438 'w': 5,                                                     # \u0448\u0438\u0440\u0438\u043d\u0430 \u0433\u0440\u0430\u0444\u0438\u043a\u0430 'h': 4,                                                     # \u0432\u044b\u0441\u043e\u0442\u0430 \u0433\u0440\u0430\u0444\u0438\u043a\u0430 'datetime_format': None,                                    # \u0444\u043e\u0440\u043c\u0430\u0442 \u043e\u0442\u043c\u0435\u0442\u043e\u043a \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0432 json-\u0444\u0430\u0439\u043b\u0435 'first': 1,                                                 # \u043f\u0435\u0440\u0432\u0430\u044f \u0442\u043e\u0447\u043a\u0430 'last': -1,                                                 # \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044f\u044f \u0442\u043e\u0447\u043a\u0430 'dev_desc': {'sda': 'physical drive', 'sr0': 'cd-rom',},    # \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 (\u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 lvm-\u0442\u043e\u043c\u043e\u0432 \u043c\u043e\u0436\u043d\u043e \u0443\u0437\u043d\u0430\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 ls -l \/dev\/mapper) 'dev_placement': 'row',                                     # col row \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043c\u0435\u0442\u0440\u0438\u043a \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0432 \u0441\u0442\u043e\u043b\u0431\u0438\u043a \u0438\u043b\u0438 \u0432 \u0440\u044f\u0434 } helper.plot(**params)<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"v-portal\" style=\"display:none;\"><\/div>\n<\/div>\n<p> <!----> <!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/company\/cloud4y\/blog\/696550\/\"> https:\/\/habr.com\/ru\/company\/cloud4y\/blog\/696550\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p><em>\u0425\u0430\u0431\u0440, \u043f\u0440\u0438\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e! \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u0441 \u0432\u0430\u043c\u0438 \u0414\u043c\u0438\u0442\u0440\u0438\u0439 \u041c\u0438\u0445\u0430\u0439\u043b\u043e\u0432, \u0418\u0422-\u0438\u043d\u0436\u0435\u043d\u0435\u0440 Cloud4Y, \u0438 \u0432 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u043f\u043e\u0434\u0435\u043b\u044e\u0441\u044c \u0441 \u0432\u0430\u043c\u0438 \u043e\u043f\u044b\u0442\u043e\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u0434\u0438\u0441\u043a\u043e\u0432. \u0420\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u0438 \u043f\u043e\u043a\u0430\u0436\u0443, \u0447\u0442\u043e \u0442\u0443\u0442 \u0438 \u043a\u0430\u043a, \u0430 \u043f\u043e\u0449\u0443\u043f\u0430\u0442\u044c \u0432\u0441\u0451 \u0432\u0436\u0438\u0432\u0443\u044e \u0432\u044b \u0441\u043c\u043e\u0436\u0435\u0442\u0435, \u0432\u0437\u044f\u0432 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 \u043f\u0430\u043f\u043a\u0438, <\/em><a href=\"https:\/\/nc.cloud4y.ru\/index.php\/s\/x36KRgX5ZjS8MbN\"><em>\u043a\u043e\u0442\u043e\u0440\u0443\u044e \u044f \u043f\u043e\u043b\u043e\u0436\u0438\u043b \u0432 Nextcloud<\/em><\/a><em>. <\/em><\/p>\n<h4>\u0417\u0430\u0447\u0435\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c?<\/h4>\n<p>\u0412\u043e-\u043f\u0435\u0440\u0432\u044b\u0445, \u044d\u0442\u043e \u043e\u0434\u043d\u0430 \u0438\u0437 \u0447\u0430\u0441\u0442\u044b\u0445 \u0442\u0435\u043c \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0439 \u0432 \u0442\u0435\u0445\u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443. \u0418\u043d\u043e\u0433\u0434\u0430 \u043f\u0440\u0438\u0447\u0438\u043d\u0430 \u043b\u0435\u0436\u0438\u0442 \u043d\u0430 \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u0438: \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043a\u043b\u0438\u0435\u043d\u0442\u044b \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u044e\u0442 \u0447\u0442\u043e-\u043d\u0438\u0431\u0443\u0434\u044c \u0438\u0437 \u0441\u0435\u0440\u0438\u0438 CrystalMark \u0438 \u043f\u0440\u0438\u0441\u044b\u043b\u0430\u044e\u0442 \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442\u044b \u0437\u0430\u043c\u0435\u0440\u043e\u0432, \u0441\u043e\u043f\u0440\u043e\u0432\u043e\u0436\u0434\u0430\u044f \u0438\u0445 \u0441\u0432\u043e\u0435\u0439 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0446\u0438\u0435\u0439. \u0418\u043d\u044b\u0435 \u043e\u0431\u0440\u0430\u0449\u0430\u044e\u0442\u0441\u044f \u0441 \u043e\u0431\u0449\u0435\u0439 \u0436\u0430\u043b\u043e\u0431\u043e\u0439 \u043d\u0430 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u0443\u044e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0412\u041c \u0432 \u0446\u0435\u043b\u043e\u043c \u0438\u043b\u0438 \u0441\u0432\u043e\u0435\u0433\u043e \u041f\u041e\/\u0411\u0414. \u0412 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u0440\u0430\u0437\u0443\u043c\u0435\u0435\u0442\u0441\u044f, \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0431\u043e\u043b\u0435\u0435 \u0433\u043b\u0443\u0431\u043e\u043a\u0430\u044f \u0434\u0438\u0430\u0433\u043d\u043e\u0441\u0442\u0438\u043a\u0430. \u0412\u043e-\u0432\u0442\u043e\u0440\u044b\u0445, \u0441\u0430\u043c\u0438\u043c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e :). \u0422\u0430\u043a \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u043d\u043e\u0432\u044b\u0435 \u0438 \u0442\u0435\u043a\u0443\u0449\u0438\u0435 \u0442\u043e\u043c\u0430 \u0421\u0425\u0414 \u0438 \u0441\u0440\u0430\u0432\u043d\u0438\u0442\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u0431\u043e\u0439. \u041a\u0430\u043a \u0431\u044b \u0442\u0430\u043c \u043d\u0438 \u0431\u044b\u043b\u043e, \u043c\u0435\u0442\u043e\u0434\u0438\u043a\u0430 \u043f\u043b\u044e\u0441-\u043c\u0438\u043d\u0443\u0441 \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u0432 \u043e\u0431\u043e\u0438\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445.<\/p>\n<h4>\u0427\u0442\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f?<\/h4>\n<p>\u041c\u0435\u0442\u043e\u0434\u0438\u043a\u0430 \u043e\u0446\u0435\u043d\u0438\u0432\u0430\u0435\u0442 \u0434\u0438\u0441\u043a\u043e\u0432\u0443\u044e \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0438\u043c\u0435\u043d\u043d\u043e \u0432 \u0433\u043e\u0441\u0442\u0435\u0432\u043e\u0439 \u041e\u0421 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u044b. \u0415\u0441\u043b\u0438 \u0432 \u0441\u0430\u043c\u043e\u0439 \u041e\u0421 \u0432\u0441\u0451 \u0432 \u043f\u043e\u0440\u044f\u0434\u043a\u0435, \u044d\u0442\u043e \u043a\u043e\u0441\u0432\u0435\u043d\u043d\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u0446\u0435\u043d\u0438\u0442\u044c \u0441 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0439 \u0434\u043b\u044f \u0434\u0438\u0441\u043a\u0430 \u043f\u0440\u043e\u0444\u0438\u043b\u044c \u043d\u0430 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0435 \u043a\u0430\u043a \u0437\u0430\u044f\u0432\u043b\u0435\u043d\u043d\u044b\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c, \u0442\u0430\u043a \u0438 \u0441\u0432\u043e\u0438\u043c \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f\u043c. \u0418 \u043c\u043e\u0436\u043d\u043e \u043b\u0438\u0431\u043e \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u041f\u041e\/\u041e\u0421, \u043b\u0438\u0431\u043e \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u043d\u0430 \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0434\u0438\u0441\u043a\u043e\u0432\u044b\u0439 \u043f\u0440\u043e\u0444\u0438\u043b\u044c.<\/p>\n<h4>\u041a\u0430\u043a \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f?<\/h4>\n<p>\u0418\u0434\u0435\u044f \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0441\u0435\u0440\u0438\u0438 \u0437\u0430\u043c\u0435\u0440\u043e\u0432 \u0443\u0442\u0438\u043b\u0438\u0442\u043e\u0439 <code>iostat<\/code> \u0432 \u0442\u0435\u0447\u0435\u043d\u0438\u0438 \u0432\u0441\u0435\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0441 \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u043e\u043c \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u0439 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0432 \u0432\u0438\u0434\u0435 <code>fio<\/code>. \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u0441\u0440\u0430\u0432\u043d\u0438\u0442\u044c \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u0431\u043e\u0439 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u0438\u044f &#171;\u0445\u043e\u043b\u043e\u0441\u0442\u043e\u0433\u043e \u0445\u043e\u0434\u0430&#187; \u0438 \u043f\u043e\u0434 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u043e\u0439. \u041e\u0447\u0435\u043d\u044c \u0443\u0434\u043e\u0431\u043d\u043e, \u0447\u0442\u043e <strong>iostat<\/strong> \u0443\u043c\u0435\u0435\u0442 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 json. \u042d\u0442\u043e \u0438\u0437\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u043e\u0442 \u043a\u043e\u0441\u0442\u044b\u043b\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043e\u043a \u0434\u043b\u044f \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430 \u043a\u043e\u043d\u0441\u043e\u043b\u044c\u043d\u043e\u0433\u043e \u0432\u044b\u0432\u043e\u0434\u0430. \u041f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0435 json-\u0444\u0430\u0439\u043b\u044b \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a Pandas \u0438 MatPlotLib: \u0432 JupyterLab \u0441\u0442\u0440\u043e\u044f\u0442\u0441\u044f \u0433\u0440\u0430\u0444\u0438\u043a\u0438 \u0434\u043b\u044f \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u0433\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430.<\/p>\n<p>\u0420\u0430\u0431\u043e\u0442\u0430 \u0443\u0442\u0438\u043b\u0438\u0442 \u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0435 \u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0432 \u0432\u0438\u0434\u0435 json \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u043b\u0438 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0434\u0438\u0430\u0433\u043d\u043e\u0441\u0442\u0438\u043a\u0438. \u0421 \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b, \u044d\u0442\u043e \u0441\u0443\u0436\u0430\u0435\u0442 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u043c\u043e\u0441\u0442\u044c \u043c\u0435\u0442\u043e\u0434\u0438\u043a\u0438 \u0434\u043e \u043a\u0440\u0443\u0433\u0430 <code>*nix<\/code>-\u0441\u0438\u0441\u0442\u0435\u043c.<\/p>\n<h2>\u041f\u0440\u0430\u043a\u0442\u0438\u043a\u0430 \u21161<\/h2>\n<p>\u0422\u0435\u0441\u0442\u043e\u0432\u044b\u0439 \u0441\u0442\u0435\u043d\u0434 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u0412\u041c \u0441 <code>Ubuntu 20.04<\/code> \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0433\u043e\u0441\u0442\u0435\u0432\u043e\u0439 \u041e\u0421, CPU 2 \u044f\u0434\u0440\u0430, RAM 4 \u0413\u0411.<\/p>\n<p>Cloud4Y \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0434\u0438\u0441\u043a\u043e\u0432\u044b\u0445 \u043f\u043e\u043b\u0438\u0442\u0438\u043a \u043d\u0430 \u0432\u044b\u0431\u043e\u0440, \u043c\u044b \u043f\u043e\u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0443\u0435\u043c\u0441\u044f \u043d\u0430 \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u043e\u0439 \u0438\u0437 \u043d\u0438\u0445, <code>vcd-type-med<\/code>. \u0412 \u043a\u043e\u043d\u0444\u0438\u0433\u0435 <code>runfio.cfg<\/code> (\u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0432 \u041f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u043a \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435) \u043e\u0442\u0440\u0430\u0436\u0435\u043d\u044b \u0435\u0451 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0438\u0437 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0433\u043e \u0434\u043e\u0433\u043e\u0432\u043e\u0440\u0430:<\/p>\n<ul>\n<li>\n<p>\u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f, \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u0434\u0438\u0441\u043a\u0430, \u0434\u043e 1000 iops \u043d\u0430 \u0434\u0438\u0441\u043a \u0441 latency \u043c\u0435\u043d\u0435\u0435 30 \u043c\u0441 \u043f\u0440\u0438 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0435 <\/p>\n<\/li>\n<li>\n<p>70% \u043d\u0430 \u0447\u0442\u0435\u043d\u0438\u0435 <\/p>\n<\/li>\n<li>\n<p>30% \u043d\u0430 \u0437\u0430\u043f\u0438\u0441\u044c <\/p>\n<\/li>\n<li>\n<p>\u0431\u043b\u043e\u043a 4 \u041a\u0411 <\/p>\n<\/li>\n<li>\n<p>\u043f\u0440\u0438 50% random&#8217;\u0435 <\/p>\n<\/li>\n<\/ul>\n<p>\u0422. \u0435. \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u043c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0435 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0437\u0430\u044f\u0432\u043b\u0435\u043d\u043d\u044b\u043c. \u041f\u043e\u0441\u043b\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0442\u0435\u0441\u0442\u043e\u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u041d\u0430 \u0433\u0440\u0430\u0444\u0438\u043a\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u044b \u0432\u0441\u0435 \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u0435 \u043c\u0435\u0442\u0440\u0438\u043a\u0438, \u0441\u043e\u0431\u0440\u0430\u043d\u043d\u044b\u0435 \u0432 \u0433\u043e\u0441\u0442\u0435\u0432\u043e\u0439 \u041e\u0421. \u0422\u0435\u0441\u0442\u043e\u0432\u0430\u044f \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u043f\u043e\u0445\u043e\u0436\u0430 \u043d\u0430 \u0434\u0432\u0430 &#171;\u0432\u0435\u0440\u0431\u043b\u044e\u0436\u044c\u0438\u0445 \u0433\u043e\u0440\u0431\u0430&#187; \u0438 \u0441\u043e\u0441\u0442\u0430\u0432\u0438\u043b\u0430 700 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u043d\u0430 \u0447\u0442\u0435\u043d\u0438\u0435 \u0438 300 \u043d\u0430 \u0437\u0430\u043f\u0438\u0441\u044c \u043f\u0440\u0438 latency \u043e\u043a\u043e\u043b\u043e 1 \u043c\u0441, \u0447\u0442\u043e \u0435\u0449\u0451 \u043e\u0447\u0435\u043d\u044c \u0434\u0430\u043b\u0435\u043a\u043e \u0434\u043e \u043e\u0433\u043e\u0432\u043e\u0440\u0451\u043d\u043d\u044b\u0445 30 \u043c\u0441. \u0423\u0442\u0438\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0434\u0438\u0441\u043a\u0430 \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u043e \u0441\u043e\u0433\u043b\u0430\u0441\u0443\u0435\u0442\u0441\u044f \u0441 \u0442\u0435\u0441\u0442\u0430\u043c\u0438 \u2014 100% \u043f\u0440\u0438 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0435 \u0438 \u043e\u043a\u043e\u043b\u043e 0% \u0431\u0435\u0437 \u043d\u0435\u0451. \u0414\u043b\u0438\u043d\u0430 \u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u043f\u043e\u0434 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u043e\u0439 \u0431\u044b\u043b\u0430 \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 5 \u041a\u0411.<\/p>\n<p>\u0422\u0435\u0441\u0442 \u043f\u043e\u0434 100% \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u043e\u0439 \u043f\u0440\u043e\u0439\u0434\u0451\u043d. \u0418\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e, \u0430 \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0434\u0451\u0442 \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u0433\u0440\u0443\u0437\u043a\u0435 \u0438 \u043f\u043e\u0447\u0435\u043c\u0443?<\/p>\n<h2>\u041f\u0440\u0430\u043a\u0442\u0438\u043a\u0430 \u21162<\/h2>\n<details class=\"spoiler\">\n<summary>\u041f\u043e\u0434 \u0441\u043f\u043e\u0439\u043b\u0435\u0440\u043e\u043c \u0433\u0440\u0430\u0444\u0438\u043a\u0438 \u0434\u043b\u044f \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0432 50%, 100%, 200%, 500% \u0438 1000% \u043e\u0442 \u043d\u043e\u043c\u0438\u043d\u0430\u043b\u0430 <\/summary>\n<div class=\"spoiler__content\">\n<figure class=\"full-width\"><figcaption>fio rate 50%  graphs<\/figcaption><\/figure>\n<figure class=\"full-width\"><figcaption>fio rate 100% graphs<\/figcaption><\/figure>\n<figure class=\"full-width\"><figcaption>fio rate 200% graphs<\/figcaption><\/figure>\n<figure class=\"full-width\"><figcaption>fio rate 500% graphs<\/figcaption><\/figure>\n<figure class=\"full-width\"><figcaption>fio rate 1000% graphs<\/figcaption><\/figure>\n<\/p>\n<\/div>\n<\/details>\n<blockquote>\n<p>x10 \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 1000% \u043e\u0442 \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u043e\u0439 \u043d\u043e\u043c\u0438\u043d\u0430\u043b\u0430<\/p>\n<p>\u0442.\u0435. <strong>fio<\/strong> \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043b\u0430\u0441\u044c \u0441 \u043a\u043e\u043d\u0444\u0438\u0433\u043e\u043c <code>rate_iops=7000,3000,<\/code> \u0432\u043c\u0435\u0441\u0442\u043e \u043e\u0431\u044b\u0447\u043d\u044b\u0445 <code>700,300,<\/code><\/p>\n<\/blockquote>\n<p>\u041f\u043e\u043b\u043e\u0432\u0438\u043d\u043d\u0430\u044f \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u043d\u0438\u0447\u0435\u043c \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0438\u0430\u043b\u044c\u043d\u043e \u043d\u0435 \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0442 \u043f\u043e\u043b\u043d\u043e\u0439, \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0435 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u0433\u0440\u0443\u0437\u043a\u0435. \u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u0442\u0440\u0438 \u0433\u0440\u0430\u0444\u0438\u043a\u0430 \u043f\u043e \u0441\u0443\u0442\u0438 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b. \u0412\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u0443\u0442\u0438\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0434\u0438\u0441\u043a\u0430 \u0432 \u043c\u043e\u043c\u0435\u043d\u0442\u044b \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0442\u0430\u043a\u0436\u0435 \u0434\u043e\u0441\u0442\u0438\u0433\u0430\u0435\u0442 100%, \u043a\u0430\u043a \u0438 \u0440\u0430\u043d\u0435\u0435. IOPS&#8217;\u044b \u043f\u043e\u0434\u0440\u043e\u0441\u043b\u0438 \u043d\u0435\u043c\u043d\u043e\u0433\u043e, \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u043d\u0430 +20% \u043e\u0442 \u043d\u043e\u043c\u0438\u043d\u0430\u043b\u0430, \u0438 \u0441\u043e\u0441\u0442\u0430\u0432\u0438\u043b\u0438 800 \u043d\u0430 \u0437\u0430\u043f\u0438\u0441\u044c \u0438 400 \u043d\u0430 \u0447\u0442\u0435\u043d\u0438\u0435. \u0410 \u0432\u043e\u0442 \u0434\u043b\u0438\u043d\u0430 \u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u0438 latency \u0432\u044b\u0440\u043e\u0441\u043b\u0438 \u043c\u043d\u043e\u0433\u043e\u043a\u0440\u0430\u0442\u043d\u043e.<\/p>\n<p>\u041f\u043e\u0447\u0435\u043c\u0443 \u0442\u0430\u043a \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442?<\/p>\n<p>\u0414\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043a\u043e\u0433\u0434\u0430 \u0433\u043e\u0441\u0442\u0435\u0432\u0430\u044f \u041e\u0421 \u0432\u044b\u0445\u043e\u0434\u0438\u0442 <s>\u0438\u0437 \u0437\u043e\u043d\u044b \u043a\u043e\u043c\u0444\u043e\u0440\u0442\u0430<\/s> \u0437\u0430 \u0440\u0430\u043c\u043a\u0438 \u0434\u0438\u0441\u043a\u043e\u0432\u043e\u0439 \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0438, vSphere \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u0442\u0440\u043e\u0442\u0442\u043b\u0438\u043d\u0433: \u043f\u0440\u0438\u0442\u043e\u0440\u043c\u0430\u0436\u0438\u0432\u0430\u0435\u0442 &#171;\u043b\u0438\u0448\u043d\u0438\u0435&#187; IO-\u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438, \u043f\u043e\u043c\u0435\u0449\u0430\u044f \u0438\u0445 \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u043f\u0435\u0440\u0435\u0434 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u043e\u0439 \u043a \u0421\u0425\u0414 \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0412\u041c \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u0432 \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u0435 \u0433\u0440\u0430\u043d\u0438\u0446\u044b. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043f\u043e\u043f\u044b\u0442\u043a\u0438 \u0441\u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0442\u044c \u043d\u0430 \u0434\u0438\u0441\u043a\u0430\u0445 \u043f\u0440\u0438\u0432\u0435\u0434\u0443\u0442 \u043b\u0438\u0448\u044c \u043a \u043d\u0435\u043e\u0436\u0438\u0434\u0430\u043d\u043d\u044b\u043c \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c &#171;\u0442\u043e\u0440\u043c\u043e\u0437\u0430\u043c&#187; \u041f\u041e <em>by design<\/em>.<\/p>\n<h3>\u0412\u044b\u0432\u043e\u0434\u044b<\/h3>\n<p>\u0412 \u0438\u0442\u043e\u0433\u0435 \u0438\u043c\u0435\u0435\u043c \u0432\u043f\u043e\u043b\u043d\u0435 \u0440\u0430\u0431\u043e\u0447\u0438\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0434\u043b\u044f \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u0438 \u0434\u0438\u0430\u0433\u043d\u043e\u0441\u0442\u0438\u043a\u0438 \u0434\u0438\u0441\u043a\u043e\u0432\u043e\u0439 \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0434\u043e\u0439\u0434\u0451\u0442 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u043c\u0430\u0448\u0438\u043d, \u043d\u043e \u0438 \u0434\u043b\u044f &#171;\u0436\u0435\u043b\u0435\u0437\u043d\u044b\u0445&#187; \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432. \u0414\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u0439 \u043c\u043e\u0436\u043d\u043e \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0442\u044c \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0441\u0438\u043b\u044c\u043d\u043e, \u0430 \u0432\u043c\u0435\u0441\u0442\u0435 \u0438\u043b\u0438 \u0432\u043c\u0435\u0441\u0442\u043e \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u0439 fio-\u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0432\u043a\u043b\u044e\u0447\u0430\u0442\u044c\/\u0432\u044b\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u0431\u043e\u0435\u0432\u043e\u0435 \u041f\u041e. \u0422\u0430\u043a \u0434\u0438\u0430\u0433\u043d\u043e\u0441\u0442\u0438\u043a\u0430 \u0431\u0443\u0434\u0435\u0442 \u0433\u043b\u0443\u0431\u0436\u0435 \u0438 \u0432\u044b \u0441\u043c\u043e\u0436\u0435\u0442\u0435 \u0442\u043e\u0447\u043d\u0435\u0435 \u043b\u043e\u043a\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0431\u043e\u043b\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b \u0434\u0438\u0441\u043a\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u0432\u0438\u0434\u043d\u043e \u043a\u0430\u0440\u0442\u0438\u043d\u0443 \u0432 \u0446\u0435\u043b\u043e\u043c: \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0438 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430.<\/p>\n<p>\u041d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435 \u0443 \u043d\u0430\u0441 \u0431\u044b\u043b \u043a\u0435\u0439\u0441, \u043a\u043e\u0433\u0434\u0430 \u043a\u043b\u0438\u0435\u043d\u0442 \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u043b\u0441\u044f \u0441 \u043d\u0438\u0437\u043a\u043e\u0439 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e \u0441\u043e\u0444\u0442\u0430 \u043f\u043e \u043e\u0431\u0441\u0447\u0451\u0442\u0443 \u043a\u0443\u0431\u043e\u0432 \u0434\u0430\u043d\u043d\u044b\u0445. \u0421\u0435\u0440\u0432\u0435\u0440 \u0431\u044b\u043b &#171;\u0436\u0435\u043b\u0435\u0437\u043d\u044b\u0439&#187;, \u0431\u0435\u0437 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438. \u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u041f\u041e \u043e\u0442\u0432\u0435\u0447\u0430\u043b\u0438 \u043a\u043b\u0438\u0435\u043d\u0442\u0443, \u0447\u0442\u043e \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0432 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0434\u0438\u0441\u043a\u043e\u0432\u043e\u0439 \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u044b. \u041c\u044b \u043f\u0440\u043e\u0432\u0435\u043b\u0438 \u0434\u0438\u0430\u0433\u043d\u043e\u0441\u0442\u0438\u043a\u0443, \u0444\u0438\u043a\u0441\u0438\u0440\u0443\u044f \u043c\u0435\u0442\u0440\u0438\u043a\u0438 \u043d\u0430 \u043f\u0440\u043e\u0442\u044f\u0436\u0435\u043d\u0438\u0438 24 \u0447\u0430\u0441\u043e\u0432, \u0438 \u0434\u0430\u043b\u0438 \u043a\u043b\u0438\u0435\u043d\u0442\u0443 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u044b\u0439 \u043e\u0442\u0447\u0451\u0442, \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u0438\u0432 \u0435\u043c\u0443 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e \u0434\u043b\u044f \u0434\u0438\u0430\u043b\u043e\u0433\u0430 \u0441 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c\u0438 \u041f\u041e.<\/p>\n<p>\u041f\u043e\u0434 \u0441\u043f\u043e\u0439\u043b\u0435\u0440\u043e\u043c \u043d\u0438\u0436\u0435 \u2014 \u0433\u0440\u0430\u0444\u0438\u043a \u0438\u0437 \u044d\u0442\u043e\u0433\u043e \u043a\u0435\u0439\u0441\u0430, \u0432 \u0442. \u0447. \u043a\u0430\u043a \u0438\u043b\u043b\u044e\u0441\u0442\u0440\u0430\u0446\u0438\u044f \u0431\u043e\u043b\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b: \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0434\u0438\u0441\u043a\u0438 \u0431\u044b\u043b\u0438 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u044b \u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u044b\u0439 \u0440\u0435\u0439\u0434, \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u0430\u043d\u0430 LVM-\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0442\u043e\u043c\u043e\u0432.<\/p>\n<details class=\"spoiler\">\n<summary>\u0413\u0440\u0430\u0444\u0438\u043a<\/summary>\n<div class=\"spoiler__content\">\n<figure class=\"full-width\"><figcaption>complex disk subsystem graphs expample<\/figcaption><\/figure>\n<\/p>\n<\/div>\n<\/details>\n<h2>\u041f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f<\/h2>\n<h3>\u0421\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044b<\/h3>\n<ol>\n<li>\n<p><a href=\"https:\/\/core.vmware.com\/resource\/vsan-operations-guide#sec6732-sub5\">\u041e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u0430\u044f \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f VMWare<\/a> <\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/communities.vmware.com\/t5\/vSphere-Hypervisor-Discussions\/After-apply-the-DISK-IOPS-limit-my-storage-latency-increased\/m-p\/1344871\/highlight\/true#M2945\">\u041a\u0440\u0430\u0442\u043a\u043e \u043e \u0442\u0440\u043e\u0442\u043b\u0438\u043d\u0433\u0435 \u043f\u0440\u0438 \u043f\u0440\u0435\u0432\u044b\u0448\u0435\u043d\u0438\u0438 \u043b\u0438\u043c\u0438\u0442\u0430 IOPS<\/a> <\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/core.vmware.com\/blog\/performance-metrics-when-using-iops-limits-vsan-what-you-need-know\">\u0421\u0442\u0430\u0442\u044c\u044f VMWare \u043e \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u0430\u0445 \u043b\u0438\u043c\u0438\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f<\/a> <\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/www.vmgu.ru\/news\/vmware-vsphere-virtual-disk-vmdk-iops-limit\">\u0414\u043b\u044f \u0447\u0435\u0433\u043e \u043d\u0443\u0436\u043d\u044b \u043b\u0438\u043c\u0438\u0442\u044b<\/a> <\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/client.cloud4y.ru\/knowledgebase.php?action=displayarticle&amp;catid=71&amp;id=714\">\u0421\u0442\u0430\u0442\u044c\u044f \u0432 knowledge base Cloud4Y <\/a><\/p>\n<\/li>\n<\/ol>\n<h3>\u0417\u0430\u043f\u0443\u0441\u043a \u0442\u0435\u0441\u0442\u043e\u0432<\/h3>\n<pre><code>cat .\/runfio.cfg .\/runfio.sh    --repeat 2 --time  60 >> runfio.sh.log     &amp; .\/runiostat.sh --repeat 1 --count 30 >> runiostat.sh.log  &amp; <\/code><\/pre>\n<p>\u041d\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u0441\u044f \u0434\u0432\u0430\u0436\u0434\u044b \u043d\u0430 60 \u0441\u0435\u043a\u0443\u043d\u0434 \u0441 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u043e\u043c \u0432 60 \u0441\u0435\u043a\u0443\u043d\u0434, \u0442.\u0435. \u043f\u0435\u0440\u0432\u0430\u044f, \u0442\u0440\u0435\u0442\u044c\u044f \u0438 \u043f\u044f\u0442\u0430\u044f \u043c\u0438\u043d\u0443\u0442\u044b \u2014 \u0445\u043e\u043b\u043e\u0441\u0442\u043e\u0439 \u0445\u043e\u0434, \u0430 \u0432\u0442\u043e\u0440\u0430\u044f \u0438 \u0447\u0435\u0442\u0432\u0451\u0440\u0442\u0430\u044f \u2014 \u043f\u043e\u0434 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u043e\u0439.<\/p>\n<p>\u0417\u0430 \u044d\u0442\u043e \u0432\u0440\u0435\u043c\u044f \u0431\u0443\u0434\u0435\u0442 \u0441\u0434\u0435\u043b\u0430\u043d\u043e 30 \u0437\u0430\u043c\u0435\u0440\u043e\u0432 \u0441 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u043e\u043c \u0432 10 \u0441\u0435\u043a\u0443\u043d\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0437\u0430\u0434\u0430\u043d \u0432 \u0442\u0435\u043b\u0435 \u0441\u043a\u0440\u0438\u043f\u0442\u0430.<\/p>\n<pre><code>               minutes         | 1 | 2 | 3 | 4 | 5 | --------|---|---|---|---|---| iostat  | + | + | + | + | + | --------|---|---|---|---|---| fio     |   | + |   | + |   |<\/code><\/pre>\n<h4>\u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u0439 \u0438 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043d\u0430 Bash<\/h4>\n<details class=\"spoiler\">\n<summary>runfio.sh<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>#!\/usr\/bin\/env bash # https:\/\/brianchildress.co\/named-parameters-in-bash\/ repeat=${repeat:-1} time=${time:-10} while [ $# -gt 0 ]; do if [[ * ]]; then         param=\"\" class=\"formula inline\">{1\/--\/}\" declare \" class=\"formula inline\">2\" # echo $1 $2  # Optional to see the parameter:value result fi shift done for i in &lt;\/SPAN>seq &lt;SPAN class=m>1&lt;\/SPAN> &lt;SPAN class=nv>$repeat&lt;\/SPAN>&lt;SPAN class=sb>; do sleep &lt;SPAN class=nv>$time&lt;\/SPAN>  &lt;SPAN class=c1># fio   --bs=4k --rw=randrw --percentage_random=50 --rwmixread=70 --rwmixwrite=30 --direct=1 --iodepth=256 --time_based --group_reporting --name=iops-test-job --eta-newline=1 --numjobs=1 --filename=runfio.sh.test --runtime=$time --size=1GB --ioengine=libaio --rate_iops=700,300,&lt;\/SPAN>  fio --runtime&lt;SPAN class=o>=&lt;\/SPAN>&lt;SPAN class=nv>$time&lt;\/SPAN> --eta-newline&lt;SPAN class=o>=&lt;\/SPAN>&lt;SPAN class=m>1&lt;\/SPAN> runfio.cfg  done <\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>runfio.cfg<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>[c4y] bs=4k rw=randrw percentage_random=50 rwmixread=70 rwmixwrite=30 direct=1 iodepth=256 time_based group_reporting name=iops-test-job numjobs=1 filename=runfio.sh.test size=1GB ioengine=libaio rate_iops=700,300, <\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>runiostat.sh<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>#!\/usr\/bin\/env bash # https:\/\/brianchildress.co\/named-parameters-in-bash\/ repeat=${repeat:-1} count=${count:-1} while [ $# -gt 0 ]; do if [[ * ]]; then         param=\"\" class=\"formula inline\">{1\/--\/}\" declare \" class=\"formula inline\">2\" # echo $1 $2  # Optional to see the parameter:value result fi shift done for i in &lt;\/SPAN>seq &lt;SPAN class=m>1&lt;\/SPAN> &lt;SPAN class=nv>$repeat&lt;\/SPAN>&lt;SPAN class=sb>; do &lt;SPAN class=nv>dt&lt;\/SPAN>&lt;SPAN class=o>=&lt;\/SPAN>&lt;SPAN class=sb>`&lt;\/SPAN>date &lt;SPAN class=s1>'+%Y-%m-%d_%H-%M-%S'&lt;\/SPAN>&lt;SPAN class=sb>`&lt;\/SPAN>  &lt;SPAN class=nb>echo&lt;\/SPAN> &lt;SPAN class=s2>\"&lt;\/SPAN>&lt;SPAN class=nv>$i&lt;\/SPAN>&lt;SPAN class=s2>    &lt;\/SPAN>&lt;SPAN class=nv>$dt&lt;\/SPAN>&lt;SPAN class=s2>\"&lt;\/SPAN>  .\/sysstat\/iostat -x -t -o JSON &lt;SPAN class=m>10&lt;\/SPAN> &lt;SPAN class=nv>$count&lt;\/SPAN> &amp;gt; &lt;SPAN class=s2>\".\/runiostat.sh-&lt;\/SPAN>&lt;SPAN class=nv>$dt&lt;\/SPAN>&lt;SPAN class=s2>.json\"&lt;\/SPAN>  done <\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<h4>\u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0432 \u043d\u0430 Python3<\/h4>\n<details class=\"spoiler\">\n<summary>conf.py<\/summary>\n<div class=\"spoiler__content\">\n<pre><code># \u043c\u0430\u0441\u043a\u0430 \u0434\u043b\u044f \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u043f\u0438\u0441\u043a\u0430 \u0444\u0430\u0439\u043b\u043e\u0432 \u0432 \u043f\u043e\u0434\u043f\u0430\u043f\u043a\u0435 mask = '*.json' # \u043a\u043e\u0440\u043d\u0435\u0432\u0430\u044f \u043f\u0430\u043f\u043a\u0430 \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0440\u0430\u0431\u043e\u0447\u0435\u0439 \u043f\u0430\u043f\u043a\u043e\u0439 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e base_dir = '.' # \u0438\u0441\u043a\u043b\u044e\u0447\u0430\u044e\u0449\u0438\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u0430\u043f\u043e\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u044f get_folders \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u0442 exclude_dirs = ['pycache', '.idea', '.ipynb_checkpoints', '_shell-scripts', '__stuff'] # \u0438\u0441\u043a\u043b\u044e\u0447\u0430\u044e\u0449\u0438\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432, \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0433\u0440\u0430\u0444\u0438\u043a\u0438 exclude_dev = [ 'fd0', 'sr0', 'loop0', 'loop1', 'loop2', 'loop3', 'loop4', 'loop5', 'loop6', 'loop7', 'loop8', 'loop9', 'loop10', 'loop11', 'loop12', 'loop13', 'loop14', 'loop15', ] # \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0432: \u043a\u0430\u043a\u0443\u044e \u0433\u0440\u0443\u043f\u043f\u0443 \u043c\u0435\u0442\u0440\u0438\u043a \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u044c, \u043a\u0430\u043a \u043f\u043e\u0434\u043f\u0438\u0441\u0430\u0442\u044c \u043e\u0441\u044c Y \u0438 \u043a\u0430\u043a\u0438\u0435 \u0443 \u043d\u0435\u0451 \u0435\u0434\u0438\u043d\u0438\u0446\u044b \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f figures = [ {  # 1\u0439 \u0433\u0440\u0430\u0444\u0438\u043a 'labels':   'CPU utilization', 'units':    '%', 'metrics':  ['avg-cpu.idle', 'avg-cpu.system', 'avg-cpu.user', 'avg-cpu.nice', 'avg-cpu.iowait', 'avg-cpu.steal'], 'legends':  ['idle', 'system', 'user', 'nice', 'iowait', 'steal'], }, {  # 2\u0439 \u0433\u0440\u0430\u0444\u0438\u043a 'labels':   'harddisk utilization', 'units':    '%', 'metrics':  ['rrqm', 'wrqm', 'util', 'drqm'] }, { 'labels':   'harddisk iops', 'units':    'iops', 'metrics':  ['r\/s', 'w\/s', 'rrqm\/s', 'wrqm\/s', 'd\/s', 'drqm\/s'] }, { 'labels':   'harddisk latency', 'units':    's', 'metrics':  ['r_await', 'w_await', 'd_await'] }, { 'labels':   'harddisk queue sizes', 'units':    'B', 'metrics':  ['rareq-sz', 'wareq-sz', 'aqu-sz', 'dareq-sz'] }, { 'labels':   'harddisk traffic', 'units':    'B\/s', 'metrics':  ['rkB\/s', 'wkB\/s', 'dkB\/s'] }, ] <\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>helper.py<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"python\">import json import glob import pandas as pd import matplotlib.pyplot as plt import matplotlib.dates as mpl_dates from matplotlib.ticker import EngFormatter import os # \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0447\u0435\u0440\u0435\u0437 isinstance import matplotlib import numpy import conf # \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u0430\u043f\u043e\u043a \u0432\u043d\u0443\u0442\u0440\u0438 conf.base_dir \u0432 \u0432\u0438\u0434\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 &lt;DirEntry ...> \u0441\u043e \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430\u043c\u0438 .name \u0438 .path def get_folders(base_dir=None, exclude_dirs=None): if<\/code><\/pre>\n<\/div>\n<\/details>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-340716","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/340716","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=340716"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/340716\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=340716"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=340716"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=340716"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}