Hacker News

Näme üçin ilkinji C ++ (m) bölünişi hemişe 72 KB?

Teswirler

1 min read Via joelsiks.com

Mewayz Team

Editorial Team

Hacker News

Ilkinji C ++ paýlanyşyňyzyň syry

simpleönekeý C ++ programma ýazýarsyňyz. täze int . Dört baýt. strace ýa-da iň gowy görýän ýat profiliňizi ýakýarsyňyz we şol ýerde - amalyňyz operasiýa ulgamyndan takmynan 72 KB talap etdi. 4 baýt däl. 64 baýt däl. Doly 72 KB. Hiç haçan bu sana seredip, gurallaryňyzyň size ýalan sözleýändigi hakda pikir eden bolsaňyz, ýeke dälsiňiz. Geň görünýän bu hereket, C ++ döredijileriniň arasynda ilkinji gezek ýadyň içini gazýan soraglaryň biridir we jogap bizi koduňyz bilen hakyky enjamyň arasynda ýerleşýän gatlaklaryň üsti bilen özüne çekiji syýahat edýär.

täze

jaň edeniňizde näme bolýar

72 KB şekiline düşünmek üçin doly bölüniş zynjyryny yzarlamaly. C ++ koduňyz täze int ýerine ýetirilende, düzüji muny operator täze çagyryşyna öwürýär, bu Linux ulgamlarynyň köpüsinde glibc-den malloc -a wekilçilik edýär. Emma malloc ýadrodan 4 baýt ýat soramaýar. Ernadro sahypalarda işleýär - adatça x86_64-de 4 KB - we ýönekeý ýadyň elýeterliligine görä ulgam jaňynyň bahasy gaty uly. Her bir bölünişik üçin brk () ýa-da mmap () jaň etmek, ähmiýetsiz programmanyň togtadylmagyna sebäp bolar.

Muňa derek, glibc-iň ýat paýlaýjysy - ptmalloc2 diýlip atlandyrylýan ýerine ýetiriş, Dug Leanyň klassiki dlmalloc dan gelip çykan - araçy hökmünde çykyş edýär. Ernadro ýokarky böleginden uly ýat bloklaryny soraýar, soňra programmaňyzyň zerurlygy sebäpli olary ownuk böleklere bölýär. Ilkinji 4 baýtlyk bölünişiňiziň operasiýa ulgamyna has uly islegiň döremeginiň esasy sebäbi. Bölünýän adam isrip edenok. Strategiki bolup durýar.

72 KB bölmek: Baýtlaryň gidýän ýeri

Başlangyç bölünişik, ulanylyş ýadyna bir baýt hem bermezden ozal iş wagty başlamaly birnäçe aýratyn böleklerden gelýär. Her bir komponente düşünmek, sanyň nirede ýerleşýändigini düşündirýär.

Ilki bilen, glibc-iň söwda merkezi esasy arenany başlaýar - esasy sapakdaky ähli bölünişikleri yzarlaýan esasy buhgalter gurluşy. Bu meýdança üýşmek üçin meta-maglumaty, erkin sanaw görkezijilerini we dürli bölüniş ululyklary üçin bin gurluşlaryny öz içine alýar. Bölümçi programma arakesmesini sbrk () arkaly uzaldýar we başlangyç giňeltme M_TOP_PAD atly içerki parametr bilen dolandyrylýar, bu bolsa 128 KB padding ýerine ýetirilmeýär. Şeýle-de bolsa, ilkibaşdaky haýyş sahypany deňleşdirmek we bar bolan arakesme üçin düzülýär, bu köplenç has kiçi ilkinji haýyşa sebäp bolýar - köplenç täze başlanan işde şol 72 KB şekiliň golaýynda gonýar.

