[{"data":1,"prerenderedAt":993},["ShallowReactive",2],{"navigation":3,"/docs/benchmarks/testing-from-another-machine":96,"/docs/benchmarks/testing-from-another-machine-surround":988},[4],{"title":5,"path":6,"stem":7,"children":8,"page":43},"Docs","/docs","docs",[9,25,44,64,80,88],{"title":10,"path":11,"stem":12,"children":13,"icon":24},"Getting Started","/docs/getting-started","docs/1.getting-started/1.index",[14,16,20],{"title":15,"path":11,"stem":12},"Introduction",{"title":17,"path":18,"stem":19},"Quick start","/docs/getting-started/quick-start","docs/1.getting-started/2.quick-start",{"title":21,"path":22,"stem":23},"Running from source","/docs/getting-started/running-from-source","docs/1.getting-started/3.running-from-source","i-lucide-rocket",{"title":26,"icon":27,"path":28,"stem":29,"children":30,"page":43},"Configuration","i-lucide-settings-2","/docs/configuration","docs/2.configuration",[31,35,39],{"title":32,"path":33,"stem":34},"Adding a real database","/docs/configuration/adding-databases","docs/2.configuration/1.adding-databases",{"title":36,"path":37,"stem":38},"Customizing the image","/docs/configuration/customizing-the-image","docs/2.configuration/2.customizing-the-image",{"title":40,"path":41,"stem":42},"Common tuning strategies","/docs/configuration/common-tuning-strategies","docs/2.configuration/3.common-tuning-strategies",false,{"title":45,"path":46,"stem":47,"children":48,"icon":63},"Image variations","/docs/image-variations","docs/3.image-variations/1.index",[49,51,55,59],{"title":50,"path":46,"stem":47},"Choosing a variation",{"title":52,"path":53,"stem":54},"FPM-NGINX","/docs/image-variations/fpm-nginx","docs/3.image-variations/2.fpm-nginx",{"title":56,"path":57,"stem":58},"FrankenPHP","/docs/image-variations/frankenphp","docs/3.image-variations/3.frankenphp",{"title":60,"path":61,"stem":62},"FPM-Apache","/docs/image-variations/fpm-apache","docs/3.image-variations/4.fpm-apache","i-lucide-layers",{"title":65,"path":66,"stem":67,"children":68,"icon":79},"Benchmarks & Methodology","/docs/benchmarks","docs/4.benchmarks/1.index",[69,71,75],{"title":70,"path":66,"stem":67},"Methodology",{"title":72,"path":73,"stem":74},"Reading your results","/docs/benchmarks/reading-your-results","docs/4.benchmarks/2.reading-your-results",{"title":76,"path":77,"stem":78},"Testing from another machine","/docs/benchmarks/testing-from-another-machine","docs/4.benchmarks/3.testing-from-another-machine","i-lucide-flask-conical",{"title":81,"path":82,"stem":83,"children":84,"icon":87},"Community Results","/docs/community-results","docs/5.community-results/1.index",[85],{"title":86,"path":82,"stem":83},"Submitting your results","i-lucide-users",{"title":89,"path":90,"stem":91,"children":92,"icon":95},"FAQ","/docs/faq","docs/6.faq/1.index",[93],{"title":94,"path":90,"stem":91},"Frequently asked questions","i-lucide-circle-help",{"id":97,"title":76,"body":98,"description":980,"extension":981,"links":982,"meta":983,"navigation":984,"path":77,"redirect":982,"seo":985,"sitemap":986,"stem":78,"__hash__":987},"docs/docs/4.benchmarks/3.testing-from-another-machine.md",{"type":99,"value":100,"toc":967},"minimark",[101,105,108,131,136,139,194,197,211,235,239,242,469,483,489,493,496,532,535,538,544,547,601,606,671,678,687,691,694,701,755,759,762,798,801,817,821,824,835,838,896,899,911,915,927,938,947,951,954,957,963],[102,103,104],"p",{},"For the most accurate results, you want to use a second machine because when you use your CPU to generate and serve traffic, you can cause your numbers to be skewed.",[102,106,107],{},"It's recommended to use a separate machine to help you get the most accurate results. You'll need:",[109,110,111,119],"ul",{},[112,113,114,118],"li",{},[115,116,117],"strong",{},"A machine near your server",", ideally in the same datacenter or region.",[112,120,121],{},[115,122,123,130],{},[124,125,129],"a",{"href":126,"rel":127},"https://github.com/hatoo/oha",[128],"nofollow","oha"," installed on it.",[132,133,135],"h2",{"id":134},"pick-the-machine","Pick the machine",[102,137,138],{},"When you're performing tests, it's important to minimize any variables between the two machines.",[140,141,142,155],"table",{},[143,144,145],"thead",{},[146,147,148,152],"tr",{},[149,150,151],"th",{},"Where your 2nd machine is",[149,153,154],{},"What you end up measuring",[156,157,158,170,178,186],"tbody",{},[146,159,160,164],{},[161,162,163],"td",{},"Same datacenter or region",[161,165,166,169],{},[115,167,168],{},"Your server."," This is what you want",[146,171,172,175],{},[161,173,174],{},"Same LAN, or a VM on the same host",[161,176,177],{},"Your server, mostly. A VM still shares the host's CPU",[146,179,180,183],{},[161,181,182],{},"Another region or provider",[161,184,185],{},"The network between the two machines",[146,187,188,191],{},[161,189,190],{},"A laptop on wifi",[161,192,193],{},"Your wifi speeds",[102,195,196],{},"Two more things to consider:",[109,198,199,205],{},[112,200,201,204],{},[115,202,203],{},"Give it enough CPU."," A single-core box runs out of headroom before your server does. Match it roughly to the machine under test.",[112,206,207,210],{},[115,208,209],{},"Don't let it sleep."," A laptop that sleeps mid-run takes the stage down with it.",[212,213,215,218,229,232],"collapsible",{"name":214},"why distance caps your numbers",[102,216,217],{},"oha is closed-loop: each connection waits for a reply before sending again. One connection sends one request per round trip, so no generator can beat:",[219,220,225],"pre",{"className":221,"code":223,"language":224},[222],"language-text","max requests per second = connections ÷ round trip in seconds\n","text",[226,227,223],"code",{"__ignoreMap":228},"",[102,230,231],{},"50 connections at a 0.5 ms round trip is a ceiling near 100,000 req/s, far above any PHP application. The same 50 connections at 30 ms drops it to about 1,600 req/s. Your server isn't slower. You just can't ask it for more from that far away.",[102,233,234],{},"BenchKit measures the round trip when the generator connects and sizes the sweep from it, so a generator further away is asked for proportionally more connections. There is a limit to how far that can stretch: a server answering in a fraction of a millisecond behind a 13 ms round trip would need around a thousand connections at once to reach its worker pool, and BenchKit stops well short of that. When it does, the result says so and names the number it would have taken — that is your cue to move the generator closer, not to distrust the server.",[132,236,238],{"id":237},"install-oha-on-the-generator-machine","Install oha (on the generator machine)",[102,240,241],{},"Run these commands on the machine you want to simulate traffic from.",[243,244,245,274,447],"tabs",{},[246,247,250],"tabs-item",{"icon":248,"label":249},"i-simple-icons-apple","macOS",[219,251,256],{"className":252,"code":253,"filename":254,"language":255,"meta":228,"style":228},"language-bash shiki shiki-themes github-dark","brew install oha\n","Terminal","bash",[226,257,258],{"__ignoreMap":228},[259,260,263,267,271],"span",{"class":261,"line":262},"line",1,[259,264,266],{"class":265},"svObZ","brew",[259,268,270],{"class":269},"sU2Wk"," install",[259,272,273],{"class":269}," oha\n",[246,275,278,312,315,434],{"icon":276,"label":277},"i-simple-icons-linux","Linux",[219,279,281],{"className":252,"code":280,"filename":254,"language":255,"meta":228,"style":228},"pacman -S oha            # Arch\ncargo install oha        # any distro, needs Rust\n",[226,282,283,299],{"__ignoreMap":228},[259,284,285,288,292,295],{"class":261,"line":262},[259,286,287],{"class":265},"pacman",[259,289,291],{"class":290},"sDLfK"," -S",[259,293,294],{"class":269}," oha",[259,296,298],{"class":297},"sAwPA","            # Arch\n",[259,300,302,305,307,309],{"class":261,"line":301},2,[259,303,304],{"class":265},"cargo",[259,306,270],{"class":269},[259,308,294],{"class":269},[259,310,311],{"class":297},"        # any distro, needs Rust\n",[102,313,314],{},"No package manager? oha ships a plain binary, so this is the whole install. No root, no Rust:",[219,316,318],{"className":252,"code":317,"filename":254,"language":255,"meta":228,"style":228},"mkdir -p ~/.local/bin\ncase \"$(uname -m)\" in\n  x86_64)  ASSET=oha-linux-amd64 ;;\n  aarch64) ASSET=oha-linux-arm64 ;;\nesac\ncurl -fsSL \"https://github.com/hatoo/oha/releases/latest/download/$ASSET\" -o ~/.local/bin/oha\nchmod +x ~/.local/bin/oha\n",[226,319,320,331,352,375,393,399,423],{"__ignoreMap":228},[259,321,322,325,328],{"class":261,"line":262},[259,323,324],{"class":265},"mkdir",[259,326,327],{"class":290}," -p",[259,329,330],{"class":269}," ~/.local/bin\n",[259,332,333,337,340,343,346,349],{"class":261,"line":301},[259,334,336],{"class":335},"snl16","case",[259,338,339],{"class":269}," \"$(",[259,341,342],{"class":265},"uname",[259,344,345],{"class":290}," -m",[259,347,348],{"class":269},")\"",[259,350,351],{"class":335}," in\n",[259,353,355,359,362,366,369,372],{"class":261,"line":354},3,[259,356,358],{"class":357},"sns5M","  x86_64",[259,360,361],{"class":335},")",[259,363,365],{"class":364},"s95oV","  ASSET",[259,367,368],{"class":335},"=",[259,370,371],{"class":269},"oha-linux-amd64",[259,373,374],{"class":364}," ;;\n",[259,376,378,381,383,386,388,391],{"class":261,"line":377},4,[259,379,380],{"class":357},"  aarch64",[259,382,361],{"class":335},[259,384,385],{"class":364}," ASSET",[259,387,368],{"class":335},[259,389,390],{"class":269},"oha-linux-arm64",[259,392,374],{"class":364},[259,394,396],{"class":261,"line":395},5,[259,397,398],{"class":335},"esac\n",[259,400,402,405,408,411,414,417,420],{"class":261,"line":401},6,[259,403,404],{"class":265},"curl",[259,406,407],{"class":290}," -fsSL",[259,409,410],{"class":269}," \"https://github.com/hatoo/oha/releases/latest/download/",[259,412,413],{"class":364},"$ASSET",[259,415,416],{"class":269},"\"",[259,418,419],{"class":290}," -o",[259,421,422],{"class":269}," ~/.local/bin/oha\n",[259,424,426,429,432],{"class":261,"line":425},7,[259,427,428],{"class":265},"chmod",[259,430,431],{"class":269}," +x",[259,433,422],{"class":269},[102,435,436,437,442,443,446],{},"Debian and Ubuntu can also add ",[124,438,441],{"href":439,"rel":440},"https://github.com/hatoo/oha#debian",[128],"Azlux's repository"," for ",[226,444,445],{},"apt install oha",".",[246,448,451,466],{"icon":449,"label":450},"i-simple-icons-windows","Windows",[219,452,454],{"className":252,"code":453,"filename":254,"language":255,"meta":228,"style":228},"winget install hatoo.oha\n",[226,455,456],{"__ignoreMap":228},[259,457,458,461,463],{"class":261,"line":262},[259,459,460],{"class":265},"winget",[259,462,270],{"class":269},[259,464,465],{"class":269}," hatoo.oha\n",[102,467,468],{},"Run the BenchKit command itself inside WSL.",[102,470,471,472,475,476,479,480,446],{},"BenchKit looks in ",[226,473,474],{},"~/.local/bin"," and ",[226,477,478],{},"~/.cargo/bin"," as well as your ",[226,481,482],{},"PATH",[484,485,486],"note",{},[102,487,488],{},"Skip this step and nothing breaks. The pairing command stops and prints the exact download line for that machine's platform. It never installs anything itself.",[132,490,492],{"id":491},"run-the-pairing-command","Run the pairing command",[102,494,495],{},"Start a run with the web server load test enabled. BenchKit shows you a command:",[219,497,499],{"className":252,"code":498,"filename":254,"language":255,"meta":228,"style":228},"curl -kfsSL https://your-benchkit-instance/bench/generator/\u003Ctoken>/script | sh\n",[226,500,501],{"__ignoreMap":228},[259,502,503,505,508,511,514,517,520,523,526,529],{"class":261,"line":262},[259,504,404],{"class":265},[259,506,507],{"class":290}," -kfsSL",[259,509,510],{"class":269}," https://your-benchkit-instance/bench/generator/",[259,512,513],{"class":335},"\u003C",[259,515,516],{"class":269},"toke",[259,518,519],{"class":364},"n",[259,521,522],{"class":335},">",[259,524,525],{"class":269},"/script",[259,527,528],{"class":335}," |",[259,530,531],{"class":265}," sh\n",[102,533,534],{},"Paste it on the generator machine. It connects, the run starts, and the load test runs first so your part is over early.",[102,536,537],{},"Each route claims a line and fills in the throughput it measured:",[219,539,542],{"className":540,"code":541,"language":224},[222],"  1/4  /bench/static       12,483 req/s  ✓\n  2/4  /bench/json          8,120 req/s  ✓\n  3/4  /bench/db-read       4,902 req/s  ✓\n  4/4  /bench/io              487 req/s  ✓\n",[226,543,541],{"__ignoreMap":228},[102,545,546],{},"Leave the terminal open until it finishes. Closing it stops the load test.",[212,548,550,571,577,591],{"name":549},"what that command does",[551,552,553,556,559,562,565,568],"ol",{},[112,554,555],{},"Checks oha is installed, and stops with instructions if not",[112,557,558],{},"Confirms it can reach your BenchKit instance",[112,560,561],{},"Times five requests to work out the round trip",[112,563,564],{},"Handshakes, so the dialog shows it connected",[112,566,567],{},"Waits until the run reaches its web server stage",[112,569,570],{},"Runs oha against each route and uploads the results",[102,572,573,574,446],{},"It installs nothing, needs no root, and writes one temporary file that it removes on the way out. Read it before you run it if you like: open the same URL in a browser, or drop the ",[226,575,576],{},"| sh",[102,578,579,586,587,590],{},[115,580,581,582,585],{},"About ",[226,583,584],{},"-k",":"," it skips certificate verification. BenchKit instances are disposable and usually run on a self-signed certificate, where verification would fail on a certificate nobody meant to be trusted. The token in the URL authorizes the pairing, not the certificate. On a plain ",[226,588,589],{},"http://"," instance the flag does nothing.",[102,592,593,596,597,600],{},[115,594,595],{},"About color:"," output is colored only for a terminal. Piped to a file or a CI job it degrades to plain text, and ",[226,598,599],{},"NO_COLOR=1"," turns it off everywhere.",[602,603,605],"h3",{"id":604},"if-it-doesnt-connect","If it doesn't connect",[140,607,608,618],{},[143,609,610],{},[146,611,612,615],{},[149,613,614],{},"Message",[149,616,617],{},"Fix",[156,619,620,630,640,650,660],{},[146,621,622,627],{},[161,623,624],{},[226,625,626],{},"oha is not installed on this machine",[161,628,629],{},"Install it. The script prints the exact download line for that machine",[146,631,632,637],{},[161,633,634],{},[226,635,636],{},"Could not reach \u003Curl> from this machine",[161,638,639],{},"Check the URL and any firewall between the two machines",[146,641,642,647],{},[161,643,644],{},[226,645,646],{},"The server did not accept the handshake",[161,648,649],{},"The pairing expired or was replaced. Start the run again for a fresh command",[146,651,652,657],{},[161,653,654],{},[226,655,656],{},"This pairing is no longer valid",[161,658,659],{},"The run finished or was cancelled while you waited. Start again",[146,661,662,668],{},[161,663,664,665],{},"A route ends in ",[226,666,667],{},"✗",[161,669,670],{},"The server refused that upload and prints why on the same line",[102,672,673,674,677],{},"The generator needs to reach the URL you have open in your browser, on ",[226,675,676],{},"/bench/*",". Nothing needs to be open in the other direction.",[484,679,680],{},[102,681,682,683,686],{},"If BenchKit is only reachable on loopback or through an SSH tunnel, your browser's URL is no use to a second machine. Set ",[226,684,685],{},"BENCHMARK_HTTP_URL"," to an address the generator can reach.",[132,688,690],{"id":689},"driving-oha-yourself","Driving oha yourself",[102,692,693],{},"The benchmark routes are open endpoints with session and CSRF middleware skipped, so any machine that can reach the server can point oha at them.",[102,695,696,697,700],{},"Results driven this way are ",[115,698,699],{},"not"," recorded into a run. Use this for ad-hoc probing, and for tail latency, which no fixed-connection test can measure honestly.",[140,702,703,713],{},[143,704,705],{},[146,706,707,710],{},[149,708,709],{},"Endpoint",[149,711,712],{},"What it represents",[156,714,715,725,735,745],{},[146,716,717,722],{},[161,718,719],{},[226,720,721],{},"/bench/static",[161,723,724],{},"Framework baseline. No database",[146,726,727,732],{},[161,728,729],{},[226,730,731],{},"/bench/json",[161,733,734],{},"An API response. A 25-item JSON payload built in PHP",[146,736,737,742],{},[161,738,739],{},[226,740,741],{},"/bench/db-read",[161,743,744],{},"A database read. 20 rows per request",[146,746,747,752],{},[161,748,749],{},[226,750,751],{},"/bench/io?ms=100",[161,753,754],{},"Simulated I/O. Sleeps for the milliseconds you pass",[602,756,758],{"id":757},"throughput","Throughput",[102,760,761],{},"Hold a set number of connections open and see what the server gets through:",[219,763,765],{"className":252,"code":764,"filename":254,"language":255,"meta":228,"style":228},"oha -z 30s -c 50 http://\u003Cyour-server-ip>/bench/db-read\n",[226,766,767],{"__ignoreMap":228},[259,768,769,771,774,777,780,783,786,788,791,793,795],{"class":261,"line":262},[259,770,129],{"class":265},[259,772,773],{"class":290}," -z",[259,775,776],{"class":269}," 30s",[259,778,779],{"class":290}," -c",[259,781,782],{"class":290}," 50",[259,784,785],{"class":269}," http://",[259,787,513],{"class":335},[259,789,790],{"class":269},"your-server-i",[259,792,102],{"class":364},[259,794,522],{"class":335},[259,796,797],{"class":269},"/bench/db-read\n",[102,799,800],{},"Run one endpoint at a time. Overlapping runs compete and neither result means much.",[802,803,804],"warning",{},[102,805,806,807,810,811,814,815,446],{},"Under PHP-FPM a request holds a worker for its whole duration. If your connection count is above ",[226,808,809],{},"pm.max_children",", you are measuring the pool rather than the server. Raise ",[226,812,813],{},"PHP_FPM_PM_MAX_CHILDREN"," to at least your core count first. See ",[124,816,36],{"href":37},[602,818,820],{"id":819},"tail-latency","Tail latency",[102,822,823],{},"A fixed-connection run understates p99: when the server slows down, the client waits instead of sending more, so the requests that would have been slowest are never sent. Gil Tene named this coordinated omission.",[102,825,826,829,830,834],{},[115,827,828],{},"A paired run already does this for you."," The response times on your result come from a separate pass at a held rate below the maximum, with the correction applied — that is what the ",[124,831,833],{"href":832},"/docs/benchmarks#two-questions-two-measurements","three measurements"," are for. What follows is how to do it by hand against your own routes.",[102,836,837],{},"Two passes:",[839,840,842,847,850,854],"steps",{"level":841},"4",[843,844,846],"h4",{"id":845},"find-your-maximum-throughput","Find your maximum throughput",[102,848,849],{},"Run the throughput command above at a few connection counts and note the highest requests per second. One connection count is one point on a curve, and the maximum is rarely at the first number you try.",[843,851,853],{"id":852},"run-again-at-about-70-of-that","Run again at about 70% of that",[219,855,857],{"className":252,"code":856,"filename":254,"language":255,"meta":228,"style":228},"oha -q \u003Creq_per_sec> -z 30s --latency-correction http://\u003Cyour-server-ip>/bench/db-read\n",[226,858,859],{"__ignoreMap":228},[259,860,861,863,866,869,872,875,877,879,881,884,886,888,890,892,894],{"class":261,"line":262},[259,862,129],{"class":265},[259,864,865],{"class":290}," -q",[259,867,868],{"class":335}," \u003C",[259,870,871],{"class":269},"req_per_se",[259,873,874],{"class":364},"c",[259,876,522],{"class":335},[259,878,773],{"class":290},[259,880,776],{"class":269},[259,882,883],{"class":290}," --latency-correction",[259,885,785],{"class":269},[259,887,513],{"class":335},[259,889,790],{"class":269},[259,891,102],{"class":364},[259,893,522],{"class":335},[259,895,797],{"class":269},[102,897,898],{},"Staying below your maximum is the point. At saturation every client queues, and the numbers describe the backlog rather than latency.",[484,900,901],{},[102,902,903,906,907,910],{},[226,904,905],{},"--latency-correction"," does nothing without a target rate. The ",[226,908,909],{},"-q"," flag is what makes it work, which is why the two always appear together.",[602,912,914],{"id":913},"reading-what-you-get","Reading what you get",[102,916,917,918,922,923,446],{},"Numbers you drive by hand are not the numbers in the Web Server Load Test panel. Yours include network time and whatever flags you passed. Don't compare the two directly. For an external number that ",[919,920,921],"em",{},"is"," comparable, ",[124,924,926],{"href":925},"#run-the-pairing-command","pair the machine with a run",[802,928,929],{},[102,930,931,933,934,937],{},[226,932,741],{}," answers ",[226,935,936],{},"503"," until the table it queries exists. That table is prepared when the HTTP stage starts, so run a benchmark with the load test enabled once before driving that endpoint from outside. The other three work immediately.",[484,939,940],{},[102,941,942,943,946],{},"A fifth route, ",[226,944,945],{},"/bench/env",", reports what PHP looks like in the process serving requests rather than in the CLI process. It is not a load target. BenchKit calls it to record the environment on your results.",[132,948,950],{"id":949},"when-a-self-test-is-fine","When a self-test is fine",[102,952,953],{},"A self-test runs oha on the BenchKit server itself. No second machine, no setup.",[102,955,956],{},"It is the right tool for comparing two configurations on the same box, because the request path is identical between your runs. What it can't give you is the absolute number, since the generator competes with what it measures. Treat a self-test figure as a floor.",[102,958,959,960,962],{},"Every result records which mode produced it, and the two are never compared on one axis. See ",[124,961,72],{"href":73}," for what else applies.",[964,965,966],"style",{},"html pre.shiki code .svObZ, html code.shiki .svObZ{--shiki-default:#B392F0}html pre.shiki code .sU2Wk, html code.shiki .sU2Wk{--shiki-default:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .sDLfK, html code.shiki .sDLfK{--shiki-default:#79B8FF}html pre.shiki code .sAwPA, html code.shiki .sAwPA{--shiki-default:#6A737D}html pre.shiki code .snl16, html code.shiki .snl16{--shiki-default:#F97583}html pre.shiki code .sns5M, html code.shiki .sns5M{--shiki-default:#DBEDFF}html pre.shiki code .s95oV, html code.shiki .s95oV{--shiki-default:#E1E4E8}",{"title":228,"searchDepth":301,"depth":301,"links":968},[969,970,971,974,979],{"id":134,"depth":301,"text":135},{"id":237,"depth":301,"text":238},{"id":491,"depth":301,"text":492,"children":972},[973],{"id":604,"depth":354,"text":605},{"id":689,"depth":301,"text":690,"children":975},[976,977,978],{"id":757,"depth":354,"text":758},{"id":819,"depth":354,"text":820},{"id":913,"depth":354,"text":914},{"id":949,"depth":301,"text":950},"Pair a second machine to drive the load test, or point oha at the endpoints yourself.","md",null,{},true,{"title":76,"description":980},{"loc":77},"c59UMl4r-WiNQWoDB5T4QAGh4A-_Lk4sG_C5r8m4FXA",[989,991],{"title":72,"path":73,"stem":74,"description":990,"children":-1},"What a BenchKit number tells you, and the known limits that apply to it.",{"title":86,"path":82,"stem":83,"description":992,"children":-1},"How a run becomes a public gallery entry, and what gets published.",1787761544505]