diff options
author | igorpopov1407 <igorpopov1407@yandex-team.com> | 2023-03-15 12:51:07 +0300 |
---|---|---|
committer | igorpopov1407 <igorpopov1407@yandex-team.com> | 2023-03-15 12:51:07 +0300 |
commit | 7a343b35aea0c6cda407a7f0f11a2a494c8125b8 (patch) | |
tree | cf604a983ad5ae9271d9a2ad7418a37a4a61b092 | |
parent | 8f966ca56ac29e6faa9d98f99d31d66bd99a2720 (diff) | |
download | ydb-7a343b35aea0c6cda407a7f0f11a2a494c8125b8.tar.gz |
Translation:
-rw-r--r-- | ydb/docs/en/core/_assets/pdisklogload.svg | 3 | ||||
-rw-r--r-- | ydb/docs/en/core/_includes/load-actors-params.md | 1 | ||||
-rw-r--r-- | ydb/docs/en/core/concepts/datamodel/_includes/table.md | 6 | ||||
-rw-r--r-- | ydb/docs/en/core/development/load-actors-key-value.md | 2 | ||||
-rw-r--r-- | ydb/docs/en/core/development/load-actors-kqp.md | 125 | ||||
-rw-r--r-- | ydb/docs/en/core/development/load-actors-memory.md | 50 | ||||
-rw-r--r-- | ydb/docs/en/core/development/load-actors-overview.md | 24 | ||||
-rw-r--r-- | ydb/docs/en/core/development/load-actors-pdisk-log.md | 80 | ||||
-rw-r--r-- | ydb/docs/en/core/development/load-actors-pdisk-read.md | 71 | ||||
-rw-r--r-- | ydb/docs/en/core/development/load-actors-pdisk-write.md | 89 | ||||
-rw-r--r-- | ydb/docs/en/core/development/load-actors-stop.md | 51 | ||||
-rw-r--r-- | ydb/docs/en/core/development/load-actors-storage.md | 172 | ||||
-rw-r--r-- | ydb/docs/en/core/development/load-actors-vdisk.md | 2 | ||||
-rw-r--r-- | ydb/docs/ru/core/development/load-actors-overview.md | 2 |
14 files changed, 322 insertions, 356 deletions
diff --git a/ydb/docs/en/core/_assets/pdisklogload.svg b/ydb/docs/en/core/_assets/pdisklogload.svg new file mode 100644 index 00000000000..e0eae54ecc9 --- /dev/null +++ b/ydb/docs/en/core/_assets/pdisklogload.svg @@ -0,0 +1,3 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="751px" height="491px" viewBox="-0.5 -0.5 751 491" style="background-color: rgb(255, 255, 255);"><defs/><g><rect x="0" y="0" width="750" height="490" fill="none" stroke="none" pointer-events="all"/><rect x="500" y="220.62" width="40" height="20" fill="#6c8ebf" stroke="rgb(0, 0, 0)" pointer-events="all"/><rect x="420" y="220.62" width="80" height="20" fill="#6c8ebf" stroke="#000000" pointer-events="all"/><path d="M 470 160.62 L 465 160.62 Q 460 160.62 460 170.62 L 460 190 Q 460 200 455 200 L 452.5 200 Q 450 200 455 200 L 457.5 200 Q 460 200 460 210 L 460 229.37 Q 460 239.37 465 239.37 L 470 239.37" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="translate(460,0)scale(-1,1)translate(-460,0)rotate(90,460,200)" pointer-events="all"/><rect x="430" y="160.62" width="60" height="30" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 58px; height: 1px; padding-top: 176px; margin-left: 431px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">SizeInterval<br />VDisk1</div></div></div></foreignObject><text x="460" y="179" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">SizeInterv...</text></switch></g><path d="M 530 200 L 510 200" fill="none" stroke="rgb(0, 0, 0)" stroke-width="2" stroke-miterlimit="10" stroke-dasharray="2 6" pointer-events="stroke"/><path d="M 490 90 L 485 90 Q 480 90 480 100 L 480 140 Q 480 150 475 150 L 472.5 150 Q 470 150 475 150 L 477.5 150 Q 480 150 480 160 L 480 200 Q 480 210 485 210 L 490 210" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="translate(480,0)scale(-1,1)translate(-480,0)rotate(90,480,150)" pointer-events="all"/><rect x="425" y="110.93" width="110" height="30" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 108px; height: 1px; padding-top: 126px; margin-left: 426px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">BurstSize VDisk1</div></div></div></foreignObject><text x="480" y="130" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">BurstSize VDisk1</text></switch></g><path d="M 529.54 2.65 L 524.54 2.65 Q 519.54 2.65 519.54 12.65 L 519.54 91.56 Q 519.54 101.56 514.54 101.56 L 512.04 101.56 Q 509.54 101.56 514.54 101.56 L 517.04 101.56 Q 519.54 101.56 519.54 111.56 L 519.54 190.47 Q 519.54 200.47 524.54 200.47 L 529.54 200.47" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="translate(519.54,0)scale(-1,1)translate(-519.54,0)rotate(90,519.54,101.56)" pointer-events="all"/><rect x="490" y="60" width="60" height="30" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 58px; height: 1px; padding-top: 75px; margin-left: 491px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">BurstInterval<br />VDisk1</div></div></div></foreignObject><text x="520" y="79" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">BurstInter...</text></switch></g><path d="M 550 -70 L 545 -70 Q 540 -70 540 -60 L 540 40 Q 540 50 535 50 L 532.5 50 Q 530 50 535 50 L 537.5 50 Q 540 50 540 60 L 540 160 Q 540 170 545 170 L 550 170" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="translate(540,0)scale(-1,1)translate(-540,0)rotate(90,540,50)" pointer-events="all"/><path d="M 650 139.8 L 630 139.8" fill="none" stroke="rgb(0, 0, 0)" stroke-width="2" stroke-miterlimit="10" stroke-dasharray="2 6" pointer-events="stroke"/><rect x="472.81" y="19.99" width="134.37" height="30" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 132px; height: 1px; padding-top: 35px; margin-left: 474px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">StorageDuration VDisk1</div></div></div></foreignObject><text x="540" y="39" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">StorageDuration VDisk1</text></switch></g><rect x="540" y="220.62" width="80" height="20" fill="#dae8fc" stroke="#000000" pointer-events="all"/><rect x="620" y="220.62" width="40" height="20" fill="#6c8ebf" stroke="rgb(0, 0, 0)" pointer-events="all"/><rect x="100" y="240.62" width="40" height="20" fill="#82b366" stroke="rgb(0, 0, 0)" pointer-events="all"/><rect x="20" y="240.62" width="80" height="20" fill="#82b366" stroke="#000000" pointer-events="all"/><rect x="140" y="240.62" width="280" height="20" fill="#f5f5f5" stroke="#000000" pointer-events="all"/><path d="M 70 240.62 L 65 240.62 Q 60 240.62 60 250.62 L 60 269.99 Q 60 279.99 55 279.99 L 52.5 279.99 Q 50 279.99 55 279.99 L 57.5 279.99 Q 60 279.99 60 289.99 L 60 309.37 Q 60 319.37 65 319.37 L 70 319.37" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="translate(60,0)scale(-1,1)translate(-60,0)rotate(-90,60,279.99)" pointer-events="all"/><rect x="30" y="275" width="60" height="58.75" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 58px; height: 1px; padding-top: 304px; margin-left: 31px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">SizeInterval<br />VDisk2</div></div></div></foreignObject><text x="60" y="308" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">SizeInterv...</text></switch></g><path d="M 130 279.8 L 110 279.8" fill="none" stroke="rgb(0, 0, 0)" stroke-width="2" stroke-miterlimit="10" stroke-dasharray="2 6" pointer-events="stroke"/><path d="M 90 270.62 L 85 270.62 Q 80 270.62 80 280.62 L 80 320.62 Q 80 330.62 75 330.62 L 72.5 330.62 Q 70 330.62 75 330.62 L 77.5 330.62 Q 80 330.62 80 340.62 L 80 380.62 Q 80 390.62 85 390.62 L 90 390.62" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="translate(80,0)scale(-1,1)translate(-80,0)rotate(-90,80,330.62)" pointer-events="all"/><path d="M 310.93 100.93 L 305.93 100.93 Q 300.93 100.93 300.93 110.93 L 300.93 370.93 Q 300.93 380.93 295.93 380.93 L 293.43 380.93 Q 290.93 380.93 295.93 380.93 L 298.43 380.93 Q 300.93 380.93 300.93 390.93 L 300.93 650.93 Q 300.93 660.93 305.93 660.93 L 310.93 660.93" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="translate(300.93,0)scale(-1,1)translate(-300.93,0)rotate(-90,300.93,380.93)" pointer-events="all"/><rect x="270.93" y="390.62" width="60" height="30" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 58px; height: 1px; padding-top: 406px; margin-left: 272px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">BurstInterval<br />VDisk2</div></div></div></foreignObject><text x="301" y="409" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">BurstInter...</text></switch></g><path d="M 349.7 110.93 L 344.7 110.93 Q 339.7 110.93 339.7 120.93 L 339.7 420.93 Q 339.7 430.93 334.7 430.93 L 332.2 430.93 Q 329.7 430.93 334.7 430.93 L 337.2 430.93 Q 339.7 430.93 339.7 440.93 L 339.7 740.93 Q 339.7 750.93 344.7 750.93 L 349.7 750.93" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="translate(339.7,0)scale(-1,1)translate(-339.7,0)rotate(-90,339.7,430.93)" pointer-events="all"/><path d="M 627.82 329.83 L 607.82 329.83" fill="none" stroke="rgb(0, 0, 0)" stroke-width="2" stroke-miterlimit="10" stroke-dasharray="2 6" pointer-events="stroke"/><rect x="272.52" y="440.93" width="134.37" height="30" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 132px; height: 1px; padding-top: 456px; margin-left: 274px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">StorageDuration VDisk2</div></div></div></foreignObject><text x="340" y="460" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">StorageDuration VDisk2</text></switch></g><rect x="25" y="339.37" width="110" height="30" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 108px; height: 1px; padding-top: 354px; margin-left: 26px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">BurstSize VDisk2</div></div></div></foreignObject><text x="80" y="358" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">BurstSize VDisk2</text></switch></g><rect x="580" y="240.62" width="80" height="20" fill="#82b366" stroke="rgb(0, 0, 0)" pointer-events="all"/><rect x="420" y="240.62" width="160" height="20" fill="#d5e8d4" stroke="#000000" pointer-events="all"/><path d="M 290 60.62 L 285 60.62 Q 280 60.62 280 70.62 L 280 190 Q 280 200 275 200 L 272.5 200 Q 270 200 275 200 L 277.5 200 Q 280 200 280 210 L 280 329.37 Q 280 339.37 285 339.37 L 290 339.37" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="translate(280,0)scale(-1,1)translate(-280,0)rotate(90,280,200)" pointer-events="all"/><rect x="210" y="160.62" width="140" height="30" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 138px; height: 1px; padding-top: 176px; margin-left: 211px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">Data that is being deleted</div></div></div></foreignObject><text x="280" y="179" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">Data that is being dele...</text></switch></g><path d="M 20 239.87 L 678.33 239.87 L 678.33 230.62 L 700 240.62 L 678.33 250.62 L 678.33 241.37 L 20 241.37 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><rect x="670" y="190.62" width="60" height="30" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 58px; height: 1px; padding-top: 206px; margin-left: 671px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">Timeline,<br />bytes</div></div></div></foreignObject><text x="700" y="209" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">Timeline,...</text></switch></g></g><switch><g requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"/><a transform="translate(0,-5)" xlink:href="https://www.diagrams.net/doc/faq/svg-export-text-problems" target="_blank"><text text-anchor="middle" font-size="10px" x="50%" y="100%">Text is not SVG - cannot display</text></a></switch></svg>
\ No newline at end of file diff --git a/ydb/docs/en/core/_includes/load-actors-params.md b/ydb/docs/en/core/_includes/load-actors-params.md new file mode 100644 index 00000000000..c18b2b776ed --- /dev/null +++ b/ydb/docs/en/core/_includes/load-actors-params.md @@ -0,0 +1 @@ +The basic actor parameters are described below. For the full list of parameters, see the [load_test.proto](https://github.com/ydb-platform/ydb/blob/main/ydb/core/protos/load_test.proto) file in the {{ ydb-short-name }} Git repository. diff --git a/ydb/docs/en/core/concepts/datamodel/_includes/table.md b/ydb/docs/en/core/concepts/datamodel/_includes/table.md index fb8b95007de..b10c1c19542 100644 --- a/ydb/docs/en/core/concepts/datamodel/_includes/table.md +++ b/ydb/docs/en/core/concepts/datamodel/_includes/table.md @@ -26,7 +26,7 @@ A split or a merge usually takes about 500 milliseconds. During this time, the d The following table partitioning parameters are defined in the data schema: -#### AUTO_PARTITIONING_BY_SIZE +#### AUTO_PARTITIONING_BY_SIZE {#auto-part-by-load} * Type: `Enum` (`ENABLED`, `DISABLED`). * Default value: `ENABLED`. @@ -143,11 +143,11 @@ Each column group has a unique name within a table. You can set the composition A column family may contain any number of columns of its table, including none. Each table column can belong to a single column group (that is, column groups can't overlap). Column groups are set up when creating a table, but can be modified later. -Each table has a `default` column group that includes all the columns that don't belong to any other column group. Primary-key columns are always in the default column group and can't be moved to another group. +Each table has a `default` column group that includes all the columns that don't belong to any other column group. Primary-key columns are always in the default column group and can't be moved to another group. Column groups are assigned attributes that affect data storage: -* The used data storage device type (SSD or HDD, availability depends on the {{ ydb-short-name }} cluster configuration). +* The type of the data storage device used (SSD or HDD, availability depends on the {{ ydb-short-name }} cluster configuration). * Data compression mode (without compression or compression using the [LZ4](https://en.wikipedia.org/wiki/LZ4_(compression_algorithm)) algorithm). Attributes for a column group are set when creating a table (for example, they can be explicitly set for a default column group) and changed afterwards. Changes in storage attributes aren't applied to the data immediately, but later, at manual or automatic LSM compaction. diff --git a/ydb/docs/en/core/development/load-actors-key-value.md b/ydb/docs/en/core/development/load-actors-key-value.md index 6e35d3ba824..e96671fac32 100644 --- a/ydb/docs/en/core/development/load-actors-key-value.md +++ b/ydb/docs/en/core/development/load-actors-key-value.md @@ -4,7 +4,7 @@ Loads a key-value tablet. {% include notitle [addition](../_includes/addition.md) %} -## Actor specification {#proto} +## Actor configuration {#options} ```proto message TKeyValueLoad { diff --git a/ydb/docs/en/core/development/load-actors-kqp.md b/ydb/docs/en/core/development/load-actors-kqp.md index 1ab0838c559..ba433176fff 100644 --- a/ydb/docs/en/core/development/load-actors-kqp.md +++ b/ydb/docs/en/core/development/load-actors-kqp.md @@ -1,110 +1,49 @@ # KqpLoad -Generates a load on the Query Processor layer and loads all {{ ydb-short-name }} cluster components. The load generated by the actor is similar to that from the [workload](../reference/ydb-cli/commands/workload/index.md) {{ ydb-short-name }} CLI subcommand, but it's generated from within the cluster. Two types of load can be run: +Runs general performance testing for the {{ ydb-short-name }} cluster by loading all components via the Query Processor layer. The load is similar to that from the [workload](../reference/ydb-cli/commands/workload/index.md) {{ ydb-short-name }} CLI subcommand, but it is generated from within the cluster. + +You can run two types of load: * **Stock**: Simulates a warehouse of an online store: creates multi-product orders, gets a list of orders per customer. * **Key-value**: Uses the DB as a key-value store. -As a result of the test, the number of successful transactions per second, the number of transaction execution retries, and the number of errors are output. - -{% include notitle [addition](../_includes/addition.md) %} - -## Actor specification {#proto} - -```proto -message TKqpLoad { - message TStockWorkload { - optional uint64 ProductCount = 1 [default = 100]; - optional uint64 Quantity = 2 [default = 1000]; - optional uint64 OrderCount = 3 [default = 100]; - optional uint64 Limit = 4 [default = 10]; - optional bool PartitionsByLoad = 5 [default = true]; - } - message TKvWorkload { - optional uint64 InitRowCount = 1 [default = 1000]; - optional bool PartitionsByLoad = 2 [default = true]; - optional uint64 MaxFirstKey = 3 [default = 18446744073709551615]; - optional uint64 StringLen = 4 [default = 8]; - optional uint64 ColumnsCnt = 5 [default = 2]; - optional uint64 RowsCnt = 6 [default = 1]; - } - optional uint64 Tag = 1; - optional uint32 DurationSeconds = 2; - optional uint32 WindowDuration = 3; - optional string WorkingDir = 4; - optional uint32 NumOfSessions = 5; - optional bool IncreaseSessions = 11; - optional bool DeleteTableOnFinish = 6; - optional uint32 UniformPartitionsCount = 7; - optional uint32 WorkloadType = 8; - oneof Workload { - TStockWorkload Stock = 9; - TKvWorkload Kv = 10; - } -} -``` +Before this test, the necessary tables are created. After it's completed, they are deleted. ## Actor parameters {#options} -| Parameter | Description | ---- | --- -| `TStockWorkload[]` | [Stock load parameters](#stock-workload). | -| `TKvWorkload[]` | [Key-value load parameters](#kv-workload). | -| `Tag` | Load tag. If not specified, the tag is assigned automatically.<br>Type: `uint64`.<br>Optional. | -| `DurationSeconds` | Test duration in seconds.<br>Type: `uint32`.<br>Required. | -| `WindowDuration` | Statistics aggregation window duration.<br>Type: `uint32`.<br>Required. | -| `WorkingDir` | Path to the directory to create test tables in.<br>Type: `string`.<br>Required. | -| `NumOfSessions` | The number of parallel threads creating the load. Each thread writes data to its own session.<br>Type: `uint32`.<br>Required. | -| `DeleteTableOnFinish` | Indicates whether to delete the tables after the load stops. For example, it may be useful to Leave tables in a scenario where it takes a long time to pre-create a large table and run further (reading) tests.<br>Type: `bool`.<br>Required. | -| `UniformPartitionsCount` | The number of partitions created in test tables.<br>Type: `uint32`.<br>Required. | -| `WorkloadType` | Lets you select the type of load.<br>Key-Value:<ul><li>`0`: UpsertRandom.</li><li>`1`: InsertRandom.</li><li>`2`: SelectRandom.</li></ul>Stock:<ul><li>`0`: InsertRandomOrder.</li><li>`1`: SubmitRandomOrder.</li><li>`2`: SubmitSameOrder.</li><li>`3`: GetRandomCustomerHistory.</li><li>`4`: GetCustomerHistory.</li></ul>Type: `uint32`.<br>Required. | -| `Workload` | Possible values:<ul><li>`TStockWorkload Stock`: Stock load type.</li><li>`TKvWorkload Kv`: Key-value load type.</li></ul> | - -### TStockWorkload {#stock-workload} - -| Parameter | Description | ---- | --- -| `ProductCount` | The number of products.<br>Type: `uint64`.<br>Default value: `100`.<br>Optional. | -| `Quantity` | Quantity of each product in stock.<br>Type: `uint64`.<br>Default value: `1000`.<br>Optional. | -| `OrderCount` | Initial number of orders in the database.<br>Type: `uint64`.<br>Default value: `100`.<br>Optional. | -| `Limit` | Minimum number of shards for tables.<br>Type: `uint64`.<br>Default value: `10`.<br>Optional. | -| `PartitionsByLoad` | Enabling/disabling auto-sharding.<br>Type: `bool`.<br>Default value: `true`.<br>Optional. | - -### TKvWorkload {#kv-workload} +{% include [load-actors-params](../_includes/load-actors-params.md) %} | Parameter | Description | --- | --- -| `InitRowCount` | Before a load is generated, the load actor writes the specified number of rows to the table.<br>Type: `uint64`.<br>Default value: `1000`.<br>Optional. | -| `PartitionsByLoad` | Indicates whether to add the `AUTO_PARTITIONING_BY_LOAD` attribute to the test table.<br>Type: `bool`.<br>Default value: `true`.<br>Optional. | -| `MaxFirstKey` | Limits the range of key values. Created to make sure that, under read load, random keys fall within the range of table keys.<br>Type: `uint64`.<br>Default value: `18446744073709551615`.<br>Optional. | -| `StringLen` | Length of the `value` string.<br>Type: `uint64`.<br>Default value: `8`.<br>Optional. | -| `ColumnsCnt` | Number of columns to use in the table.<br>Type: `uint64`.<br>Default value: `2` (columns for the key and value).<br>Optional. | -| `RowsCnt` | Number of rows to insert/read per SQL query<br>Type: `uint64`.<br>Default value: `1`.<br>Optional. | +| `DurationSeconds` | Load duration in seconds. | +| `WindowDuration` | Statistics aggregation window duration. | +| `WorkingDir` | Path to the directory to create test tables in. | +| `NumOfSessions` | The number of parallel threads creating the load. Each thread writes data to its own session. | +| `DeleteTableOnFinish` | Set it to `False` if you do not want the created tables deleted after the load stops. This might be helpful when a large table is created upon the actor's first run, and then queries are made to that table. | +| `UniformPartitionsCount` | The number of partitions created in test tables. | +| `WorkloadType` | Type of load.<br>For Stock:<ul><li>`0`: InsertRandomOrder.</li><li>`1`: SubmitRandomOrder.</li><li>`2`: SubmitSameOrder.</li><li>`3`: GetRandomCustomerHistory.</li><li>`4`: GetCustomerHistory.</li></ul>For Key-Value:<ul><li>`0`: UpsertRandom.</li><li>`1`: InsertRandom.</li><li>`2`: SelectRandom.</li></ul> | +| `Workload` | Kind of load.<br>`Stock`:<ul><li>`ProductCount`: Number of products.</li><li>`Quantity`: Quantity of each product in stock.</li><li>`OrderCount`: Initial number of orders in the database.</li><li>`Limit`: Minimum number of shards for tables.</li></ul>`Kv`:<ul><li>`InitRowCount`: Before load is generated, the load actor writes the specified number of rows to the table.</li><li>`StringLen`: Length of the `value` string.</li><li>`ColumnsCnt`: Number of columns to use in the table.</li><li>`RowsCnt`: Number of rows to insert or read per SQL query.</li></ul> | ## Examples {#example} -Below is the specification of an actor that runs a stock load on the `/slice/db`, database by making simple UPSERT queries of 64 threads during 30 seconds. Before this test, the necessary tables are created. After it's completed, they are deleted. - -{% list tabs %} +The following actor runs a stock load on the `/slice/db` database by making simple UPSERT queries of `64` threads during `30` seconds. -- Embedded UI - - ```proto - KqpLoad: { - DurationSeconds: 30 - WindowDuration: 1 - WorkingDir: "/slice/db" - NumOfSessions: 64 - UniformPartitionsCount: 1000 - DeleteTableOnFinish: 1 - WorkloadType: 0 - Stock: { - ProductCount: 100 - Quantity: 1000 - OrderCount: 100 - Limit: 10 - } - } - ``` +```proto +KqpLoad: { + DurationSeconds: 30 + WindowDuration: 1 + WorkingDir: "/slice/db" + NumOfSessions: 64 + UniformPartitionsCount: 1000 + DeleteTableOnFinish: 1 + WorkloadType: 0 + Stock: { + ProductCount: 100 + Quantity: 1000 + OrderCount: 100 + Limit: 10 + } +} +``` -{% endlist %} +As a result of the test, the number of successful transactions per second, the number of transaction execution retries, and the number of errors are output. diff --git a/ydb/docs/en/core/development/load-actors-memory.md b/ydb/docs/en/core/development/load-actors-memory.md index 42aa619a3e2..36d671fe8b7 100644 --- a/ydb/docs/en/core/development/load-actors-memory.md +++ b/ydb/docs/en/core/development/load-actors-memory.md @@ -1,43 +1,29 @@ # MemoryLoad -Tests the performance of memory allocators. Allocates memory blocks of the specified size at certain intervals. +Allocates memory blocks of the specified size at certain intervals. After the load is removed, the allocated memory is released. Using this actor, you can test the logic, e.g., whether a certain trigger is fired when the [RSS]{% if lang == "en" %}(https://en.wikipedia.org/wiki/Resident_set_size){% endif %}{% if lang == "ru" %}(https://ru.wikipedia.org/wiki/Resident_set_size){% endif %} limit is reached. -{% include notitle [addition](../_includes/addition.md) %} +{% note info %} -## Actor specification {#proto} +This ad-hoc actor is used for testing specific functionality. This is not a load actor. It is designed to check whether something works properly. -```proto -message TMemoryLoad { - optional uint64 Tag = 1; - optional uint32 DurationSeconds = 2; - optional uint64 BlockSize = 3; - optional uint64 IntervalUs = 4; -} -``` -<!-- -## Параметры актора {#options} +{% endnote %} -Параметр | Описание +## Actor parameters {#options} + +| Parameter | Description | --- | --- -`Tag` | Тип: `uint64`. -`DurationSeconds` | Тип: `uint32`. -`BlockSize` | Тип: `uint64`. -`IntervalUs` | Тип: `uint64`. ---> +| `DurationSeconds` | Load duration in seconds. | +| `BlockSize` | Allocated block size in bytes. | +| `IntervalUs` | Interval between block allocations in microseconds. | ## Examples {#examples} -{% list tabs %} - -- CLI +The following actor allocates blocks of `1048576` bytes every `9000000` microseconds during `3600` seconds and takes up 32 GB while running: - ```proto - NodeId: 1 - Event: { MemoryLoad: { - DurationSeconds: 120 - BlockSize: 4096 - IntervalUs: 1000 - }} - ``` - -{% endlist %} +```proto +MemoryLoad: { + DurationSeconds: 3600 + BlockSize: 1048576 + IntervalUs: 9000000 +} +``` diff --git a/ydb/docs/en/core/development/load-actors-overview.md b/ydb/docs/en/core/development/load-actors-overview.md index 6ee1d2a10f3..4735539480e 100644 --- a/ydb/docs/en/core/development/load-actors-overview.md +++ b/ydb/docs/en/core/development/load-actors-overview.md @@ -17,6 +17,8 @@ With load actors, you can test both the entire system and its individual compone For example, you can generate a [load on Distributed Storage](load-actors-storage.md) without using tablet and Query Processor layers. This lets you test different system layers separately and find bottlenecks in an efficient way. By combining a variety of actor types, you can run different types of load. +{% include [release-candidate](../_includes/trunk.md) %} + ## Actor types {#load-actor-type} | Type | Description | @@ -28,24 +30,24 @@ For example, you can generate a [load on Distributed Storage](load-actors-storag | [PDiskWriteLoad](load-actors-pdisk-write.md) | Tests the performance of writes to the PDisk. | | [PDiskReadLoad](load-actors-pdisk-read.md) | Tests the performance of reads from the PDisk. | | [PDiskLogLoad](load-actors-pdisk-log.md) | Tests if cuts from the middle of the PDisk log are correct. | -| [MemoryLoad](load-actors-memory.md) | Tests the performance of memory allocators. | -| [Stop](load-actors-stop.md) | Using this actor, you can stop either all or only the specified actors. | +| [MemoryLoad](load-actors-memory.md) | Allocates memory, useful when testing the logic. | +| [Stop](load-actors-stop.md) | Stops either all or only the specified actors. | -## Running a load {load-actor-start} +## Running a load {#load-actor-start} -You can run a load using the following methods: +You can run load using the following tools: -* Cluster Embedded UI, lets you create, based on a specification, and start a load actor either on the current node or all tenant nodes at once. -* The `ydbd` utility, lets you send the actor specification to any cluster node indicating the nodes to create and run an actor on. +* Cluster Embedded UI: Allows you to create, based on a configuration, and start a load actor either on the current node or all tenant nodes at once. +* The `ydbd` utility: Allows you to send the actor configuration to any cluster node specifying the nodes to create and run the actor on. -The use case described below shows how to create and run the KqpLoad actor. The actor accesses the `/slice/db` database as a key-value store using 64 threads with a 30-second load. Before the test, the actor creates the necessary tables and deletes them once the test is completed. When being created, the actor is assigned an automatically generated tag. The same tag will be assigned to the test result. +The use case described below shows how to create and run the KqpLoad actor. The actor accesses the `/slice/db` database as a key-value store using 64 threads with a 30-second load. Before the test, the actor creates the necessary tables and deletes them once the test is completed. When being created, the actor is automatically assigned a tag. The same tag will be assigned to the test result. {% list tabs %} - Embedded UI 1. Open the page for managing load actors on the desired node (for example, `http://<address>:8765/actors/load`, where `address` is the address of the cluster node to run the load on). - 1. Paste the actor specification into the input/output field: + 1. Paste the actor configuration into the input/output field: ```proto KqpLoad: { @@ -82,7 +84,7 @@ The use case described below shows how to create and run the KqpLoad actor. The - CLI - 1. Create a file with an actor specification: + 1. Create an actor configuration file: ```proto NodeId: 1 @@ -118,7 +120,7 @@ The use case described below shows how to create and run the KqpLoad actor. The ... ``` - * `Event`: Actor specification. + * `Event`: Actor configuration. 1. Start the actor: @@ -127,7 +129,7 @@ The use case described below shows how to create and run the KqpLoad actor. The ``` * `endpoint`: Node gRPC endpoint (for example, `grpc://<address>:<port>`, where `address` is the node address and `port` is the node gRPC port). - * `proto_file`: Path to the actor's specification file. + * `proto_file`: Path to the actor configuration file. {% endlist %} diff --git a/ydb/docs/en/core/development/load-actors-pdisk-log.md b/ydb/docs/en/core/development/load-actors-pdisk-log.md index 2409420ecc1..1ccc5a0f65a 100644 --- a/ydb/docs/en/core/development/load-actors-pdisk-log.md +++ b/ydb/docs/en/core/development/load-actors-pdisk-log.md @@ -1,34 +1,66 @@ # PDiskLogLoad -Tests cuts from the middle of the PDisk log. It's not loading and is mostly aimed to test the correctness. +All VDisks hosted on a certain PDisk log data about their own performance to the common PDisk log. VDisks gradually delete their obsolete data at the beginning of the log to free up disk space. Sometimes, after one VDisk completes logging data and before another one starts logging it, a section with useless obsolete data may appear. In this case, such data is deleted automatically, and the PDiskLogLoad actor will perform a test to check whether such an operation is running correctly. -{% include notitle [addition](../_includes/addition.md) %} +<center> -## Actor specification {#proto} + -```proto -message TPDiskLogLoad { - message TWorkerConfig { - optional NKikimrBlobStorage.TVDiskID VDiskId = 1; - optional uint32 MaxInFlight = 2; - - // Measurement units of all parameters is bytes - optional uint32 SizeIntervalMin = 3; - optional uint32 SizeIntervalMax = 4; - optional uint64 BurstInterval = 5; - optional uint64 BurstSize = 6; - optional uint64 StorageDuration = 7; - - optional uint64 MaxTotalBytesWritten = 8; - } +</center> + +{% note info %} + +This ad-hoc actor is used for testing specific functionality. This is not a load actor. It is designed to check whether something works properly. + +{% endnote %} + +## Actor parameters {#options} - optional uint64 Tag = 1; - optional uint32 PDiskId = 2; - optional uint64 PDiskGuid = 3; +{% include [load-actors-params](../_includes/load-actors-params.md) %} - optional uint32 DurationSeconds = 5; - repeated TWorkerConfig Workers = 7; +| Parameter | Description | +--- | --- +| `PDiskId` | ID of the Pdisk being loaded on the node. | +| `PDiskGuid` | Globally unique ID of the PDisk being loaded. | +| `VDiskId` | Parameters of the VDisk used to generate load.<ul><li>`GroupID`: Group ID.</li><li>`GroupGeneration`: Group generation.</li><li>`Ring`: Group ring ID.</li><li>`Domain`: Ring fail domain ID.</li><li>`VDisk`: Index of the VDisk in the fail domain.</li></ul> | +| `MaxInFlight` | Number of simultaneously processed requests. | +| `SizeIntervalMin` | Minimum size of log record in bytes. | +| `SizeIntervalMax` | Maximum size of log record in bytes. | +| `BurstInterval` | Interval between logging sessions in bytes. | +| `BurstSize` | Total amount of data to log per session, in bytes. | +| `StorageDuration` | Virtual time in bytes. Indicates how long the VDisk should store its data in the log. | +| `IsWardenlessTest` | Set it to `False` in case the PDiskReadLoad actor is run on the cluster; otherwise, e.g. when it is run during unit tests, set it to `True`. | - optional bool IsWardenlessTest = 8 [default = false]; +## Examples {#example} + +The following actor simulates the performance of two VDisks. The first VDisk logs a message of `65536` bytes every `65536` bytes and deletes data that exceeds `1048576` bytes. The second one writes `1024` bytes as messages of `128` bytes every `2147483647` bytes and deletes data that exceeds `2147483647` bytes. + +```proto +PDiskLogLoad: { + Tag: 1 + PDiskId: 1 + PDiskGuid: 12345 + DurationSeconds: 60 + Workers: { + VDiskId: {GroupID: 1 GroupGeneration: 5 Ring: 1 Domain: 1 VDisk: 1} + MaxInFlight: 1 + SizeIntervalMin: 65536 + SizeIntervalMax: 65536 + BurstInterval: 65536 + BurstSize: 65536 + StorageDuration: 1048576 + } + Workers: { + VDiskId: {GroupID: 2 GroupGeneration: 5 Ring: 1 Domain: 1 VDisk: 1} + MaxInFlight: 1 + SizeIntervalMin: 128 + SizeIntervalMax: 128 + BurstInterval: 2147483647 + BurstSize: 1024 + StorageDuration: 2147483647 + } + IsWardenlessTest: false } ``` + +The test passes if none of the cluster nodes got overloaded and the status of the PDisk in question is `Normal`. You can check this using the cluster Embedded UI. diff --git a/ydb/docs/en/core/development/load-actors-pdisk-read.md b/ydb/docs/en/core/development/load-actors-pdisk-read.md index 4a976c4920c..a60414511dc 100644 --- a/ydb/docs/en/core/development/load-actors-pdisk-read.md +++ b/ydb/docs/en/core/development/load-actors-pdisk-read.md @@ -1,29 +1,60 @@ # PDiskReadLoad -Generates a read-only load on the PDisk. Simulates the VDisk. The actor creates chunks on the specified PDisk, writes random data to them, and reads the data from them using the specified parameters. The test outputs the read performance in bytes per second. +Tests the performance of reads from the PDisk. The load is generated on behalf of a VDisk. The actor creates chunks on the specified PDisk, writes random data to them, and reads the data from them using the specified parameters. After the load stops, the data written by the actor is deleted. -{% include notitle [addition](../_includes/addition.md) %} +You can generate two types of load: -## Actor specification {#proto} +* _Continuous_: The actor ensures the specified number of requests are run concurrently. To generate continuous load, set a zero interval between requests (e.g., `IntervalMsMin: 0` and `IntervalMsMax: 0`), while keeping the `InFlightReads` parameter different from zero. +* _Interval_: The actor runs requests at preset intervals. To generate interval load, set a non-zero interval between requests, e.g., `IntervalMsMin: 10` and `IntervalMsMax: 100`. You can set the maximum number of in-flight requests using the `InFlightReads` parameter. If its value is `0`, their number is unlimited. + +## Actor parameters {#options} + +{% include [load-actors-params](../_includes/load-actors-params.md) %} + +| Parameter | Description | +--- | --- +| `PDiskId` | ID of the Pdisk being loaded on the node. | +| `PDiskGuid` | Globally unique ID of the PDisk being loaded. | +| `VDiskId` | The load is generated on behalf of a VDisk with the following parameters:<ul><li>`GroupID`: Group ID.</li><li>`GroupGeneration`: Group generation.</li><li>`Ring`: Group ring ID.</li><li>`Domain`: Ring fail domain ID.</li><li>`VDisk`: Index of the VDisk in the fail domain.</li></ul> | +| `Chunks` | Chunk parameters.<br>`Slots`: Number of slots per chunk, determines the write size.<br>You can specify multiple `Chunks`, in which case a specific chunk to read data from is selected based on its `Weight`. | +| `DurationSeconds` | Load duration in seconds. | +| `IntervalMsMin`,<br>`IntervalMsMax` | Minimum and maximum intervals between requests under interval load, in milliseconds. The interval value is selected randomly from the specified range. | +| `InFlightReads` | Number of simultaneously processed read requests. | +| `Sequential` | Type of reads.<ul><li>`True`: Sequential.</li><li>`False`: Random.</li></ul> | +| `IsWardenlessTest` | Set it to `False` in case the PDiskReadLoad actor is run on the cluster; otherwise, e.g. when it is run during unit tests, set it to `True`. | + +## Examples {#examples} + +The following actor reads data blocks of `32`MB during `120` seconds with `64` in-flight requests (continuous load): ```proto -message TPDiskReadLoad { - message TChunkInfo { - optional uint32 Slots = 1; // number of slots per chunk - optional uint32 Weight = 2; // probability weight +PDiskReadLoad: { + PDiskId: 1000 + PDiskGuid: 2258451612736857634 + VDiskId: { + GroupID: 11234 + GroupGeneration: 5 + Ring: 1 + Domain: 1 + VDisk: 3 } - optional uint64 Tag = 1; - optional uint32 PDiskId = 2; - optional uint64 PDiskGuid = 3; - optional NKikimrBlobStorage.TVDiskID VDiskId = 4; - repeated TChunkInfo Chunks = 5; - optional uint32 DurationSeconds = 6; - optional uint32 InFlightReads = 7; - optional bool Sequential = 9 [default = false]; - - optional uint32 IntervalMsMin = 10; - optional uint32 IntervalMsMax = 11; - - optional bool IsWardenlessTest = 13 [default = false]; + Chunks: { Slots: 4096 Weight: 1 } + Chunks: { Slots: 4096 Weight: 1 } + Chunks: { Slots: 4096 Weight: 1 } + Chunks: { Slots: 4096 Weight: 1 } + Chunks: { Slots: 4096 Weight: 1 } + Chunks: { Slots: 4096 Weight: 1 } + Chunks: { Slots: 4096 Weight: 1 } + Chunks: { Slots: 4096 Weight: 1 } + DurationSeconds: 120 + IntervalMsMin: 0 + IntervalMsMax: 0 + InFlightReads: 64 + Sequential: false + IsWardenlessTest: false } ``` + +When viewing test results, the following value should be of most interest to you: + +* `Average speed since start`: Average read speed since start, in MB/s, e.g., `1257.148154`. diff --git a/ydb/docs/en/core/development/load-actors-pdisk-write.md b/ydb/docs/en/core/development/load-actors-pdisk-write.md index cb964517961..c318f6327ff 100644 --- a/ydb/docs/en/core/development/load-actors-pdisk-write.md +++ b/ydb/docs/en/core/development/load-actors-pdisk-write.md @@ -1,39 +1,30 @@ # PDiskWriteLoad -Generates a write-only load on the PDisk. Simulates the VDisk. The actor creates chunks on the specified PDisk and writes random data with the specified parameters to them. The test outputs the write performance in bytes per second. +Tests the performance of writes to the PDisk. The load is generated on behalf of a VDisk. The actor creates chunks on the specified PDisk and writes random data to them. After the load stops, the data written by the actor is deleted. -{% include notitle [addition](../_includes/addition.md) %} +You can generate two types of load: -## Actor specification {#proto} +* _Continuous_: The actor ensures the specified number of requests are run concurrently. To generate a continuous load, set a zero interval between requests, e.g., `IntervalMsMin: 0` and `IntervalMsMax: 0`, while keeping the `InFlightWrites` parameter different from zero. +* _Interval_: The actor runs requests at preset intervals. To generate interval load, set a non-zero interval between requests, e.g., `IntervalMsMin: 10` and `IntervalMsMax: 100`. You can set the maximum number of in-flight requests using the `InFlightWrites` parameter. If its value is `0`, their number is unlimited. + +## Actor parameters {#options} + +{% include [load-actors-params](../_includes/load-actors-params.md) %} + +| Parameter | Description | +--- | --- +| `PDiskId` | ID of the Pdisk being loaded on the node. | +| `PDiskGuid` | Globally unique ID of the PDisk being loaded. | +| `VDiskId` | The load is generated on behalf of a VDisk with the following parameters:<ul><li>`GroupID`: Group ID.</li><li>`GroupGeneration`: Group generation.</li><li>`Ring`: Group ring ID.</li><li>`Domain`: Ring fail domain ID.</li><li>`VDisk`: Index of the VDisk in the fail domain.</li></ul> | +| `Chunks` | Chunk parameters.<br>`Slots`: Number of slots per chunk, determines the write size.<br>You can specify multiple `Chunks`, in which case a specific chunk to write data to is selected based on its `Weight`. | +| `DurationSeconds` | Load duration in seconds. | +| `IntervalMsMin`,<br>`IntervalMsMax` | Minimum and maximum intervals between requests under interval load, in milliseconds. The interval value is selected randomly from the specified range. | +| `InFlightWrites` | Number of simultaneously processed write requests. | +| `LogMode` | Logging mode. In `LOG_SEQUENTIAL` mode, data is first written to a chunk and then, once the write is committed, to a log. | +| `Sequential` | Type of writes.<ul><li>`True`: Sequential.</li><li>`False`: Random.</li></ul> | +| `IsWardenlessTest` | Set it to `False` in case the PDiskReadLoad actor is run on the cluster; otherwise, e.g. when it is run during unit tests, set it to `True`. | <!-- -```proto -enum ELogMode { - LOG_PARALLEL = 1; - LOG_SEQUENTIAL = 2; - LOG_NONE = 3; -} -message TPDiskWriteLoad { - message TChunkInfo { - optional uint32 Slots = 1; // number of slots per chunk - optional uint32 Weight = 2; // probability weight - } - optional uint64 Tag = 1; - optional uint32 PDiskId = 2; - optional uint64 PDiskGuid = 3; - optional NKikimrBlobStorage.TVDiskID VDiskId = 4; - repeated TChunkInfo Chunks = 5; - optional uint32 DurationSeconds = 6; - optional uint32 InFlightWrites = 7; - optional ELogMode LogMode = 8; - optional bool Sequential = 9 [default = true]; - optional uint32 IntervalMsMin = 10; - optional uint32 IntervalMsMax = 11; - optional bool Reuse = 12 [default = false]; - optional bool IsWardenlessTest = 13 [default = false]; -} -``` ---> ```proto enum ELogMode { @@ -70,3 +61,41 @@ message TPDiskWriteLoad { optional bool IsWardenlessTest = 13 [default = false]; // allows using them in tests with no NodeWarden } ``` + --> + +## Examples {#example} + +The following actor writes data blocks of `32` MB during `120` seconds with `64` in-flight requests (continuous load): + +```proto +PDiskWriteLoad: { + PDiskId: 1000 + PDiskGuid: 2258451612736857634 + VDiskId: { + GroupID: 11234 + GroupGeneration: 5 + Ring: 1 + Domain: 1 + VDisk: 3 + } + Chunks: { Slots: 4096 Weight: 1 } + Chunks: { Slots: 4096 Weight: 1 } + Chunks: { Slots: 4096 Weight: 1 } + Chunks: { Slots: 4096 Weight: 1 } + Chunks: { Slots: 4096 Weight: 1 } + Chunks: { Slots: 4096 Weight: 1 } + Chunks: { Slots: 4096 Weight: 1 } + Chunks: { Slots: 4096 Weight: 1 } + DurationSeconds: 120 + IntervalMsMin: 0 + IntervalMsMax: 0 + InFlightWrites: 64 + LogMode: LOG_SEQUENTIAL + Sequential: false + IsWardenlessTest: false +} +``` + +When viewing test results, the following value should be of most interest to you: + +* `Average speed since start`: Average write speed since start, in MB/s, e.g., `615.484013`. diff --git a/ydb/docs/en/core/development/load-actors-stop.md b/ydb/docs/en/core/development/load-actors-stop.md index c21893cee6d..21def5ea141 100644 --- a/ydb/docs/en/core/development/load-actors-stop.md +++ b/ydb/docs/en/core/development/load-actors-stop.md @@ -1,49 +1,28 @@ # Stop -Using this actor, you can stop either all or only the specified actors. - -## Actor specification {#proto} - -```proto -message TStop { - optional uint64 Tag = 1; - optional bool RemoveAllTags = 2; -} -``` +Using this command, you can stop either entire load or only the specified part of it. ## Actor parameters {#options} | Parameter | Description | --- | --- -| `Tag` | Load tag that can be set to stop a specific load. You can view the tag in the Embedded UI.<br>Type: `uint64`. | -| `RemoveAllTags` | Stop all load actors on the node.<br>Type: `bool`. | +| `Tag` | Tag of the load actor to stop. You can view the tag in the cluster Embedded UI. | +| `RemoveAllTags` | If this parameter value is set to `True`, all the load actors are stopped. | ## Examples {#examples} -{% list tabs %} - -- CLI - - Actor specification to be used to stop the load tagged `123` on the node with ID `1`: +The command below stops the load tagged `123`: - ```proto - NodeId: 1 - Event: { - Stop: { - Tag: 123 - } - } - ``` - - Actor specification to be used to stop all the load on the node with ID `1`: +```proto +Stop: { + Tag: 123 +} +``` - ```proto - NodeId: 1 - Event: { - Stop: { - RemoveAllTags: true - } - } - ``` +To stop the entire load, run this command: -{% endlist %} +```proto +Stop: { + RemoveAllTags: true +} +``` diff --git a/ydb/docs/en/core/development/load-actors-storage.md b/ydb/docs/en/core/development/load-actors-storage.md index 793015e0641..25d7e71fe65 100644 --- a/ydb/docs/en/core/development/load-actors-storage.md +++ b/ydb/docs/en/core/development/load-actors-storage.md @@ -1,114 +1,78 @@ # StorageLoad -Loads Distributed Storage without using tablet and Query Processor layers. The test outputs the performance of writes to Distributed Storage in blobs per second. +Tests the read/write performance to and from Distributed Storage. The load is generated on Distributed Storage directly without using any tablet and Query Processor layers. When testing write performance, the actor writes data to the specified VDisk group. To test read performance, the actor first writes data to the specified VDisk group and then reads the data. After the load is removed, all the data written by the actor is deleted. -{% include notitle [addition](../_includes/addition.md) %} +You can generate two types of load: -## Actor specification {#proto} +* _Continuous_: The actor ensures the specified number of requests are run concurrently. To generate a continuous load, set a zero interval between requests (e.g., `WriteIntervals: { Weight: 1.0 Uniform: { MinUs: 0 MaxUs: 0 } }`), while keeping the `MaxInFlightWriteRequests` parameter value different from zero. +* _Interval_: The actor runs requests at preset intervals. To generate an interval load, set a non-zero interval between requests, e.g., `WriteIntervals: { Weight: 1.0 Uniform: { MinUs: 50000 MaxUs: 50000 } }`. Maximum number of in-flight requests is set by the `InFlightReads` parameter. If its value is `0`, their number is unlimited. + +## Actor parameters {#options} + +{% include [load-actors-params](../_includes/load-actors-params.md) %} + +| Parameter | Description | +--- | --- +| ` DurationSeconds` | Load duration. | +| ` Tablets` | The load is generated on behalf of a tablet with the following parameters:<ul><li>` TabletId`: Tablet ID. It must be unique for each load actor.</li><li>` Channel`: Tablet channel.</li><li>` GroupId`: ID of the VDisk group to get loaded.</li><li>` Generation`: Tablet generation.</li></ul> | +| ` WriteSizes` | Size of the data to write. It is selected randomly for each request from the `Min`-`Max` range. You can set multiple `WriteSizes` ranges, in which case a value from a specific range will be selected based on its `Weight`. | +| ` WriteIntervals` | Interval between requests under interval load, in microseconds. It is selected randomly for each request from the `MinUs`-`MaxUs` range. You can set multiple `WriteIntervals` ranges, in which case a value from a specific range will be selected based on its `Weight`. | +| ` MaxInFlightWriteRequests` | Maximum number of simultaneously processed write requests. | +| ` ReadSizes` | Size of the data to read. It is selected randomly for each request from the `Min`-`Max` range. You can set multiple `ReadSizes` ranges, in which case a value from a specific range will be selected based on its `Weight`. | +| ` ReadIntervals` | Interval between requests under interval load, in microseconds. It is selected randomly for each request from the `MinUs`-`MaxUs` range. You can set multiple `ReadIntervals` ranges, in which case a value from a specific range will be selected based on its `Weight`. | +| ` MaxInFlightReadRequests` | Maximum number of simultaneously processed read requests. | +| ` FlushIntervals` | Interval between the requests to flush the data written by the StorageLoad actor, in microseconds. It is selected randomly from the `MinUs`-`MaxUs` range. You can set multiple `FlushIntervals` ranges, in which case a value from a specific range will be selected based on its `Weight`. | +| ` PutHandleClass` | Class of data writes to the disk subsystem. If the `TabletLog` value is set, the write operation has the highest priority. | +| ` GetHandleClass` | Class of data reads from the disk subsystem. If the `FastRead` is set, the read operation is performed with the highest speed possible. | + +## Examples {#examples} + +### Write load {#write} + +The following actor writes data to the group with the ID `2181038080` during `60` seconds. The size per write is `4096` bytes, the number of in-flight requests is no more than `256` (continuous load): ```proto -message TStorageLoad { - message TRequestInfo { - optional float SendTime = 1; - optional uint64 Type = 2; - optional uint32 Size = 3; - optional NKikimrBlobStorage.EPutHandleClass PutHandleClass = 4; +StorageLoad: { + DurationSeconds: 60 + Tablets: { + Tablets: { TabletId: 1000 Channel: 0 GroupId: 2181038080 Generation: 1 } + WriteSizes: { Weight: 1.0 Min: 4096 Max: 4096 } + WriteIntervals: { Weight: 1.0 Uniform: { MinUs: 0 MaxUs: 0 } } + MaxInFlightWriteRequests: 256 + FlushIntervals: { Weight: 1.0 Uniform: { MinUs: 10000000 MaxUs: 10000000 } } + PutHandleClass: TabletLog } - message TTabletInfo { - optional uint64 TabletId = 1; - optional uint32 Channel = 2; - optional uint32 GroupId = 3; - optional uint32 Generation = 4; - repeated TRequestInfo Requests = 5; - optional float ScriptedCycleDurationSec = 6; +} +``` + +When viewing test results, the following values should be of most interest to you: + +* ` Writes per second`: Number of writes per second, e.g., `28690.29`. +* ` Speed@ 100%`: 100 percentile of write speed in MB/s, e.g., `108.84`. + +### Read load {#read} + +To generate a read load, you need to write data first. Data is written by requests of `4096` bytes every `50` ms with no more than `1` in-flight request (interval load). If a request fails to complete within `50` ms, the actor will wait until it is complete and run another request in `50` ms. Data older than `10`s is deleted. Data reads are performed by requests of `4096` bytes with `16` in-flight requests allowed (continuous load): + +```proto +StorageLoad: { + DurationSeconds: 60 + Tablets: { + Tablets: { TabletId: 5000 Channel: 0 GroupId: 2181038080 Generation: 1 } + WriteSizes: { Weight: 1.0 Min: 4096 Max: 4096} + WriteIntervals: { Weight: 1.0 Uniform: { MinUs: 50000 MaxUs: 50000 } } + MaxInFlightWriteRequests: 1 + + ReadSizes: { Weight: 1.0 Min: 4096 Max: 4096 } + ReadIntervals: { Weight: 1.0 Uniform: { MinUs: 0 MaxUs: 0 } } + MaxInFlightReadRequests: 16 + FlushIntervals: { Weight: 1.0 Uniform: { MinUs: 10000000 MaxUs: 10000000 } } + PutHandleClass: TabletLog + GetHandleClass: FastRead } - message TPerTabletProfile { - repeated TTabletInfo Tablets = 1; - repeated TSizeInfo Sizes = 2; - repeated TIntervalInfo WriteIntervals = 3; - optional uint32 MaxInFlightRequests = 4; - optional uint32 MaxInFlightBytes = 5; - repeated TIntervalInfo FlushIntervals = 6; - optional NKikimrBlobStorage.EPutHandleClass PutHandleClass = 7; - optional bool Soft = 8; - optional uint32 MaxInFlightReadRequests = 9; - optional uint32 MaxInFlightReadBytes = 10; - repeated TIntervalInfo ReadIntervals = 11; - repeated TSizeInfo ReadSizes = 12; - optional uint64 MaxTotalBytesWritten = 13; - optional NKikimrBlobStorage.EGetHandleClass GetHandleClass = 14; - }; - optional uint64 Tag = 1; - optional uint32 DurationSeconds = 2; - optional bool RequestTracking = 3 [default = false]; - repeated TPerTabletProfile Tablets = 4; - optional uint64 ScheduleThresholdUs = 5; - optional uint64 ScheduleRoundingUs = 6; } ``` -<!-- -## Примеры {#example} - -**Читающая нагрузка** - -Нагрузка пишет в группу `$GROUPID`, состоит из двух частей. Первая - пишущая, подает небольшой фон пишущих запросов размера `$SIZE` каждые 50 мс, при этом ограничивает `InFlight` 1. То есть если запрос не успевает завершиться, то актор будет ждать завершения и после этого через 50мс, будет запущен следующий запрос. - -Вторая часть основная, читающая. Читает запросами размера `$SIZE`, запросы отправляет каждые `${INTERVAL}` микросекунд. Можно его задать в 0, тогда этот параметр не будет играть роли. Конфигурация ограничивает количество запросов в полете числом `${IN_FLIGHT}`. - -{% list tabs %} - -- CLI - - ```proto - NodeId: ${NODEID} - Event: { StorageLoad: { - DurationSeconds: ${DURATION} - ScheduleThresholdUs: 0 - ScheduleRoundingUs: 0 - Tablets: { - Tablets: { TabletId: ${TABLETID} Channel: 0 GroupId: ${GROUPID} Generation: 1 } - Sizes: { Weight: 1.0 Min: ${SIZE} Max: ${SIZE} } - WriteIntervals: { Weight: 1.0 Uniform: { MinUs: 50000 MaxUs: 50000 } } - MaxInFlightRequests: 1 - - ReadSizes: { Weight: 1.0 Min: ${SIZE} Max: ${SIZE} } - ReadIntervals: { Weight: 1.0 Uniform: { MinUs: ${INTERVAL} MaxUs: ${INTERVAL} } } - MaxInFlightReadRequests: ${IN_FLIGHT} - FlushIntervals: { Weight: 1.0 Uniform: { MinUs: 10000000 MaxUs: 10000000 } } - PutHandleClass: ${PUT_HANDLE_CLASS} - GetHandleClass: ${GET_HANDLE_CLASS} - Soft: true - } - }} - ``` - -{% endlist %} - -**Пишущая нагрузка** - -Пишет в группу `$GROUPID` нагрузку длительностью `$DURATION` секунд. Пишет размерами `$SIZE`, ограничивая количество запросов в полете числом `$IN_FLIGHT`. - -{% list tabs %} - -- CLI - - ```proto - NodeId: ${NODEID} - Event: { StorageLoad: { - DurationSeconds: ${DURATION} - ScheduleThresholdUs: 0 - ScheduleRoundingUs: 0 - Tablets: { - Tablets: { TabletId: ${TABLETID} Channel: 0 GroupId: ${GROUPID} Generation: 1 } - Sizes: { Weight: 1.0 Min: ${SIZE} Max: ${SIZE} } - WriteIntervals: { Weight: 1.0 Uniform: { MinUs: ${INTERVAL} MaxUs: ${INTERVAL} } } - MaxInFlightRequests: ${IN_FLIGHT} - FlushIntervals: { Weight: 1.0 Uniform: { MinUs: 10000000 MaxUs: 10000000 } } - PutHandleClass: ${PUT_HANDLE_CLASS} - Soft: true - } - }} - ``` - -{% endlist %} - --> + +When viewing test results, the following value should be of most interest to you: + +* ` ReadSpeed@ 100%`: 100 percentile of read speed in MB/s, e.g., `60.86`. diff --git a/ydb/docs/en/core/development/load-actors-vdisk.md b/ydb/docs/en/core/development/load-actors-vdisk.md index 5b80a3b0454..ba4a1cee932 100644 --- a/ydb/docs/en/core/development/load-actors-vdisk.md +++ b/ydb/docs/en/core/development/load-actors-vdisk.md @@ -4,7 +4,7 @@ Generates a write-only load on the VDisk. Simulates a Distributed Storage Proxy. {% include notitle [addition](../_includes/addition.md) %} -## Actor specification {#proto} +## Actor parameters {#options} ```proto message TVDiskLoad { diff --git a/ydb/docs/ru/core/development/load-actors-overview.md b/ydb/docs/ru/core/development/load-actors-overview.md index 197fd9c1b7b..e562e1f7c9c 100644 --- a/ydb/docs/ru/core/development/load-actors-overview.md +++ b/ydb/docs/ru/core/development/load-actors-overview.md @@ -33,7 +33,7 @@ [MemoryLoad](load-actors-memory.md) | Аллоцирует память, полезен при тестировании логики. [Stop](load-actors-stop.md) | Останавливает все акторы, либо только указанные. -## Запуск нагрузки {load-actor-start} +## Запуск нагрузки {#load-actor-start} Запустить нагрузку можно с помощью следующих инструментов: |