{"id":321782,"date":"2021-04-20T15:01:20","date_gmt":"2021-04-20T15:01:20","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=321782"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=321782","title":{"rendered":"\u041f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c RemoteFX, \u0447\u0430\u0441\u0442\u044c 2"},"content":{"rendered":"\n<div class=\"post__text post__text_v2\" id=\"post-content-body\">\n<p>\u0412 <a href=\"https:\/\/habr.com\/ru\/company\/cloud4y\/blog\/552034\/\">\u043f\u0435\u0440\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f<\/a> \u043c\u044b \u043e\u0446\u0435\u043d\u0438\u0432\u0430\u043b\u0438 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f GPU-\u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u044f \u0434\u043b\u044f RemoteFX \u0432 \u043e\u0434\u043d\u043e\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435. \u042d\u0442\u043e \u0432\u0442\u043e\u0440\u043e\u0439 \u044d\u0442\u0430\u043f, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0437\u0430\u0439\u043c\u0451\u043c\u0441\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u043e\u0439 \u0438 \u043e\u0446\u0435\u043d\u043a\u043e\u0439 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0434\u043b\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u0435\u0430\u043d\u0441\u043e\u0432, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043d\u044f\u0442\u044c \u0433\u0440\u0430\u043d\u0438\u0446\u044b \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u0443\u0435\u043c\u043e\u0441\u0442\u0438 \u043e\u0431\u043b\u0430\u0447\u043d\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0441 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0439 \u0432\u0438\u0434\u0435\u043e\u043a\u0430\u0440\u0442\u043e\u0439.  <\/p>\n<details class=\"spoiler\">\n<summary>\u0421\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435<\/summary>\n<div class=\"spoiler__content\">\n<ul>\n<li>\n<p>\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435<\/p>\n<\/li>\n<li>\n<p>\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u0439 \u0441\u0440\u0435\u0434\u044b<\/p>\n<\/li>\n<li>\n<p>\u041c\u0435\u0442\u043e\u0434\u0438\u043a\u0430 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f<\/p>\n<\/li>\n<li>\n<p>\u041e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445<\/p>\n<\/li>\n<li>\n<p>\u0410\u043d\u0430\u043b\u0438\u0437 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 \u0438 \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0435 \u0433\u0440\u0430\u0444\u0438\u043a\u0438<\/p>\n<ul>\n<li>\n<p>\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u0432\u0432\u043e\u0434\u0430 \u0438 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u043d\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440<\/p>\n<\/li>\n<li>\n<p>\u0427\u0430\u0441\u0442\u043e\u0442\u0430 \u043a\u0430\u0434\u0440\u043e\u0432<\/p>\n<\/li>\n<li>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438<\/p>\n<\/li>\n<li>\n<p>\u041d\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u043d\u0430 \u0432\u0438\u0434\u0435\u043e\u043a\u0430\u0440\u0442\u0443<\/p>\n<\/li>\n<li>\n<p>\u041e\u0431\u0449\u0438\u0435 \u0441\u0435\u0442\u0435\u0432\u044b\u0435 \u043c\u0435\u0442\u0440\u0438\u043a\u0438<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/p>\n<\/li>\n<li>\n<p>\u041f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f<\/p>\n<ul>\n<li>\n<p>Set-DataCollectors.ps1<\/p>\n<\/li>\n<li>\n<p>Set-DataCollectors.cmd<\/p>\n<\/li>\n<li>\n<p>Start-SyncedTest.ps1<\/p>\n<\/li>\n<li>\n<p>Start-SyncedTest.cmd<\/p>\n<\/li>\n<li>\n<p>helper.psm1<\/p>\n<\/li>\n<li>\n<p>blg2csv.ps1<\/p>\n<\/li>\n<li>\n<p>blg2csv.cmd<\/p>\n<\/li>\n<li>\n<p>figures_alt.ipynb<\/p>\n<\/li>\n<li>\n<p>figures.ipynb<\/p>\n<\/li>\n<li>\n<p>\u0414\u0438\u0430\u0433\u043d\u043e\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u0438<\/p>\n<\/li>\n<li>\n<p>UDP \u0442\u0440\u0430\u0444\u0438\u043a<\/p>\n<\/li>\n<li>\n<p>TCP \u0442\u0440\u0430\u0444\u0438\u043a<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/div>\n<\/details>\n<p>\u0423\u0442\u0438\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 vCPU \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u043e\u0434\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0434\u043b\u044f \u043f\u0435\u0440\u0432\u044b\u0445 \u0434\u0432\u0443\u0445 \u0442\u0435\u0441\u0442\u043e\u0432 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u043b\u0430 \u0432 \u0441\u0440\u0435\u0434\u043d\u0435\u043c 40-50%. \u041f\u043e\u044d\u0442\u043e\u043c\u0443, \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0437\u0430\u043c\u0435\u0440\u044b \u0434\u043b\u044f \u0434\u0432\u0443\u0445 \u0438 \u0442\u0440\u0451\u0445 \u0441\u0435\u0441\u0441\u0438\u0439 \u0431\u044b\u043b\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u044b \u0431\u0435\u0437 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430. \u041e\u0434\u043d\u0430\u043a\u043e \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c, \u0447\u0442\u043e \u0443\u0437\u043a\u0438\u043c \u043c\u0435\u0441\u0442\u043e\u043c \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u0432 \u043f\u0435\u0440\u0432\u0443\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c, \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0438\u043c\u0435\u043d\u043d\u043e \u0440\u0435\u0441\u0443\u0440\u0441\u044b vCPU \u0438 vRAM: \u043e\u0431\u0449\u0430\u044f \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0441\u0442\u0430\u043b\u0430 \u0442\u0430\u043a \u0432\u044b\u0441\u043e\u043a\u0430, \u0447\u0442\u043e \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0443 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u043b\u043e \u0445\u0432\u0430\u0442\u0430\u0442\u044c \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 \u0434\u043b\u044f \u0444\u0438\u043a\u0441\u0430\u0446\u0438\u0438 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u0438\u0439 \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u043e\u0432 \u0438 \u0432 \u0437\u0430\u043c\u0435\u0440\u0430\u0445 \u0441\u0442\u0430\u043b\u0438 \u043f\u043e\u044f\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u0440\u043e\u0431\u0435\u043b\u044b.  <\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/215\/57f\/889\/21557f889dbe5a931a0c27a40162d521.png\" width=\"924\" height=\"561\"><figcaption><\/figcaption><\/figure>\n<p>\u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u044b \u0431\u044b\u043b\u0430 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0430: \u0431\u044b\u043b\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u044b \u044f\u0434\u0440\u0430 \u0438 \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u0430\u044f \u043f\u0430\u043c\u044f\u0442\u044c.  <\/p>\n<h3>\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u0439 \u0441\u0440\u0435\u0434\u044b<\/h3>\n<h4>\u0421\u0435\u0440\u0432\u0435\u0440<\/h4>\n<ul>\n<li>\n<p>2 -&gt; 6 vCPU Intel(R) Xeon(R) CPU E5-2696 v4 @ 2.20GHz<\/p>\n<\/li>\n<li>\n<p>8 -&gt; 12 GB RAM<\/p>\n<\/li>\n<li>\n<p>GPU NVIDIA GRID M60-1Q, Dedicated Memory 929 MB, Shared Memory 4095 -&gt; 6143 MB<\/p>\n<\/li>\n<li>\n<p>\u0433\u043e\u0441\u0442\u0435\u0432\u0430\u044f \u041e\u0421 Windows Server 2019 Standart x64 1809 (Version 10.0.17763.1577), DirectX 12<\/p>\n<\/li>\n<li>\n<p>network in\/out rate limit 50 Mbps<\/p>\n<\/li>\n<\/ul>\n<p>\u042f\u0437\u044b\u043a\u043e\u043c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0431\u044b\u043b \u0441\u0434\u0435\u043b\u0430\u043d \u0430\u043d\u0433\u043b\u0438\u0439\u0441\u043a\u0438\u0439: \u0434\u043b\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f &#171;\u0431\u0435\u043b\u044b\u0445 \u043f\u044f\u0442\u0435\u043d&#187; \u0432 \u0437\u0430\u043c\u0435\u0440\u0430\u0445 \u0432\u043c\u0435\u0441\u0442\u043e \u0441\u0431\u043e\u0440\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0447\u0435\u0440\u0435\u0437 PerfMon \u0431\u044b\u043b\u0438 \u043f\u043e\u043f\u044b\u0442\u043a\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u043b\u0435\u0442&nbsp;<code>Get-Counter<\/code>&nbsp;\u0441 Real Time \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u043e\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430. \u0410 \u0440\u0443\u0441\u0441\u043a\u0438\u0435 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u043e\u0432 \u043f\u0430\u043c\u044f\u0442\u0438 \u0443\u0441\u043b\u043e\u0436\u043d\u044f\u043b\u0438 \u044d\u0442\u0438 \u043f\u043e\u043f\u044b\u0442\u043a\u0438.<\/p>\n<p>\u0414\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043a\u043e\u0433\u0434\u0430 \u0432\u044b \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0435 \u043d\u043e\u0432\u044b\u0439 \u0441\u0431\u043e\u0440\u0449\u0438\u043a \u0434\u0430\u043d\u043d\u044b\u0445 PerfMon \u0447\u0435\u0440\u0435\u0437 GUI, \u0442\u043e \u0432\u0438\u0434\u0438\u0442\u0435 \u043f\u0441\u0435\u0432\u0434\u043e\u043d\u0438\u043c\u044b \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0437\u0430\u0432\u0438\u0441\u044f\u0442 \u043e\u0442 \u044f\u0437\u044b\u043a\u0430 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430. \u041d\u043e \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438, \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f &#171;\u0440\u043e\u0434\u043d\u044b\u0435&#187; \u0430\u043d\u0433\u043b\u0438\u0439\u0441\u043a\u0438\u0435 \u0438\u043c\u0435\u043d\u0430. \u042d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0432 xml \u0444\u0430\u0439\u043b\u0435, \u0435\u0441\u043b\u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0441\u0431\u043e\u0440\u0449\u0438\u043a \u043a\u0430\u043a \u0448\u0430\u0431\u043b\u043e\u043d. \u0423\u0442\u0438\u043b\u0438\u0442\u0430&nbsp;<code>logman<\/code>&nbsp;\u0442\u043e\u0436\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441 \u0430\u043d\u0433\u043b\u0438\u0439\u0441\u043a\u0438\u043c\u0438 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f\u043c\u0438.<\/p>\n<p>\u041a\u043e\u043c\u0430\u043d\u0434\u043b\u0435\u0442&nbsp;<code>Get-Counter<\/code>&nbsp;\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0438\u043c\u0435\u043d\u043d\u043e \u0441 \u043f\u0441\u0435\u0432\u0434\u043e\u043d\u0438\u043c\u0430\u043c\u0438. \u0422\u043e \u0435\u0441\u0442\u044c, \u043e\u0442 \u044f\u0437\u044b\u043a\u0430 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u0437\u0430\u0432\u0438\u0441\u0438\u0442, \u043a\u0430\u043a\u0430\u044f \u0438\u0437 \u0434\u0432\u0443\u0445 \u043a\u043e\u043c\u0430\u043d\u0434 \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u0441\u044f \u043e\u0448\u0438\u0431\u043a\u043e\u0439:<\/p>\n<pre><code class=\"bash\">PS C:\\&gt; (Get-Counter -ListSet 'RemoteFX Network').paths PS C:\\&gt; (Get-Counter -ListSet '\u0421\u0435\u0442\u044c RemoteFX').paths<\/code><\/pre>\n<p>\u041f\u0440\u0438\u043d\u0446\u0438\u043f\u0438\u0430\u043b\u044c\u043d\u043e \u0442\u0430\u043a\u043e\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u043d\u0435 \u0440\u0435\u0448\u0438\u043b \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443, \u043f\u0440\u043e\u0431\u0435\u043b\u044b \u043e\u0441\u0442\u0430\u043b\u0438\u0441\u044c, \u0445\u043e\u0442\u044f \u0438 \u0432 \u043c\u0435\u043d\u044c\u0448\u0435\u043c \u043e\u0431\u044a\u0451\u043c\u0435. \u041d\u043e \u0441\u0442\u0430\u043b\u043e \u043f\u0440\u043e\u0449\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0431\u043e\u0440 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 PerfMon \/ PowerShell, \u0430, \u043f\u043e\u0441\u043b\u0435 \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u043e\u0432 \u043d\u0430 \u0434\u0432\u0435 \u0433\u0440\u0443\u043f\u043f\u044b, \u043d\u0430\u043a\u043e\u043d\u0435\u0446-\u0442\u0430\u043a\u0438 \u0437\u0430\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0438 \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u0438 \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438!<\/p>\n<h3>\u041c\u0435\u0442\u043e\u0434\u0438\u043a\u0430 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f<\/h3>\n<p>\u041d\u0435 \u043f\u0440\u0435\u0442\u0435\u0440\u043f\u0435\u043b\u0430 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0445 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439. \u041f\u0440\u043e\u0432\u043e\u0434\u0438\u043b\u0438\u0441\u044c \u0442\u0435 \u0436\u0435 \u0441\u0430\u043c\u044b\u0435 \u0442\u0440\u0438 \u0442\u0435\u0441\u0442\u0430:<\/p>\n<ul>\n<li>\n<p>\u0432\u0432\u043e\u0434 \u0442\u0435\u043a\u0441\u0442\u0430 + 3D BenchMark<\/p>\n<\/li>\n<li>\n<p>\u0432\u0432\u043e\u0434 \u0442\u0435\u043a\u0441\u0442\u0430 + \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u0432\u0438\u0434\u0435\u043e\u0444\u0430\u0439\u043b\u043e\u0432<\/p>\n<\/li>\n<li>\n<p>\u0432\u0432\u043e\u0434 \u0442\u0435\u043a\u0441\u0442\u0430 + \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 youtube-\u0440\u043e\u043b\u0438\u043a\u0430<\/p>\n<\/li>\n<\/ul>\n<p>\u041e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 \u043f\u0435\u0440\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u043b\u043e\u0441\u044c \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0441\u0435\u0440\u0438\u044f \u0442\u0435\u0441\u0442\u043e\u0432 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u043b\u0430\u0441\u044c \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0434\u043b\u044f \u043e\u0434\u043d\u043e\u0439, \u0437\u0430\u0442\u0435\u043c \u0434\u043b\u044f \u0434\u0432\u0443\u0445 \u0438 \u0434\u043b\u044f \u0442\u0440\u0451\u0445 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u0435\u0441\u0441\u0438\u0439. \u0410 \u043d\u0430\u0431\u043e\u0440 \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u043e\u0432 \u0438\u0437 \u043f\u0435\u0440\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0431\u044b\u043b \u0440\u0430\u0437\u0434\u0435\u043b\u0451\u043d \u043d\u0430 \u0434\u0432\u0435 \u0433\u0440\u0443\u043f\u043f\u044b:<\/p>\n<details class=\"spoiler\">\n<summary>\u041c\u0435\u0442\u0440\u0438\u043a\u0438<\/summary>\n<div class=\"spoiler__content\">\n<ul>\n<li>\n<p>\u041e\u0431\u0449\u0438\u0435 \u043c\u0435\u0442\u0440\u0438\u043a\u0438:<\/p>\n<ul>\n<li>\n<p>&#8216;\\Memory\\% Committed Bytes In Use&#8217;<\/p>\n<\/li>\n<li>\n<p>&#8216;\\Memory\\Available Bytes&#8217;<\/p>\n<\/li>\n<li>\n<p>&#8216;\\Processor Information(_Total)\\% Processor Time&#8217;<\/p>\n<\/li>\n<li>\n<p>&#8216;\\NVIDIA GPU(*)\\% GPU Usage&#8217;<\/p>\n<\/li>\n<li>\n<p>&#8216;\\NVIDIA GPU(*)\\% GPU Memory Usage&#8217;<\/p>\n<\/li>\n<li>\n<p>&#8216;\\NVIDIA GPU(*)\\% FB Usage&#8217;<\/p>\n<\/li>\n<li>\n<p>&#8216;\\NVIDIA GPU(*)\\% Video Decoder Usage&#8217;<\/p>\n<\/li>\n<li>\n<p>&#8216;\\NVIDIA GPU(*)\\% Video Encoder Usage&#8217;<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p>\u041c\u0435\u0442\u0440\u0438\u043a\u0438 \u0441\u0435\u0430\u043d\u0441\u043e\u0432:<\/p>\n<ul>\n<li>\n<p>&#8216;\\User Input Delay per Session(#id)\\Max Input Delay&#8217; # \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0432 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u043c \u0441\u0435\u0430\u043d\u0441\u0435<\/p>\n<\/li>\n<li>\n<p>&#8216;\\RemoteFX Network(RDP-Tcp#N)\\Loss Rate&#8217;<\/p>\n<\/li>\n<li>\n<p>&#8216;\\RemoteFX Network(RDP-Tcp#N)\\Current TCP Bandwidth&#8217;<\/p>\n<\/li>\n<li>\n<p>&#8216;\\RemoteFX Network(RDP-Tcp#N)\\Current UDP Bandwidth&#8217;<\/p>\n<\/li>\n<li>\n<p>&#8216;\\RemoteFX Network(RDP-Tcp#N)\\Total Sent Rate&#8217;<\/p>\n<\/li>\n<li>\n<p>&#8216;\\RemoteFX Network(RDP-Tcp#N)\\TCP Sent Rate&#8217;<\/p>\n<\/li>\n<li>\n<p>&#8216;\\RemoteFX Network(RDP-Tcp#N)\\UDP Sent Rate&#8217;<\/p>\n<\/li>\n<li>\n<p>&#8216;\\RemoteFX Network(RDP-Tcp#N)\\Total Received Rate&#8217;<\/p>\n<\/li>\n<li>\n<p>&#8216;\\RemoteFX Network(RDP-Tcp#N)\\TCP Received Rate&#8217;<\/p>\n<\/li>\n<li>\n<p>&#8216;\\RemoteFX Network(RDP-Tcp#N)\\UDP Received Rate&#8217;<\/p>\n<\/li>\n<li>\n<p>&#8216;\\RemoteFX Graphics(RDP-Tcp#N)\\Input Frames\/Second&#8217;<\/p>\n<\/li>\n<li>\n<p>&#8216;\\RemoteFX Graphics(RDP-Tcp#N)\\Output Frames\/Second&#8217;<\/p>\n<\/li>\n<li>\n<p>&#8216;\\RemoteFX Graphics(RDP-Tcp#N)\\Frame Quality&#8217;<\/p>\n<\/li>\n<li>\n<p>&#8216;\\RemoteFX Graphics(RDP-Tcp#N)\\Average Encoding Time&#8217;<\/p>\n<\/li>\n<li>\n<p>&#8216;\\RemoteFX Graphics(RDP-Tcp#N)\\Graphics Compression ratio&#8217;<\/p>\n<\/li>\n<li>\n<p>&#8216;\\RemoteFX Graphics(RDP-Tcp#N)\\Frames Skipped\/Second &#8212; Insufficient Server Resources&#8217;<\/p>\n<\/li>\n<li>\n<p>&#8216;\\RemoteFX Graphics(RDP-Tcp#N)\\Frames Skipped\/Second &#8212; Insufficient Network Resources&#8217;<\/p>\n<\/li>\n<li>\n<p>&#8216;\\RemoteFX Graphics(RDP-Tcp#N)\\Frames Skipped\/Second &#8212; Insufficient Client Resources&#8217;<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/div>\n<\/details>\n<p>\u041e\u0431\u0449\u0438\u0435 \u043c\u0435\u0442\u0440\u0438\u043a\u0438 \u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0435\u043b\u0438 \u043e\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0445 \u0441\u0435\u0430\u043d\u0441\u043e\u0432, \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u043e\u0432 \u0432\u0441\u0435\u0433\u0434\u0430 \u0431\u044b\u043b\u043e \u0432\u043e\u0441\u0435\u043c\u044c \u0432 \u043b\u044e\u0431\u043e\u043c \u0442\u0435\u0441\u0442\u0435 \u0434\u043b\u044f \u043b\u044e\u0431\u043e\u0433\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439. \u0410 \u0432\u043e\u0442 \u043c\u0435\u0442\u0440\u0438\u043a\u0438 \u0441\u0435\u0430\u0441\u043d\u043e\u0432 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u043b\u0438\u0441\u044c \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e, \u0442\u0430\u043a \u043a\u0430\u043a \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u043b\u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0432\u043e\u044e \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u044c\u043d\u0443\u044e \u0441\u0435\u0441\u0441\u0438\u044e.<\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u043d\u0435 \u0437\u0430\u043d\u0438\u043c\u0430\u0442\u044c\u0441\u044f \u0440\u0443\u0447\u043d\u043e\u0439 \u043f\u0435\u0440\u0435\u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u043e\u0439 PerfMon \u043f\u0440\u0438 \u0432\u0445\u043e\u0434\u0435 \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043d\u0430 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u0435\u0440\u0432\u0435\u0440, \u0431\u044b\u043b\u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u044b \u0441\u043a\u0440\u0438\u043f\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u043b\u0438 \u0433\u0440\u0443\u043f\u043f\u044b \u0441\u0431\u043e\u0440\u0449\u0438\u043a\u043e\u0432 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0442\u0435\u043a\u0443\u0449\u0438\u0445 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u0435\u0441\u0441\u0438\u0439.<\/p>\n<p>\u0417\u0430\u043c\u0435\u0440\u044b \u0438 \u0442\u0435\u0441\u0442\u044b \u0442\u043e\u0436\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043b\u0438\u0441\u044c \u0441\u043a\u0440\u0438\u043f\u0442\u0430\u043c\u0438 &#8212; \u0434\u043b\u044f \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 \u0438 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438: \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0431\u044b\u043b\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0439 \u0438 \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043d\u0443\u0436\u043d\u044b\u0439 \u0442\u0435\u0441\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u0430\u043b \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 \u043a\u0430\u0436\u0434\u043e\u0439 \u043d\u043e\u0432\u043e\u0439 \u043c\u0438\u043d\u0443\u0442\u044b \u0443 \u0432\u0441\u0435\u0445 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e. \u0421\u043f\u0443\u0441\u0442\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0435\u043a\u0443\u043d\u0434 \u044d\u0442\u043e\u0442 \u0436\u0435 \u0441\u043a\u0440\u0438\u043f\u0442 \u0432 \u0441\u0435\u0441\u0441\u0438\u0438 \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0430 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043b \u0441\u0431\u043e\u0440 \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<p>\u0411\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u043e\u0432 \u0441\u0435\u0430\u043d\u0441\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043d\u043e\u043c\u0435\u0440 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0441\u0435\u0430\u043d\u0441\u0430, \u0430 \u0441\u0447\u0451\u0442\u0447\u0438\u043a \u0437\u0430\u0434\u0435\u0440\u0436\u0435\u043a &#8212; id. \u041f\u043e\u044d\u0442\u043e\u043c\u0443, \u043f\u043e \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u0438 \u0442\u0435\u0441\u0442\u0430 \u0432 \u0436\u0443\u0440\u043d\u0430\u043b \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f&nbsp;<code>matches.csv<\/code>&nbsp;\u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u043b\u0438\u0441\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u0442\u0435\u0441\u0442\u0430: \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438, id \u0438 \u043d\u043e\u043c\u0435\u0440\u0430 \u0441\u0435\u0441\u0441\u0438\u0439, \u0438\u043c\u0435\u043d\u0430 \u0444\u0430\u0439\u043b\u043e\u0432 \u0441 \u0437\u0430\u043c\u0435\u0440\u0430\u043c\u0438:<\/p>\n<pre><code>\"test #3 WMPlayer users 3 general.blg\",\"2021.02.09 12:00:12\",\"administrator\",\"rdp-tcp#8\",\"2\",\"+03\" \"test #3 WMPlayer users 3 session.blg\",\"2021.02.09 12:00:12\",\"administrator\",\"rdp-tcp#8\",\"2\",\"+03\" \"test #3 WMPlayer users 3 general.blg\",\"2021.02.09 12:00:12\",\"2\",\"rdp-tcp#12\",\"3\",\"+03\" \"test #3 WMPlayer users 3 session.blg\",\"2021.02.09 12:00:12\",\"2\",\"rdp-tcp#12\",\"3\",\"+03\" \"test #3 WMPlayer users 3 general.blg\",\"2021.02.09 12:00:12\",\"3\",\"rdp-tcp#66\",\"4\",\"+03\" \"test #3 WMPlayer users 3 session.blg\",\"2021.02.09 12:00:12\",\"3\",\"rdp-tcp#66\",\"4\",\"+03\"<\/code><\/pre>\n<p>\u0422\u0430\u043a\u043e\u0435 \u0436\u0443\u0440\u043d\u0430\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u043e\u043c\u043e\u0433\u043b\u043e \u043d\u0430 \u044d\u0442\u0430\u043f\u0435 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u0441 \u0438\u0445 \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u0430\u043c\u0438.<\/p>\n<p>\u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432 \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438:<\/p>\n<ul>\n<li>\n<p>(\u043f\u0435\u0440\u0435-)\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0441\u0431\u043e\u0440\u0449\u0438\u043a\u043e\u0432 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 PerfMon \u2014 Set-DataCollectors.ps1 \u0438 Set-DataCollectors.cmd<\/p>\n<\/li>\n<li>\n<p>\u041e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0439 \u0437\u0430\u043f\u0443\u0441\u043a \u0442\u0435\u0441\u0442\u043e\u0432 \u0438 \u0437\u0430\u043c\u0435\u0440\u043e\u0432 \u2014 Start-SyncedTest.ps1 \u0438 Start-SyncedTest.cmd<\/p>\n<\/li>\n<li>\n<p>\u0412\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043a\u043e\u0434 \u0431\u044b\u043b \u0432\u044b\u043d\u0435\u0441\u0435\u043d \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0444\u0430\u0439\u043b \u043c\u043e\u0434\u0443\u043b\u044f PowerShell \u2014 helper.psm1<\/p>\n<\/li>\n<\/ul>\n<h3>\u041e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445<\/h3>\n<p>\u0421\u043a\u0440\u0438\u043f\u0442 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0430\u0446\u0438\u0438 \u0434\u0432\u043e\u0438\u0447\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442 csv \u0438\u0437 \u043f\u0435\u0440\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0442\u0430\u043a\u0436\u0435 \u0431\u044b\u043b \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d: \u0442\u0435\u043f\u0435\u0440\u044c \u043e\u043d \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u043b \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c \u0441\u0435\u0441\u0441\u0438\u044f\u043c \u0438 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u044f\u043b \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0444\u0430\u0439\u043b\u0430&nbsp;<code>matches.csv<\/code>.<\/p>\n<ul>\n<li>\n<p>\u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0434\u0432\u043e\u0438\u0447\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 \u0441 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430\u043c\u0438 \u0437\u0430\u043c\u0435\u0440\u043e\u0432 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u2014 blg2csv.ps1 \u0438 blg2csv.cmd<\/p>\n<\/li>\n<\/ul>\n<p>\u041e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0435 \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0432, \u043a\u0430\u043a \u0438 \u0440\u0430\u043d\u044c\u0448\u0435, \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430 \u0432&nbsp;<code>Jupiter<\/code>-\u0431\u043b\u043e\u043a\u043d\u043e\u0442\u0430\u0445 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a&nbsp;<code>pandas<\/code>&nbsp;\u0438&nbsp;<code>matplotlib<\/code>.<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0430 \u043e\u0434\u043d\u0443 \u043c\u0435\u0442\u0440\u0438\u043a\u0443 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u043b\u043e\u0441\u044c \u0443\u0436\u0435 \u0434\u0435\u0432\u044f\u0442\u044c \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0432 \u0432\u043c\u0435\u0441\u0442\u043e \u0442\u0440\u0451\u0445, \u043f\u043e\u044d\u0442\u043e\u043c\u0443, \u0434\u043b\u044f \u043d\u0430\u0433\u043b\u044f\u0434\u043d\u043e\u0441\u0442\u0438, \u0433\u0440\u0430\u0444\u0438\u043a\u0438 \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u043b\u0438\u0441\u044c \u043d\u0430 \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u0435 \u0434\u0432\u0443\u043c\u044f \u0441\u043f\u043e\u0441\u043e\u0431\u0430\u043c\u0438:<\/p>\n<pre><code>          test2   test3   test4                  1 user  2 users 3 users         -------------------------               ------------------------- 1 user  |       |       |       |       test2   |       |       |       |         -------------------------               ------------------------- 2 users |       |       |       |       test3   |       |       |       |         -------------------------               ------------------------- 3 users |       |       |       |       test4   |       |       |       |         -------------------------               -------------------------<\/code><\/pre>\n<ul>\n<li>\n<p>\u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u043e\u0431\u043e\u0438\u0445 \u0431\u043b\u043e\u043a\u043d\u043e\u0442\u043e\u0432 \u0435\u0441\u0442\u044c \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u2014 figures.ipynb \u0438 figures_alt.ipynb<\/p>\n<\/li>\n<\/ul>\n<h3>\u0410\u043d\u0430\u043b\u0438\u0437 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 \u0438 \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0435 \u0433\u0440\u0430\u0444\u0438\u043a\u0438<\/h3>\n<h4>\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u0432\u0432\u043e\u0434\u0430 \u0438 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u043d\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440<\/h4>\n<p>\u041f\u043e\u0436\u0430\u043b\u0443\u0439, \u043e\u0434\u0438\u043d \u0438\u0437 \u0441\u0430\u043c\u044b\u0445 \u0432\u0430\u0436\u043d\u044b\u0445, \u043d\u0430\u0440\u044f\u0434\u0443 \u0441 \u0447\u0430\u0441\u0442\u043e\u0442\u043e\u0439 \u043a\u0430\u0434\u0440\u043e\u0432, \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0435\u0439 \u0441 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f.&nbsp;<a href=\"https:\/\/docs.microsoft.com\/en-us\/windows-server\/remote\/remote-desktop-services\/rds-rdsh-performance-counters\">\u0418\u0437\u043c\u0435\u0440\u044f\u0435\u0442<\/a>&nbsp;\u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0443\u044e \u0440\u0430\u0437\u043d\u0438\u0446\u0443 \u043c\u0435\u0436\u0434\u0443 \u0442\u0435\u043c, \u043a\u043e\u0433\u0434\u0430 \u0432\u0432\u043e\u0434 \u043f\u043e\u043c\u0435\u0449\u0430\u0435\u0442\u0441\u044f \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0438 \u043a\u043e\u0433\u0434\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0435\u0433\u043e \u0432 \u0442\u0440\u0430\u0434\u0438\u0446\u0438\u043e\u043d\u043d\u043e\u043c \u0446\u0438\u043a\u043b\u0435 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/bba\/5cd\/76a\/bba5cd76adc16f768ad20ef2b2ad382b.png\" width=\"1348\" height=\"568\"><figcaption><\/figcaption><\/figure>\n<p>\u0418\u043d\u0442\u0435\u0440\u0435\u0441\u0435\u043d \u043e\u043d \u0435\u0449\u0451 \u0442\u0435\u043c, \u0447\u0442\u043e \u0432 \u0442\u0435\u0441\u0442\u0435 &#8216;3D BenchMark&#8217; \u044d\u0442\u043e\u0442 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0441\u044f \u0430\u043d\u043e\u043c\u0430\u043b\u044c\u043d\u043e \u0432\u044b\u0441\u043e\u043a\u0438\u043c: \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0438\u0437\u043c\u0435\u0440\u044f\u043b\u0430\u0441\u044c&nbsp;<strong>\u0441\u0435\u043a\u0443\u043d\u0434\u0430\u043c\u0438<\/strong>&nbsp;\u0434\u043b\u044f \u0434\u0432\u0443\u0445 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0441\u0435\u0430\u043d\u0441\u043e\u0432 \u0438&nbsp;<strong>\u0434\u0435\u0441\u044f\u0442\u043a\u0430\u043c\u0438<\/strong>&nbsp;\u0441\u0435\u043a\u0443\u043d\u0434 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0442\u0440\u0451\u0445 \u0441\u0435\u0430\u043d\u0441\u043e\u0432! \u0412 \u043d\u043e\u0440\u043c\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u0438\u0437\u043c\u0435\u0440\u044f\u0435\u0442\u0441\u044f \u0432 \u043c\u0438\u043b\u043b\u0438\u0441\u0435\u043a\u0443\u043d\u0434\u0430\u0445.  <\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/236\/582\/782\/23658278241f8c99d39ed428c30f4351.png\" width=\"1072\" height=\"568\"><figcaption><\/figcaption><\/figure>\n<p>\u0414\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u0430 \u0441 \u0442\u0430\u043a\u0438\u043c \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u043c \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0432 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u0430 \u0434\u043b\u044f \u043b\u0443\u0447\u0448\u0435\u0439 \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u0430\u043d\u043e\u043c\u0430\u043b\u0438\u0438. \u041f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u044b \u0431\u0443\u0434\u0443\u0442 \u0441 \u0434\u0440\u0443\u0433\u0438\u043c \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u043c \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0432, &#171;\u0442\u0435\u0441\u0442\u044b \u0432 \u0440\u044f\u0434&#187;, \u0434\u043b\u044f \u0431\u043e\u043b\u0435\u0435 \u043d\u0430\u0433\u043b\u044f\u0434\u043d\u043e\u0439 \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u0438 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0435\u0439 \u043f\u0440\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0441\u0435\u0430\u043d\u0441\u043e\u0432.<\/p>\n<p>\u0412\u043e\u0442 \u0442\u0430\u043a \u0442\u0435 \u0436\u0435 \u0441\u0430\u043c\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u043f\u0440\u0438 \u0442\u0430\u043a\u043e\u043c \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0438:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/41f\/9d6\/c44\/41f9d6c44b7c68b8d926d7e3528b5085.png\" width=\"1072\" height=\"568\"><figcaption><\/figcaption><\/figure>\n<p>\u0412 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0439 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u043f\u043e \u0434\u0438\u0430\u0433\u043d\u043e\u0441\u0442\u0438\u043a\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0435\u0441\u0442\u044c&nbsp;<a href=\"https:\/\/docs.microsoft.com\/en-us\/windows-server\/remote\/remote-desktop-services\/rds-rdsh-performance-counters#counters-used-in-an-overloaded-system\">\u043f\u0440\u0438\u043c\u0435\u0440<\/a>, \u043a\u043e\u0433\u0434\u0430 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0432\u0432\u043e\u0434\u0430 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0438\u0437-\u0437\u0430 \u0432\u043e\u0437\u0440\u0430\u0441\u0442\u0430\u044e\u0449\u0435\u0439 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043d\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 \u043f\u0440\u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 \u043d\u043e\u0432\u044b\u0445 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439. \u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044d\u0442\u043e \u043d\u0435 \u043e\u0431\u044a\u044f\u0441\u043d\u044f\u0435\u0442 \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u0435 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0438 \u0432\u0432\u043e\u0434\u0430 \u043d\u0430 \u0442\u0440\u0438-\u0447\u0435\u0442\u044b\u0440\u0435 \u043f\u043e\u0440\u044f\u0434\u043a\u0430: \u0441\u0447\u0451\u0442\u0447\u0438\u043a \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u0445 60% \u0438 \u0434\u0430\u0436\u0435 \u0441\u043d\u0438\u0437\u0438\u043b\u0441\u044f \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0442\u0440\u0451\u0445 \u0441\u0435\u0430\u043d\u0441\u043e\u0432. \u0414\u0440\u0443\u0433\u0438\u0435 \u043c\u0435\u0442\u0440\u0438\u043a\u0438, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0438 \u0441\u0435\u0442\u0435\u0432\u044b\u0435, \u0442\u043e\u0436\u0435 \u043e\u0441\u0442\u0430\u043b\u0438\u0441\u044c \u0432 \u043d\u043e\u0440\u043c\u0435.  <\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/3f8\/cf0\/f9d\/3f8cf0f9d874933c02f3b8e5f924b473.png\" width=\"1072\" height=\"568\"><figcaption><\/figcaption><\/figure>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/5ce\/35b\/824\/5ce35b824fa5134070f8a91bff325e32.png\" width=\"1432\" height=\"285\"><figcaption><\/figcaption><\/figure>\n<p>\u0410 \u0443\u0442\u0438\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430 \u043e\u043a\u0430\u0437\u0430\u043b\u0430\u0441\u044c \u0432\u044b\u0448\u0435.  <\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/bad\/e44\/42f\/bade4442fce6e708e59d87fb43c13e9e.png\" width=\"1432\" height=\"285\"><figcaption><\/figcaption><\/figure>\n<h4>\u0427\u0430\u0441\u0442\u043e\u0442\u0430 \u043a\u0430\u0434\u0440\u043e\u0432<\/h4>\n<p>\u0412 3D \u0442\u0435\u0441\u0442\u0435 \u0447\u0430\u0441\u0442\u043e\u0442\u0430 \u043a\u0430\u0434\u0440\u043e\u0432 \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u043e \u0437\u0430\u0432\u0438\u0441\u0435\u043b\u0430 \u043e\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439, \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0432\u0448\u0438\u0445 \u0431\u0435\u043d\u0447\u043c\u0430\u0440\u043a.<\/p>\n<p>\u0414\u0432\u0430 \u0434\u0440\u0443\u0433\u0438\u0445 \u0442\u0435\u0441\u0442\u0430 \u043f\u043e\u043a\u0430\u0437\u0430\u043b\u0438 \u0445\u043e\u0440\u043e\u0448\u0443\u044e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0434\u043b\u044f \u0434\u0432\u0443\u0445 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u0435\u0441\u0441\u0438\u0439, \u0430 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0442\u0440\u0451\u0445 \u0441\u0435\u0430\u043d\u0441\u043e\u0432 \u0443\u0436\u0435 \u043d\u0435 \u0445\u0432\u0430\u0442\u0430\u043b\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430.<\/p>\n<p>\u0412 \u043f\u0435\u0440\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0440\u0438 \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u043d\u0438\u0438 \u0440\u043e\u043b\u0438\u043a\u0430&nbsp;<a href=\"https:\/\/www.videvo.net\/video\/flying-through-forest-1\/4651\/\">&#171;Flying Through Forest 1&#187;<\/a>&nbsp;\u043c\u044b \u0432\u0438\u0434\u0435\u043b\u0438 \u043f\u0440\u043e\u0432\u0430\u043b\u044b \u0434\u043e 20-15 fps, \u043d\u043e \u0442\u043e\u0433\u0434\u0430 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u0430\u044f \u043c\u0430\u0448\u0438\u043d\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u0432\u0430 \u044f\u0434\u0440\u0430. \u041f\u043e\u0441\u043b\u0435 \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u044f vCPU \u0434\u043e 6 \u044f\u0434\u0435\u0440 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c fps \u044f\u0432\u043d\u043e \u0441\u0442\u0430\u043b \u043b\u0443\u0447\u0448\u0435 \u0434\u043b\u044f \u043e\u0434\u043d\u043e\u0433\u043e-\u0434\u0432\u0443\u0445 \u0441\u0435\u0430\u043d\u0441\u043e\u0432 \u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0442\u0440\u0451\u0445 \u0441\u0435\u0430\u043d\u0441\u043e\u0432 \u043e\u043d \u0441\u043d\u043e\u0432\u0430 \u043f\u0440\u043e\u0441\u0435\u043b.<\/p>\n<p>Youtube-\u0442\u0435\u0441\u0442 \u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u043b \u043e\u0442\u043b\u0438\u0447\u043d\u044b\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b, \u043f\u043e\u043a\u0430 \u043d\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043b\u0441\u044f \u0442\u0440\u0435\u0442\u0438\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c, \u0447\u0442\u043e \u0432\u044b\u0437\u0432\u0430\u043b\u043e \u043f\u043e\u0447\u0442\u0438 100% \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u043d\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440, \u0430 fps \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043f\u0440\u043e\u0441\u0435\u043b \u043d\u0430 10 \u043a\u0430\u0434\u0440\u043e\u0432.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/5fc\/543\/ce4\/5fc543ce47568483453ccbc7eddc2448.png\" width=\"1072\" height=\"568\"><figcaption><\/figcaption><\/figure>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/8c8\/4ca\/9af\/8c84ca9af73bb7b817dff12701698b3c.png\" width=\"1072\" height=\"568\"><figcaption><\/figcaption><\/figure>\n<h4>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438<\/h4>\n<p>\u0421\u0447\u0451\u0442\u0447\u0438\u043a\u0438 \u043f\u043e\u043a\u0430\u0437\u0430\u043b\u0438 \u0432\u043f\u043e\u043b\u043d\u0435 \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u044b\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442: \u0441 \u0440\u043e\u0441\u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0430 \u0441\u0435\u0430\u043d\u0441\u043e\u0432 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b\u043e\u0441\u044c \u043c\u0435\u043d\u044c\u0448\u0435, \u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0430\u0441\u044c \u043e\u043d\u0430 \u0447\u0430\u0449\u0435. \u0412 \u0441\u0440\u0435\u0434\u043d\u0435\u043c, \u043e\u0434\u0438\u043d \u0442\u0435\u0441\u0442 &#171;\u0441\u0442\u043e\u0438\u043b&#187; \u043e\u0434\u043d\u043e\u043c\u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e \u043e\u043a\u043e\u043b\u043e 1 \u0413\u0411.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/704\/3b2\/121\/7043b212122ed37635354950239188e8.png\" width=\"1072\" height=\"568\"><figcaption><\/figcaption><\/figure>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/ffa\/df9\/778\/ffadf9778edd60de8395a43c1b8966a2.png\" width=\"1072\" height=\"568\"><figcaption><\/figcaption><\/figure>\n<h4>\u041d\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u043d\u0430 \u0432\u0438\u0434\u0435\u043e\u043a\u0430\u0440\u0442\u0443<\/h4>\n<p>\u0417\u0434\u0435\u0441\u044c \u0442\u0430\u043a\u0436\u0435 \u0437\u0430\u043c\u0435\u0440\u044b \u043d\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u043b\u0438 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435\u043e\u0431\u044b\u0447\u043d\u043e\u0433\u043e: \u0441\u0430\u043c\u044b\u043c \u0442\u044f\u0436\u0451\u043b\u044b\u043c \u0434\u043b\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430\/\u043f\u0430\u043c\u044f\u0442\u0438 \u0432\u0438\u0434\u0435\u043e\u043a\u0430\u0440\u0442\u044b \u0431\u044b\u043b 3D \u0442\u0435\u0441\u0442. \u0411\u043e\u043b\u044c\u0448\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 -&gt; \u043c\u0435\u043d\u044c\u0448\u0435 \u043a\u0430\u0434\u0440\u043e\u0432 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443 -&gt; \u043d\u0438\u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0444\u0440\u0435\u0439\u043c\u0431\u0443\u0444\u0435\u0440\u0430.<\/p>\n<p>\u0412\u0438\u0434\u0435\u043e\u0442\u0435\u0441\u0442. \u041f\u0435\u0440\u0432\u044b\u0439 \u0440\u043e\u043b\u0438\u043a,&nbsp;<a href=\"https:\/\/www.videvo.net\/video\/ants-carrying-dead-spider\/4752\/\">&#171;Ants carrying dead spider&#187;<\/a>, \u043d\u0430\u0433\u0440\u0443\u0436\u0430\u043b \u0432\u0438\u0434\u0435\u043e\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440, \u0430 \u0442\u0440\u0435\u0442\u0438\u0439,&nbsp;<a href=\"https:\/\/www.videvo.net\/video\/low-angle-of-pedestrians-walking-in-busy-street,-daytime\/464239\/\">&#171;Low Angle Of Pedestrians Walking In Busy Street, Daytime&#187;<\/a>, \u0434\u0435\u043a\u043e\u0434\u0435\u0440 \u0438, \u043a\u0430\u043a \u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u0435, \u0432\u0438\u0434\u0435\u043e\u043f\u0430\u043c\u044f\u0442\u044c.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/5b2\/b08\/bea\/5b2b08bea5311a405f70469e979c05af.png\" width=\"1072\" height=\"568\"><figcaption><\/figcaption><\/figure>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/50e\/c7b\/b59\/50ec7bb59042217bf4a714566e5d9cee.png\" width=\"1072\" height=\"568\"><figcaption><\/figcaption><\/figure>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/dfa\/336\/673\/dfa33667342f4d6f310d73e070e77a79.png\" width=\"1072\" height=\"568\"><figcaption><\/figcaption><\/figure>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/4af\/b65\/dd1\/4afb65dd107636bebd7eafcb3d3d274a.png\" width=\"1072\" height=\"568\"><figcaption><\/figcaption><\/figure>\n<h4>\u041e\u0431\u0449\u0438\u0435 \u0441\u0435\u0442\u0435\u0432\u044b\u0435 \u043c\u0435\u0442\u0440\u0438\u043a\u0438<\/h4>\n<p>\u041e\u0441\u043d\u043e\u0432\u043d\u0443\u044e \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u043f\u0440\u0438 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 RemoteFX \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 UDP \u0442\u0440\u0430\u0444\u0438\u043a, \u0430 \u043f\u043e TCP \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0442\u0441\u044f, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043d\u0430\u0436\u0430\u0442\u0438\u044f \u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u044b. \u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e, TCP-\u0442\u0440\u0430\u0444\u0438\u043a \u043d\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0440\u044f\u0434\u043a\u043e\u0432 \u043c\u0435\u043d\u044c\u0448\u0435, \u043a\u043e\u043b\u0435\u0431\u043b\u0435\u0442\u0441\u044f \u0432 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u0445 \u043e\u0442 \u0441\u043e\u0442\u0435\u043d \u0434\u043e \u0442\u044b\u0441\u044f\u0447 \u0431\u0438\u0442 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443.<\/p>\n<p>\u0417\u0434\u0435\u0441\u044c \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u044b \u043e\u0431\u0449\u0438\u0435 \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u0438, \u0433\u0440\u0430\u0444\u0438\u043a\u0438 \u0432 \u0440\u0430\u0437\u0440\u0435\u0437\u0435 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u043e\u0432 \u0432\u044b\u043d\u0435\u0441 \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435. \u041f\u043e\u043c\u0435\u0447\u0435\u043d\u044b \u043a\u0430\u043a UDP \u0442\u0440\u0430\u0444\u0438\u043a \u0438 TCP \u0442\u0440\u0430\u0444\u0438\u043a<\/p>\n<p>\u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0432\u0441\u043f\u043b\u0435\u0441\u043a\u0438 \u0432 \u0433\u0440\u0430\u0444\u0438\u043a\u0430\u0445 \u0432\u044b\u0437\u044b\u0432\u0430\u043b\u043e \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u043d\u0438\u0435 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0432\u0438\u0434\u0435\u043e\u0444\u0430\u0439\u043b\u0430&nbsp;<a href=\"https:\/\/www.videvo.net\/video\/flying-through-forest-1\/4651\/\">&#171;Flying Through Forest 1&#187;<\/a>. \u0412\u0438\u0434\u0438\u043c\u043e, \u0432 \u044d\u0442\u0438 \u043c\u043e\u043c\u0435\u043d\u0442\u044b \u043f\u043e\u0442\u043e\u043a \u0434\u0430\u043d\u043d\u044b\u0445 \u0443\u043f\u0438\u0440\u0430\u043b\u0441\u044f \u0432 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u043a\u0430\u043d\u0430\u043b\u0430 \u0441\u0432\u044f\u0437\u0438 \u0441\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u0441\u0435\u0440\u0432\u0435\u0440\u0430, 50 \u041c\u0431\u0438\u0442\/\u0441.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/e17\/66e\/c39\/e1766ec39d94ea1d4affef82e8ddeba9.png\" width=\"1072\" height=\"568\"><figcaption><\/figcaption><\/figure>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/361\/38b\/0dd\/36138b0dd07177ccb1fd9758ebed3a11.png\" width=\"1072\" height=\"568\"><figcaption><\/figcaption><\/figure>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/924\/6b5\/1a7\/9246b51a7bf06edcc3d63f602fe1f9fa.png\" width=\"1072\" height=\"568\"><figcaption><\/figcaption><\/figure>\n<h3>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h3>\n<p>NVIDIA GRID M60 \u043f\u043e\u0437\u0438\u0446\u0438\u043e\u043d\u0438\u0440\u0443\u0435\u0442\u0441\u044f&nbsp;<a href=\"http:\/\/images.nvidia.com\/content\/grid\/pdf\/188270-NVIDIA-GRID-Datasheet-NV-US-FNL-Web.pdf\">(1,<\/a>&nbsp;<a href=\"https:\/\/www.nvidia.com\/content\/dam\/en-zz\/Solutions\/design-visualization\/solutions\/resources\/documents1\/nvidia-m60-datasheet.pdf\">2)<\/a>&nbsp;\u043a\u0430\u043a \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0440\u0430\u0431\u043e\u0447\u0438\u0445 \u043c\u0435\u0441\u0442, \u0441\u0442\u043e\u043b\u043e\u0432 \u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0434\u043b\u044f \u0434\u0438\u0437\u0430\u0439\u043d\u0435\u0440\u043e\u0432, \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432, \u043e\u0444\u0438\u0441\u043d\u044b\u0445 \u0438 \u043f\u0440\u043e\u0447\u0438\u0445 \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u043e\u0432. \u042d\u0442\u0443 \u0432\u0438\u0434\u0435\u043e\u043a\u0430\u0440\u0442\u0443 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0430 32 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u043c\u0430\u0448\u0438\u043d\u0430\u0445 \u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c, \u0432\u044b\u0434\u0435\u043b\u0438\u0432 \u043f\u043e 512 \u041c\u0411 \u0432\u0438\u0434\u0435\u043e\u043f\u0430\u043c\u044f\u0442\u0438 \u043d\u0430 \u043a\u0430\u0436\u0434\u0443\u044e \u0412\u041c. \u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u0440\u043e\u0444\u0438\u043b\u044c &#8216;M60-1Q&#8217; \u0431\u044b\u043b \u0448\u0438\u0440\u0435, \u043d\u0430 1 \u0413\u0411.<\/p>\n<p>\u041a\u0430\u043a \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442 \u0442\u0435\u0441\u0442\u044b, \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0441 \u044d\u0442\u0438\u043c \u0432\u0438\u0434\u0435\u043e\u043f\u0440\u043e\u0444\u0438\u043b\u0435\u043c \u043d\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u0443\u043f\u0438\u0440\u0430\u0435\u0442\u0441\u044f, \u0432 \u043f\u0435\u0440\u0432\u0443\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c, \u0432 \u043e\u0431\u0449\u0438\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u044b &#8212; vCPU \u0438 vRAM. \u0414\u043b\u044f \u043e\u0446\u0435\u043d\u043a\u0438 \u0432\u043b\u0438\u044f\u043d\u0438\u044f \u0438\u043c\u0435\u043d\u043d\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u043d\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c, \u043b\u044e\u0431\u043e\u0439 \u0442\u0435\u0441\u0442 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043b\u0441\u044f \u0443 \u0432\u0441\u0435\u0445 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0438\u043a\u0438 \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u0439 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u043b\u0438\u0441\u044c \u0434\u0440\u0443\u0433 \u0441 \u0434\u0440\u0443\u0433\u043e\u043c \u0438 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u0438 \u0431\u043e\u043b\u044c\u0448\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 \u0434\u043b\u044f \u043a\u043e\u043c\u0444\u043e\u0440\u0442\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b: 2 \u044f\u0434\u0440\u0430 vCPU \u0438 1 \u0413\u0411 vRAM \u043d\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f. \u041f\u0440\u0438 \u0442\u0430\u043a\u0438\u0445 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445 \u0432\u0438\u0434\u0435\u043e\u043a\u0430\u0440\u0442\u0430 &#171;\u0432\u044b\u0442\u044f\u0433\u0438\u0432\u0430\u043b\u0430&#187; 2-3 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0441\u0435\u0430\u043d\u0441\u0430, \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0442\u0435\u0441\u0442\u0430.<\/p>\n<p>\u0412 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438, \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435, \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u043f\u043e\u0434\u0431\u0438\u0440\u0430\u044e\u0442 \u0438\u0441\u0445\u043e\u0434\u044f \u0438\u0437 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0445 \u0437\u0430\u0434\u0430\u0447, \u0441\u0440\u0435\u0434\u043d\u0435\u0439 \u0438 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0439 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0435\u0441\u043b\u0438 \u043e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0430\u0440\u044b \u0434\u0435\u0441\u044f\u0442\u043a\u043e\u0432 \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u043e\u0432 \u043d\u043e\u0441\u0438\u0442 &#171;\u043e\u0444\u0438\u0441\u043d\u044b\u0439&#187; \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440 \u2014 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u044b, \u043f\u043e\u0447\u0442\u0430, \u0431\u0440\u0430\u0443\u0437\u0435\u0440, 1\u0421 \u2014 \u0432\u043f\u043e\u043b\u043d\u0435 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u0434\u0438\u043d \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u0435\u0440\u0432\u0435\u0440 \u0441 \u0442\u0430\u043a\u0438\u043c vGPU, \u043f\u043e\u0434\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u044f \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u0426\u041f\u0423 \u0438 RAM \u043f\u043e \u043c\u0435\u0440\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043f\u043e\u0434 \u0447\u0438\u0441\u043b\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439. <\/p>\n<p>\u0415\u0441\u043b\u0438 \u0436\u0435 \u0440\u0435\u0447\u044c \u0438\u0434\u0451\u0442 \u043e\u0431 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0435 3D \u0433\u0440\u0430\u0444\u0438\u043a\u0438, \u0442\u043e \u0432\u0440\u044f\u0434 \u043b\u0438 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u043d\u0430 vGPU \u0431\u0443\u0434\u0435\u0442 \u0442\u0430\u043a\u0430\u044f \u0436\u0435 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u0430\u044f \u0438 \u0438\u043d\u0442\u0435\u043d\u0441\u0438\u0432\u043d\u0430\u044f, \u043a\u0430\u043a \u0432 3D \u0442\u0435\u0441\u0442\u0435. \u0421\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u0441 \u0443\u0447\u0451\u0442\u043e\u043c \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u044f \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 \u043f\u043e \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044e \u0441 &#171;\u043e\u0444\u0438\u0441\u043d\u043e\u0439&#187; \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0435\u0439, \u044d\u0442\u043e\u0442 \u0432\u0438\u0434\u0435\u043e\u043f\u0440\u043e\u0444\u0438\u043b\u044c \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c 3-5 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c. \u0412\u043f\u0440\u043e\u0447\u0435\u043c, \u0434\u043b\u044f \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u043b\u043e\u0436\u043d\u044b\u0445 3D \u0437\u0430\u0434\u0430\u0447, \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u0435\u0440\u0432\u0435\u0440 \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u0434\u0430\u0442\u044c \u0432 \u043c\u043e\u043d\u043e\u043f\u043e\u043b\u044c\u043d\u043e\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043e\u0434\u043d\u043e\u043c\u0443 \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u0443, \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u0443\u044f\u0441\u044c \u043f\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0443 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432.<\/p>\n<h3>\u041f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f<\/h3>\n<details class=\"spoiler\">\n<summary>Set-DataCollectors.ps1<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"powershell\">&lt;# .SYNOPSIS     Help to define PerfMon Data Collectors     Need manual launch if number of terminal sessions is changed  .DESCRIPTION     \u0438\u0434\u0435\u044f \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c:         \u0421\u0431\u043e\u0440\u043e\u043c \u043c\u0435\u0442\u0440\u0438\u043a \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u0430\u0434\u043c\u0438\u043d, \u043f\u0440\u0438 \u043a\u0430\u0436\u0434\u043e\u043c \u043d\u043e\u0432\u043e\u043c \u0432\u0445\u043e\u0434\u0435          \u043f\u043e RDP \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043b\u0441\u044f \u0430\u0434\u043c\u0438\u043d (1 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c)         \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043b \u044d\u0442\u043e\u0442 \u0441\u043a\u0440\u0438\u043f\u0442 \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u0438 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0438\u0437 5 \u0442\u0435\u0441\u0442\u043e\u0432 \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f \u0441\u0432\u043e\u0439 \u0441\u0431\u043e\u0440\u0449\u0438\u043a \u0434\u0430\u043d\u043d\u044b\u0445             \u0430\u0434\u043c\u0438\u043d \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 1\u0439..5\u0439 \u0442\u0435\u0441\u0442\u044b (\u0432\u044b\u0431\u043e\u0440\u043e\u0447\u043d\u043e \u0438\u043b\u0438 \u0432\u0441\u0435)             \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0441 \u0442\u0435\u0441\u0442\u043e\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u0441\u0431\u043e\u0440\u0449\u0438\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442 \u0437\u0430\u043c\u0435\u0440\u044b \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0444\u0430\u0439\u043b             \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u0442\u0435\u0441\u0442 \u0431\u0443\u0434\u0435\u0442 \u0441\u0432\u043e\u0439 \u0444\u0430\u0439\u043b \u0441 \u0437\u0430\u043c\u0435\u0440\u0430\u043c\u0438          \u0434\u0430\u043b\u0435\u0435 \u043f\u043e RDP \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c         \u0430\u0434\u043c\u0438\u043d \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u0441\u043a\u0440\u0438\u043f\u0442 \u0434\u043b\u044f \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u0431\u043e\u0440\u0449\u0438\u043a\u043e\u0432, \u0442.\u043a. \u043d\u0443\u0436\u043d\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u0437\u0430\u043c\u0435\u0440\u044b RemoteFX \u0443\u0436\u0435 \u0434\u043b\u044f 2\u0445 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439             \u0430\u0434\u043c\u0438\u043d \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 1\u0439..5\u0439 \u0442\u0435\u0441\u0442\u044b             \u043f\u043e\u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0435\u0449\u0451 \u043b\u043e\u0433\u0438 (\u0437\u0430\u043c\u0435\u0440\u044b), \u043d\u043e \u0442\u0435\u043f\u0435\u0440\u044c \u0443\u0436\u0435 \u0434\u043b\u044f 2\u0445 \u0441\u0435\u0441\u0441\u0438\u0439          \u0434\u0430\u043b\u0435\u0435 \u043f\u043e RDP \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0435\u0449\u0451 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c             ...       \u0432 \u0438\u0442\u043e\u0433\u0435 \u0431\u0443\u0434\u0443\u0442 \u0437\u0430\u043c\u0435\u0440\u044b \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439:         \u0434\u043b\u044f \u0430\u0434\u043c\u0438\u043d\u0430 (1 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c)         \u0434\u043b\u044f 1 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0418 \u0430\u0434\u043c\u0438\u043d\u0430         ...         \u0434\u043b\u044f 5 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u0418 \u0430\u0434\u043c\u0438\u043d\u0430  .NOTES     Author: Dmitry Mikhaylov aka alt-air #&gt;  $RootDir = '{0}' -f ($MyInvocation.MyCommand.Definition | Split-Path -Parent) $LogsDir = '{0}' -f (Join-Path -Path $RootDir -ChildPath 'logs') $LogFile = '{0}' -f (Join-Path -Path $LogsDir -ChildPath '{0}') $cfgGeneral = '{0}' -f (Join-Path -Path $RootDir -ChildPath 'CountersGeneral.cfg') $cfgSession = '{0}' -f (Join-Path -Path $RootDir -ChildPath 'CountersSession.cfg')  try  # \u0438\u043c\u043f\u043e\u0440\u0442 \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043c\u043e\u0434\u0443\u043b\u044f {     Import-Module -Force (Join-Path -Path $RootDir -ChildPath 'helper.psm1' -Resolve) } catch {     'failed import helper.psm1' | Write-Output     break }  $TermSessions = @(Get-quser)  # terminal sessions  #region \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0432\u0441\u0435\u0445 \u0441\u0442\u0430\u0440\u044b\u0445 \u0441\u0431\u043e\u0440\u0449\u0438\u043a\u043e\u0432 \u0434\u0430\u043d\u043d\u044b\u0445 foreach ($Counter in Get-Logman) {     if ($Counter.Status -match 'Running') { $null = logman stop $Counter.'Data Collector Set' 2&gt;&amp;1 }     # elseif ($Counter.Status -match 'Stopped') { $null = logman start $Counter.'Data Collector Set' 2&gt;&amp;1 }  # \u0434\u043b\u044f \u0434\u0435\u0431\u0430\u0433\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u044b logman } #endregion   #region \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u0432\u0441\u0435\u0445 \u0441\u0442\u0430\u0440\u044b\u0445 \u0441\u0431\u043e\u0440\u0449\u0438\u043a\u043e\u0432 \u0434\u0430\u043d\u043d\u044b\u0445 foreach ($Counter in Get-Logman) {     if ($Counter.Status -match 'Stopped')     {         $null = logman delete $Counter.'Data Collector Set' 2&gt;&amp;1     } } #endregion   #region \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0430 \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u043e\u0432 $CountersGeneral = @(  # \u043e\u0431\u0449\u0438\u0435 \u043c\u0435\u0442\u0440\u0438\u043a\u0438, \u0441\u0440\u0430\u0437\u0443 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0441\u0435\u0430\u043d\u0441\u043e\u0432     # \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u0438 \u043f\u0430\u043c\u044f\u0442\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442, \u0435\u0441\u043b\u0438 \u043e\u043d\u0438 \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u044b \u0432 \u044d\u0442\u043e\u043c \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u043e\u043c \u0441\u0431\u043e\u0440\u0449\u0438\u043a\u0435 \u0434\u0430\u043d\u043d\u044b\u0445. \u041f\u0440\u0438 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0438 \u0432 \u043e\u0434\u0438\u043d \u0441\u0431\u043e\u0440\u0449\u0438\u043a \u043e\u043d\u0438 \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u044e\u0442 \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u0438\u044f     '\\Memory\\% Committed Bytes In Use'     '\\Memory\\Available Bytes'      '\\Processor Information(_Total)\\% Processor Time'     '\\NVIDIA GPU(*)\\% GPU Usage'     '\\NVIDIA GPU(*)\\% GPU Memory Usage'     '\\NVIDIA GPU(*)\\% FB Usage'     '\\NVIDIA GPU(*)\\% Video Decoder Usage'     '\\NVIDIA GPU(*)\\% Video Encoder Usage' )  $CountersSession = @(  # \u043c\u0435\u0442\u0440\u0438\u043a\u0438 \u0441\u0435\u0430\u043d\u0441\u043e\u0432     '\\User Input Delay per Session({1})\\Max Input Delay'  # \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0432 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u043c \u0441\u0435\u0430\u043d\u0441\u0435      # '\\RemoteFX Network(RDP-Tcp {0})\\*'     '\\RemoteFX Network(RDP-Tcp {0})\\Loss Rate'     '\\RemoteFX Network(RDP-Tcp {0})\\Current TCP Bandwidth'     '\\RemoteFX Network(RDP-Tcp {0})\\Current UDP Bandwidth'      '\\RemoteFX Network(RDP-Tcp {0})\\Total Sent Rate'     '\\RemoteFX Network(RDP-Tcp {0})\\TCP Sent Rate'     '\\RemoteFX Network(RDP-Tcp {0})\\UDP Sent Rate'      '\\RemoteFX Network(RDP-Tcp {0})\\Total Received Rate'     '\\RemoteFX Network(RDP-Tcp {0})\\TCP Received Rate'     '\\RemoteFX Network(RDP-Tcp {0})\\UDP Received Rate'      # '\\RemoteFX Graphics(RDP-Tcp {0})\\*'     '\\RemoteFX Graphics(RDP-Tcp {0})\\Input Frames\/Second'     '\\RemoteFX Graphics(RDP-Tcp {0})\\Output Frames\/Second'     '\\RemoteFX Graphics(RDP-Tcp {0})\\Frame Quality'     '\\RemoteFX Graphics(RDP-Tcp {0})\\Average Encoding Time'     '\\RemoteFX Graphics(RDP-Tcp {0})\\Graphics Compression ratio'     '\\RemoteFX Graphics(RDP-Tcp {0})\\Frames Skipped\/Second - Insufficient Server Resources'     '\\RemoteFX Graphics(RDP-Tcp {0})\\Frames Skipped\/Second - Insufficient Network Resources'     '\\RemoteFX Graphics(RDP-Tcp {0})\\Frames Skipped\/Second - Insufficient Client Resources' )  # \u043e\u0431\u0449\u0438\u0435 \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u0438 \u0432 \u043a\u043e\u043d\u0444\u0438\u0433 $null | Out-File -FilePath $cfgGeneral foreach ($c in $CountersGeneral) {     $c | Out-File -FilePath $cfgGeneral -Append }  # \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u0438 \u0441\u0435\u0430\u043d\u0441\u043e\u0432 \u0432 \u043a\u043e\u043d\u0444\u0438\u0433 $null | Out-File -FilePath $cfgSession foreach ($c in $CountersSession) {     foreach ($s in $TermSessions)     {         $c -f $s.SESSIONNAME.Split('#')[1], $s.ID | Out-File -FilePath $cfgSession -Append     } } #endregion   #region \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043d\u043e\u0432\u044b\u0445 \u0441\u0431\u043e\u0440\u0449\u0438\u043a\u043e\u0432, \u043f\u043e \u043e\u0434\u043d\u043e\u043c\u0443 \u043d\u0430 \u0442\u0435\u0441\u0442, \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u0435\u0441\u0441\u0438\u0439  # Counters.cfg foreach ($t in $TestDefinitions.GetEnumerator())  # -ct &lt;perf|system|cycle&gt; {     $CNGen = \"{0} users {1} general\" -f ($t.Key, $TermSessions.Length)  # general data collector name     $null = logman create counter -n $CNGen -f bin -max 10 -si 00:00:01 -rf ('00:0{0}:00' -f $duration) --v -ow -cf $cfgGeneral -o ($LogFile -f $CNGen)      $CNSes = \"{0} users {1} session\" -f ($t.Key, $TermSessions.Length)  # session data collector name     $null = logman create counter -n $CNSes -f bin -max 10 -si 00:00:01 -rf ('00:0{0}:00' -f $duration) --v -ow -cf $cfgSession -o ($LogFile -f $CNSes) } #endregion<\/code><\/pre>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>Set-DataCollectors.cmd<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"bash\">@echo off  @REM \u0441\u043c\u0435\u043d\u0430 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0438 \u043d\u0443\u0436\u043d\u0430 \u0434\u043b\u044f powershell-\u0441\u043a\u0440\u0438\u043f\u0442\u0430 \"%~dpn0.ps1\" chcp 65001  @REM \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u043c \u0432 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u043f\u0430\u043f\u043a\u0435 \u0441\u043a\u0440\u0438\u043f\u0442\u0430 pushd \"%~dp0\"  @REM \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0432 \u0446\u0438\u043a\u043b\u0435 setlocal EnableDelayedExpansion  @REM \u0438\u043c\u0435\u043d\u0430 cmd \u0438 powershell \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432 \u0434\u043e\u043b\u0436\u043d\u044b \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0442\u044c @REM powershell.exe -NoLogo -NoProfile -File \"%~dpn0.ps1\" start \"%~dpn0.ps1\" \/WAIT \/B powershell.exe -Command \"&amp; {%~dpn0.ps1}\"  @REM pause<\/code><\/pre>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>Start-SyncedTest.ps1<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"powershell\">&lt;# .SYNOPSIS     Let select the RemoteFX benchmark and launch it  .DESCRIPTION     Let select the RemoteFX benchmark and launch it     \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u0442\u0435\u0441\u0442\u043e\u0432 \u043d\u0430 \u0432\u044b\u0431\u043e\u0440, \u043f\u043e\u0441\u043b\u0435 \u0432\u044b\u0431\u043e\u0440\u0430 \u0442\u0435\u0441\u0442\u0430         \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c, \u043d\u0435 \u0437\u0430\u043f\u0443\u0449\u0435\u043d \u043b\u0438 \u043a\u0430\u043a\u043e\u0439-\u043b\u0438\u0431\u043e \u0442\u0435\u0441\u0442         \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u044c \u0432\u0441\u0435 \u043d\u0435\u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b \u0441 \u0442\u0435\u0441\u0442\u0430\u043c\u0438         \u043a\u0430\u0436\u0434\u044b\u0435 3 \u043c\u0438\u043d\u0443\u0442\u044b \u0440\u043e\u0432\u043d\u043e \u0432 00 \u0441\u0435\u043a\u0443\u043d\u0434 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0439 \u0442\u0435\u0441\u0442  .NOTES     Author: Dmitry Mikhaylov aka alt-air #&gt;  [CmdletBinding()] param (     $DelayValidation    = 0,    # magic number: delay before killing processes after validation running     $DelayLogman        = 7,    # magic number: delay before running notepad after running main test     $interval           = 0,    # waiting sync interval in minutes, batch file run it with '-interval 1'     [switch] $gui       = $false )   $RootDir = '{0}' -f ($MyInvocation.MyCommand.Definition | Split-Path -Parent) $LogsDir = '{0}' -f (Join-Path -Path $RootDir -ChildPath 'logs') $LogFile = '{0}' -f (Join-Path -Path $LogsDir -ChildPath 'match.csv')  try  # \u0438\u043c\u043f\u043e\u0440\u0442 \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043c\u043e\u0434\u0443\u043b\u044f {     Import-Module -Force (Join-Path -Path $RootDir -ChildPath 'helper.psm1' -Resolve) } catch {     'failed import helper.psm1' | Write-Output      break }   #region select test and validation it through short running  try  # select and check the test {     if ($gui) { $t = $TestDefinitions | Out-GridView -Title 'Please, select RemoteFX test mode' -OutputMode Single }     else     {         $TestDefinitions.Keys | Write-Output          $key = @($TestDefinitions.Keys)[ ([int](Read-Host -Prompt 'select the test') &lt;# - 1 #&gt;) ]          $t = $TestDefinitions.GetEnumerator() | Where-Object { $_.key -eq $key }  # \u0438\u043d\u0430\u0447\u0435 \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u043e\u0442\u0430\u0446\u0438\u044f $t.Value.exe, \u0442\u043e\u043b\u044c\u043a\u043e $t.Values     }      # $null = Start-Process -FilePath $t.Value.exe -ArgumentList $t.Value.param -WindowStyle Hidden  # -WhatIf \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0432 PowerShell 7      'debug message 1: {0} path to {1}' -f ((Test-Path -PathType Leaf -Path $t.Value.exe), $t.Value.exe) | Write-Warning } catch  # something go wrong... {     'no test selected or cannot run selected test {0}' -f $t.Key | Write-Output      break } finally  # kill all possible old test processes {     $null = Start-Sleep -Seconds $DelayValidation  # magic number      if ($env:USERNAME -match $manager)  # todo, bug here: need clear quser output to find current user is admin ('&gt;')     {         # stop all data collectors         foreach ($Counter in Get-Logman ) { if ($Counter.Status -match 'Running') { $null = logman stop $Counter.'Data Collector Set' 2&gt;&amp;1 } }          $null = Clear-ProcessSpace     } }  #endregion   Sync-Tests -test $t.Key -period $interval   #region running selected test  $np = $TestDefinitions.GetEnumerator() | Where-Object {$_.Key -eq 'test #1 notepad'}  if ($null -eq $np) {     'debug message 2: cannot run notepad, $np is null{0}break...' -f \"`n\" | Write-Warning      break }  $ProcNpad = Start-Process -FilePath $np.Value.exe -ArgumentList $np.Value.param -PassThru $ProcNpad.PriorityClass = 'Normal'  # Normal Idle High RealTime BelowNormal AboveNormal  $ProcTest = Start-Process -FilePath $t.Value.exe -ArgumentList $t.Value.param -PassThru $ProcTest.PriorityClass = 'Normal'  $null = Start-Sleep -Seconds $DelayLogman  # delay for switching to notepad BEFORE start data collecting  #endregion   #region manage test process IF ADMIN (collect data, stop processes, logging, etc)  if ($env:USERNAME -match $manager)  # todo, bug here: need clear quser output to find current user is admin ('&gt;') {      # stop all previous data collectors     foreach ($Counter in Get-Logman )     {         if ($Counter.Status -match 'Running') { $null = logman stop $Counter.'Data Collector Set' 2&gt;&amp;1 }     }      # run selected test data collector     foreach ($Counter in Get-Logman | Where-Object { $_.'Data Collector Set' -match $t.Key})     {         if ($Counter.Status -match 'Stopped') { $null = logman start $Counter.'Data Collector Set' 2&gt;&amp;1 }     }       # logging matching between username, rpd session number and session id     $log = @()      $TermSessions = @(Get-quser)      foreach ($s in $TermSessions)     {         $log += New-Object psobject -Property @{             'date'          = Get-Date -UFormat \"%Y.%m.%d %H:%M:%S\"             'UTC offset'    = Get-Date -UFormat \"%Z\"             'file'          = \"{0} users {1} general.blg\" -f ($t.Key, $TermSessions.Length)  # $t.Key             'rdp user'      = $s.USERNAME             'rdp session'   = $s.SESSIONNAME             'rdp id'        = $s.ID         }          $log += New-Object psobject -Property @{             'date'          = Get-Date -UFormat \"%Y.%m.%d %H:%M:%S\"             'UTC offset'    = Get-Date -UFormat \"%Z\"             'file'          = \"{0} users {1} session.blg\" -f ($t.Key, $TermSessions.Length)  # $t.Key             'rdp user'      = $s.USERNAME             'rdp session'   = $s.SESSIONNAME             'rdp id'        = $s.ID         }     }      $log | Select-Object -Property `     'file',`     'date',`     'rdp user',`     'rdp session',`     'rdp id',`     'UTC offset'`     | Export-Csv -NoTypeInformation -Append -Force -Path $LogFile       # kill process after test completed      $WatchDog = [system.diagnostics.stopwatch]::startNew()  # tick-tack, WatchDog timer      $durationS = $duration * 60 + 2      while ($WatchDog.Elapsed.TotalSeconds -lt $durationS)     {         Write-Progress -Activity (\"{0}\" -f $t.Key) -SecondsRemaining ($durationS - $WatchDog.Elapsed.TotalSeconds) -CurrentOperation \"waiting test completition\"          $null = Start-Sleep -Milliseconds 4987     }      # $ProcTest.Kill()     # $ProcNpad.Kill()      $null = Clear-ProcessSpace }  #endregion<\/code><\/pre>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>Start-SyncedTest.cmd<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"bash\">@echo off  @REM \u0441\u043c\u0435\u043d\u0430 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0438 \u043d\u0443\u0436\u043d\u0430 \u0434\u043b\u044f powershell-\u0441\u043a\u0440\u0438\u043f\u0442\u0430 \"%~dpn0.ps1\" chcp 65001  @REM \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u043c \u0432 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u043f\u0430\u043f\u043a\u0435 \u0441\u043a\u0440\u0438\u043f\u0442\u0430 pushd \"%~dp0\"  @REM \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0432 \u0446\u0438\u043a\u043b\u0435 setlocal EnableDelayedExpansion  @REM \u0438\u043c\u0435\u043d\u0430 cmd \u0438 powershell \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432 \u0434\u043e\u043b\u0436\u043d\u044b \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0442\u044c @REM powershell.exe -File \"%~dpn0.ps1\" start \"%~dpn0.ps1\" \/WAIT \/B powershell.exe -Command \"&amp; {%~dpn0.ps1 -interval 1 -gui:$false}\"  @REM pause<\/code><\/pre>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>helper.psm1<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"powershell\">$duration   = 2         # test duration $manager    = 'admin'   # username, who can manage test process  # production # $manager    = 'user'    # username, who can manage test process  # debug  $TestDefinitions = [ordered] @{  # \u0441\u0445\u0435\u043c\u0430 \u0442\u0435\u0441\u0442\u043e\u0432     # DEBUG ONLY     \"test #0 DEBUG\"  = New-Object psobject -Property @{         \"exe\" = \"${env:ProgramFiles(x86)}\\Windows Media Player\\wmplayer.exe\"         \"param\" = @(&lt;# \"\/Playlist\", #&gt; \"$env:PUBLIC\\Music\\Playlists\\mp4-qt-mp4.wpl\", \"\/fullscreen\")     }      \"test #1 notepad\"   = New-Object psobject -Property @{         \"exe\" = \"$env:SystemRoot\\system32\\notepad.exe\"         \"param\" = @(\"\/w\")     }      \"test #2 FurMark\"   = New-Object psobject -Property @{         \"exe\" = \"${env:ProgramFiles(x86)}\\Geeks3D\\Benchmarks\\FurMark\\FurMark.exe\"         \"param\" = @(\"\/nogui\", \"\/nomenubar\", \"\/fullscreen\", \"\/max_time=150000\")     }      \"test #3 WMPlayer\"  = New-Object psobject -Property @{         \"exe\" = \"${env:ProgramFiles(x86)}\\Windows Media Player\\wmplayer.exe\"         \"param\" = @(&lt;# \"\/Playlist\", #&gt; \"$env:PUBLIC\\Music\\Playlists\\mp4-qt-mp4.wpl\", \"\/fullscreen\")     }      \"test #4 youtube\"   = New-Object psobject -Property @{         \"exe\" = \"$env:ProgramW6432\\Mozilla Firefox\\firefox.exe\"         \"param\" = @(\"-new-window\", \"--kiosk\", \"https:\/\/www.youtube.com\/embed\/LXb3EKWsInQ?autoplay=1&amp;end=140&amp;fs=1&amp;rel=0&amp;loop=1\")     }      \"test #5 WebGL\"     = New-Object psobject -Property @{         \"exe\" = \"$env:ProgramW6432\\Mozilla Firefox\\firefox.exe\"         \"param\" = @(\"-new-window\", \"--kiosk\", \"https:\/\/webglsamples.org\/sprites\/index.html\")     } }   $users = @{     'administrator' = 0     '1'             = 1     '2'             = 2     '3'             = 3     '4'             = 4     '5'             = 5 }   function Get-quser  # \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u043c \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u043c \u0441\u0435\u0441\u0441\u0438\u044f\u043c \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0438\u0445 \u0432 \u0432\u0438\u0434\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 {   # https:\/\/devblogs.microsoft.com\/scripting\/automating-quser-through-powershell\/     # USERNAME SESSIONNAME ID STATE  IDLE TIME LOGON TIME     # -------- ----------- -- -----  --------- ----------     # 1        rdp-tcp#90  3  Active 1:46      13.01.2021 11:31     # 2        rdp-tcp#49  4  Active 1:46      13.01.2021 12:19      param ()      $qusers = quser 2&gt;&amp;1 | `         ForEach-Object -Process { $_ -replace '\\s{2,}',',' } | `         ForEach-Object -Process { $_ -replace '&gt;','' } | `         ConvertFrom-Csv | `         Where-Object { $_.state -match 'active'}  # -and $_.username -notmatch 'administrator' }      return $qusers }  function Get-Logman  # \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0441\u0431\u043e\u0440\u0449\u0438\u043a\u043e\u0432 \u043c\u0435\u0442\u0440\u0438\u043a \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0438\u0445 \u0432 \u0432\u0438\u0434\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 {     # Data Collector Set Type    Status     # ------------------ ----    ------     # &lt;name 1&gt;           Counter Stopped     # &lt;name 2&gt;           Counter Stopped      param ()      $pmOld = logman 2&gt;&amp;1 | Where-Object { $_ -notmatch 'successfully' -and  $_ -notmatch '[-]{2,}'} | ForEach-Object -Process { $_ -replace '\\s{2,}',',' } | ConvertFrom-Csv      return $pmOld }   function Sync-Tests  # \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u0437\u0430\u043f\u0443\u0441\u043a \u0442\u0435\u0441\u0442\u043e\u0432 \u0432 \u0440\u0430\u0437\u043d\u044b\u0445 RDP-\u0441\u0435\u0430\u043d\u0441\u0430\u0445 {     param (         [string]    $test   = 'no test',         [int]       $period = 1  # test run every X minute     )      $FixTime = Get-Date      try     {         $SecondsTotal = (60 * ($period - 1) - $FixTime.Second) * ($FixTime.Minute % $period -ne 0) + (60 * $period  - $FixTime.Second) * ($FixTime.Minute % $period -eq 0)     }     catch     {         $SecondsTotal = 0     }      while ( ((Get-Date).Second -ne 0 -or (Get-Date).Minute % $period -ne 0) -and $SecondsTotal -gt 0 )  # \u0437\u0430\u043f\u0443\u0441\u043a \u0442\u0435\u0441\u0442\u0430 \u0432 00 \u0441\u0435\u043a\u0443\u043d\u0434 \u043a\u0440\u0430\u0442\u043d\u043e \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u0443     {         $null = Start-Sleep -Milliseconds (1000 - (Get-Date).Millisecond)          $FixTime = Get-Date          try         {             $SecondsLeft = (60 * ($period - 1) - $FixTime.Second) * ($FixTime.Minute % $period -ne 0) + (60 * $period  - $FixTime.Second) * ($FixTime.Minute % $period -eq 0)         }         catch         {             $SecondsLeft = 0         }          try         {             Write-Progress -Activity (\"{0}\" -f $test) -SecondsRemaining $SecondsLeft -CurrentOperation \"waiting sync before running test\" #-PercentComplete ($SecondsLeft \/ $SecondsTotal * 100)         }         catch { &lt;# '{0} {1}' -f $SecondsTotal, $SecondsLeft #&gt; }     } }   function Clear-ProcessSpace  # \u0443\u0434\u0430\u043b\u044f\u0435\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b, \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u043d\u044b\u0435 \u0434\u043b\u044f \u0442\u0435\u0441\u0442\u0430 {     param ()      $ProcToKill = ($TestDefinitions.Values.exe | Split-Path -Leaf | ForEach-Object { $_.Split('.')[0] })      foreach ($p in $ProcToKill) { Get-Process -name ('*{0}*' -f $p) | Stop-Process -Force } }   Export-ModuleMember -Function * -Variable *<\/code><\/pre>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>blg2csv.ps1<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"powershell\">[CmdletBinding()] param (     [switch] $su       = $False  # substitute username instead session id\/number )  $WasError = $False $ErrMessages = @()  $RootDir = '{0}' -f ($MyInvocation.MyCommand.Definition | Split-Path -Parent) $LogsDir = '{0}' -f (Join-Path -Path $RootDir -ChildPath 'logs' -Resolve) $LogFile = '{0}' -f (Join-Path -Path $LogsDir -ChildPath 'match.csv' -Resolve)  try  # \u0438\u043c\u043f\u043e\u0440\u0442 \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043c\u043e\u0434\u0443\u043b\u044f {     Import-Module -Force (Join-Path -Path $RootDir -ChildPath 'helper.psm1' -Resolve) } catch {     'failed import helper.psm1' | Write-Output      break }   $EncodeFrom = [System.Text.Encoding]::GetEncoding(1251) $EncodeTo = New-Object System.Text.UTF8Encoding $False  $Heads = @()  # \u0434\u043b\u044f \u0432\u044b\u0432\u043e\u0434\u0430 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u043e\u0432 \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u044b\u0439 \u0444\u0430\u0439\u043b  # \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u043c \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438 csv \u0444\u0430\u0439\u043b\u043e\u0432 \u043a \u0435\u0434\u0438\u043d\u043e\u043c\u0443 \u0432\u0438\u0434\u0443, \u0443\u0431\u0438\u0440\u0430\u0435\u043c \u043d\u0435\u043d\u0443\u0436\u043d\u043e\u0435 foreach ( $f in (Get-ChildItem -Path $LogsDir -File -Filter '*.csv' | Where-Object {$_.Name -notin @('match.csv', 'heads.csv')}) ) {     $null = $f.BaseName -match 'users.(?&lt;n&gt;[0-9]{1,}).*'      $n = [int]$Matches['n']      $csv = Import-Csv -Path $LogFile `         | Where-Object {$_.file -match $f.BaseName} #`         | Select-Object -Last $n      $FileContent = $f | Get-Content -Encoding $EncodeFrom      $HeadOrig = $FileContent[0]       # \"\\\\TESTGPU\\NVIDIA GPU(#0 GRID M60-1Q (id=1, NVAPI ID=513))\\% GPU Memory Usage\"     if ($HeadOrig -match '.*(?&lt;hostname&gt;\\\\\\\\[a-zA-Z0-9]*\\\\).*') { $HeadOrig = $HeadOrig.Replace($Matches['hostname'], '') }      if ($HeadOrig -match '.*NVIDIA GPU(?&lt;gpu&gt;\\(#[A-Z0-9 ]*-[A-Z0-9]* \\(id=[0-9,]* NVAPI ID=[0-9]*\\)\\))') { $HeadOrig = $HeadOrig.Replace($Matches['gpu'], '') }       # \u0437\u0430\u043c\u0435\u043d\u0430 session \u043d\u0430 \u043d\u043e\u043c\u0435\u0440 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0438\u0437 $users     while ($HeadOrig -match '(?&lt;session&gt;\\(RDP-Tcp.[0-9]{1,}\\))')     {         if ($su)  # \u0435\u0441\u043b\u0438 \u043d\u0443\u0436\u043d\u043e, \u0442\u043e \u0432\u0441\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432\u043e \u0432\u0441\u0435\u0445 \u0442\u0435\u0441\u0442\u0430\u0445 \u0431\u0443\u0434\u0443\u0442 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e \u043f\u0440\u043e\u043c\u0430\u0440\u043a\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u043f\u043e \u043d\u043e\u043c\u0435\u0440\u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0438\u0437 \u0445\u044d\u0448\u0442\u0430\u0431\u043b\u0438\u0446\u044b $users         {             # RDP-Tcp 19 \u0432 $Matches['session'] \u0441\u0440\u0430\u0432\u043d\u0438\u0442\u044c \u0441 rdp-tcp#19 \u0432 csv \u0438 \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u043d\u0430 $users['administrator']             $s = ((($Matches['session'] -replace ' ', '#') -replace '\\(', '') -replace '\\)', '').ToLower()              $c = $csv | Where-Object {$_.'rdp session' -eq $s}              # \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442 \u043e\u0448\u0438\u0431\u043a\u0438, \u043a\u043e\u0433\u0434\u0430 \u0441\u0435\u0441\u0441\u0438\u044f \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0442\u0435\u0441\u0442\u0430 \u0432\u044b\u043b\u0435\u0442\u0435\u043b\u0430, \u0430 \u0442\u0435\u0441\u0442\u044b \u0431\u044b\u043b\u0438 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0435\u043d\u044b \u0411\u0415\u0417 \u043f\u0435\u0440\u0435\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u043e\u0432             try { $HeadOrig = $HeadOrig.Replace($Matches['session'], (' {0}' -f $users[$c.'rdp user'])) }             catch             {                 # \u0431\u044b\u0432\u0430\u0435\u0442 \u0442\u0430\u043a, \u0447\u0442\u043e \u0441\u0435\u0441\u0441\u0438\u044f \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0442\u0435\u0441\u0442\u0430 \u0432\u044b\u043b\u0435\u0442\u0435\u043b\u0430, \u044e\u0437\u0435\u0440 \u043f\u0435\u0440\u0435\u0437\u0430\u0448\u0451\u043b \u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u043b \u043d\u043e\u0432\u044b\u0439 \u043d\u043e\u043c\u0435\u0440 \u0441\u0435\u0441\u0441\u0438\u0438                 # \u0438 \u0435\u0441\u043b\u0438 \u043d\u0435 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0442\u0435\u0441\u0442 \u0438 \u043d\u0435 \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u0438,                 # \u0442\u043e \u0432 blg-\u0444\u0430\u0439\u043b\u0435 \u043e\u043a\u0430\u0436\u0443\u0442\u0441\u044f \u043f\u0443\u0441\u0442\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u0430\u043c \u0441\u0442\u0430\u0440\u043e\u0439, \u0432\u044b\u043b\u0435\u0442\u0435\u0432\u0448\u0435\u0439 \u0441\u0435\u0441\u0441\u0438\u0438,                 # \u0430 \u0432 csv-\u0444\u0430\u0439\u043b\u0435 \u0431\u0443\u0434\u0435\u0442 \u0443\u043a\u0430\u0437\u0430\u043d\u0430 \u0443\u0436\u0435 \u043d\u043e\u0432\u0430\u044f \u0430\u043a\u0442\u0438\u0432\u043d\u0430\u044f \u0441\u0435\u0441\u0441\u0438\u044f                 # \u0438 \u043f\u043e\u043f\u044b\u0442\u043a\u0430 \u043e\u0442\u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a\u0438 \u0443\u043f\u0430\u0434\u0451\u0442 \u0441 \u043e\u0448\u0438\u0431\u043a\u043e\u0439.                 # \u0447\u0442\u043e\u0431\u044b \u0443\u0437\u043d\u0430\u0442\u044c \u0441\u0431\u043e\u0439\u043d\u044b\u0439 \u0444\u0430\u0439\u043b(-\u044b) \u0438 \u043f\u0435\u0440\u0435\u0437\u0430\u043c\u0435\u0440\u0438\u0442\u044c \u0442\u0435\u0441\u0442\u044b, \u043e\u0448\u0438\u0431\u043a\u0430 \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f                  $WasError = $true                  $ErrMsg = \"'{0}.blg'`n\" -f $f.BaseName                  $ErrMsg += \"`tin blg empty data for session`n`t`t{0}`n`tbut in CSV no such session`n\" -f $Matches['session']                  $csv.'rdp session' | % {$ErrMsg += \"`t`t{0}`n\" -f $_}                  $ErrMsg += \"`t{0}`n\" -f $_                  $ErrMessages += $ErrMsg                  break  # break while             }         }         else         {             $HeadOrig = $HeadOrig.Replace($Matches['session'], '')         }     }       # \u0437\u0430\u043c\u0435\u043d\u0430 id \u043d\u0430 \u043d\u043e\u043c\u0435\u0440 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0438\u0437 $users     while ($HeadOrig -match '(?&lt;id&gt;\\([0-9]{1,}\\))')     {         if ($su)  # \u0435\u0441\u043b\u0438 \u043d\u0443\u0436\u043d\u043e, \u0442\u043e \u0432\u0441\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432\u043e \u0432\u0441\u0435\u0445 \u0442\u0435\u0441\u0442\u0430\u0445 \u0431\u0443\u0434\u0443\u0442 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e \u043f\u0440\u043e\u043c\u0430\u0440\u043a\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u043f\u043e \u043d\u043e\u043c\u0435\u0440\u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0438\u0437 \u0445\u044d\u0448\u0442\u0430\u0431\u043b\u0438\u0446\u044b $users         {             # (2) \u0432 $Matches['id'] \u0441\u0440\u0430\u0432\u043d\u0438\u0442\u044c \u0441 rdp id \u0432 csv \u0438 \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u043d\u0430 $users['administrator']             $s = (($Matches['id'] -replace '\\(', '') -replace '\\)', '')              $c = $csv | Where-Object {$_.'rdp id' -eq $s}              # \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442 \u043e\u0448\u0438\u0431\u043a\u0438, \u043a\u043e\u0433\u0434\u0430 \u0441\u0435\u0441\u0441\u0438\u044f \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0442\u0435\u0441\u0442\u0430 \u0432\u044b\u043b\u0435\u0442\u0435\u043b\u0430, \u0430 \u0442\u0435\u0441\u0442\u044b \u0431\u044b\u043b\u0438 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0435\u043d\u044b \u0411\u0415\u0417 \u043f\u0435\u0440\u0435\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u043e\u0432             try { $HeadOrig = $HeadOrig.Replace($Matches['id'], (' {0}' -f $users[$c.'rdp user'])) }             catch             {                 # \u0431\u044b\u0432\u0430\u0435\u0442 \u0442\u0430\u043a, \u0447\u0442\u043e \u0441\u0435\u0441\u0441\u0438\u044f \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0442\u0435\u0441\u0442\u0430 \u0432\u044b\u043b\u0435\u0442\u0435\u043b\u0430, \u044e\u0437\u0435\u0440 \u043f\u0435\u0440\u0435\u0437\u0430\u0448\u0451\u043b \u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u043b \u043d\u043e\u0432\u044b\u0439 \u043d\u043e\u043c\u0435\u0440 \u0441\u0435\u0441\u0441\u0438\u0438                 # \u0438 \u0435\u0441\u043b\u0438 \u043d\u0435 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0442\u0435\u0441\u0442 \u0438 \u043d\u0435 \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u0438,                 # \u0442\u043e \u0432 blg-\u0444\u0430\u0439\u043b\u0435 \u043e\u043a\u0430\u0436\u0443\u0442\u0441\u044f \u043f\u0443\u0441\u0442\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u0430\u043c \u0441\u0442\u0430\u0440\u043e\u0439, \u0432\u044b\u043b\u0435\u0442\u0435\u0432\u0448\u0435\u0439 \u0441\u0435\u0441\u0441\u0438\u0438,                 # \u0430 \u0432 csv-\u0444\u0430\u0439\u043b\u0435 \u0431\u0443\u0434\u0435\u0442 \u0443\u043a\u0430\u0437\u0430\u043d\u0430 \u0443\u0436\u0435 \u043d\u043e\u0432\u0430\u044f \u0430\u043a\u0442\u0438\u0432\u043d\u0430\u044f \u0441\u0435\u0441\u0441\u0438\u044f                 # \u0438 \u043f\u043e\u043f\u044b\u0442\u043a\u0430 \u043e\u0442\u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a\u0438 \u0443\u043f\u0430\u0434\u0451\u0442 \u0441 \u043e\u0448\u0438\u0431\u043a\u043e\u0439.                 # \u0447\u0442\u043e\u0431\u044b \u0443\u0437\u043d\u0430\u0442\u044c \u0441\u0431\u043e\u0439\u043d\u044b\u0439 \u0444\u0430\u0439\u043b(-\u044b) \u0438 \u043f\u0435\u0440\u0435\u0437\u0430\u043c\u0435\u0440\u0438\u0442\u044c \u0442\u0435\u0441\u0442\u044b, \u043e\u0448\u0438\u0431\u043a\u0430 \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f                  $WasError = $true                  $ErrMsg = \"'{0}.blg'`n\" -f $f.BaseName                  $ErrMsg += \"`tin blg empty data for session`n`t`t{0}`n`tbut in CSV no such session`n\" -f $Matches['session']                  $csv.'rdp session' | % {$ErrMsg += \"`t`t{0}`n\" -f $_}                  $ErrMsg += \"`t{0}`n\" -f $_                  $ErrMessages += $ErrMsg                  break  # break while             }         }         else         {             $HeadOrig = $HeadOrig.Replace($Matches['id'], '')         }     }       # \"(PDH-CSV 4.0) (Russia TZ 2 Standard Time)(-180)\"     if ($HeadOrig -match '.*(?&lt;time&gt;\\(.*\\) \\(.*Time\\)\\([0-9 +-]*\\))') { $HeadOrig = $HeadOrig.Replace($Matches['time'], 'Time') }      $FileContent[0] = $HeadOrig  # \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0438\u0441\u044c \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430      $FileContent | Out-File -Encoding $EncodeTo -FilePath $f.FullName      $Heads += '\"{0}\",{1}' -f $f.Name, $HeadOrig  # \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430 }   # \u0432\u044b\u0432\u043e\u0434 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u043e\u0432 \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432 \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0444\u0430\u0439\u043b \u0434\u043b\u044f \u0434\u043e\u043f. \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044f \u043f\u043e\u0440\u044f\u0434\u043a\u0430, \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0439 \u0438 \u0442.\u0434. $Heads | Out-File -Encoding $EncodeTo -FilePath (Join-Path -Path $LogsDir -ChildPath 'heads.csv')   if ($WasError)  # \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442 \u043e\u0448\u0438\u0431\u043a\u0438, \u043a\u043e\u0433\u0434\u0430 \u0441\u0435\u0441\u0441\u0438\u044f \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0442\u0435\u0441\u0442\u0430 \u0432\u044b\u043b\u0435\u0442\u0435\u043b\u0430, \u0430 \u0442\u0435\u0441\u0442\u044b \u0431\u044b\u043b\u0438 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0435\u043d\u044b \u0411\u0415\u0417 \u043f\u0435\u0440\u0435\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u043e\u0432 {     $ErrMessages | Write-Error      [Environment]::Exit(-123) }<\/code><\/pre>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>blg2csv.cmd<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"bash\">@echo off  @REM \u0441\u043c\u0435\u043d\u0430 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0438 \u043d\u0443\u0436\u043d\u0430 \u0434\u043b\u044f powershell-\u0441\u043a\u0440\u0438\u043f\u0442\u0430 \"%~dpn0.ps1\" chcp 65001  @REM \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u043c \u0432 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u043f\u0430\u043f\u043a\u0435 \u0441\u043a\u0440\u0438\u043f\u0442\u0430 cd \"%~dp0logs\"   @REM \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0432 \u0446\u0438\u043a\u043b\u0435 setlocal EnableDelayedExpansion  @REM \u0446\u0438\u043a\u043b \u043f\u043e \u0434\u0432\u043e\u0438\u0447\u043d\u044b\u043c \u0444\u0430\u0439\u043b\u0430\u043c \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430 FOR \/F \"usebackq delims=.\" %%a IN (`dir *.blg \/b`) DO (     set \"blg=%%a.blg\"     set \"csv=%%a.csv\"      @REM convert binary to csv     relog \"!blg!\" -f csv -o \"!csv!\" -y )  @REM \u0438\u043c\u0435\u043d\u0430 cmd \u0438 powershell \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432 \u0434\u043e\u043b\u0436\u043d\u044b \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0442\u044c @REM pwsh.exe -NoLogo -NoProfile -File \"%~dpn0.ps1\" start \"%~dpn0.ps1\" \/WAIT \/B pwsh.exe -Command \"&amp; {%~dpn0.ps1 -su:$true}\"  if %ERRORLEVEL% == 0 (     exit ) else (     pause     exit )   @REM \u0441\u043f\u0440\u0430\u0432\u043a\u0430 reglog - \u0443\u0442\u0438\u043b\u0438\u0442\u044b \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0436\u0443\u0440\u043d\u0430\u043b\u0430\u043c\u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 @REM https:\/\/docs.microsoft.com\/ru-ru\/windows-server\/administration\/windows-commands\/relog<\/code><\/pre>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>figures.ipynb<\/summary>\n<div class=\"spoiler__content\">\n<h3>\u041e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0437\u0430\u043c\u0435\u0440\u043e\u0432<\/h3>\n<p><strong>\u043e\u0441\u044c Y \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0430 \u0432\u043d\u0443\u0442\u0440\u0438 \u043e\u0434\u043d\u043e\u0439 \u043c\u0435\u0442\u0440\u0438\u043a\u0438<\/strong><\/p>\n<p>\u0414\u043b\u044f \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f vGPU \u043d\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u0435\u0430\u043d\u0441\u043e\u0432 \u0431\u044b\u043b\u0438 \u043f\u0440\u043e\u0432\u0435\u0434\u0435\u043d\u044b \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0437\u0430\u043c\u0435\u0440\u044b:<\/p>\n<ul>\n<li>\n<p>\u0442\u0440\u0438 \u0442\u0435\u0441\u0442\u0430 (\u0441\u043c. 1\u044e \u0447\u0430\u0441\u0442\u044c): 3D \u0442\u0435\u0441\u0442, \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u043d\u0438\u0435 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u043b\u0435\u0439\u043b\u0438\u0441\u0442\u0430, \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u043d\u0438\u0435 youtube-\u0440\u043e\u043b\u0438\u043a\u0430<\/p>\n<\/li>\n<li>\n<p>\u0442\u0440\u0438 \u0441\u043b\u0443\u0447\u0430\u044f: \u043a\u0430\u0436\u0434\u044b\u0439 \u0442\u0435\u0441\u0442 \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u043b\u0441\u044f \u0432 \u043e\u0434\u043d\u043e\u043c, \u0434\u0432\u0443\u0445 \u0438 \u0442\u0440\u0451\u0445 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u0435\u0430\u043d\u0441\u0430\u0445 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e<\/p>\n<\/li>\n<\/ul>\n<p>\u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043f\u043e \u043e\u0434\u043d\u043e\u0439 \u043c\u0435\u0442\u0440\u0438\u043a\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u043e 9 \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0432:<\/p>\n<ul>\n<li>\n<p>\u0432 \u043a\u043e\u043b\u043e\u043d\u043a\u0430\u0445 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u044b \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0442\u0435\u0441\u0442\u043e\u0432<\/p>\n<\/li>\n<li>\n<p>\u0432 \u0440\u044f\u0434\u0430\u0445 &#8212; \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 RDP-\u0441\u0435\u0430\u043d\u0441\u043e\u0432<\/p>\n<\/li>\n<\/ul>\n<pre><code>          test2   test3   test4         ------------------------- 1 user  |       |       |       |         ------------------------- 2 users |       |       |       |         ------------------------- 3 users |       |       |       |         -------------------------<\/code><\/pre>\n<pre><code class=\"powershell\"># \u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 import pandas as pd import matplotlib.pyplot as plt from matplotlib.ticker import EngFormatter  # \u0434\u043b\u044f \u0432\u044b\u0432\u043e\u0434\u0430 \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0435\u0434\u0438\u043d\u0438\u0446 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f  pd.options.display.max_rows = 999 plt.rcParams['figure.max_open_warning'] = 99  # \u043f\u043e\u0440\u043e\u0433 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f \u043f\u0440\u0438 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u043c \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0440\u0438\u0441\u0443\u043d\u043a\u043e\u0432 %matplotlib inline  # \u0438\u043c\u043f\u043e\u0440\u0442 \u0437\u0430\u043c\u0435\u0440\u043e\u0432 \u0442\u0440\u0451\u0445 \u0442\u0435\u0441\u0442\u043e\u0432 \u0432 \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u0438 \u0441 1, 2 \u0438 3 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c\u0438 \u0441\u0435\u0430\u043d\u0441\u0430\u043c\u0438 RDP # \u0432\u0442\u043e\u0440\u043e\u0439 \u0442\u0435\u0441\u0442 - 3d benchmark t21 = pd.concat([pd.read_csv('.\/logs\/test #2 FurMark users 1 general.csv', na_values=' '), pd.read_csv('.\/logs\/test #2 FurMark users 1 session.csv', na_values=' ')], join='inner', axis=1) t22 = pd.concat([pd.read_csv('.\/logs\/test #2 FurMark users 2 general.csv', na_values=' '), pd.read_csv('.\/logs\/test #2 FurMark users 2 session.csv', na_values=' ')], join='inner', axis=1) t23 = pd.concat([pd.read_csv('.\/logs\/test #2 FurMark users 3 general.csv', na_values=' '), pd.read_csv('.\/logs\/test #2 FurMark users 3 session.csv', na_values=' ')], join='inner', axis=1) # t23.info()  # \u0442\u0440\u0435\u0442\u0438\u0439 \u0442\u0435\u0441\u0442 - \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u043d\u0438\u0435 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u0432\u0438\u0434\u0435\u043e\u0444\u0430\u0439\u043b\u043e\u0432 t31 = pd.concat([pd.read_csv('.\/logs\/test #3 WMPlayer users 1 general.csv', na_values=' '), pd.read_csv('.\/logs\/test #3 WMPlayer users 1 session.csv', na_values=' ')], join='inner', axis=1) t32 = pd.concat([pd.read_csv('.\/logs\/test #3 WMPlayer users 2 general.csv', na_values=' '), pd.read_csv('.\/logs\/test #3 WMPlayer users 2 session.csv', na_values=' ')], join='inner', axis=1) t33 = pd.concat([pd.read_csv('.\/logs\/test #3 WMPlayer users 3 general.csv', na_values=' '), pd.read_csv('.\/logs\/test #3 WMPlayer users 3 session.csv', na_values=' ')], join='inner', axis=1) # t33.info()  # \u0447\u0435\u0442\u0432\u0451\u0440\u0442\u044b\u0439 \u0442\u0435\u0441\u0442 - \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 youtube \u0432 1080p60 t41 = pd.concat([pd.read_csv('.\/logs\/test #4 youtube users 1 general.csv', na_values=' '), pd.read_csv('.\/logs\/test #4 youtube users 1 session.csv', na_values=' ')], join='inner', axis=1) t42 = pd.concat([pd.read_csv('.\/logs\/test #4 youtube users 2 general.csv', na_values=' '), pd.read_csv('.\/logs\/test #4 youtube users 2 session.csv', na_values=' ')], join='inner', axis=1) t43 = pd.concat([pd.read_csv('.\/logs\/test #4 youtube users 3 general.csv', na_values=' '), pd.read_csv('.\/logs\/test #4 youtube users 3 session.csv', na_values=' ')], join='inner', axis=1) # t41.info()  dataframes = [     [t21, t31, t41],     [t22, t32, t42],     [t23, t33, t43], ]  fgs = [  # \u043c\u0430\u043a\u0435\u0442 \u0438 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0432: \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043c\u0435\u0442\u0440\u0438\u043a\u0438 \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0435 \u0435\u0451 \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u044b     # n         \u043d\u043e\u043c\u0435\u0440 \u0440\u0438\u0441\u0443\u043d\u043a\u0430 \u0434\u043b\u044f \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438 \u0438 \u0432\u044b\u0432\u043e\u0434\u0430 \u043f\u043e-\u043f\u043e\u0440\u044f\u0434\u043a\u0443     # ysamescale    \u043d\u0443\u0436\u043d\u043e \u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u0434\u0438\u043d \u043c\u0430\u0441\u0448\u0442\u0430\u0431 \u043f\u043e Y \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0432 \u043c\u0435\u0442\u0440\u0438\u043a\u0438     # yscale    \u043c\u0430\u0441\u0448\u0442\u0430\u0431 \u0435\u0434\u0438\u043d\u0438\u0446 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f     # yunit     \u0435\u0434\u0438\u043d\u0438\u0446\u0430 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f     # ydata     \u043a\u043e\u043b\u043e\u043d\u043a\u0430 \u0438\u0437 \u0434\u0430\u0442\u0430\u0444\u0440\u0435\u0439\u043c\u0430     # desc      \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0440\u0438\u0441\u0443\u043d\u043a\u0430      # r'...\\UDP...' \u044d\u0442\u043e fix of (unicode error) 'unicodeescape' codec can't decode bytes in position 20-22: truncated \\UXXXXXXXX escape          # \u043e\u0431\u0449\u0438\u0435 \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u0438     {'n': 3,    'ysamescale': True,     'yscale': 1,        'yunit': '%',   'ydata': 'Processor Information(_Total)\\% Processor Time', 'desc': '\u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430'},      {'n': 7,    'ysamescale': True,     'yscale': 1,        'yunit': 'B',   'ydata': 'Memory\\Available Bytes', 'desc': '\u0414\u043e\u0441\u0442\u0443\u043f\u043d\u0430\u044f \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u0430\u044f \u043f\u0430\u043c\u044f\u0442\u044c'},     {'n': 7,    'ysamescale': True,     'yscale': 1,        'yunit': '%',   'ydata': 'Memory\\% Committed Bytes In Use', 'desc': '\u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438'},      {'n': 9,    'ysamescale': True,     'yscale': 1,        'yunit': '%',   'ydata': 'NVIDIA GPU\\% GPU Usage', 'desc': '\u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0432\u0438\u0434\u0435\u043e\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430'},     {'n': 9,    'ysamescale': True,     'yscale': 1,        'yunit': '%',   'ydata': 'NVIDIA GPU\\% GPU Memory Usage', 'desc': '\u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0432\u0438\u0434\u0435\u043e\u043f\u0430\u043c\u044f\u0442\u0438'},     {'n': 9,    'ysamescale': True,     'yscale': 1,        'yunit': '%',   'ydata': 'NVIDIA GPU\\% FB Usage', 'desc': '\u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0444\u0440\u0435\u0439\u043c\u0431\u0443\u0444\u0435\u0440\u0430 GPU'},     {'n': 9,    'ysamescale': True,     'yscale': 1,        'yunit': '%',   'ydata': 'NVIDIA GPU\\% Video Encoder Usage', 'desc': '\u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u044d\u043d\u043a\u043e\u0434\u0435\u0440\u0430 GPU'},     {'n': 9,    'ysamescale': True,     'yscale': 1,        'yunit': '%',   'ydata': 'NVIDIA GPU\\% Video Decoder Usage', 'desc': '\u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0434\u0435\u043a\u043e\u0434\u0435\u0440\u0430 GPU'},      # \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u0438 \u0441\u0435\u0430\u043d\u0441\u043e\u0432     {'n': 1,    'ysamescale': False,    'yscale': 0.001,    'yunit': 's',   'ydata': 'User Input Delay per Session {0}\\Max Input Delay', 'desc': '\u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0432\u0432\u043e\u0434\u0430 \u043d\u0430 \u0441\u0435\u0430\u043d\u0441'},      {'n': 5,    'ysamescale': True,     'yscale': 1,        'yunit': 'FPS', 'ydata': 'RemoteFX Graphics {0}\\Input Frames\/Second', 'desc': '\u0413\u0440\u0430\u0444\u0438\u043a\u0430 RemoteFX, \u0412\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u043a\u0430\u0434\u0440\u043e\u0432 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443', 'yMin': 0, 'yMax': 50},     {'n': 5,    'ysamescale': True,     'yscale': 1,        'yunit': 'FPS', 'ydata': 'RemoteFX Graphics {0}\\Output Frames\/Second', 'desc': '\u0413\u0440\u0430\u0444\u0438\u043a\u0430 RemoteFX, \u0418\u0441\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u043a\u0430\u0434\u0440\u043e\u0432 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443', 'yMin': 0, 'yMax': 50},      {'n': 33,   'ysamescale': False,    'yscale': 0.001,    'yunit': 's',   'ydata': 'RemoteFX Graphics {0}\\Average Encoding Time', 'desc': '\u0413\u0440\u0430\u0444\u0438\u043a\u0430 RemoteFX, \u0421\u0440\u0435\u0434\u043d\u0435\u0435 \u0432\u0440\u0435\u043c\u044f \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u0430\u0434\u0440\u0430'},     {'n': 33,   'ysamescale': True,     'yscale': 1,        'yunit': '%',   'ydata': 'RemoteFX Graphics {0}\\Frame Quality', 'desc': '\u0413\u0440\u0430\u0444\u0438\u043a\u0430 RemoteFX, \u041a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u043a\u0430\u0434\u0440\u0430'},     {'n': 33,   'ysamescale': False,    'yscale': 1,        'yunit': '%',   'ydata': 'RemoteFX Graphics {0}\\Graphics Compression ratio', 'desc': '\u0413\u0440\u0430\u0444\u0438\u043a\u0430 RemoteFX, \u041a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442 \u0441\u0436\u0430\u0442\u0438\u044f \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445'},      {'n': 22,   'ysamescale': True,     'yscale': 1,        'yunit': 'bps', 'ydata': 'RemoteFX Network {0}\\Total Sent Rate', 'desc': '\u0421\u0435\u0442\u044c RemoteFX, \u041e\u0431\u0449\u0430\u044f \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438'},     {'n': 22,   'ysamescale': True,     'yscale': 1,        'yunit': 'bps', 'ydata': 'RemoteFX Network {0}\\Total Received Rate', 'desc': '\u0421\u0435\u0442\u044c RemoteFX, \u041e\u0431\u0449\u0430\u044f \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u0440\u0438\u0451\u043c\u0430'},     {'n': 22,   'ysamescale': True,     'yscale': 1,        'yunit': '%',   'ydata': 'RemoteFX Network {0}\\Loss Rate', 'desc': '\u0421\u0435\u0442\u044c RemoteFX, \u041f\u043e\u0442\u0435\u0440\u0438'},      {'n': 44,   'ysamescale': True,     'yscale': 1,        'yunit': 'FPS', 'ydata': 'RemoteFX Graphics {0}\\Frames Skipped\/Second - Insufficient Network Resources', 'desc': '\u0413\u0440\u0430\u0444\u0438\u043a\u0430 RemoteFX, \u041f\u0440\u043e\u043f\u0443\u0441\u043a \u043a\u0430\u0434\u0440\u043e\u0432 \u0438\u0437-\u0437\u0430 \u043d\u0435\u0445\u0432\u0430\u0442\u043a\u0438 \u0441\u0435\u0442\u0435\u0432\u044b\u0445 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432'},     {'n': 44,   'ysamescale': True,     'yscale': 1,        'yunit': 'FPS', 'ydata': 'RemoteFX Graphics {0}\\Frames Skipped\/Second - Insufficient Server Resources', 'desc': '\u0413\u0440\u0430\u0444\u0438\u043a\u0430 RemoteFX, \u041f\u0440\u043e\u043f\u0443\u0441\u043a \u043a\u0430\u0434\u0440\u043e\u0432 \u0438\u0437-\u0437\u0430 \u043d\u0435\u0445\u0432\u0430\u0442\u043a\u0438 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 \u0441\u0435\u0440\u0432\u0435\u0440\u0430'},     {'n': 44,   'ysamescale': True,     'yscale': 1,        'yunit': 'FPS', 'ydata': 'RemoteFX Graphics {0}\\Frames Skipped\/Second - Insufficient Client Resources', 'desc': '\u0413\u0440\u0430\u0444\u0438\u043a\u0430 RemoteFX, \u041f\u0440\u043e\u043f\u0443\u0441\u043a \u043a\u0430\u0434\u0440\u043e\u0432 \u0438\u0437-\u0437\u0430 \u043d\u0435\u0445\u0432\u0430\u0442\u043a\u0438 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 \u043a\u043b\u0438\u0435\u043d\u0442\u0430'},      {'n': 55,   'ysamescale': True,     'yscale': 1,        'yunit': 'bps', 'ydata': r'RemoteFX Network {0}\\UDP Sent Rate', 'desc': '\u0421\u0435\u0442\u044c RemoteFX, \u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438, UDP'},     {'n': 55,   'ysamescale': True,     'yscale': 1,        'yunit': 'bps', 'ydata': r'RemoteFX Network {0}\\UDP Received Rate', 'desc': '\u0421\u0435\u0442\u044c RemoteFX, \u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u0440\u0438\u0451\u043c\u0430, UDP'},     {'n': 55,   'ysamescale': True,     'yscale': 1000,     'yunit': 'bps', 'ydata': 'RemoteFX Network {0}\\Current UDP Bandwidth', 'desc': '\u0421\u0435\u0442\u044c RemoteFX, \u041f\u0440\u043e\u043f\u0443\u0441\u043a\u043d\u0430\u044f \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c UDP-\u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f'},      {'n': 55,   'ysamescale': True,     'yscale': 1,        'yunit': 'bps', 'ydata': 'RemoteFX Network {0}\\TCP Sent Rate', 'desc': '\u0421\u0435\u0442\u044c RemoteFX, \u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438, TCP'},     {'n': 55,   'ysamescale': True,     'yscale': 1,        'yunit': 'bps', 'ydata': 'RemoteFX Network {0}\\TCP Received Rate', 'desc': '\u0421\u0435\u0442\u044c RemoteFX, \u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u0440\u0438\u0451\u043c\u0430, TCP'},     {'n': 55,   'ysamescale': True,     'yscale': 1000,     'yunit': 'bps', 'ydata': 'RemoteFX Network {0}\\Current TCP Bandwidth', 'desc': '\u0421\u0435\u0442\u044c RemoteFX, \u041f\u0440\u043e\u043f\u0443\u0441\u043a\u043d\u0430\u044f \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c TCP-\u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f'}, ]  fgs.sort(key=lambda counter: counter['n'])  null = [print(f\"{el['n']:&gt;2} {el['ysamescale']:&lt;1} {el['yunit']:^5} {el['desc']:&lt;64}\") for el in fgs]  # \u041f\u043e\u0438\u0441\u043a \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u043f\u0440\u0435\u0434\u0435\u043b\u043e\u0432 \u043f\u043e \u043e\u0441\u0438 Y \u0432 fgs y_lim_scale = 0.13  # \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442 \u043f\u0440\u0435\u0434\u0435\u043b\u043e\u0432 \u043f\u043e Y: \u0440\u0430\u043c\u043a\u0438 \u0433\u0440\u0430\u0444\u0438\u043a\u0430 \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u0447\u0443\u0442\u044c \u0448\u0438\u0440\u0435, \u0447\u0442\u043e\u0431\u044b \u0433\u0440\u0430\u0444\u0438\u043a \u043d\u0435 \u0441\u043b\u0438\u0432\u0430\u043b\u0441\u044f \u0441 \u043d\u0438\u043c\u0438  # \u0441\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432\u0441\u0435\u0445 \u0437\u0430\u043c\u0435\u0440\u043e\u0432 \u0432 \u043e\u0434\u043d\u0443 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 max\/min alldf = pd.concat([t21, t22, t23, t31, t32, t33, t41, t42, t43], axis=1, join='inner') print('debug: \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c 3*3=9 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439', alldf['Memory\\Available Bytes'].max(), sep='\\n')  allusr = set([n for n in range(11) if 'User Input Delay per Session {0}\\Max Input Delay'.format(n) in alldf.columns])  # \u0432\u0441\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u0441\u0442\u0440\u0435\u0442\u0438\u043b\u0438\u0441\u044c \u0432 \u0437\u0430\u043c\u0435\u0440\u0430\u0445 print(f'\\n\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438: {allusr}\\n')  for c in fgs:     # \u043c\u0435\u0442\u0440\u0438\u043a\u0438 \u0441\u0435\u0430\u043d\u0441\u0430     if '0' in c['ydata']:         c.setdefault('yMax', 0)         c.setdefault('yMin', 0)          for u in allusr:             if c['yMax'] &lt; max(alldf[c['ydata'].format(u)].max()):                 c['yMax'] = max(alldf[c['ydata'].format(u)].max())              if c['yMin'] &gt; min(alldf[c['ydata'].format(u)].min()):                 c['yMin'] = min(alldf[c['ydata'].format(u)].min())     # \u043e\u0431\u0449\u0430\u044f \u043c\u0435\u0442\u0440\u0438\u043a\u0430     else:         c.setdefault('yMax', max(alldf[c['ydata']].max()))         c.setdefault('yMin', min(alldf[c['ydata']].min()))      if c['yMin'] == c['yMax']:  # \u043a\u043e\u0433\u0434\u0430 \u043e\u0431\u0430 \u043f\u0440\u0435\u0434\u0435\u043b\u0430 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0435, \u0431\u0443\u0434\u0435\u0442 \u043e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435 ax.set_ylim(...)         c['yMin'] = -1         c['yMax'] = +1      # \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u0435\u043c \u0433\u0440\u0430\u043d\u0438\u0446\u044b, \u0447\u0442\u043e\u0431\u044b \u043b\u0438\u043d\u0438\u0438 \u0433\u0440\u0430\u0444\u0438\u043a\u0430 \u0431\u044b\u043b\u0438 \u0432\u043d\u0443\u0442\u0440\u0438 \u0433\u0440\u0430\u043d\u0438\u0446, \u0430 \u043d\u0435 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u043b\u0438 \u0441 \u0432\u0435\u0440\u0445\u043e\u043c\/\u043d\u0438\u0437\u043e\u043c     c['yMin'] = (c['yMin'] - c['yMin'] * y_lim_scale - 1) * c.setdefault('yscale', 1)     c['yMax'] = (c['yMax'] + c['yMax'] * y_lim_scale + 1) * c.setdefault('yscale', 1)  Null = [print(f\"{c['yMin']:&gt;20} {c['yMax']:&gt;20}\\t{c['ydata']}\") for c in fgs]  # debug: fgs \u0442\u0435\u043f\u0435\u0440\u044c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0432\u0435\u0440\u0445\u043d\u0438\u0439 \u0438 \u043d\u0438\u0436\u043d\u0438\u0439 \u043f\u0440\u0435\u0434\u0435\u043b\u044b \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u043c\u0435\u0442\u0440\u0438\u043a\u0438  # \u041f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0435 \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0432 ax_titles = ['test #2: 3D benchmark', 'test #3: play 1080p video', 'test #4: play 1080p youtube video']  for m in fgs:  # \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u0435\u0442\u0440\u0438\u043a, \u0441\u0442\u043e\u043b\u044c\u043a\u043e \u0440\u0438\u0441\u0443\u043d\u043a\u043e\u0432 (\u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c 3x3)      fig, axs = plt.subplots(3, 3, figsize=(15, 8), sharex='col', sharey='row')  # \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u0430 3\u04453=9 \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0432      # \u0438\u043c\u044f \u0440\u0438\u0441\u0443\u043d\u043a\u0430     fig.suptitle(f\"\u0420\u0438\u0441. {fgs.index(m) + 1:&gt;2}.   {m['desc']}\", fontsize=14)      # \u0444\u043e\u043d \u0440\u0438\u0441\u0443\u043d\u043a\u0430 \u0431\u0435\u043b\u044b\u0439 \u0432\u043c\u0435\u0441\u0442\u043e \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e\u0433\u043e     fig.patch.set_facecolor('white')      # \u043f\u043e\u0434\u043f\u0438\u0441\u044c \u0432\u0435\u0440\u0445\u043d\u0435\u0433\u043e \u0440\u044f\u0434\u0430 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c \u0442\u0435\u0441\u0442\u0430     [ax.set_title(title) for ax, title in zip(axs[0, :], ax_titles)]      # \u043f\u043e\u0434\u043f\u0438\u0441\u044c \u043b\u0435\u0432\u043e\u0439 \u043a\u043e\u043b\u043e\u043d\u043a\u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439     [ax.set(ylabel=f\"{n} {'user' if n == 1 else 'users'}\") for ax, n in zip(axs[:, 0], range(1,4))]      # \u0434\u0443\u0431\u043b\u044c \u0448\u043a\u0430\u043b\u044b \u0432 \u043f\u0440\u0430\u0432\u0443\u044e \u043a\u043e\u043b\u043e\u043d\u043a\u0443     [ax.yaxis.set_tick_params(labelleft=False, labelright=True, which='major') for ax in axs[:,2]]      # \u0440\u044f\u0434\u044b \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0432 \u0432 \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u0435     for axrow, dfrow in zip(axs, dataframes):          # \u0433\u0440\u0430\u0444\u0438\u043a \u0432 \u0440\u044f\u0434\u0443         for ax, df, title in zip(axrow, dfrow, ax_titles):              # \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0443\u0447\u0430\u0441\u0442\u0432\u043e\u0432\u0430\u043b\u0438 \u0432 \u0442\u0435\u043a\u0443\u0449\u0435\u043c \u0437\u0430\u043c\u0435\u0440\u0435             usl = [n for n in range(11) if 'User Input Delay per Session {0}\\Max Input Delay'.format(n) in df.columns]              # \u0433\u0440\u0430\u0444\u0438\u043a\u0438 \u0441\u0435\u0441\u0441\u0438\u0439             if '{0}' in m['ydata']:                  # \u043b\u0435\u0433\u0435\u043d\u0434\u0430 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u0433\u0440\u0430\u0444\u0438\u043a\u0430 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u0432 \u0437\u0430\u043c\u0435\u0440\u0435                 lgn = [f\"user {u}, average {EngFormatter(places=0).format_eng(df[m['ydata'].format(u)].mean() * m.get('yscale', 1) )}{m['yunit']}\" for u in usl]                  for u in usl:                     ax.plot(df.index.values, df[m['ydata'].format(u)] * m.get('yscale', 1))              # \u043e\u0431\u0449\u0438\u0435 \u0433\u0440\u0430\u0444\u0438\u043a\u0438             else:                 ax.plot(df.index.values, df[m['ydata']] * m.get('yscale', 1))                 avg = EngFormatter(places=0).format_eng(df[m['ydata']].mean() * m.get('yscale', 1) )                 lgn = [f\"{len(usl)} {'user' if len(usl) == 1 else 'users'}, average {avg}{m['yunit']}\"]              ax.legend(lgn, fontsize=8)              ax.set_xlim(0, 119)  # \u043c\u0435\u0442\u043a\u0430 '120' \u0437\u0430\u0441\u043e\u0440\u044f\u043b\u0430 \u0433\u0440\u0430\u0444\u0438\u043a             if m['ysamescale']:                 ax.set_ylim(m['yMin'], m['yMax'])  # \u0435\u0434\u0438\u043d\u044b\u0439 \u043c\u0430\u0441\u0448\u0442\u0430\u0431 \u043e\u0441\u0438 Y \u0434\u043b\u044f \u0432\u0441\u0435\u0445 9 \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0432              ax.xaxis.set_tick_params(which='major', labelcolor='grey')  # \u043f\u043e\u0434\u043f\u0438\u0441\u0438 \u043a X-\u0448\u043a\u0430\u043b\u0435             ax.yaxis.set_tick_params(which='major', labelcolor='grey')  # \u043f\u043e\u0434\u043f\u0438\u0441\u0438 Y-\u0448\u043a\u0430\u043b\u0435              ax.grid(axis='y')  # \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u0430\u044f \u0441\u0435\u0442\u043a\u0430             ax.grid(axis='x')  # \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u0430\u044f \u0441\u0435\u0442\u043a\u0430              ax.xaxis.set_major_formatter(EngFormatter(unit='s'))  # \u043f\u043e X \u0441\u0435\u043a\u0443\u043d\u0434\u044b             ax.yaxis.set_major_formatter(EngFormatter(unit=m['yunit']))  # \u043f\u043e Y \u0443 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0433\u0440\u0430\u0444\u0438\u043a\u0430 \u0441\u0432\u043e\u044f \u0435\u0434. \u0438\u0437\u043c.              fig.tight_layout()<\/code><\/pre>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>figures_alt.ipynb<\/summary>\n<div class=\"spoiler__content\">\n<h3>\u041e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0437\u0430\u043c\u0435\u0440\u043e\u0432, \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442<\/h3>\n<p><strong>\u043e\u0441\u044c Y \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0430 \u0432\u043d\u0443\u0442\u0440\u0438 \u043e\u0434\u043d\u043e\u0439 \u043c\u0435\u0442\u0440\u0438\u043a\u0438<\/strong><\/p>\n<p>\u0414\u043b\u044f \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f vGPU \u043d\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u0435\u0430\u043d\u0441\u043e\u0432 \u0431\u044b\u043b\u0438 \u043f\u0440\u043e\u0432\u0435\u0434\u0435\u043d\u044b \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0437\u0430\u043c\u0435\u0440\u044b:<\/p>\n<ul>\n<li>\n<p>\u0442\u0440\u0438 \u0442\u0435\u0441\u0442\u0430 (\u0441\u043c. 1\u044e \u0447\u0430\u0441\u0442\u044c): 3D \u0442\u0435\u0441\u0442, \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u043d\u0438\u0435 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u043b\u0435\u0439\u043b\u0438\u0441\u0442\u0430, \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u043d\u0438\u0435 youtube-\u0440\u043e\u043b\u0438\u043a\u0430<\/p>\n<\/li>\n<li>\n<p>\u0442\u0440\u0438 \u0441\u043b\u0443\u0447\u0430\u044f: \u043a\u0430\u0436\u0434\u044b\u0439 \u0442\u0435\u0441\u0442 \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u043b\u0441\u044f \u0432 \u043e\u0434\u043d\u043e\u043c, \u0434\u0432\u0443\u0445 \u0438 \u0442\u0440\u0451\u0445 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u0435\u0430\u043d\u0441\u0430\u0445 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e<\/p>\n<\/li>\n<\/ul>\n<p>\u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043f\u043e \u043e\u0434\u043d\u043e\u0439 \u043c\u0435\u0442\u0440\u0438\u043a\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u043e 9 \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0432:<\/p>\n<ul>\n<li>\n<p>\u0432 \u043a\u043e\u043b\u043e\u043d\u043a\u0430\u0445 \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0434\u043b\u044f \u0440\u0430\u0437\u043d\u043e\u0433\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 RDP-\u0441\u0435\u0430\u043d\u0441\u043e\u0432<\/p>\n<\/li>\n<li>\n<p>\u0432 \u0440\u044f\u0434\u0430\u0445 &#8212; \u0442\u0435\u0441\u0442\u044b<\/p>\n<\/li>\n<\/ul>\n<pre><code>         1 user  2 users 3 users         ------------------------- test2   |       |       |       |         ------------------------- test3   |       |       |       |         ------------------------- test4   |       |       |       |         -------------------------<\/code><\/pre>\n<pre><code class=\"powershell\"># \u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 import pandas as pd import matplotlib.pyplot as plt from matplotlib.ticker import EngFormatter  # \u0434\u043b\u044f \u0432\u044b\u0432\u043e\u0434\u0430 \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0435\u0434\u0438\u043d\u0438\u0446 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f  pd.options.display.max_rows = 999 plt.rcParams['figure.max_open_warning'] = 99  # \u043f\u043e\u0440\u043e\u0433 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f \u043f\u0440\u0438 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u043c \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0440\u0438\u0441\u0443\u043d\u043a\u043e\u0432 %matplotlib inline  # \u0438\u043c\u043f\u043e\u0440\u0442 \u0437\u0430\u043c\u0435\u0440\u043e\u0432 \u0442\u0440\u0451\u0445 \u0442\u0435\u0441\u0442\u043e\u0432 \u0432 \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u0438 \u0441 1, 2 \u0438 3 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c\u0438 \u0441\u0435\u0430\u043d\u0441\u0430\u043c\u0438 RDP # \u0432\u0442\u043e\u0440\u043e\u0439 \u0442\u0435\u0441\u0442 - 3d benchmark t21 = pd.concat([pd.read_csv('.\/logs\/test #2 FurMark users 1 general.csv', na_values=' '), pd.read_csv('.\/logs\/test #2 FurMark users 1 session.csv', na_values=' ')], join='inner', axis=1) t22 = pd.concat([pd.read_csv('.\/logs\/test #2 FurMark users 2 general.csv', na_values=' '), pd.read_csv('.\/logs\/test #2 FurMark users 2 session.csv', na_values=' ')], join='inner', axis=1) t23 = pd.concat([pd.read_csv('.\/logs\/test #2 FurMark users 3 general.csv', na_values=' '), pd.read_csv('.\/logs\/test #2 FurMark users 3 session.csv', na_values=' ')], join='inner', axis=1) # t23.info()  # \u0442\u0440\u0435\u0442\u0438\u0439 \u0442\u0435\u0441\u0442 - \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u043d\u0438\u0435 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u0432\u0438\u0434\u0435\u043e\u0444\u0430\u0439\u043b\u043e\u0432 t31 = pd.concat([pd.read_csv('.\/logs\/test #3 WMPlayer users 1 general.csv', na_values=' '), pd.read_csv('.\/logs\/test #3 WMPlayer users 1 session.csv', na_values=' ')], join='inner', axis=1) t32 = pd.concat([pd.read_csv('.\/logs\/test #3 WMPlayer users 2 general.csv', na_values=' '), pd.read_csv('.\/logs\/test #3 WMPlayer users 2 session.csv', na_values=' ')], join='inner', axis=1) t33 = pd.concat([pd.read_csv('.\/logs\/test #3 WMPlayer users 3 general.csv', na_values=' '), pd.read_csv('.\/logs\/test #3 WMPlayer users 3 session.csv', na_values=' ')], join='inner', axis=1) # t33.info()  # \u0447\u0435\u0442\u0432\u0451\u0440\u0442\u044b\u0439 \u0442\u0435\u0441\u0442 - \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 youtube \u0432 1080p60 t41 = pd.concat([pd.read_csv('.\/logs\/test #4 youtube users 1 general.csv', na_values=' '), pd.read_csv('.\/logs\/test #4 youtube users 1 session.csv', na_values=' ')], join='inner', axis=1) t42 = pd.concat([pd.read_csv('.\/logs\/test #4 youtube users 2 general.csv', na_values=' '), pd.read_csv('.\/logs\/test #4 youtube users 2 session.csv', na_values=' ')], join='inner', axis=1) t43 = pd.concat([pd.read_csv('.\/logs\/test #4 youtube users 3 general.csv', na_values=' '), pd.read_csv('.\/logs\/test #4 youtube users 3 session.csv', na_values=' ')], join='inner', axis=1) # t41.info()  dataframes = [     [t21, t22, t23],     [t31, t32, t33],     [t41, t42, t43], ]  fgs = [  # \u043c\u0430\u043a\u0435\u0442 \u0438 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0432: \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043c\u0435\u0442\u0440\u0438\u043a\u0438 \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0435 \u0435\u0451 \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u044b     # n         \u043d\u043e\u043c\u0435\u0440 \u0440\u0438\u0441\u0443\u043d\u043a\u0430 \u0434\u043b\u044f \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438 \u0438 \u0432\u044b\u0432\u043e\u0434\u0430 \u043f\u043e-\u043f\u043e\u0440\u044f\u0434\u043a\u0443     # ysamescale    \u043d\u0443\u0436\u043d\u043e \u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u0434\u0438\u043d \u043c\u0430\u0441\u0448\u0442\u0430\u0431 \u043f\u043e Y \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0432 \u043c\u0435\u0442\u0440\u0438\u043a\u0438     # yscale    \u043c\u0430\u0441\u0448\u0442\u0430\u0431 \u0435\u0434\u0438\u043d\u0438\u0446 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f     # yunit     \u0435\u0434\u0438\u043d\u0438\u0446\u0430 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f     # ydata     \u043a\u043e\u043b\u043e\u043d\u043a\u0430 \u0438\u0437 \u0434\u0430\u0442\u0430\u0444\u0440\u0435\u0439\u043c\u0430     # desc      \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0440\u0438\u0441\u0443\u043d\u043a\u0430      # r'...\\UDP...' \u044d\u0442\u043e fix of (unicode error) 'unicodeescape' codec can't decode bytes in position 20-22: truncated \\UXXXXXXXX escape          # \u043e\u0431\u0449\u0438\u0435 \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u0438     {'n': 3,    'ysamescale': True,     'yscale': 1,        'yunit': '%',   'ydata': 'Processor Information(_Total)\\% Processor Time', 'desc': '\u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430'},      {'n': 7,    'ysamescale': True,     'yscale': 1,        'yunit': 'B',   'ydata': 'Memory\\Available Bytes', 'desc': '\u0414\u043e\u0441\u0442\u0443\u043f\u043d\u0430\u044f \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u0430\u044f \u043f\u0430\u043c\u044f\u0442\u044c'},     {'n': 7,    'ysamescale': True,     'yscale': 1,        'yunit': '%',   'ydata': 'Memory\\% Committed Bytes In Use', 'desc': '\u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438'},      {'n': 9,    'ysamescale': True,     'yscale': 1,        'yunit': '%',   'ydata': 'NVIDIA GPU\\% GPU Usage', 'desc': '\u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0432\u0438\u0434\u0435\u043e\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430'},     {'n': 9,    'ysamescale': True,     'yscale': 1,        'yunit': '%',   'ydata': 'NVIDIA GPU\\% GPU Memory Usage', 'desc': '\u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0432\u0438\u0434\u0435\u043e\u043f\u0430\u043c\u044f\u0442\u0438'},     {'n': 9,    'ysamescale': True,     'yscale': 1,        'yunit': '%',   'ydata': 'NVIDIA GPU\\% FB Usage', 'desc': '\u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0444\u0440\u0435\u0439\u043c\u0431\u0443\u0444\u0435\u0440\u0430 GPU'},     {'n': 9,    'ysamescale': True,     'yscale': 1,        'yunit': '%',   'ydata': 'NVIDIA GPU\\% Video Encoder Usage', 'desc': '\u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u044d\u043d\u043a\u043e\u0434\u0435\u0440\u0430 GPU'},     {'n': 9,    'ysamescale': True,     'yscale': 1,        'yunit': '%',   'ydata': 'NVIDIA GPU\\% Video Decoder Usage', 'desc': '\u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0434\u0435\u043a\u043e\u0434\u0435\u0440\u0430 GPU'},      # \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u0438 \u0441\u0435\u0430\u043d\u0441\u043e\u0432     {'n': 1,    'ysamescale': False,    'yscale': 0.001,    'yunit': 's',   'ydata': 'User Input Delay per Session {0}\\Max Input Delay', 'desc': '\u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0432\u0432\u043e\u0434\u0430 \u043d\u0430 \u0441\u0435\u0430\u043d\u0441'},      {'n': 5,    'ysamescale': True,     'yscale': 1,        'yunit': 'FPS', 'ydata': 'RemoteFX Graphics {0}\\Input Frames\/Second', 'desc': '\u0413\u0440\u0430\u0444\u0438\u043a\u0430 RemoteFX, \u0412\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u043a\u0430\u0434\u0440\u043e\u0432 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443', 'yMin': 0, 'yMax': 50},     {'n': 5,    'ysamescale': True,     'yscale': 1,        'yunit': 'FPS', 'ydata': 'RemoteFX Graphics {0}\\Output Frames\/Second', 'desc': '\u0413\u0440\u0430\u0444\u0438\u043a\u0430 RemoteFX, \u0418\u0441\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u043a\u0430\u0434\u0440\u043e\u0432 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443', 'yMin': 0, 'yMax': 50},      {'n': 33,   'ysamescale': False,    'yscale': 0.001,    'yunit': 's',   'ydata': 'RemoteFX Graphics {0}\\Average Encoding Time', 'desc': '\u0413\u0440\u0430\u0444\u0438\u043a\u0430 RemoteFX, \u0421\u0440\u0435\u0434\u043d\u0435\u0435 \u0432\u0440\u0435\u043c\u044f \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u0430\u0434\u0440\u0430'},     {'n': 33,   'ysamescale': True,     'yscale': 1,        'yunit': '%',   'ydata': 'RemoteFX Graphics {0}\\Frame Quality', 'desc': '\u0413\u0440\u0430\u0444\u0438\u043a\u0430 RemoteFX, \u041a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u043a\u0430\u0434\u0440\u0430'},     {'n': 33,   'ysamescale': False,    'yscale': 1,        'yunit': '%',   'ydata': 'RemoteFX Graphics {0}\\Graphics Compression ratio', 'desc': '\u0413\u0440\u0430\u0444\u0438\u043a\u0430 RemoteFX, \u041a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442 \u0441\u0436\u0430\u0442\u0438\u044f \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445'},      {'n': 22,   'ysamescale': True,     'yscale': 1,        'yunit': 'bps', 'ydata': 'RemoteFX Network {0}\\Total Sent Rate', 'desc': '\u0421\u0435\u0442\u044c RemoteFX, \u041e\u0431\u0449\u0430\u044f \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438'},     {'n': 22,   'ysamescale': True,     'yscale': 1,        'yunit': 'bps', 'ydata': 'RemoteFX Network {0}\\Total Received Rate', 'desc': '\u0421\u0435\u0442\u044c RemoteFX, \u041e\u0431\u0449\u0430\u044f \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u0440\u0438\u0451\u043c\u0430'},     {'n': 22,   'ysamescale': True,     'yscale': 1,        'yunit': '%',   'ydata': 'RemoteFX Network {0}\\Loss Rate', 'desc': '\u0421\u0435\u0442\u044c RemoteFX, \u041f\u043e\u0442\u0435\u0440\u0438'},      {'n': 44,   'ysamescale': True,     'yscale': 1,        'yunit': 'FPS', 'ydata': 'RemoteFX Graphics {0}\\Frames Skipped\/Second - Insufficient Network Resources', 'desc': '\u0413\u0440\u0430\u0444\u0438\u043a\u0430 RemoteFX, \u041f\u0440\u043e\u043f\u0443\u0441\u043a \u043a\u0430\u0434\u0440\u043e\u0432 \u0438\u0437-\u0437\u0430 \u043d\u0435\u0445\u0432\u0430\u0442\u043a\u0438 \u0441\u0435\u0442\u0435\u0432\u044b\u0445 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432'},     {'n': 44,   'ysamescale': True,     'yscale': 1,        'yunit': 'FPS', 'ydata': 'RemoteFX Graphics {0}\\Frames Skipped\/Second - Insufficient Server Resources', 'desc': '\u0413\u0440\u0430\u0444\u0438\u043a\u0430 RemoteFX, \u041f\u0440\u043e\u043f\u0443\u0441\u043a \u043a\u0430\u0434\u0440\u043e\u0432 \u0438\u0437-\u0437\u0430 \u043d\u0435\u0445\u0432\u0430\u0442\u043a\u0438 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 \u0441\u0435\u0440\u0432\u0435\u0440\u0430'},     {'n': 44,   'ysamescale': True,     'yscale': 1,        'yunit': 'FPS', 'ydata': 'RemoteFX Graphics {0}\\Frames Skipped\/Second - Insufficient Client Resources', 'desc': '\u0413\u0440\u0430\u0444\u0438\u043a\u0430 RemoteFX, \u041f\u0440\u043e\u043f\u0443\u0441\u043a \u043a\u0430\u0434\u0440\u043e\u0432 \u0438\u0437-\u0437\u0430 \u043d\u0435\u0445\u0432\u0430\u0442\u043a\u0438 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 \u043a\u043b\u0438\u0435\u043d\u0442\u0430'},      {'n': 55,   'ysamescale': True,     'yscale': 1,        'yunit': 'bps', 'ydata': r'RemoteFX Network {0}\\UDP Sent Rate', 'desc': '\u0421\u0435\u0442\u044c RemoteFX, \u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438, UDP'},     {'n': 55,   'ysamescale': True,     'yscale': 1,        'yunit': 'bps', 'ydata': r'RemoteFX Network {0}\\UDP Received Rate', 'desc': '\u0421\u0435\u0442\u044c RemoteFX, \u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u0440\u0438\u0451\u043c\u0430, UDP'},     {'n': 55,   'ysamescale': True,     'yscale': 1000,     'yunit': 'bps', 'ydata': 'RemoteFX Network {0}\\Current UDP Bandwidth', 'desc': '\u0421\u0435\u0442\u044c RemoteFX, \u041f\u0440\u043e\u043f\u0443\u0441\u043a\u043d\u0430\u044f \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c UDP-\u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f'},      {'n': 55,   'ysamescale': True,     'yscale': 1,        'yunit': 'bps', 'ydata': 'RemoteFX Network {0}\\TCP Sent Rate', 'desc': '\u0421\u0435\u0442\u044c RemoteFX, \u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438, TCP'},     {'n': 55,   'ysamescale': True,     'yscale': 1,        'yunit': 'bps', 'ydata': 'RemoteFX Network {0}\\TCP Received Rate', 'desc': '\u0421\u0435\u0442\u044c RemoteFX, \u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u0440\u0438\u0451\u043c\u0430, TCP'},     {'n': 55,   'ysamescale': True,     'yscale': 1000,     'yunit': 'bps', 'ydata': 'RemoteFX Network {0}\\Current TCP Bandwidth', 'desc': '\u0421\u0435\u0442\u044c RemoteFX, \u041f\u0440\u043e\u043f\u0443\u0441\u043a\u043d\u0430\u044f \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c TCP-\u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f'}, ]  fgs.sort(key=lambda counter: counter['n'])  null = [print(f\"{el['n']:&gt;2} {el['ysamescale']:&lt;1} {el['yunit']:^5} {el['desc']:&lt;64}\") for el in fgs]  # \u041f\u043e\u0438\u0441\u043a \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u043f\u0440\u0435\u0434\u0435\u043b\u043e\u0432 \u043f\u043e \u043e\u0441\u0438 Y \u0432 fgs y_lim_scale = 0.13  # \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442 \u043f\u0440\u0435\u0434\u0435\u043b\u043e\u0432 \u043f\u043e Y: \u0440\u0430\u043c\u043a\u0438 \u0433\u0440\u0430\u0444\u0438\u043a\u0430 \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u0447\u0443\u0442\u044c \u0448\u0438\u0440\u0435, \u0447\u0442\u043e\u0431\u044b \u0433\u0440\u0430\u0444\u0438\u043a \u043d\u0435 \u0441\u043b\u0438\u0432\u0430\u043b\u0441\u044f \u0441 \u043d\u0438\u043c\u0438  # \u0441\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432\u0441\u0435\u0445 \u0437\u0430\u043c\u0435\u0440\u043e\u0432 \u0432 \u043e\u0434\u043d\u0443 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 max\/min alldf = pd.concat([t21, t22, t23, t31, t32, t33, t41, t42, t43], axis=1, join='inner') print('debug: \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c 3*3=9 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439', alldf['Memory\\Available Bytes'].max(), sep='\\n')  allusr = set([n for n in range(11) if 'User Input Delay per Session {0}\\Max Input Delay'.format(n) in alldf.columns])  # \u0432\u0441\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u0441\u0442\u0440\u0435\u0442\u0438\u043b\u0438\u0441\u044c \u0432 \u0437\u0430\u043c\u0435\u0440\u0430\u0445 print(f'\\n\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438: {allusr}\\n')  for c in fgs:     # \u043c\u0435\u0442\u0440\u0438\u043a\u0438 \u0441\u0435\u0430\u043d\u0441\u0430     if '0' in c['ydata']:         c.setdefault('yMax', 0)         c.setdefault('yMin', 0)          for u in allusr:             if c['yMax'] &lt; max(alldf[c['ydata'].format(u)].max()):                 c['yMax'] = max(alldf[c['ydata'].format(u)].max())              if c['yMin'] &gt; min(alldf[c['ydata'].format(u)].min()):                 c['yMin'] = min(alldf[c['ydata'].format(u)].min())     # \u043e\u0431\u0449\u0430\u044f \u043c\u0435\u0442\u0440\u0438\u043a\u0430     else:         c.setdefault('yMax', max(alldf[c['ydata']].max()))         c.setdefault('yMin', min(alldf[c['ydata']].min()))      if c['yMin'] == c['yMax']:  # \u043a\u043e\u0433\u0434\u0430 \u043e\u0431\u0430 \u043f\u0440\u0435\u0434\u0435\u043b\u0430 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0435, \u0431\u0443\u0434\u0435\u0442 \u043e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435 ax.set_ylim(...)         c['yMin'] = -1         c['yMax'] = +1      # \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u0435\u043c \u0433\u0440\u0430\u043d\u0438\u0446\u044b, \u0447\u0442\u043e\u0431\u044b \u043b\u0438\u043d\u0438\u0438 \u0433\u0440\u0430\u0444\u0438\u043a\u0430 \u0431\u044b\u043b\u0438 \u0432\u043d\u0443\u0442\u0440\u0438 \u0433\u0440\u0430\u043d\u0438\u0446, \u0430 \u043d\u0435 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u043b\u0438 \u0441 \u0432\u0435\u0440\u0445\u043e\u043c\/\u043d\u0438\u0437\u043e\u043c     c['yMin'] = (c['yMin'] - c['yMin'] * y_lim_scale - 1) * c.setdefault('yscale', 1)     c['yMax'] = (c['yMax'] + c['yMax'] * y_lim_scale + 1) * c.setdefault('yscale', 1)  Null = [print(f\"{c['yMin']:&gt;20} {c['yMax']:&gt;20}\\t{c['ydata']}\") for c in fgs]  # debug: fgs \u0442\u0435\u043f\u0435\u0440\u044c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0432\u0435\u0440\u0445\u043d\u0438\u0439 \u0438 \u043d\u0438\u0436\u043d\u0438\u0439 \u043f\u0440\u0435\u0434\u0435\u043b\u044b \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u043c\u0435\u0442\u0440\u0438\u043a\u0438  # \u041f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0435 \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0432 title_tests = ['test #2 \\n3D benchmark', 'test #3 \\nplay 1080p video', 'test #4 \\nplay 1080p youtube video']  for m in fgs:  # \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u0435\u0442\u0440\u0438\u043a, \u0441\u0442\u043e\u043b\u044c\u043a\u043e \u0440\u0438\u0441\u0443\u043d\u043a\u043e\u0432 (\u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c 3x3)      fig, axs = plt.subplots(3, 3, figsize=(15, 8), sharex='col', sharey='row')  # \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u0430 3\u04453=9 \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0432      # \u0438\u043c\u044f \u0440\u0438\u0441\u0443\u043d\u043a\u0430     fig.suptitle(f\"\u0420\u0438\u0441. {fgs.index(m) + 1:&gt;2}.   {m['desc']}\", fontsize=14)      # \u0444\u043e\u043d \u0440\u0438\u0441\u0443\u043d\u043a\u0430 \u0431\u0435\u043b\u044b\u0439 \u0432\u043c\u0435\u0441\u0442\u043e \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e\u0433\u043e     fig.patch.set_facecolor('white')      # \u043f\u043e\u0434\u043f\u0438\u0441\u044c \u0432\u0435\u0440\u0445\u043d\u0435\u0433\u043e \u0440\u044f\u0434\u0430 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439     [ax.set_title(f\"{n} {'user' if n == 1 else 'users'}\") for ax, n in zip(axs[0, :], range(1, 4))]      # \u043f\u043e\u0434\u043f\u0438\u0441\u044c \u043b\u0435\u0432\u043e\u0439 \u043a\u043e\u043b\u043e\u043d\u043a\u0438 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c \u0442\u0435\u0441\u0442\u0430     [ax.set(ylabel=title) for ax, title in zip(axs[:, 0], title_tests)]      # \u0434\u0443\u0431\u043b\u044c \u0448\u043a\u0430\u043b\u044b \u0432 \u043f\u0440\u0430\u0432\u0443\u044e \u043a\u043e\u043b\u043e\u043d\u043a\u0443     [ax.yaxis.set_tick_params(labelleft=False, labelright=True, which='major') for ax in axs[:, 2]]      # \u0440\u044f\u0434\u044b \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0432 \u0432 \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u0435     for axrow, dfrow in zip(axs, dataframes):          # \u0433\u0440\u0430\u0444\u0438\u043a \u0432 \u0440\u044f\u0434\u0443         for ax, df in zip(axrow, dfrow):              # \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0443\u0447\u0430\u0441\u0442\u0432\u043e\u0432\u0430\u043b\u0438 \u0432 \u0442\u0435\u043a\u0443\u0449\u0435\u043c \u0437\u0430\u043c\u0435\u0440\u0435             usl = [n for n in range(11) if 'User Input Delay per Session {0}\\Max Input Delay'.format(n) in df.columns]              # \u0433\u0440\u0430\u0444\u0438\u043a\u0438 \u0441\u0435\u0441\u0441\u0438\u0439             if '{0}' in m['ydata']:                  # \u043b\u0435\u0433\u0435\u043d\u0434\u0430 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u0433\u0440\u0430\u0444\u0438\u043a\u0430 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u0432 \u0437\u0430\u043c\u0435\u0440\u0435                 lgn = [f\"user {u}, average {EngFormatter(places=0).format_eng(df[m['ydata'].format(u)].mean() * m.get('yscale', 1))}{m['yunit']}\" for u in usl]                  for u in usl:                     ax.plot(df.index.values, df[m['ydata'].format(u)] * m.get('yscale', 1))              # \u043e\u0431\u0449\u0438\u0435 \u0433\u0440\u0430\u0444\u0438\u043a\u0438             else:                 ax.plot(df.index.values, df[m['ydata']] * m.get('yscale', 1))                 avg = EngFormatter(places=0).format_eng(df[m['ydata']].mean() * m.get('yscale', 1))                 lgn = [f\"{len(usl)} {'user' if len(usl) == 1 else 'users'}, average {avg}{m['yunit']}\"]              ax.legend(lgn, fontsize=8)              ax.set_xlim(0, 119)  # \u043c\u0435\u0442\u043a\u0430 '120' \u0437\u0430\u0441\u043e\u0440\u044f\u043b\u0430 \u0433\u0440\u0430\u0444\u0438\u043a             if m['ysamescale']:                 ax.set_ylim(m['yMin'], m['yMax'])  # \u0435\u0434\u0438\u043d\u044b\u0439 \u043c\u0430\u0441\u0448\u0442\u0430\u0431 \u043e\u0441\u0438 Y \u0434\u043b\u044f \u0432\u0441\u0435\u0445 9 \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0432              ax.xaxis.set_tick_params(which='major', labelcolor='grey')  # \u043f\u043e\u0434\u043f\u0438\u0441\u0438 \u043a X-\u0448\u043a\u0430\u043b\u0435             ax.yaxis.set_tick_params(which='major', labelcolor='grey')  # \u043f\u043e\u0434\u043f\u0438\u0441\u0438 Y-\u0448\u043a\u0430\u043b\u0435              ax.grid(axis='y')  # \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u0430\u044f \u0441\u0435\u0442\u043a\u0430             ax.grid(axis='x')  # \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u0430\u044f \u0441\u0435\u0442\u043a\u0430              ax.xaxis.set_major_formatter(EngFormatter(unit='s'))  # \u043f\u043e X \u0441\u0435\u043a\u0443\u043d\u0434\u044b             ax.yaxis.set_major_formatter(EngFormatter(unit=m['yunit']))  # \u043f\u043e Y \u0443 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0433\u0440\u0430\u0444\u0438\u043a\u0430 \u0441\u0432\u043e\u044f \u0435\u0434. \u0438\u0437\u043c.              fig.tight_layout()<\/code><\/pre>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>\u0414\u0438\u0430\u0433\u043d\u043e\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u0438<\/summary>\n<div class=\"spoiler__content\">\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/386\/c60\/92a\/386c6092a86328975a72785eba15706c.png\" width=\"1072\" height=\"568\"><figcaption><\/figcaption><\/figure>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/297\/8de\/053\/2978de053a39aca6c86cf88ef5652cbe.png\" width=\"1072\" height=\"568\"><figcaption><\/figcaption><\/figure>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b60\/3e8\/434\/b603e8434d62bd682d42e84ac2118260.png\" width=\"1072\" height=\"568\"><figcaption><\/figcaption><\/figure>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/47b\/79f\/d65\/47b79fd658a8c30b685e3fb163254fe0.png\" width=\"1072\" height=\"568\"><figcaption><\/figcaption><\/figure>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/66a\/b26\/889\/66ab26889bb424f1ee8f5cab6e766b5c.png\" width=\"1072\" height=\"568\"><figcaption><\/figcaption><\/figure>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/d87\/9cc\/e3e\/d879cce3ed9bc0355e3c620ebe1b07a0.png\" width=\"1072\" height=\"568\"><figcaption><\/figcaption><\/figure>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>UDP \u0442\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\/getpro\/habr\/upload_files\/2ed\/a76\/d42\/2eda76d428af4d5c938e87518e1731a3.png\" width=\"1072\" height=\"568\"><figcaption><\/figcaption><\/figure>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/6f7\/ec8\/1b4\/6f7ec81b4b2d17f1c32c92b2d39e94fd.png\" width=\"1072\" height=\"568\"><figcaption><\/figcaption><\/figure>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/64e\/999\/a33\/64e999a331f930fd7a5bc7e71eb74388.png\" width=\"1072\" height=\"568\"><figcaption><\/figcaption><\/figure>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>TCP \u0442\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\/getpro\/habr\/upload_files\/3fa\/0a6\/d48\/3fa0a6d485ca9961c1e11741c80578f7.png\" width=\"1072\" height=\"568\"><figcaption><\/figcaption><\/figure>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/a07\/83d\/a33\/a0783da331bd1cab0fab0985063b0997.png\" width=\"1072\" height=\"568\"><figcaption><\/figcaption><\/figure>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/2db\/e55\/7de\/2dbe557deb61dc25d9c1f9934da504d5.png\" width=\"1072\" height=\"568\"><figcaption><\/figcaption><\/figure>\n<\/div>\n<\/details>\n<p>\u0421\u043f\u0430\u0441\u0438\u0431\u043e \u0437\u0430 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435!<\/p>\n<hr>\n<p><strong>\u0427\u0442\u043e \u0435\u0449\u0451 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0433\u043e \u0435\u0441\u0442\u044c \u0432 \u0431\u043b\u043e\u0433\u0435&nbsp;<\/strong><a href=\"https:\/\/www.cloud4y.ru\/?utm_source=habr&amp;utm_medium=referral&amp;utm_campaign=article\"><strong>Cloud4Y<\/strong><\/a><\/p>\n<p>\u2192&nbsp;<a href=\"https:\/\/habr.com\/ru\/company\/cloud4y\/blog\/547164\/\">\u0427\u0430\u0441\u0442\u044b\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u0432 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445 Nginx, \u0438\u0437-\u0437\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0432\u0435\u0431-\u0441\u0435\u0440\u0432\u0435\u0440 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0443\u044f\u0437\u0432\u0438\u043c\u044b\u043c<\/a><\/p>\n<p>\u2192&nbsp;<a href=\"https:\/\/habr.com\/ru\/company\/cloud4y\/blog\/541348\/\">\u041f\u0430\u0440\u043e\u043b\u044c \u043a\u0430\u043a \u043a\u0440\u0435\u0441\u0442\u0440\u0430\u0436: \u0435\u0449\u0451 \u043e\u0434\u0438\u043d \u0441\u043f\u043e\u0441\u043e\u0431 \u0437\u0430\u0449\u0438\u0442\u0438\u0442\u044c \u0441\u0432\u043e\u0438 \u0443\u0447\u0451\u0442\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435<\/a><\/p>\n<p>\u2192&nbsp;<a href=\"https:\/\/habr.com\/ru\/company\/cloud4y\/blog\/539654\/\">\u0422\u0438\u043c \u0411\u0435\u0440\u043d\u0435\u0440\u0441-\u041b\u0438 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442 \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u043f\u043e\u0434\u0430\u0445<\/a><\/p>\n<p>\u2192&nbsp;<a href=\"https:\/\/habr.com\/ru\/company\/cloud4y\/blog\/542000\/\">\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u0448\u0430\u0431\u043b\u043e\u043d\u0430 vApp \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u0439 \u0441\u0440\u0435\u0434\u044b VMware vCenter + ESXi<\/a><\/p>\n<p>\u2192&nbsp;<a href=\"https:\/\/habr.com\/ru\/company\/cloud4y\/blog\/538510\/\">\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0433\u0440\u0443\u043f\u043f\u044b \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u0438 AlwaysON \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 Failover<\/a><\/p>\n<p>\u041f\u043e\u0434\u043f\u0438\u0441\u044b\u0432\u0430\u0439\u0442\u0435\u0441\u044c \u043d\u0430 \u043d\u0430\u0448&nbsp;<a href=\"https:\/\/t.me\/cloud4y\">Telegram<\/a>-\u043a\u0430\u043d\u0430\u043b, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u0443\u044e \u0441\u0442\u0430\u0442\u044c\u044e. \u041f\u0438\u0448\u0435\u043c \u043d\u0435 \u0447\u0430\u0449\u0435 \u0434\u0432\u0443\u0445 \u0440\u0430\u0437 \u0432 \u043d\u0435\u0434\u0435\u043b\u044e \u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e \u0434\u0435\u043b\u0443.<\/p>\n<\/div>\n<p> \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\/553132\/\"> https:\/\/habr.com\/ru\/company\/cloud4y\/blog\/553132\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"\n<div class=\"post__text post__text_v2\" id=\"post-content-body\">\n<p>\u0412 <a href=\"https:\/\/habr.com\/ru\/company\/cloud4y\/blog\/552034\/\">\u043f\u0435\u0440\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f<\/a> \u043c\u044b \u043e\u0446\u0435\u043d\u0438\u0432\u0430\u043b\u0438 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f GPU-\u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u044f \u0434\u043b\u044f RemoteFX \u0432 \u043e\u0434\u043d\u043e\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435. \u042d\u0442\u043e \u0432\u0442\u043e\u0440\u043e\u0439 \u044d\u0442\u0430\u043f, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0437\u0430\u0439\u043c\u0451\u043c\u0441\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u043e\u0439 \u0438 \u043e\u0446\u0435\u043d\u043a\u043e\u0439 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0434\u043b\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u0435\u0430\u043d\u0441\u043e\u0432, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043d\u044f\u0442\u044c \u0433\u0440\u0430\u043d\u0438\u0446\u044b \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u0443\u0435\u043c\u043e\u0441\u0442\u0438 \u043e\u0431\u043b\u0430\u0447\u043d\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0441 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0439 \u0432\u0438\u0434\u0435\u043e\u043a\u0430\u0440\u0442\u043e\u0439.  <\/p>\n<details class=\"spoiler\">\n<summary>\u0421\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435<\/summary>\n<div class=\"spoiler__content\">\n<ul>\n<li>\n<p>\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435<\/p>\n<\/li>\n<li>\n<p>\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u0439 \u0441\u0440\u0435\u0434\u044b<\/p>\n<\/li>\n<li>\n<p>\u041c\u0435\u0442\u043e\u0434\u0438\u043a\u0430 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f<\/p>\n<\/li>\n<li>\n<p>\u041e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445<\/p>\n<\/li>\n<li>\n<p>\u0410\u043d\u0430\u043b\u0438\u0437 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 \u0438 \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0435 \u0433\u0440\u0430\u0444\u0438\u043a\u0438<\/p>\n<ul>\n<li>\n<p>\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u0432\u0432\u043e\u0434\u0430 \u0438 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u043d\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440<\/p>\n<\/li>\n<li>\n<p>\u0427\u0430\u0441\u0442\u043e\u0442\u0430 \u043a\u0430\u0434\u0440\u043e\u0432<\/p>\n<\/li>\n<li>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438<\/p>\n<\/li>\n<li>\n<p>\u041d\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u043d\u0430 \u0432\u0438\u0434\u0435\u043e\u043a\u0430\u0440\u0442\u0443<\/p>\n<\/li>\n<li>\n<p>\u041e\u0431\u0449\u0438\u0435 \u0441\u0435\u0442\u0435\u0432\u044b\u0435 \u043c\u0435\u0442\u0440\u0438\u043a\u0438<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/p>\n<\/li>\n<li>\n<p>\u041f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f<\/p>\n<ul>\n<li>\n<p>Set-DataCollectors.ps1<\/p>\n<\/li>\n<li>\n<p>Set-DataCollectors.cmd<\/p>\n<\/li>\n<li>\n<p>Start-SyncedTest.ps1<\/p>\n<\/li>\n<li>\n<p>Start-SyncedTest.cmd<\/p>\n<\/li>\n<li>\n<p>helper.psm1<\/p>\n<\/li>\n<li>\n<p>blg2csv.ps1<\/p>\n<\/li>\n<li>\n<p>blg2csv.cmd<\/p>\n<\/li>\n<li>\n<p>figures_alt.ipynb<\/p>\n<\/li>\n<li>\n<p>figures.ipynb<\/p>\n<\/li>\n<li>\n<p>\u0414\u0438\u0430\u0433\u043d\u043e\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u0438<\/p>\n<\/li>\n<li>\n<p>UDP \u0442\u0440\u0430\u0444\u0438\u043a<\/p>\n<\/li>\n<li>\n<p>TCP \u0442\u0440\u0430\u0444\u0438\u043a<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/div>\n<\/details>\n<p>\u0423\u0442\u0438\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 vCPU \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u043e\u0434\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0434\u043b\u044f \u043f\u0435\u0440\u0432\u044b\u0445 \u0434\u0432\u0443\u0445 \u0442\u0435\u0441\u0442\u043e\u0432 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u043b\u0430 \u0432 \u0441\u0440\u0435\u0434\u043d\u0435\u043c 40-50%. \u041f\u043e\u044d\u0442\u043e\u043c\u0443, \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0437\u0430\u043c\u0435\u0440\u044b \u0434\u043b\u044f \u0434\u0432\u0443\u0445 \u0438 \u0442\u0440\u0451\u0445 \u0441\u0435\u0441\u0441\u0438\u0439 \u0431\u044b\u043b\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u044b \u0431\u0435\u0437 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430. \u041e\u0434\u043d\u0430\u043a\u043e \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c, \u0447\u0442\u043e \u0443\u0437\u043a\u0438\u043c \u043c\u0435\u0441\u0442\u043e\u043c \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u0432 \u043f\u0435\u0440\u0432\u0443\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c, \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0438\u043c\u0435\u043d\u043d\u043e \u0440\u0435\u0441\u0443\u0440\u0441\u044b vCPU \u0438 vRAM: \u043e\u0431\u0449\u0430\u044f \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0441\u0442\u0430\u043b\u0430 \u0442\u0430\u043a \u0432\u044b\u0441\u043e\u043a\u0430, \u0447\u0442\u043e \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0443 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u043b\u043e \u0445\u0432\u0430\u0442\u0430\u0442\u044c \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 \u0434\u043b\u044f \u0444\u0438\u043a\u0441\u0430\u0446\u0438\u0438 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u0438\u0439 \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u043e\u0432 \u0438 \u0432 \u0437\u0430\u043c\u0435\u0440\u0430\u0445 \u0441\u0442\u0430\u043b\u0438 \u043f\u043e\u044f\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u0440\u043e\u0431\u0435\u043b\u044b.  <\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u044b \u0431\u044b\u043b\u0430 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0430: \u0431\u044b\u043b\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u044b \u044f\u0434\u0440\u0430 \u0438 \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u0430\u044f \u043f\u0430\u043c\u044f\u0442\u044c.  <\/p>\n<h3>\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u0439 \u0441\u0440\u0435\u0434\u044b<\/h3>\n<h4>\u0421\u0435\u0440\u0432\u0435\u0440<\/h4>\n<ul>\n<li>\n<p>2 -&gt; 6 vCPU Intel(R) Xeon(R) CPU E5-2696 v4 @ 2.20GHz<\/p>\n<\/li>\n<li>\n<p>8 -&gt; 12 GB RAM<\/p>\n<\/li>\n<li>\n<p>GPU NVIDIA GRID M60-1Q, Dedicated Memory 929 MB, Shared Memory 4095 -&gt; 6143 MB<\/p>\n<\/li>\n<li>\n<p>\u0433\u043e\u0441\u0442\u0435\u0432\u0430\u044f \u041e\u0421 Windows Server 2019 Standart x64 1809 (Version 10.0.17763.1577), DirectX 12<\/p>\n<\/li>\n<li>\n<p>network in\/out rate limit 50 Mbps<\/p>\n<\/li>\n<\/ul>\n<p>\u042f\u0437\u044b\u043a\u043e\u043c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0431\u044b\u043b \u0441\u0434\u0435\u043b\u0430\u043d \u0430\u043d\u0433\u043b\u0438\u0439\u0441\u043a\u0438\u0439: \u0434\u043b\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f &#171;\u0431\u0435\u043b\u044b\u0445 \u043f\u044f\u0442\u0435\u043d&#187; \u0432 \u0437\u0430\u043c\u0435\u0440\u0430\u0445 \u0432\u043c\u0435\u0441\u0442\u043e \u0441\u0431\u043e\u0440\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0447\u0435\u0440\u0435\u0437 PerfMon \u0431\u044b\u043b\u0438 \u043f\u043e\u043f\u044b\u0442\u043a\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u043b\u0435\u0442&nbsp;<code>Get-Counter<\/code>&nbsp;\u0441 Real Time \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u043e\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430. \u0410 \u0440\u0443\u0441\u0441\u043a\u0438\u0435 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u043e\u0432 \u043f\u0430\u043c\u044f\u0442\u0438 \u0443\u0441\u043b\u043e\u0436\u043d\u044f\u043b\u0438 \u044d\u0442\u0438 \u043f\u043e\u043f\u044b\u0442\u043a\u0438.<\/p>\n<p>\u0414\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043a\u043e\u0433\u0434\u0430 \u0432\u044b \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0435 \u043d\u043e\u0432\u044b\u0439 \u0441\u0431\u043e\u0440\u0449\u0438\u043a \u0434\u0430\u043d\u043d\u044b\u0445 PerfMon \u0447\u0435\u0440\u0435\u0437 GUI, \u0442\u043e \u0432\u0438\u0434\u0438\u0442\u0435 \u043f\u0441\u0435\u0432\u0434\u043e\u043d\u0438\u043c\u044b \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0437\u0430\u0432\u0438\u0441\u044f\u0442 \u043e\u0442 \u044f\u0437\u044b\u043a\u0430 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430. \u041d\u043e \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438, \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f &#171;\u0440\u043e\u0434\u043d\u044b\u0435&#187; \u0430\u043d\u0433\u043b\u0438\u0439\u0441\u043a\u0438\u0435 \u0438\u043c\u0435\u043d\u0430. \u042d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0432 xml \u0444\u0430\u0439\u043b\u0435, \u0435\u0441\u043b\u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0441\u0431\u043e\u0440\u0449\u0438\u043a \u043a\u0430\u043a \u0448\u0430\u0431\u043b\u043e\u043d. \u0423\u0442\u0438\u043b\u0438\u0442\u0430&nbsp;<code>logman<\/code>&nbsp;\u0442\u043e\u0436\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441 \u0430\u043d\u0433\u043b\u0438\u0439\u0441\u043a\u0438\u043c\u0438 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f\u043c\u0438.<\/p>\n<p>\u041a\u043e\u043c\u0430\u043d\u0434\u043b\u0435\u0442&nbsp;<code>Get-Counter<\/code>&nbsp;\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0438\u043c\u0435\u043d\u043d\u043e \u0441 \u043f\u0441\u0435\u0432\u0434\u043e\u043d\u0438\u043c\u0430\u043c\u0438. \u0422\u043e \u0435\u0441\u0442\u044c, \u043e\u0442 \u044f\u0437\u044b\u043a\u0430 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u0437\u0430\u0432\u0438\u0441\u0438\u0442, \u043a\u0430\u043a\u0430\u044f \u0438\u0437 \u0434\u0432\u0443\u0445 \u043a\u043e\u043c\u0430\u043d\u0434 \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u0441\u044f \u043e\u0448\u0438\u0431\u043a\u043e\u0439:<\/p>\n<pre><code class=\"bash\">PS C:\\&gt; (Get-Counter -ListSet 'RemoteFX Network').paths PS C:\\&gt; (Get-Counter -ListSet '\u0421\u0435\u0442\u044c RemoteFX').paths<\/code><\/pre>\n<p>\u041f\u0440\u0438\u043d\u0446\u0438\u043f\u0438\u0430\u043b\u044c\u043d\u043e \u0442\u0430\u043a\u043e\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u043d\u0435 \u0440\u0435\u0448\u0438\u043b \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443, \u043f\u0440\u043e\u0431\u0435\u043b\u044b \u043e\u0441\u0442\u0430\u043b\u0438\u0441\u044c, \u0445\u043e\u0442\u044f \u0438 \u0432 \u043c\u0435\u043d\u044c\u0448\u0435\u043c \u043e\u0431\u044a\u0451\u043c\u0435. \u041d\u043e \u0441\u0442\u0430\u043b\u043e \u043f\u0440\u043e\u0449\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0431\u043e\u0440 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 PerfMon \/ PowerShell, \u0430, \u043f\u043e\u0441\u043b\u0435 \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u043e\u0432 \u043d\u0430 \u0434\u0432\u0435 \u0433\u0440\u0443\u043f\u043f\u044b, \u043d\u0430\u043a\u043e\u043d\u0435\u0446-\u0442\u0430\u043a\u0438 \u0437\u0430\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0438 \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u0438 \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438!<\/p>\n<h3>\u041c\u0435\u0442\u043e\u0434\u0438\u043a\u0430 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f<\/h3>\n<p>\u041d\u0435 \u043f\u0440\u0435\u0442\u0435\u0440\u043f\u0435\u043b\u0430 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0445 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439. \u041f\u0440\u043e\u0432\u043e\u0434\u0438\u043b\u0438\u0441\u044c \u0442\u0435 \u0436\u0435 \u0441\u0430\u043c\u044b\u0435 \u0442\u0440\u0438 \u0442\u0435\u0441\u0442\u0430:<\/p>\n<ul>\n<li>\n<p>\u0432\u0432\u043e\u0434 \u0442\u0435\u043a\u0441\u0442\u0430 + 3D BenchMark<\/p>\n<\/li>\n<li>\n<p>\u0432\u0432\u043e\u0434 \u0442\u0435\u043a\u0441\u0442\u0430 + \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u0432\u0438\u0434\u0435\u043e\u0444\u0430\u0439\u043b\u043e\u0432<\/p>\n<\/li>\n<li>\n<p>\u0432\u0432\u043e\u0434 \u0442\u0435\u043a\u0441\u0442\u0430 + \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 youtube-\u0440\u043e\u043b\u0438\u043a\u0430<\/p>\n<\/li>\n<\/ul>\n<p>\u041e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 \u043f\u0435\u0440\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u043b\u043e\u0441\u044c \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0441\u0435\u0440\u0438\u044f \u0442\u0435\u0441\u0442\u043e\u0432 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u043b\u0430\u0441\u044c \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0434\u043b\u044f \u043e\u0434\u043d\u043e\u0439, \u0437\u0430\u0442\u0435\u043c \u0434\u043b\u044f \u0434\u0432\u0443\u0445 \u0438 \u0434\u043b\u044f \u0442\u0440\u0451\u0445 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u0435\u0441\u0441\u0438\u0439. \u0410 \u043d\u0430\u0431\u043e\u0440 \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u043e\u0432 \u0438\u0437 \u043f\u0435\u0440\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0431\u044b\u043b \u0440\u0430\u0437\u0434\u0435\u043b\u0451\u043d \u043d\u0430 \u0434\u0432\u0435 \u0433\u0440\u0443\u043f\u043f\u044b:<\/p>\n<details class=\"spoiler\">\n<summary>\u041c\u0435\u0442\u0440\u0438\u043a\u0438<\/summary>\n<div class=\"spoiler__content\">\n<ul>\n<li>\n<p>\u041e\u0431\u0449\u0438\u0435 \u043c\u0435\u0442\u0440\u0438\u043a\u0438:<\/p>\n<ul>\n<li>\n<p>&#8216;\\Memory\\% Committed Bytes In Use&#8217;<\/p>\n<\/li>\n<li>\n<p>&#8216;\\Memory\\Available Bytes&#8217;<\/p>\n<\/li>\n<li>\n<p>&#8216;\\Processor Information(_Total)\\% Processor Time&#8217;<\/p>\n<\/li>\n<li>\n<p>&#8216;\\NVIDIA GPU(*)\\% GPU Usage&#8217;<\/p>\n<\/li>\n<li>\n<p>&#8216;\\NVIDIA GPU(*)\\% GPU Memory Usage&#8217;<\/p>\n<\/li>\n<li>\n<p>&#8216;\\NVIDIA GPU(*)\\% FB Usage&#8217;<\/p>\n<\/li>\n<li>\n<p>&#8216;\\NVIDIA GPU(*)\\% Video Decoder Usage&#8217;<\/p>\n<\/li>\n<li>\n<p>&#8216;\\NVIDIA GPU(*)\\% Video Encoder Usage&#8217;<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p>\u041c\u0435\u0442\u0440\u0438\u043a\u0438 \u0441\u0435\u0430\u043d\u0441\u043e\u0432:<\/p>\n<ul>\n<li>\n<p>&#8216;\\User Input Delay per Session(#id)\\Max Input Delay&#8217; # \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0432 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u043c \u0441\u0435\u0430\u043d\u0441\u0435<\/p>\n<\/li>\n<li>\n<p>&#8216;\\RemoteFX Network(RDP-Tcp#N)\\Loss Rate&#8217;<\/p>\n<\/li>\n<li>\n<p>&#8216;\\RemoteFX Network(RDP-Tcp#N)\\Current TCP Bandwidth&#8217;<\/p>\n<\/li>\n<li>\n<p>&#8216;\\RemoteFX Network(RDP-Tcp#N)\\Current UDP Bandwidth&#8217;<\/p>\n<\/li>\n<li>\n<p>&#8216;\\RemoteFX Network(RDP-Tcp#N)\\Total Sent Rate&#8217;<\/p>\n<\/li>\n<li>\n<p>&#8216;\\RemoteFX Network(RDP-Tcp#N)\\TCP Sent Rate&#8217;<\/p>\n<\/li>\n<li>\n<p>&#8216;\\RemoteFX Network(RDP-Tcp#N)\\UDP Sent Rate&#8217;<\/p>\n<\/li>\n<li>\n<p>&#8216;\\RemoteFX Network(RDP-Tcp#N)\\Total Received Rate&#8217;<\/p>\n<\/li>\n<li>\n<p>&#8216;\\RemoteFX Network(RDP-Tcp#N)\\TCP Received Rate&#8217;<\/p>\n<\/li>\n<li>\n<p>&#8216;\\RemoteFX Network(RDP-Tcp#N)\\UDP Received Rate&#8217;<\/p>\n<\/li>\n<li>\n<p>&#8216;\\RemoteFX Graphics(RDP-Tcp#N)\\Input Frames\/Second&#8217;<\/p>\n<\/li>\n<li>\n<p>&#8216;\\RemoteFX Graphics(RDP-Tcp#N)\\Output Frames\/Second&#8217;<\/p>\n<\/li>\n<li>\n<p>&#8216;\\RemoteFX Graphics(RDP-Tcp#N)\\Frame Quality&#8217;<\/p>\n<\/li>\n<li>\n<p>&#8216;\\RemoteFX Graphics(RDP-Tcp#N)\\Average Encoding Time&#8217;<\/p>\n<\/li>\n<li>\n<p>&#8216;\\RemoteFX Graphics(RDP-Tcp#N)\\Graphics Compression ratio&#8217;<\/p>\n<\/li>\n<li>\n<p>&#8216;\\RemoteFX Graphics(RDP-Tcp#N)\\Frames Skipped\/Second &#8212; Insufficient Server Resources&#8217;<\/p>\n<\/li>\n<li>\n<p>&#8216;\\RemoteFX Graphics(RDP-Tcp#N)\\Frames Skipped\/Second &#8212; Insufficient Network Resources&#8217;<\/p>\n<\/li>\n<li>\n<p>&#8216;\\RemoteFX Graphics(RDP-Tcp#N)\\Frames Skipped\/Second &#8212; Insufficient Client Resources&#8217;<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/div>\n<\/details>\n<p>\u041e\u0431\u0449\u0438\u0435 \u043c\u0435\u0442\u0440\u0438\u043a\u0438 \u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0435\u043b\u0438 \u043e\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0445 \u0441\u0435\u0430\u043d\u0441\u043e\u0432, \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u043e\u0432 \u0432\u0441\u0435\u0433\u0434\u0430 \u0431\u044b\u043b\u043e \u0432\u043e\u0441\u0435\u043c\u044c \u0432 \u043b\u044e\u0431\u043e\u043c \u0442\u0435\u0441\u0442\u0435 \u0434\u043b\u044f \u043b\u044e\u0431\u043e\u0433\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439. \u0410 \u0432\u043e\u0442 \u043c\u0435\u0442\u0440\u0438\u043a\u0438 \u0441\u0435\u0430\u0441\u043d\u043e\u0432 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u043b\u0438\u0441\u044c \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e, \u0442\u0430\u043a \u043a\u0430\u043a \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u043b\u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0432\u043e\u044e \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u044c\u043d\u0443\u044e \u0441\u0435\u0441\u0441\u0438\u044e.<\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u043d\u0435 \u0437\u0430\u043d\u0438\u043c\u0430\u0442\u044c\u0441\u044f \u0440\u0443\u0447\u043d\u043e\u0439 \u043f\u0435\u0440\u0435\u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u043e\u0439 PerfMon \u043f\u0440\u0438 \u0432\u0445\u043e\u0434\u0435 \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043d\u0430 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u0435\u0440\u0432\u0435\u0440, \u0431\u044b\u043b\u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u044b \u0441\u043a\u0440\u0438\u043f\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u043b\u0438 \u0433\u0440\u0443\u043f\u043f\u044b \u0441\u0431\u043e\u0440\u0449\u0438\u043a\u043e\u0432 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0442\u0435\u043a\u0443\u0449\u0438\u0445 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u0435\u0441\u0441\u0438\u0439.<\/p>\n<p>\u0417\u0430\u043c\u0435\u0440\u044b \u0438 \u0442\u0435\u0441\u0442\u044b \u0442\u043e\u0436\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043b\u0438\u0441\u044c \u0441\u043a\u0440\u0438\u043f\u0442\u0430\u043c\u0438 &#8212; \u0434\u043b\u044f \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 \u0438 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438: \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0431\u044b\u043b\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0439 \u0438 \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043d\u0443\u0436\u043d\u044b\u0439 \u0442\u0435\u0441\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u0430\u043b \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 \u043a\u0430\u0436\u0434\u043e\u0439 \u043d\u043e\u0432\u043e\u0439 \u043c\u0438\u043d\u0443\u0442\u044b \u0443 \u0432\u0441\u0435\u0445 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e. \u0421\u043f\u0443\u0441\u0442\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0435\u043a\u0443\u043d\u0434 \u044d\u0442\u043e\u0442 \u0436\u0435 \u0441\u043a\u0440\u0438\u043f\u0442 \u0432 \u0441\u0435\u0441\u0441\u0438\u0438 \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0430 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043b \u0441\u0431\u043e\u0440 \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<p>\u0411\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u043e\u0432 \u0441\u0435\u0430\u043d\u0441\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043d\u043e\u043c\u0435\u0440 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0441\u0435\u0430\u043d\u0441\u0430, \u0430 \u0441\u0447\u0451\u0442\u0447\u0438\u043a \u0437\u0430\u0434\u0435\u0440\u0436\u0435\u043a &#8212; id. \u041f\u043e\u044d\u0442\u043e\u043c\u0443, \u043f\u043e \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u0438 \u0442\u0435\u0441\u0442\u0430 \u0432 \u0436\u0443\u0440\u043d\u0430\u043b \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f&nbsp;<code>matches.csv<\/code>&nbsp;\u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u043b\u0438\u0441\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u0442\u0435\u0441\u0442\u0430: \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438, id \u0438 \u043d\u043e\u043c\u0435\u0440\u0430 \u0441\u0435\u0441\u0441\u0438\u0439, \u0438\u043c\u0435\u043d\u0430 \u0444\u0430\u0439\u043b\u043e\u0432 \u0441 \u0437\u0430\u043c\u0435\u0440\u0430\u043c\u0438:<\/p>\n<pre><code>\"test #3 WMPlayer users 3 general.blg\",\"2021.02.09 12:00:12\",\"administrator\",\"rdp-tcp#8\",\"2\",\"+03\" \"test #3 WMPlayer users 3 session.blg\",\"2021.02.09 12:00:12\",\"administrator\",\"rdp-tcp#8\",\"2\",\"+03\" \"test #3 WMPlayer users 3 general.blg\",\"2021.02.09 12:00:12\",\"2\",\"rdp-tcp#12\",\"3\",\"+03\" \"test #3 WMPlayer users 3 session.blg\",\"2021.02.09 12:00:12\",\"2\",\"rdp-tcp#12\",\"3\",\"+03\" \"test #3 WMPlayer users 3 general.blg\",\"2021.02.09 12:00:12\",\"3\",\"rdp-tcp#66\",\"4\",\"+03\" \"test #3 WMPlayer users 3 session.blg\",\"2021.02.09 12:00:12\",\"3\",\"rdp-tcp#66\",\"4\",\"+03\"<\/code><\/pre>\n<p>\u0422\u0430\u043a\u043e\u0435 \u0436\u0443\u0440\u043d\u0430\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u043e\u043c\u043e\u0433\u043b\u043e \u043d\u0430 \u044d\u0442\u0430\u043f\u0435 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u0441 \u0438\u0445 \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u0430\u043c\u0438.<\/p>\n<p>\u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432 \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438:<\/p>\n<ul>\n<li>\n<p>(\u043f\u0435\u0440\u0435-)\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0441\u0431\u043e\u0440\u0449\u0438\u043a\u043e\u0432 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 PerfMon \u2014 Set-DataCollectors.ps1 \u0438 Set-DataCollectors.cmd<\/p>\n<\/li>\n<li>\n<p>\u041e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0439 \u0437\u0430\u043f\u0443\u0441\u043a \u0442\u0435\u0441\u0442\u043e\u0432 \u0438 \u0437\u0430\u043c\u0435\u0440\u043e\u0432 \u2014 Start-SyncedTest.ps1 \u0438 Start-SyncedTest.cmd<\/p>\n<\/li>\n<li>\n<p>\u0412\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043a\u043e\u0434 \u0431\u044b\u043b \u0432\u044b\u043d\u0435\u0441\u0435\u043d \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0444\u0430\u0439\u043b \u043c\u043e\u0434\u0443\u043b\u044f PowerShell \u2014 helper.psm1<\/p>\n<\/li>\n<\/ul>\n<h3>\u041e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445<\/h3>\n<p>\u0421\u043a\u0440\u0438\u043f\u0442 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0430\u0446\u0438\u0438 \u0434\u0432\u043e\u0438\u0447\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442 csv \u0438\u0437 \u043f\u0435\u0440\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0442\u0430\u043a\u0436\u0435 \u0431\u044b\u043b \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d: \u0442\u0435\u043f\u0435\u0440\u044c \u043e\u043d \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u043b \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c \u0441\u0435\u0441\u0441\u0438\u044f\u043c \u0438 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u044f\u043b \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0444\u0430\u0439\u043b\u0430&nbsp;<code>matches.csv<\/code>.<\/p>\n<ul>\n<li>\n<p>\u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0434\u0432\u043e\u0438\u0447\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 \u0441 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430\u043c\u0438 \u0437\u0430\u043c\u0435\u0440\u043e\u0432 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u2014 blg2csv.ps1 \u0438 blg2csv.cmd<\/p>\n<\/li>\n<\/ul>\n<p>\u041e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0435 \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0432, \u043a\u0430\u043a \u0438 \u0440\u0430\u043d\u044c\u0448\u0435, \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430 \u0432&nbsp;<code>Jupiter<\/code>-\u0431\u043b\u043e\u043a\u043d\u043e\u0442\u0430\u0445 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a&nbsp;<code>pandas<\/code>&nbsp;\u0438&nbsp;<code>matplotlib<\/code>.<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0430 \u043e\u0434\u043d\u0443 \u043c\u0435\u0442\u0440\u0438\u043a\u0443 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u043b\u043e\u0441\u044c \u0443\u0436\u0435 \u0434\u0435\u0432\u044f\u0442\u044c \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0432 \u0432\u043c\u0435\u0441\u0442\u043e \u0442\u0440\u0451\u0445, \u043f\u043e\u044d\u0442\u043e\u043c\u0443, \u0434\u043b\u044f \u043d\u0430\u0433\u043b\u044f\u0434\u043d\u043e\u0441\u0442\u0438, \u0433\u0440\u0430\u0444\u0438\u043a\u0438 \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u043b\u0438\u0441\u044c \u043d\u0430 \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u0435 \u0434\u0432\u0443\u043c\u044f \u0441\u043f\u043e\u0441\u043e\u0431\u0430\u043c\u0438:<\/p>\n<pre><code>          test2   test3   test4                  1 user  2 users 3 users         -------------------------               ------------------------- 1 user  |       |       |       |       test2   |       |       |       |         -------------------------               ------------------------- 2 users |       |       |       |       test3   |       |       |       |         -------------------------               ------------------------- 3 users |       |       |       |       test4   |       |       |       |         -------------------------               -------------------------<\/code><\/pre>\n<ul>\n<li>\n<p>\u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u043e\u0431\u043e\u0438\u0445 \u0431\u043b\u043e\u043a\u043d\u043e\u0442\u043e\u0432 \u0435\u0441\u0442\u044c \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u2014 figures.ipynb \u0438 figures_alt.ipynb<\/p>\n<\/li>\n<\/ul>\n<h3>\u0410\u043d\u0430\u043b\u0438\u0437 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 \u0438 \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0435 \u0433\u0440\u0430\u0444\u0438\u043a\u0438<\/h3>\n<h4>\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u0432\u0432\u043e\u0434\u0430 \u0438 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u043d\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440<\/h4>\n<p>\u041f\u043e\u0436\u0430\u043b\u0443\u0439, \u043e\u0434\u0438\u043d \u0438\u0437 \u0441\u0430\u043c\u044b\u0445 \u0432\u0430\u0436\u043d\u044b\u0445, \u043d\u0430\u0440\u044f\u0434\u0443 \u0441 \u0447\u0430\u0441\u0442\u043e\u0442\u043e\u0439 \u043a\u0430\u0434\u0440\u043e\u0432, \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0435\u0439 \u0441 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f.&nbsp;<a href=\"https:\/\/docs.microsoft.com\/en-us\/windows-server\/remote\/remote-desktop-services\/rds-rdsh-performance-counters\">\u0418\u0437\u043c\u0435\u0440\u044f\u0435\u0442<\/a>&nbsp;\u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0443\u044e \u0440\u0430\u0437\u043d\u0438\u0446\u0443 \u043c\u0435\u0436\u0434\u0443 \u0442\u0435\u043c, \u043a\u043e\u0433\u0434\u0430 \u0432\u0432\u043e\u0434 \u043f\u043e\u043c\u0435\u0449\u0430\u0435\u0442\u0441\u044f \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0438 \u043a\u043e\u0433\u0434\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0435\u0433\u043e \u0432 \u0442\u0440\u0430\u0434\u0438\u0446\u0438\u043e\u043d\u043d\u043e\u043c \u0446\u0438\u043a\u043b\u0435 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439.<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u0418\u043d\u0442\u0435\u0440\u0435\u0441\u0435\u043d \u043e\u043d \u0435\u0449\u0451 \u0442\u0435\u043c, \u0447\u0442\u043e \u0432 \u0442\u0435\u0441\u0442\u0435 &#8216;3D BenchMark&#8217; \u044d\u0442\u043e\u0442 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0441\u044f \u0430\u043d\u043e\u043c\u0430\u043b\u044c\u043d\u043e \u0432\u044b\u0441\u043e\u043a\u0438\u043c: \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0438\u0437\u043c\u0435\u0440\u044f\u043b\u0430\u0441\u044c&nbsp;<strong>\u0441\u0435\u043a\u0443\u043d\u0434\u0430\u043c\u0438<\/strong>&nbsp;\u0434\u043b\u044f \u0434\u0432\u0443\u0445 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0441\u0435\u0430\u043d\u0441\u043e\u0432 \u0438&nbsp;<strong>\u0434\u0435\u0441\u044f\u0442\u043a\u0430\u043c\u0438<\/strong>&nbsp;\u0441\u0435\u043a\u0443\u043d\u0434 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0442\u0440\u0451\u0445 \u0441\u0435\u0430\u043d\u0441\u043e\u0432! \u0412 \u043d\u043e\u0440\u043c\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u0438\u0437\u043c\u0435\u0440\u044f\u0435\u0442\u0441\u044f \u0432 \u043c\u0438\u043b\u043b\u0438\u0441\u0435\u043a\u0443\u043d\u0434\u0430\u0445.  <\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u0414\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u0430 \u0441 \u0442\u0430\u043a\u0438\u043c \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u043c \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0432 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u0430 \u0434\u043b\u044f \u043b\u0443\u0447\u0448\u0435\u0439 \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u0430\u043d\u043e\u043c\u0430\u043b\u0438\u0438. \u041f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u044b \u0431\u0443\u0434\u0443\u0442 \u0441 \u0434\u0440\u0443\u0433\u0438\u043c \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u043c \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0432, &#171;\u0442\u0435\u0441\u0442\u044b \u0432 \u0440\u044f\u0434&#187;, \u0434\u043b\u044f \u0431\u043e\u043b\u0435\u0435 \u043d\u0430\u0433\u043b\u044f\u0434\u043d\u043e\u0439 \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u0438 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0435\u0439 \u043f\u0440\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0441\u0435\u0430\u043d\u0441\u043e\u0432.<\/p>\n<p>\u0412\u043e\u0442 \u0442\u0430\u043a \u0442\u0435 \u0436\u0435 \u0441\u0430\u043c\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u043f\u0440\u0438 \u0442\u0430\u043a\u043e\u043c \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0438:<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u0412 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0439 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u043f\u043e \u0434\u0438\u0430\u0433\u043d\u043e\u0441\u0442\u0438\u043a\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0435\u0441\u0442\u044c&nbsp;<a href=\"https:\/\/docs.microsoft.com\/en-us\/windows-server\/remote\/remote-desktop-services\/rds-rdsh-performance-counters#counters-used-in-an-overloaded-system\">\u043f\u0440\u0438\u043c\u0435\u0440<\/a>, \u043a\u043e\u0433\u0434\u0430 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0432\u0432\u043e\u0434\u0430 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0438\u0437-\u0437\u0430 \u0432\u043e\u0437\u0440\u0430\u0441\u0442\u0430\u044e\u0449\u0435\u0439 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043d\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 \u043f\u0440\u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 \u043d\u043e\u0432\u044b\u0445 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439. \u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044d\u0442\u043e \u043d\u0435 \u043e\u0431\u044a\u044f\u0441\u043d\u044f\u0435\u0442 \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u0435 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0438 \u0432\u0432\u043e\u0434\u0430 \u043d\u0430 \u0442\u0440\u0438-\u0447\u0435\u0442\u044b\u0440\u0435 \u043f\u043e\u0440\u044f\u0434\u043a\u0430: \u0441\u0447\u0451\u0442\u0447\u0438\u043a \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u0445 60% \u0438 \u0434\u0430\u0436\u0435 \u0441\u043d\u0438\u0437\u0438\u043b\u0441\u044f \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0442\u0440\u0451\u0445 \u0441\u0435\u0430\u043d\u0441\u043e\u0432. \u0414\u0440\u0443\u0433\u0438\u0435 \u043c\u0435\u0442\u0440\u0438\u043a\u0438, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0438 \u0441\u0435\u0442\u0435\u0432\u044b\u0435, \u0442\u043e\u0436\u0435 \u043e\u0441\u0442\u0430\u043b\u0438\u0441\u044c \u0432 \u043d\u043e\u0440\u043c\u0435.  <\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u0410 \u0443\u0442\u0438\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430 \u043e\u043a\u0430\u0437\u0430\u043b\u0430\u0441\u044c \u0432\u044b\u0448\u0435.  <\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<h4>\u0427\u0430\u0441\u0442\u043e\u0442\u0430 \u043a\u0430\u0434\u0440\u043e\u0432<\/h4>\n<p>\u0412 3D \u0442\u0435\u0441\u0442\u0435 \u0447\u0430\u0441\u0442\u043e\u0442\u0430 \u043a\u0430\u0434\u0440\u043e\u0432 \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u043e \u0437\u0430\u0432\u0438\u0441\u0435\u043b\u0430 \u043e\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439, \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0432\u0448\u0438\u0445 \u0431\u0435\u043d\u0447\u043c\u0430\u0440\u043a.<\/p>\n<p>\u0414\u0432\u0430 \u0434\u0440\u0443\u0433\u0438\u0445 \u0442\u0435\u0441\u0442\u0430 \u043f\u043e\u043a\u0430\u0437\u0430\u043b\u0438 \u0445\u043e\u0440\u043e\u0448\u0443\u044e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0434\u043b\u044f \u0434\u0432\u0443\u0445 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u0435\u0441\u0441\u0438\u0439, \u0430 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0442\u0440\u0451\u0445 \u0441\u0435\u0430\u043d\u0441\u043e\u0432 \u0443\u0436\u0435 \u043d\u0435 \u0445\u0432\u0430\u0442\u0430\u043b\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430.<\/p>\n<p>\u0412 \u043f\u0435\u0440\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0440\u0438 \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u043d\u0438\u0438 \u0440\u043e\u043b\u0438\u043a\u0430&nbsp;<a href=\"https:\/\/www.videvo.net\/video\/flying-through-forest-1\/4651\/\">&#171;Flying Through Forest 1&#187;<\/a>&nbsp;\u043c\u044b \u0432\u0438\u0434\u0435\u043b\u0438 \u043f\u0440\u043e\u0432\u0430\u043b\u044b \u0434\u043e 20-15 fps, \u043d\u043e \u0442\u043e\u0433\u0434\u0430 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u0430\u044f \u043c\u0430\u0448\u0438\u043d\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u0432\u0430 \u044f\u0434\u0440\u0430. \u041f\u043e\u0441\u043b\u0435 \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u044f vCPU \u0434\u043e 6 \u044f\u0434\u0435\u0440 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c fps \u044f\u0432\u043d\u043e \u0441\u0442\u0430\u043b \u043b\u0443\u0447\u0448\u0435 \u0434\u043b\u044f \u043e\u0434\u043d\u043e\u0433\u043e-\u0434\u0432\u0443\u0445 \u0441\u0435\u0430\u043d\u0441\u043e\u0432 \u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0442\u0440\u0451\u0445 \u0441\u0435\u0430\u043d\u0441\u043e\u0432 \u043e\u043d \u0441\u043d\u043e\u0432\u0430 \u043f\u0440\u043e\u0441\u0435\u043b.<\/p>\n<p>Youtube-\u0442\u0435\u0441\u0442 \u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u043b \u043e\u0442\u043b\u0438\u0447\u043d\u044b\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b, \u043f\u043e\u043a\u0430 \u043d\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043b\u0441\u044f \u0442\u0440\u0435\u0442\u0438\u0439<\/p>\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-321782","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/321782","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=321782"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/321782\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=321782"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=321782"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=321782"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}