Ikinjiden, glibc 2.26-dan bäri, paýlaýjy ilkinji gezek ulanylanda sapak-ýerli keş ( tache) başlaýar. Tcache-de 64 sany gap (kiçijik bölüniş ululygy synpy üçin biri) bar, hersi 7 keşde saklamaga ukyply. tcache_perthread_struct -yň özi 1 KB töweregi sarp edýär, ýöne ony başlamak has giň arena sazlamasyna sebäp bolýar. Üçünjiden, C ++ iş wagty, esasy () işlemezden ozal bölünişikleri ýerine ýetirdi - statiki konstruktorlar, std :: cout we dostlar üçin iostream bufer başlangyjy we ýerli gurnama bularyň hemmesi başlangyç üýşmek yzyna goşant goşýar.

Arena ulgamy we näme üçin deslapky paýlama akylly

ep-esli ýadyň öňünden bölünip berilmegini talap etmegiň ýerine, öňünden berlen karar ýerine ýetiriş tötänleýin däldir. Bu onýyllyk ulgam programmirleme tejribesine esaslanan bilgeşleýin in engineeringenerçilik söwdasy. brk () ýa-da mmap () -e edilen her bir jaň, ulanyjy giňişliginden ýadro giňişligine kontekstiň üýtgemegini, prosesiň wirtual ýat kartalaryny üýtgetmegi we sahypanyň mümkin bolan täzelenmelerini öz içine alýar. Döwrebap enjamlarda bir ulgam jaňynyň takmynan 100-200 nanosekunt bahasy bar - izolýasiýa üçin ähmiýetsiz, masştabda katastrofiki.

Başlangyç wagtynda 10,000 ownuk paý berýän bir programma serediň. Öňünden bölünmezden, bu takmynan 1-2 millisekunt arassa üstünden 10 000 ulgam jaňyny aňladýar. Arena esasly paýlaýjy bilen, ilkinji bölünişik bir ulgam jaňyny döredýär we indiki 9,999 bölünişik görkeziji arifmetiki we baglanyşyk sanawy amallary arkaly ulanyjy giňişliginde hyzmat edilýär - hersi takmynan 10-50 nanosekunt alýar. Matematika birmeňzeş: ululygyň sargytlary bilen deslapky bölünişik ýeňýär.

Ilkinji paýyňyzda görýän 72 KB ýadyňy ýitirmeýär - bu ýerine ýetiriş maýa goýumy. Bölümçi, programmaňyzyň ýakyn wagtda has köp pul bölüp berjekdigine we her bir hakyky durmuşda diýen ýaly jedeliň oňat netije berjekdigine jedel edýär. Ulanylmaýan wirtual salgy ýeriniň bahasy häzirki 64 bitli ulgamlarda nol.

Wirtual ýat vs. Fiziki ýat: Näme üçin ähmiýeti ýok

Döredijileriň arasynda bu gylyk-häsiýet bilen ilkinji gezek ýüzbe-ýüz bolýan umumy alada, serişde galyndylarydyr. Maňa diňe 4 baýt gerek bolsa, näme üçin programmam 72 KB sarp edýär? Möhüm düşünje, wirtual ýat fiziki ýat däl . “Glibc” programma arakesmesini 72 KB uzaldanda, ýadro prosesiň wirtual ýat kartalaryny täzeleýär, ýöne fiziki RAM bilen şol sahypalary derrew yzyna almaýar. Hakyky fiziki sahypalar isleg boýunça sahypa ýalňyşlyklary arkaly bölünýär - diňe programmaňyz belli bir adrese ýazanda, ýadro hakyky ýat sahypasyny belleýär.

💡 DID YOU KNOW?

Mewayz replaces 8+ business tools in one platform

CRM · Invoicing · HR · Projects · Booking · eCommerce · POS · Analytics. Free forever plan available.

Start Free →

Diýmek, amalyňyzyň wirtual ululygy 72 KB köpelse-de, onuň ýaşaýjynyň kesgitlenen ululygy (RSS) - hakykatdanam sarp edilýän fiziki RAM mukdary - diňe degen sahypalaryňyz bilen köpelýär. täze int üçin, adatça bir 4 KB sahypa, arena metadata haýsy sahypalary eýeleýär. Galan wirtual giňişlik, ulanmaga taýyn, salgy ýerinden başga hiç zat çykdajy etmeýär - 64 bitli Linux ulgamynda 128 TB bar.

