{"id":33707,"date":"2019-10-31T21:54:17","date_gmt":"2019-10-31T18:54:17","guid":{"rendered":"https:\/\/prohoster.info\/blog\/inogda-bolshe-eto-menshe-kogda-umenshenie-nagruzki-privodit-k-uvelicheniyu-zaderzhki\/"},"modified":"2019-10-31T21:54:17","modified_gmt":"2019-10-31T18:54:17","slug":"inogda-bolshe-eto-menshe-kogda-umenshenie-nagruzki-privodit-k-uvelicheniyu-zaderzhki","status":"publish","type":"post","link":"https:\/\/prohoster.info\/cs\/blog\/administrirovanie\/inogda-bolshe-eto-menshe-kogda-umenshenie-nagruzki-privodit-k-uvelicheniyu-zaderzhki","title":{"rendered":"N\u011bkdy v\u00edc znamen\u00e1 m\u00e9n\u011b. Kdy\u017e sn\u00ed\u017een\u00ed z\u00e1t\u011b\u017ee vede k zv\u00fd\u0161en\u00ed latence.","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Stejn\u011b jako v <noindex><a rel=\"nofollow\" href=\"https:\/\/mahdytech.com\/2019\/01\/13\/curious-case-999-latency-hike\/\">v\u011bt\u0161in\u011b p\u0159\u00edsp\u011bvk\u016f<\/a><\/noindex>, objevila se probl\u00e9m s distribuovanou slu\u017ebou, nazv\u011bme tuto slu\u017ebu Elvin. Tentokr\u00e1t jsem probl\u00e9m neobjevil s\u00e1m, dali mi o n\u011bm v\u011bd\u011bt kluci z klientsk\u00e9 \u010d\u00e1sti.<\/p>\n<p>Jednou jsem se probudil od nespokojen\u00e9ho e-mailu kv\u016fli velk\u00fdm zpo\u017ed\u011bn\u00edm u Elvina, kter\u00e9ho jsme pl\u00e1novali zav\u00e9st v bl\u00edzk\u00e9 dob\u011b. Zejm\u00e9na se klient setkal se zpo\u017ed\u011bn\u00edm v 99. percentilu kolem 50 ms, co\u017e bylo mnohem nad na\u0161\u00edm rozpo\u010dtem pro zpo\u017ed\u011bn\u00ed. Bylo to p\u0159ekvapiv\u00e9, proto\u017ee jsem slu\u017ebu pe\u010dliv\u011b testoval, zejm\u00e9na na latenci, nebo\u0165 to je p\u0159edm\u011bt \u010dast\u00fdch st\u00ed\u017enost\u00ed.<\/p>\n<p>Ne\u017e jsem dal Elvina do testov\u00e1n\u00ed, provedl jsem mnoho experiment\u016f s 40 000 dotazy za sekundu (QPS), v\u0161echny uk\u00e1zaly latenci pod 10 ms. Byl jsem p\u0159ipraven prohl\u00e1sit, \u017ee s jejich v\u00fdsledky nesouhlas\u00edm. Ale kdy\u017e jsem se znovu pod\u00edval na e-mail, v\u0161iml jsem si n\u011b\u010deho nov\u00e9ho: p\u0159esn\u011b jsem netestoval podm\u00ednky, kter\u00e9 zm\u00ednili, jejich QPS bylo mnohem ni\u017e\u0161\u00ed ne\u017e moje. Testoval jsem na 40k QPS, a oni pouze na 1k. Spustil jsem dal\u0161\u00ed experiment, tentokr\u00e1t s ni\u017e\u0161\u00edm QPS, jen abych je uklidnil.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nProto\u017ee o tom p\u00ed\u0161u na blogu \u2013 pravd\u011bpodobn\u011b u\u017e jste pochopili: jejich \u010d\u00edsla se uk\u00e1zala jako spr\u00e1vn\u00e1. Kontroloval jsem sv\u00e9ho virtu\u00e1ln\u00edho klienta znovu a znovu, st\u00e1le se stejn\u00fdm v\u00fdsledkem: n\u00edzk\u00fd po\u010det dotaz\u016f nezvy\u0161uje pouze latenci, ale zvy\u0161uje po\u010det dotaz\u016f se zpo\u017ed\u011bn\u00edm nad 10 ms. Jin\u00fdmi slovy, zat\u00edmco p\u0159i 40k QPS p\u0159ibli\u017en\u011b 50 dotaz\u016f za sekundu p\u0159ekro\u010dilo 50 ms, p\u0159i 1k QPS ka\u017edou sekundu bylo 100 dotaz\u016f nad 50 ms. Paradox!<\/p>\n<p><img decoding=\"async\" alt=\"N\u011bkdy v\u00edc znamen\u00e1 m\u00e9n\u011b. Kdy\u017e sn\u00ed\u017een\u00ed z\u00e1t\u011b\u017ee vede k zv\u00fd\u0161en\u00ed latence.\" src=\"\/wp-content\/uploads\/2019\/05\/d181859376e2befad9ed631e8f8ff168.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h1>Z\u00fa\u017een\u00ed okruhu podez\u0159el\u00fdch.<\/h1>\n<p>\nP\u0159i \u010deln\u00ed probl\u00e9mu zpo\u017ed\u011bn\u00ed v distribuovan\u00e9m syst\u00e9mu s mnoha komponenty je prvn\u00edm krokem sestavit kr\u00e1tk\u00fd seznam podez\u0159el\u00fdch. Poj\u010fme se pod\u00edvat hloub\u011bji do architektury Elvina:<\/p>\n<p><img decoding=\"async\" alt=\"N\u011bkdy v\u00edc znamen\u00e1 m\u00e9n\u011b. Kdy\u017e sn\u00ed\u017een\u00ed z\u00e1t\u011b\u017ee vede k zv\u00fd\u0161en\u00ed latence.\" src=\"\/wp-content\/uploads\/2019\/05\/9b10198772b0e53890eb94d5e5c9afd0.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDobrou v\u00fdchoz\u00ed bodem je seznam proveden\u00fdch p\u0159echod\u016f vstup\u016f a v\u00fdstup\u016f (s\u00ed\u0165ov\u00e9 vol\u00e1n\u00ed\/hled\u00e1n\u00ed na disku atd.). Pokus\u00edme se zjistit, kde je zpo\u017ed\u011bn\u00ed. Krom\u011b z\u0159ejm\u00e9ho vstupu a v\u00fdstupu s klientem, Elvin prov\u00e1d\u00ed dal\u0161\u00ed krok: obrac\u00ed se na \u00falo\u017ei\u0161t\u011b dat. Ale toto \u00falo\u017ei\u0161t\u011b funguje ve stejn\u00e9m clusteru jako Elvin, tak\u017ee by tam zpo\u017ed\u011bn\u00ed m\u011blo b\u00fdt men\u0161\u00ed ne\u017e s klientem. Tak\u017ee seznam podez\u0159el\u00fdch:<\/p>\n<ol>\n<li>S\u00ed\u0165ov\u00e9 vol\u00e1n\u00ed od klienta k Elvinovi.\n<\/li>\n<li>S\u00ed\u0165ov\u00e9 vol\u00e1n\u00ed od Elvina k datov\u00e9mu \u00falo\u017ei\u0161ti.\n<\/li>\n<li>Hled\u00e1n\u00ed na disku v datov\u00e9m \u00falo\u017ei\u0161ti.\n<\/li>\n<li>S\u00ed\u0165ov\u00e9 vol\u00e1n\u00ed z datov\u00e9ho \u00falo\u017ei\u0161t\u011b k Elvinovi.\n<\/li>\n<li>S\u00ed\u0165ov\u00e9 vol\u00e1n\u00ed od Elvina k klientovi.<\/li>\n<\/ol>\n<p>\nPokud zkus\u00edme vyjmout n\u011bkter\u00e9 polo\u017eky.<\/p>\n<h3>Datov\u00e9 \u00falo\u017ei\u0161t\u011b nen\u00ed p\u0159\u00ed\u010dinou.<\/h3>\n<p>\nNejprve jsem p\u0159evedl Elvina na ping-ping server, kter\u00fd nezpracov\u00e1v\u00e1 \u017e\u00e1dn\u00e9 po\u017eadavky. Po obdr\u017een\u00ed po\u017eadavku vr\u00e1t\u00ed pr\u00e1zdnou odpov\u011b\u010f. Pokud se zpo\u017ed\u011bn\u00ed zkracuje, pak je chyba v implementaci Elvina nebo datov\u00e9ho \u00falo\u017ei\u0161t\u011b \u2014 nic takov\u00e9ho nesl\u00fdchan\u00e9ho. V prvn\u00edm experimentu m\u00e1me takov\u00fd graf:<\/p>\n<p><img decoding=\"async\" alt=\"N\u011bkdy v\u00edc znamen\u00e1 m\u00e9n\u011b. Kdy\u017e sn\u00ed\u017een\u00ed z\u00e1t\u011b\u017ee vede k zv\u00fd\u0161en\u00ed latence.\" src=\"\/wp-content\/uploads\/2019\/05\/bd8fed2b2cc0d07946d1c4a868ae36b3.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nJak vid\u00edme, p\u0159i pou\u017eit\u00ed ping-ping serveru se neobjevuj\u00ed \u017e\u00e1dn\u00e1 zlep\u0161en\u00ed. To znamen\u00e1, \u017ee datov\u00e9 \u00falo\u017ei\u0161t\u011b nezvy\u0161uje zpo\u017ed\u011bn\u00ed, a seznam podez\u0159el\u00fdch se z\u00fa\u017eil na polovinu:<\/p>\n<ol>\n<li>S\u00ed\u0165ov\u00e9 vol\u00e1n\u00ed od klienta k Elvinovi.\n<\/li>\n<li>S\u00ed\u0165ov\u00e9 vol\u00e1n\u00ed od Elvina k klientovi.<\/li>\n<\/ol>\n<p>\nSkv\u011bl\u00e9! Seznam se rychle z\u00fa\u017euje. Myslel jsem, \u017ee jsem t\u00e9m\u011b\u0159 objevil p\u0159\u00ed\u010dinu.<\/p>\n<h3>gRPC<\/h3>\n<p>\nPr\u00e1v\u011b te\u010f je \u010das p\u0159edstavit v\u00e1m nov\u00e9ho hr\u00e1\u010de: <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/grpc\/grpc\">gRPC<\/a><\/noindex>. Je to knihovna s otev\u0159en\u00fdm zdrojov\u00fdm k\u00f3dem od Google pro intraprocesn\u00ed komunikaci. <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Remote_procedure_call\">RPC<\/a><\/noindex>. I kdy\u017e <code>gRPC<\/code> je dob\u0159e optimalizovan\u00fd a \u0161iroce pou\u017e\u00edvan\u00fd, poprv\u00e9 jsem jej pou\u017eil v syst\u00e9mu takov\u00e9ho rozsahu a o\u010dek\u00e1val jsem, \u017ee moje implementace bude m\u00e9n\u011b efektivn\u00ed \u2014 m\u00edrn\u011b \u0159e\u010deno.<\/p>\n<p>P\u0159\u00edtomnost <code>gRPC<\/code> ve stacku vyvolala novou ot\u00e1zku: mo\u017en\u00e1 je to moje implementace nebo s\u00e1m <code>gRPC<\/code> zp\u016fsobuje probl\u00e9m se zpo\u017ed\u011bn\u00edm? P\u0159id\u00e1v\u00e1me do seznamu nov\u00e9ho podez\u0159el\u00e9ho:<\/p>\n<ol>\n<li>Klient vol\u00e1 knihovnu <code>gRPC<\/code>\n<\/li>\n<li>Knihovna <code>gRPC<\/code> na klientovi prov\u00e1d\u00ed s\u00ed\u0165ov\u00e9 vol\u00e1n\u00ed knihovny <code>gRPC<\/code> na serveru\n<\/li>\n<li>Knihovna <code>gRPC<\/code> se obrac\u00ed na Elvina (operace nen\u00ed v p\u0159\u00edpad\u011b serveru ping-pong)<\/li>\n<\/ol>\n<p>\nAbychom v\u00e1m uk\u00e1zali, jak vypad\u00e1 k\u00f3d, moje implementace klienta\/Elvina se moc neli\u0161\u00ed od p\u0159\u00edklad\u016f klient-server <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/grpc\/grpc\/tree\/v1.19.0\/examples\/cpp\/helloworld\">asynchronn\u00edch<\/a><\/noindex>.<\/p>\n<blockquote><p><i>Pozn\u00e1mka: v\u00fd\u0161e uveden\u00fd seznam je trochu zjednodu\u0161en, proto\u017ee <code>gRPC<\/code> umo\u017e\u0148uje pou\u017eit\u00ed vlastn\u00ed (\u0161ablonov\u00e9?) modelov\u00e9 osnovy, kter\u00e1 propletuje b\u011bhov\u00fd stack <code>gRPC<\/code> a u\u017eivatelskou implementaci. Pro jednoduchost se budeme dr\u017eet tohoto modelu.<\/i><\/p><\/blockquote>\n<p><\/p>\n<h3>Profilov\u00e1n\u00ed to v\u0161echno oprav\u00ed.<\/h3>\n<p>\nPo vy\u0159azen\u00ed datov\u00fdch \u00falo\u017ei\u0161\u0165 jsem si myslel, \u017ee jsem skoro hotov: 'Te\u010f to bude snadn\u00e9! Pou\u017eijeme profil a zjist\u00edme, kde vznik\u00e1 zpo\u017ed\u011bn\u00ed.' Jsem <noindex><a rel=\"nofollow\" href=\"https:\/\/mahdytech.com\/2019\/01\/13\/curious-case-999-latency-hike\/\">velk\u00fdm fanou\u0161kem p\u0159esn\u00e9ho profilov\u00e1n\u00ed,<\/a><\/noindex>proto\u017ee CPU je velmi rychl\u00e9 a \u010dasto nen\u00ed \u00fazk\u00fdm m\u00edstem. V\u011bt\u0161ina zpo\u017ed\u011bn\u00ed se vyskytuje, kdy\u017e procesor mus\u00ed zastavit zpracov\u00e1n\u00ed, aby ud\u011blal n\u011bco jin\u00e9ho. P\u0159esn\u00e9 profilov\u00e1n\u00ed CPU je ur\u010deno pr\u00e1v\u011b k tomuto: p\u0159esn\u011b zaznamen\u00e1v\u00e1 v\u0161e. <noindex><a rel=\"nofollow\" href=\"https:\/\/www.tutorialspoint.com\/what-is-context-switching-in-operating-system\">kontextov\u00e9 p\u0159ep\u00edna\u010de<\/a><\/noindex> a nazna\u010duje, kde doch\u00e1z\u00ed k prodlev\u00e1m.<\/p>\n<p>Vzal jsem \u010dty\u0159i profily: jeden pro vysok\u00fd QPS (mal\u00e1 prodleva) a s ping-pong serverem na n\u00edzk\u00e9m QPS (velk\u00e1 prodleva) jak na stran\u011b klienta, tak na stran\u011b serveru. A pro jistotu jsem si tak\u00e9 vzal vzorek profilu CPU. P\u0159i porovn\u00e1v\u00e1n\u00ed profil\u016f obvykle hled\u00e1m anom\u00e1ln\u00ed stack vol\u00e1n\u00ed. Nap\u0159\u00edklad na \u0161patn\u00e9 stran\u011b s vysokou prodlevou doch\u00e1z\u00ed k mnohem v\u00edce kontextov\u00fdm p\u0159epnut\u00edm (10 a v\u00edcekr\u00e1t). Ale v m\u00e9m p\u0159\u00edpad\u011b se po\u010det kontextov\u00fdch p\u0159epnut\u00ed prakticky shodoval. K m\u00e9mu zd\u011b\u0161en\u00ed tam nebylo nic z\u00e1sadn\u00edho.<\/p>\n<h1>Dal\u0161\u00ed lad\u011bn\u00ed<\/h1>\n<p>\nByl jsem zoufal\u00fd. Nev\u011bd\u011bl jsem, jak\u00e9 dal\u0161\u00ed n\u00e1stroje mohu pou\u017e\u00edt, a m\u016fj dal\u0161\u00ed pl\u00e1n v z\u00e1sad\u011b spo\u010d\u00edval v opakov\u00e1n\u00ed experiment\u016f s r\u016fzn\u00fdmi variantami, nikoli v jasn\u00e9m diagnostikov\u00e1n\u00ed probl\u00e9mu.<\/p>\n<h3>Co kdy\u017e<\/h3>\n<p>\nU\u017e od za\u010d\u00e1tku m\u011b znepokojoval specifick\u00fd \u010das prodlevy 50 ms. To je velmi dlouh\u00e1 doba. Rozhodl jsem se, \u017ee budu od\u0159ez\u00e1vat kousky k\u00f3du, dokud nezjist\u00edm, kter\u00e1 \u010d\u00e1st zp\u016fsobuje tuto chybu. Pot\u00e9 n\u00e1sledoval experiment, kter\u00fd vy\u0161el.<\/p>\n<p>Jak u\u017e to b\u00fdv\u00e1, zp\u011btn\u011b to vypad\u00e1, \u017ee v\u0161echno bylo jasn\u00e9. Dal jsem klienta na jeden stroj s Elvinem \u2013 a poslal \u017e\u00e1dost na <code>localhost<\/code>. A prodleva se vytratila!<\/p>\n<p><img decoding=\"async\" alt=\"N\u011bkdy v\u00edc znamen\u00e1 m\u00e9n\u011b. Kdy\u017e sn\u00ed\u017een\u00ed z\u00e1t\u011b\u017ee vede k zv\u00fd\u0161en\u00ed latence.\" src=\"\/wp-content\/uploads\/2019\/05\/2d8466625a264abe2110a65592ee0da8.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nN\u011bco nebylo v po\u0159\u00e1dku s\u00edt\u011b.<\/p>\n<h3>Osvojen\u00ed si dovednost\u00ed s\u00ed\u0165ov\u00e9ho in\u017een\u00fdra<\/h3>\n<p>\nMus\u00edm p\u0159iznat: moje znalosti s\u00edt\u00ed jsou hrozn\u00e9, zvl\u00e1\u0161\u0165 kdy\u017e s nimi pracuji ka\u017ed\u00fd den. Ale s\u00ed\u0165 byla hlavn\u00edm podez\u0159el\u00fdm a musel jsem se nau\u010dit, jak ji ladit.<\/p>\n<p>Na\u0161t\u011bst\u00ed internet miluje ty, kte\u0159\u00ed se cht\u011bj\u00ed u\u010dit. Kombinace ping a tracert se zd\u00e1la jako dostate\u010dn\u011b dobr\u00fd za\u010d\u00e1tek pro lad\u011bn\u00ed probl\u00e9m\u016f se s\u00ed\u0165ov\u00fdm transportem.<\/p>\n<p>Nejprve jsem spustil <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.microsoft.com\/en-us\/sysinternals\/downloads\/psping\">PsPing<\/a><\/noindex> na TCP portu Elvina. Pou\u017eil jsem v\u00fdchoz\u00ed parametry \u2013 nic zvl\u00e1\u0161tn\u00edho. Z v\u00edce ne\u017e tis\u00edce ping\u016f \u017e\u00e1dn\u00fd nep\u0159ekro\u010dil 10 ms, s v\u00fdjimkou prvn\u00edho pro zah\u0159\u00e1t\u00ed. To je v rozporu se zjevn\u00fdm zv\u00fd\u0161en\u00edm prodlevy 50 ms v 99. percentilu: tam jsme m\u011bli vid\u011bt p\u0159ibli\u017en\u011b jeden po\u017eadavek na ka\u017ed\u00fdch 100 s prodlevou 50 ms.<\/p>\n<p>Pak jsem zkusil <noindex><a rel=\"nofollow\" href=\"https:\/\/support.microsoft.com\/en-ca\/help\/314868\/how-to-use-tracert-to-troubleshoot-tcp-ip-problems-in-windows\">tracert<\/a><\/noindex>: mo\u017en\u00e1 je probl\u00e9m na jednom z uzl\u016f na trase mezi Elvinem a klientem. Ale ani tracer se nevr\u00e1til s pr\u00e1zdnou.<\/p>\n<p>Tak\u017ee d\u016fvodem zpo\u017ed\u011bn\u00ed nebyl m\u016fj k\u00f3d, implementace gRPC ani s\u00ed\u0165. Za\u010dal jsem se u\u017e ob\u00e1vat, \u017ee tomu nikdy neporozum\u00edm.<\/p>\n<h3>Te\u010f, na jak\u00e9m opera\u010dn\u00edm syst\u00e9mu se nach\u00e1z\u00edme<\/h3>\n<p>\n<code>gRPC<\/code> \u0161iroce se pou\u017e\u00edv\u00e1 v Linuxu, ale pro Windows je to exotika. Rozhodl jsem se prov\u00e9st experiment, kter\u00fd vy\u0161el: vytvo\u0159il jsem virtu\u00e1ln\u00ed stroj Linux, zkompiloval Elvina pro Linux a nasadil ho.<\/p>\n<p><img decoding=\"async\" alt=\"N\u011bkdy v\u00edc znamen\u00e1 m\u00e9n\u011b. Kdy\u017e sn\u00ed\u017een\u00ed z\u00e1t\u011b\u017ee vede k zv\u00fd\u0161en\u00ed latence.\" src=\"\/wp-content\/uploads\/2019\/05\/ee74c16de7e1ac6c286e401660e94ca1.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nA takto to dopadlo: na ping-pong serveru Linux nebyla takov\u00e1 zpo\u017ed\u011bn\u00ed jako u srovnateln\u00e9ho uzlu Windows, i kdy\u017e zdroj dat byl stejn\u00fd. Zjistil jsem, \u017ee probl\u00e9m je v implementaci gRPC pro Windows.<\/p>\n<h3>N\u00e4her\u016fv algoritmus<\/h3>\n<p>\nCelou dobu jsem si myslel, \u017ee mi chyb\u00ed p\u0159\u00edznak <code>gRPC<\/code>. Te\u010f jsem pochopil, \u017ee ve skute\u010dnosti jde o <code>gRPC<\/code> chyb\u011bj\u00edc\u00ed p\u0159\u00edznak Windows. Na\u0161el jsem vnit\u0159n\u00ed knihovnu RPC, u kter\u00e9 jsem byl p\u0159esv\u011bd\u010den, \u017ee funguje dob\u0159e pro v\u0161echny nainstalovan\u00e9 p\u0159\u00edznaky <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.microsoft.com\/en-us\/windows\/desktop\/winsock\/windows-sockets-start-page-2\">Winsock<\/a><\/noindex>. Pak jsem p\u0159idal v\u0161echny tyto p\u0159\u00edznaky do gRPC a nasadil Elvina na Windows, v opraven\u00e9m ping-pong serveru pod Windows!<\/p>\n<p><img decoding=\"async\" alt=\"N\u011bkdy v\u00edc znamen\u00e1 m\u00e9n\u011b. Kdy\u017e sn\u00ed\u017een\u00ed z\u00e1t\u011b\u017ee vede k zv\u00fd\u0161en\u00ed latence.\" src=\"\/wp-content\/uploads\/2019\/05\/ce3a4066c78f9f6a63fd68578224d6e5.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<i>T\u00e9m\u011b\u0159<\/i> hotovo: za\u010dal jsem odeb\u00edrat p\u0159idan\u00e9 p\u0159\u00edznaky jeden po druh\u00e9m, dokud se nezapnula regresn\u00ed chyba, tak\u017ee jsem mohl p\u0159esn\u011b ur\u010dit jej\u00ed p\u0159\u00ed\u010dinu. Byl to notoricky zn\u00e1m\u00fd <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.microsoft.com\/en-us\/windows\/desktop\/api\/winsock\/nf-winsock-setsockopt\">TCP_NODELAY<\/a><\/noindex>, p\u0159ep\u00edna\u010d N\u00e4hrungsova algoritmu.<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Nagle%27s_algorithm\">N\u00e4her\u016fv algoritmus<\/a><\/noindex> se sna\u017e\u00ed sn\u00ed\u017eit po\u010det paket\u016f odeslan\u00fdch p\u0159es s\u00ed\u0165 t\u00edm, \u017ee zpo\u017e\u010fuje odes\u00edl\u00e1n\u00ed zpr\u00e1v, dokud velikost paketu nep\u0159ekro\u010d\u00ed ur\u010dit\u00e9 mno\u017estv\u00ed bajt\u016f. I kdy\u017e to m\u016f\u017ee b\u00fdt p\u0159\u00edjemn\u00e9 pro pr\u016fm\u011brn\u00e9ho u\u017eivatele, je to devastuj\u00edc\u00ed pro servery v re\u00e1ln\u00e9m \u010dase, proto\u017ee OS bude zpo\u017e\u010fovat n\u011bkter\u00e9 zpr\u00e1vy, co\u017e zp\u016fsob\u00ed zpo\u017ed\u011bn\u00ed p\u0159i n\u00edzk\u00e9m QPS. U <code>gRPC<\/code> byl tento p\u0159\u00edznak nastaven v implementaci Linux pro TCP sokety, ale ne pro Windows. Opravil jsem to. <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/grpc\/grpc\/commit\/1dce1009e67ea4b5934a61b1bcf8a217bd12cc76\">Velk\u00e9 zpo\u017ed\u011bn\u00ed p\u0159i n\u00edzk\u00e9m QPS bylo zp\u016fsobeno optimalizac\u00ed OS. S ohledem na zp\u011btnou vazbu, profilov\u00e1n\u00ed nezjistilo zpo\u017ed\u011bn\u00ed, proto\u017ee bylo prov\u00e1d\u011bno v j\u00e1drov\u00e9m re\u017eimu, nikoli v<\/a><\/noindex>.<\/p>\n<h1>Z\u00e1v\u011br<\/h1>\n<p>\nu\u017eivatelsk\u00e9m re\u017eimu. <noindex><a rel=\"nofollow\" href=\"https:\/\/blog.codinghorror.com\/understanding-user-and-kernel-mode\/\">Nev\u00edm, zda lze N\u00e4hrungs\u016fv algoritmus pozorovat pomoc\u00ed ETW sn\u00edmk\u016f, ale bylo by to zaj\u00edmav\u00e9.<\/a><\/noindex>Pokud jde o experiment localhost, ten pravd\u011bpodobn\u011b nesouvisel s vlastn\u00edm s\u00ed\u0165ov\u00fdm k\u00f3dem, a N\u00e4hrungs\u016fv algoritmus nebyl spu\u0161t\u011bn, tak\u017ee probl\u00e9my se zpo\u017ed\u011bn\u00edm zmizely, kdy\u017e se klient obr\u00e1til na Elvina p\u0159es localhost.<\/p>\n<p>P\u0159\u00ed\u0161t\u011b, kdy\u017e uvid\u00edte zv\u00fd\u0161en\u00ed zpo\u017ed\u011bn\u00ed p\u0159i sni\u017eov\u00e1n\u00ed po\u010dtu po\u017eadavk\u016f za sekundu, m\u011bl by b\u00fdt N\u00e4hrungs\u016fv algoritmus na va\u0161em seznamu podez\u0159el\u00fdch!<\/p>\n<p>!<br \/>\n<br \/>Zdroj: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/451904\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041a\u0430\u043a \u0438 \u0432 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0435 \u043f\u043e\u0441\u0442\u043e\u0432, \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0441 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u0439 \u0441\u043b\u0443\u0436\u0431\u043e\u0439, \u043d\u0430\u0437\u043e\u0432\u0451\u043c \u044d\u0442\u0443 \u0441\u043b\u0443\u0436\u0431\u0443 \u042d\u043b\u0432\u0438\u043d. \u041d\u0430 \u044d\u0442\u043e\u0442 \u0440\u0430\u0437 \u044f \u043d\u0435 \u0441\u0430\u043c \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443, \u043c\u043d\u0435 \u0441\u043e\u043e\u0431\u0449\u0438\u043b\u0438 \u0440\u0435\u0431\u044f\u0442\u0430 \u0441 \u043a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u043e\u0439 \u0447\u0430\u0441\u0442\u0438. \u041e\u0434\u043d\u0430\u0436\u0434\u044b \u044f \u043f\u0440\u043e\u0441\u043d\u0443\u043b\u0441\u044f \u043e\u0442 \u043d\u0435\u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0438\u0441\u044c\u043c\u0430 \u0438\u0437-\u0437\u0430 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0437\u0430\u0434\u0435\u0440\u0436\u0435\u043a \u0443 \u042d\u043b\u0432\u0438\u043d\u0430, \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043c\u044b \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0432 \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0435\u0435 \u0432\u0440\u0435\u043c\u044f. \u0412 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438, \u043a\u043b\u0438\u0435\u043d\u0442 \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u043b\u0441\u044f \u0441 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u043e\u0439 99-\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u043d\u0442\u0438\u043b\u044f \u0432 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":25389,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-33707","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.3 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041a\u0430\u043a \u0438 \u0432 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0435 \u043f\u043e\u0441\u0442\u043e\u0432, \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0441 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u0439 \u0441\u043b\u0443\u0436\u0431\u043e\u0439, \u043d\u0430\u0437\u043e\u0432\u0451\u043c \u044d\u0442\u0443 \u0441\u043b\u0443\u0436\u0431\u0443 \u042d\u043b\u0432\u0438\u043d.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/cs\/blog\/administrirovanie\/inogda-bolshe-eto-menshe-kogda-umenshenie-nagruzki-privodit-k-uvelicheniyu-zaderzhki\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"cs_CZ\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u0418\u043d\u043e\u0433\u0434\u0430 \u0431\u043e\u043b\u044c\u0448\u0435 \u2014 \u044d\u0442\u043e \u043c\u0435\u043d\u044c\u0448\u0435. \u041a\u043e\u0433\u0434\u0430 \u0443\u043c\u0435\u043d\u044c\u0448\u0435\u043d\u0438\u0435 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u044e \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0438 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041a\u0430\u043a \u0438 \u0432 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0435 \u043f\u043e\u0441\u0442\u043e\u0432, \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0441 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u0439 \u0441\u043b\u0443\u0436\u0431\u043e\u0439, \u043d\u0430\u0437\u043e\u0432\u0451\u043c \u044d\u0442\u0443 \u0441\u043b\u0443\u0436\u0431\u0443 \u042d\u043b\u0432\u0438\u043d.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/cs\/blog\/administrirovanie\/inogda-bolshe-eto-menshe-kogda-umenshenie-nagruzki-privodit-k-uvelicheniyu-zaderzhki\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T18:54:17+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T18:54:17+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47N\u011bkdy m\u00e9n\u011b znamen\u00e1 v\u00edce. Kdy\u017e sn\u00ed\u017een\u00ed z\u00e1t\u011b\u017ee zp\u016fsobuje zv\u00fd\u0161en\u00ed latence | ProHoster","description":"Stejn\u011b jako u v\u011bt\u0161iny p\u0159\u00edsp\u011bvk\u016f se objevila chyba s distribuovanou slu\u017ebou, nazv\u011bme tuto slu\u017ebu Elvin.","canonical_url":"https:\/\/prohoster.info\/cs\/blog\/administrirovanie\/inogda-bolshe-eto-menshe-kogda-umenshenie-nagruzki-privodit-k-uvelicheniyu-zaderzhki","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"cs_CZ","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u0418\u043d\u043e\u0433\u0434\u0430 \u0431\u043e\u043b\u044c\u0448\u0435 \u2014 \u044d\u0442\u043e \u043c\u0435\u043d\u044c\u0448\u0435. \u041a\u043e\u0433\u0434\u0430 \u0443\u043c\u0435\u043d\u044c\u0448\u0435\u043d\u0438\u0435 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u044e \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0438 | ProHoster","og:description":"\u041a\u0430\u043a \u0438 \u0432 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0435 \u043f\u043e\u0441\u0442\u043e\u0432, \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0441 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u0439 \u0441\u043b\u0443\u0436\u0431\u043e\u0439, \u043d\u0430\u0437\u043e\u0432\u0451\u043c \u044d\u0442\u0443 \u0441\u043b\u0443\u0436\u0431\u0443 \u042d\u043b\u0432\u0438\u043d.","og:url":"https:\/\/prohoster.info\/cs\/blog\/administrirovanie\/inogda-bolshe-eto-menshe-kogda-umenshenie-nagruzki-privodit-k-uvelicheniyu-zaderzhki","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T18:54:17+00:00","article:modified_time":"2019-10-31T18:54:17+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"33707","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-21 16:23:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 02:35:31","updated":"2026-01-21 16:23:19","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/posts\/33707","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/comments?post=33707"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/posts\/33707\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/media\/25389"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/media?parent=33707"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/categories?post=33707"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/tags?post=33707"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}