Hacker News

¿Imaraykutaq ñawpaq C++ (m)asignación sapa kuti 72 KB?

Comentarios nisqakuna

8 min read Via joelsiks.com

Mewayz Team

Editorial Team

Hacker News

Ñawpaq C++ rakisqaykipa qipanpi pakasqa kaq

Huk sanu C++ programata qillqanki. Huklla musuq int. Tawa byte nisqa. strace utaq munasqayki yuyarina perfiladorta rawrachinki, chaymanta chaypi kachkan — ruwayniyki chayraq yaqa 72 KB llamkana llamkanamanta mañasqa. Mana 4 byte nisqachu. Mana 64 byte nisqachu. Huk hunt'asqa 72 KB. Sichus hayk’aqllapas chay numerota qhawaspa tapukurqanki herramientaykikuna llullakushasqanmanta chayqa, manan sapallaykichu kashanki. Kay bizarro hina ruwayqa huk aswan sapa kuti tapusqa tapuykuna C++ ruwaqkuna ukhupi ñawpaq kutita yuyarina ukhupi allaspa, chaymanta kutichiyqa huk munay puriyman pusawanchik chay qatanakuna ukhupi tiyaq codigoykiwan chiqa hardware kaqwan.

Imataq pasakun musuq

nispa waqyaspa

72 KB yupayta hamut'anaykipaqqa, hunt'asqa rakiy cadena nisqatam qatipanayki. C++ codigoyki musuq int ruwaqtin, huñuq chayta tikran huk waqyayman operador musuq kaqman, mayqinchus aswan Linux llamkanakunapi malloc kaqman glibc kaqmanta delega. Ichaqa mallocqa manam chiqallachu k'itimanta 4 byte yuyarinapaq mañakun. K'itiqa p'anqakunapi llamk'an — sapa kuti 4 KB x86_64 kaqpi — chaymanta huk llamkana waqyaypa chanin ancha hatunmi huk sanu yuyarina yaykuywan tupachisqa. Sapa sapalla rakiypaq brk() icha mmap() waqyaspaqa ima mana ancha chaniyuq programatapas sayachinman.

Aswanpas, glibcpa yuyarina rakiqnin — huk ruway ptmalloc2 sutiyuq, kikin Doug Lea klasiku dlmalloc nisqamanta uraykamusqa — chawpi runa hinam llamkan. Hatun bloquekuna yuyarinamanta kernelmanta ñawpaqmanta mañakun, chaymanta aswan huch'uy t'aqakunapi tallan programayki necesitasqanman hina. Kayqa fundamental razonmi ñawpaq 4-byte rakisqayki huk aswan hatun mañakuyta llamkana sistemaman llamk'achin. Rakiq runaqa manam usuchiqchu. Estratégico nisqa kaymi.

72 KB nisqamanta t'aqay: Maymanmi Bytekuna rinku

Qallariy rakiy hawaqa achka sapaq componentekunamanta hamun, chaykunatam puriy pacha qallarichinan manaraq huk byte llamk'ana yuyarinatapas quyta atichkaptin. Sapa componente nisqamanta hamut’aspaqa sut’inchakunmi imaraykun yupay maymanchus chayan chayman chayasqanmanta.

Ñawpaqtaqa, glibcpa malloc nisqa hatun arena nisqatam qallarichin — ñawpaq qillqakuna waqaychay estructura nisqa, hatun q'ipipi llapa rakiykunata qatiq. Kay arena metadatos kaqmanta montón kaqpaq, libre-lista rikuchiqkuna, chaymanta bin estructurakuna hukniray rakiy sayaykunapaq churan. Rakiq programa p'akiyta mast'arikun sbrk() kaqnintakama, chaymanta qallariy mast'ariyqa huk ukhu parámetro kaqwan kamachisqa kachkan M_TOP_PAD sutiyuq, mayqinchus ñawpaqmanta 128 KB relleno kaqman. Ichaqa, chiqap qallariy mañakuyqa p'anqa chiqanchaypaq chaymanta kunan kaq p'akiy posición kaqpaq allichasqa, sapa kuti aswan huch'uy ñawpaq mañakuypi tukun — sapa kuti chay 72 KB yupay qayllapi chayraq qallarisqa ruwaypi chayan.