Önümçilik programmalaryna profil ýazylanda we gözegçilik edilende bu tapawut möhümdir. Hakyky çeşme sarp edilişini yzarlamaly programma üpjünçiligini gurýan bolsaňyz - SaaS arkasy bolsun, mikroservis bolsun ýa-da iş amallary üçin Mewayz ýaly platformalarda işleýän analitik turbasy bolsun - elmydama wirtual ululyga däl-de, RSS-e gözegçilik etmeli. / proc / [pid] / smaps , valgrind --tool = massif we pmap ýaly gurallar wirtual ýat şekillerini ýalňyşdyrmak däl-de, takyk fiziki ýat yzlaryny berip biler.

Dürli paýlaýjylar ilkinji bölünişi nähili ulanýarlar

72 KB şekil glibc-iň ptmalloc2-e mahsus. Beýleki paýlaýjylar dürli söwda edýärler we başlangyç bölüniş şoňa görä üýtgeýär. Bu tapawutlara düşünmek, öndürijilige duýgur programmalar üçin bölüji saýlanyňyzda möhümdir.

  • jemalloc (Facebook, FreeBSD tarapyndan ulanylýar) - threaderli keşler bilen has granular arena gurluşyny ulanýar. Başlangyç kellesi has ýokary bolýar (köplenç 200+ KB), ýöne gulp dawasynyň azalmagy sebäpli has köp sapakly öndürijilik berýär.
  • tcmalloc (Google-yň “Thread-Caching Malloc”) - agressiw deslapky bölünişik bilen, her sapakda takmynan 2 MB keş keşini bölýär. Başlangyç has ýokary, ýöne soňraky ownuk bölünişikler gaty çalt.
  • musl libc's malloc - allhli bölünişikler üçin mmap esasly has ýönekeý dizaýny ulanýar. Başlangyç kellesi iň az (köplenç paýlamak üçin bary-ýogy 4 KB), ýöne ýygy-ýygydan ulgam jaňlary sebäpli paýlanyş bahasy has ýokary.
  • mimalloc (Microsoft) - 64 MB segmentli segment esasly paýlamany ulanýar. Ilkinji bölünişik, 64 MB wirtual bron etmegi (iň az fiziki ygrarlylyk bilen), adatdan daşary ýer we geçiş üçin söwda salgysynyň ýerini döredýär.

Bu paýlaýjylaryň arasyndaky saýlaw, bütinleý iş ýüküňize bagly. Köp sapakly bölünişikli uzak wagtlap işleýän serwer programmalary üçin jemalloc ýa-da tcmalloc, adatça glibc-den has ýokarydyr. Memoryat bilen çäklendirilen oturdylan ulgamlar üçin, pes geçirijiligine garamazdan, muslyň has ýönekeý çemeleşmesi has amatly bolup biler. Umumy maksatly iş stoly we serwer programmalarynyň köpüsi üçin ptmalloc2-iň 72 KB başlangyç kellesi sazlamazdan gowy işleýän göwnejaý defolty aňladýar.

Başlangyç bölüniş häsiýetini düzmek

Adaty 72 KB başlangyç ulanyş meseläňizde hakykatdanam kynçylyk çekýän bolsa - belki, müňlerçe gysga möhletli prosesi başdan geçirersiňiz, hersi diňe sanlyja paý berer - glibc mallopt () we MALLOC_ daşky gurşaw üýtgeýjiler maşgalasy arkaly birnäçe sazlaýjy üpjün edýär.

M_TOP_PAD parametri, bölüjiniň derrew zerur zatlardan has köp goşmaça ýady talap edýändigini dolandyrýar. mallopt (M_TOP_PAD, 0) bilen 0-a bellemek, paýlaýjynyň diňe zerur zatlary soramagyny we başlangyç kellesini ep-esli azaltmagyny aýdýar. M_MMAP_THRESHOLD parametri arenanyň ýerine paýlaryň mmap ulanýan ululygyna gözegçilik edýär. Erkin ýadyň OS-a gaýtarylanda M_TRIM_THRESHOLD gözegçilik edýär. Glibc 2.26-dan bäri, glibc.malloc.tcache_count we glibc.malloc.tcache_max sazlaýjylary sapak keş keşbine gözegçilik etmäge mümkinçilik berýär.