Iskay kaq, glibc 2.26 kaqmanta, rakiq huk thread-local cache (tcache) ñawpaq llamk'aypi qallarichin. tcache 64 bins (huk sapa huch'uy-asignación sayay clase) kaqwan kachkan, sapa juk 7 cached chunks kaqkama hap'iyta atiq. Kikin tcache_perthread_struct 1 KB muyuriqpi mikhun, ichaqa qallariy ruwayqa aswan hatun arena churayta qallarichin. Kimsa kaq, C++ purichiy pachaqa rakiykunata ruwasqaña manaraq main()yki purichkaptinpas — mana kuyukuq ruwaqkuna, iostream buffer qallariy std::cout kaqpaq chaymanta masikunapaq, chaymanta kiti churay llapanku chay qallariy montón chaki puriyman yanapakunku.

Sistema Arena nisqamanta, imaraykutaq Pre-Asignación nisqa yachaysapa

Huk hatun yuyayta ñawpaqmanta rakinapaq tanteayqa, pisimanta hukmanta mañakuymantaqa manam huk accidentechu implementacionmanta. Chayqa huk yuyaywan ingeniería rantinakuymi, chunka watakuna sistemakuna programacion experienciapi saphichasqa. Sapa waqyay brk() kaqman utaq mmap() kaqman huk contexto tikrayta ruwaqpa espaciomanta k'iti espacioman, ruwaypa virtual yuyarina mapakuna tikrayta chaymanta atikuq p'anqa tabla musuqyachiykunata ruwan. Kunan pacha llamk'anakunapi, huk sapalla llamkana waqyayqa yaqa 100-200 nanosegundos qullqita qun — sapanchasqapi mana ancha chaniyuq, hatun llakipi.

Huk programata qhawariy, chaymi 10.000 huch'uy rakiykunata ruwan qallariy pachapi. Mana ñawpaq rakiywan, chay 10.000 sistema waqyakuykunata niyta munanman, yaqa 1-2 milisegundos ch'uya hawamanta qullqita qun. Huk arena-pi sayasqa rakiqwan, ñawpaq rakiyqa huk sapalla sistema waqyayta qallarichin, chaymanta qatiq 9.999 rakiykuna tukuyninpi llamk'aqpa espacionpi yanapasqa kanku puntero yupaywan chaymanta t'inkisqa-lista ruwanakunawan — sapa huk yaqa 10-50 nanosegundos hap'in. Yupay yupayqa mana iskayrayaqmi: ñawpaq rakiyqa hatun kayninpa ordenninkunawanmi atipan.

nisqa

Ñawpaq rakisqaykipi 72 KB rikusqaykiqa manam usuchisqa yuyarinachu — ruway qullqi churaymi. Asignador apuestas ruwachkan programayki aswan asignacionkunata ruwanqa chaylla, chaymanta yaqa sapa chiqa pacha escenario kaqpi, chay apuesta sumaqllata pagan. Mana llamk'achisqa virtual direccionkuna espaciopa chaninmi aswanta cero kunan pacha 64-bit sistemakunapi.

nisqapi

Yuyariy virtual vs. Yuyariy aycha: Imaraykutaq mana imapaschu

Ñawpaq kuti kay ruwaywan tinkuqkuna paqarichiqkunap huk sapan llakikuyninqa, kapuqninkuna usuchiymi. Sichus 4 bytekunallata necesitasaq, ¿imaraykutaq programay 72 KBta tukuchkan? Chay critica hamut’ayqa virtual yuyariyqa manan aychapi yuyariychu nisqa. glibc programa p'akiyta 72 KB mast'ariptin, k'iti ruwaypa virtual yuyarina mapakuna musuqyachin, ichaqa mana chayllachu chay p'anqakunata RAM físico kaqwan yanapan. Chiqap aycha p'anqakunaqa mañakuyman hinam rakisqa kanku p'anqa pantaykuna nisqawan — programayki huk chiqan direccionman qillqaptinlla, k'itiqa chiqap yuyarina p'anqata chayman qun.

💡 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 →

Kayqa niyta munan, ruwayniykipa virtual sayaynin 72 KB yapakuptinpas, residente huñusqa sayaynin (RSS) — chiqamanta RAM físico mikhusqa — chiqamanta llamisqayki p'anqakunalla yapakun. Huk sapalla musuq intpaq, chayqa sapa kuti huk 4 KB p'anqa, yapasqa ima p'anqakunatapas arena metadatos hap'in. Puchuq virtual espacio chaypi tiyachkan, llamk'anapaq wakichisqa, mana ima qullqita qunchu aswanpas direccionkuna espaciota — chaymanta 128 TB 64-bit Linux sistemapi kanki.

Kay chiqanchayqa ancha allinmi, ruruchina ruwanakuna perfil ruwaypi chaymanta qhawaypi. Sichus software ruwachkanki mayqinchus chiqa recursokuna mikhuyta qatiyta munan — sichus huk SaaS qhipa kaq, huk microservicio utaq huk t'aqwiy pipeline kaqhina mayqinkunachus plataformakunapi purinku kayhina Mewayz negocio llamkanakunapaq — sapa kuti RSS qhawanayki tiyan aswan virtual sayayninmanta. /proc/[pid]/smaps, valgrind --tool=massif, pmap hina yanapakuykuna chiqap aycha yuyarina chakikuna qusunkiman, pantachiq virtual yuyarina yupaykunata.

Imaynatataq hukniray rakiqkuna Ñawpaq rakiyta ruwanku

72 KB siqiqa glibcpa ptmaloc2 nisqapaqmi. Wak rakiqkunam hukniray rantinakuykunata ruwanku, chayman hinam qallariy rakinakuypa hawanpiqa hukniray. Kay chikan kaqkunata hamut'ayqa ancha chaniyuqmi, ruwayman hina ruwanakunapaq rakiq akllachkaspa.

  • jemalloc (Facebook, FreeBSD kaqwan llamk'achisqa) — Aswan granular arena ruwayta llamk'achin, q'ipi-llaqta waqaychasqa kaqwan. Qallariy hawa qullqiqa aswan hatunmi (sapa kuti 200+ KB) ichaqa aswan allin achka q'ipiyuq ruwayta qun pisiyachisqa wichq'ana atipanakuyrayku.
  • tcmalloc (Googlepa Thread-Caching Malloc) — Sapa q'ipi waqaychasqa yaqa 2 MB ñawpaqmanta rakin, agresivo ñawpaq rakiywan. Qallariypiqa aswan hatunmi, ichaqa qhipaman huch’uy rakiykunaqa ancha utqayllam.
  • musl libc's malloc — Llapa rakiykunapaq mmap nisqapi aswan sasan ruwayta llamk'achin. Qallariy hatun qullqiqa pisilla (sapa kuti 4 KB sapa rakisqalla), ichaqa sapa rakisqa qullqiqa aswan hatunmi aswan sapa kuti sistema waqyasqakunarayku.
  • mimalloc (Microsoft) — 64 MB t'aqakunawan t'aqa-sapanchasqa rakiyta llamk'achin. Ñawpaq rakiyqa 64 MB virtual reservacionta (aslla compromiso físico kaqwan), negocio dirección espaciota excepcional localidadpaq chaymanta rendimientopaq.

Kay rakiqkunapura akllayqa tukuy llamk'anaykimanta kanqa. Unay pacha puriq sirwiq ruwanakuna llasa achka q'ipiyuq rakiywan, jemalloc utaq tcmalloc típicamente glibc kaqmanta aswan ruwan. Yuyariywan hark'asqa churasqa sistemakunapaq, musl aswan sasallawan ruwayqa aswan allin kanman aswan pisi ruwayniyuq kaptinpas. Yaqa llapan general-propósito escritorio chaymanta servidor ruwanakuna kaqpaq, ptmaloc2 kaqpa 72 KB qallariy hawanpi huk razonable ñawpaqmanta riqsichin mayqinchus allinta llamkan mana sintonización kaqwan.

Qallariy rakiy ruwaykunata sintonizay

Sichus ñawpaqmanta 72 KB qallariy hawa qullqi chiqamanta sasachakuyniyuq kanki llamk'ana casoykipaq — ichapas waranqakuna pisi kawsayniyuq ruwanakunata paqarichichkanki, sapa juk makilla rakiykunata ruwachkanku — glibc achka sintonizables nisqakunata qun mallopt() kaqnintakama chaymanta MALLOC_ ayllu muyuriq tikraqkunawan.

M_TOP_PAD tupuqa mayk'a yapasqa yuyarinata rakiq mañakun chaymanta chaylla necesitasqanmanta aswanta kamachin. mallopt(M_TOP_PAD, 0) kaqwan 0 kaqman churayqa rakiqman willan imachus necesitasqalla mañananpaq, qallariy hawa qullqita anchata pisiyachispa. M_MMAP_THRESHOLD tupuqa mayqinpa hawanpi rakinakuna arena rantipi mmap llamk'achisqankuta kamachin. M_TRIM_THRESHOLD kamachin mayk'aq kacharisqa yuyarina OS kaqman kutichisqa. Hinallataq glibc 2.26 kaqmanta, glibc.malloc.tcache_count chaymanta glibc.malloc.tcache_max tunables nisqakuna q'ipi waqaychasqa ruwayta kamachiyta saqin.

Ichaqa, huk rimay: kay parámetros nisqakunata mana allinta tupachispa sintonizayqa yaqa sapa kutim aswan mana allinta ruwan. Chay ñawpaqmanta ruwasqakuna akllasqa karqan hatun chiqa pacha perfilado kaqpi, chaymanta huk misk'i chiqata rikuchinku aswan achka llamkanakuna kaqpaq. Manachus sinchi pruebakuna ruway perfil kaqmanta kanki chaymanta malloc hawa qullqi huk cuello de botella kasqanmanta — chaymanta tikrasqaykikunap impaktunta tupurqanki — saqiy ñawpaqmanta ruwasqakunata. Asignadorpa manaraq pachanpi allinchayqa huk aswan insidioso forma yak afeitarmi, chaymi mana yupay atina horas de ingeniería nisqakunata tukurun mana ancha allinpaq.

Imakunatataq Kay Yachachiwanchik Sistemakuna Programacionmanta

72 KB ñawpaq rakiy pakasqa yachayqa, ukhunpi, abstracción capasmanta yachachiymi. C++ nisqaqa musuq int 4 byte nisqakunata rakisqanmanta ilusión nisqatam qusunki. Simi kamachiyqa chaytam nin. Yuyayniykipi modeloykiqa chaytan nin. Ichaqa codigoykiwan hardware kaqwan huk pila sofisticado sistemakuna tiyakun — C++ puriy pacha, C biblioteca rakiq, kernel kaqpa virtual yuyarina subsistema kaqnin chaymanta hardware kaqpa MMU chaymanta TLB — sapa huk kikin ruwayninkunata, allinchaykunata chaymanta hawaman yapaspa.

Kayqa manam pantaychu. Chayqa sistemakuna software nisqap tukuynin puntonmi. Sapa qatana chiqap sasachakuy allichanapaqmi kachkan: rakiqmi kachkan chaymi mana sapa rakinapaq sistema waqyakuykunata ruwanaykichu. Virtual yuyarina sistemaqa kachkan chayrayku mana chiqalla aycha yuyarina kamachinaykichu tiyan. P'anqa pantaykunata qhawaq tiyan chayrayku yuyarina qhella chaymanta allin ruwasqa. Sapa qatana huk pisi sut'i kayta qhatun hatun ruwaypaq chaymanta allin kaypaq.

Aswan atiyniyuq, aswan hatun ruwaq sistemakuna ruwaqkuna kay qatata hamut'aqkuna kanku — mana sapa kuti chaypi yuyaykunankuraykuchu, aswanpas mana suyasqa imapas ruwakuptin (huk misterioso 72 KB rakiy hina), yuyay modeloyuq kanku imarayku hamut'anankupaq. Ichapas huk chiqa pacha qhatuy sistemata ruwachkanki, huk pukllay motor utaq huk negocio plataforma waranqa waranqa ruwaqkunaman yanapachkanki, atiy razonamiento imatachus chiqamanta códigoyki ruwan sistema nivelpi chaymanta imachus yachaysapa paqarichiqkunata t'aqakun mana kaqlla kaqkunamanta. 72 KB nisqaqa manam pantasqachu. Chayqa rakiqniykim llamkayninta allinta ruwachkan.

Kunan punchaw negocio OS nisqayki ruway

Sapa llamk'aqkunamanta agenciakunaman, Mewayz 138.000+ negociokunata 207 tinkisqa módulos kaqwan kallpachan. Mana qullqiyuq qallariy, wiñaspa yapay.

Qillqasqa yupayta paqarichiy →
nisqa

Try Mewayz Free

All-in-one platform for CRM, invoicing, projects, HR & more. No credit card required.

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