Şeýle-de bolsa, seresaplylyk: bu parametrleri seresaplylyk bilen ölçemezden düzmek hemişe diýen ýaly ýagdaýy erbetleşdirýär. Dymmaklyk hakyky dünýädäki profiliň esasynda saýlandy we iş ýükleriniň köpüsi üçin ýakymly bir ýeri görkezýär. Önümçilik profilinde mallok üstündäki päsgelçilikdigini görkezýän güýçli subutnamalaryňyz bolmasa we üýtgeşmeleriňiziň täsirini ölçeseňiz - deslapky zatlary goýuň. Bölünjiniň wagtyndan öň optimizasiýasy, ähmiýetsiz peýdasy üçin köp sanly in engineeringener sagadyny sarp eden ýakak syrdyrmagyň aýratyn bir mekir görnüşidir.

Ulgam programmirlemek barada bize öwredýän zatlary

72 KB ilkinji bölüniş syry, özeninde, abstraksiýa gatlaklary hakda sapakdyr. C ++ size täze int 4 baýt paýlaýan illýuziýa berýär. Dil standarty şeýle diýýär. Akyl modeliňiz şeýle diýýär. Youröne koduňyz bilen enjamyňyzyň arasynda çylşyrymly ulgamlar bar - C ++ iş wagty, C kitaphanasynyň paýlaýjysy, ýadro wirtual ýadyň kiçi ulgamy we enjamyň MMU we TLB - hersiniň özüni alyp barşyny, optimizasiýasyny we üstünden goşýar.

Bu kemçilik däl. Ulgam programma üpjünçiliginiň ähli nokady. Her bir gatlak hakyky meseläni çözmek üçin bar: paýlaýjy bar, şonuň üçin her bölünişige ulgam jaň etmeli däl. Wirtual ýat ulgamy bar, şonuň üçin fiziki ýady gönüden-göni dolandyrmak hökman däl. Sahypanyň ýalňyş işleýjisi bar, şonuň üçin ýat ýalta we täsirli ýerine ýetirilýär. Her gatlak köp mukdarda öndürijilik we amatlylyk üçin az mukdarda aç-açanlyk edýär.

Iň ygtybarly, iň ýokary öndürijilikli ulgamlary döredýän işläp düzüjiler bu gatlaklara düşünýänlerdir - olar hakda yzygiderli pikirlenmeli bolman, eýsem garaşylmadyk bir zat ýüze çykanda (syrly 72 KB bölünişi ýaly), munuň sebäbine düşünmek üçin akyl nusgasy bolýar. Hakyky söwda ulgamyny, oýun dwigatelini ýa-da müňlerçe ulanyja hyzmat edýän işewürlik platformasyny gurýarsyňyzmy, koduňyzyň ulgam derejesinde aslynda näme edýändigi barada pikirlenmek ukyby başarnykly işläp düzüjileri aýratyn ulgamlardan tapawutlandyrýar. 72 KB ýalňyşlyk däl. Işini ajaýyp ýerine ýetirýän siziň paýlaýjyňyzdyr.

Şu gün öz iş ulgamyňyzy guruň

Freelancerlerden agentliklere çenli Mewayz, 207 integral modully 138,000+ kärhanany güýçlendirýär. Mugt başlaň, ulalanyňyzda täzeläň.

{"@ context": "https: \ / \ / schema.org", "@ type": "FAQPage", "mainEntity": 207 integral modul, mugt başlaň, ulalanyňyzda täzeläň. "}}]}

Start managing your business smarter today

Join 30,000+ businesses. Free forever plan · No credit card required.

Ready to put this into practice?

Join 30,000+ businesses using Mewayz. Free forever plan — no credit card required.

Start Free Trial →

Ready to take action?

Start your free Mewayz trial today

All-in-one business platform. No credit card required.

Start Free →

14-day free trial · No credit card · Cancel anytime