Ivo vakafunga kusanganisa muLinux kernel kuita kusvika ku4 nguva nekukurumidza memchr

Munguva pfupi yapfuura chikumbiro cheLinux kernel chakaburitswa, umo inokurudzirwa kuisa seti yezvigamba zvine a yakagadziridzwa kuita kwe memchr () basa inoshandiswa kutsvaga mavara ari muhurongwa.

Iyo memchr () basa rinotarisa inotungamira n bytes yenzvimbo yekurangarira inongedzerwa ne s kwekutanga muenzaniso we c. Ose c nemabhayiti munzvimbo yendangariro anongedzerwa na s anodudzirwa semavara asina kusaina.

Chirongwa anovimbisa kurumidza kutsvaga munhu mukati mebhokisi rendangariro. Mune bvunzo dzekuvandudza, iyo nyowani yekushandisa inogona kukurumidza kanokwana kana pakutsvaga kukuru

Kusiyana neshanduro yapfuura, iyo yakashandisa kuenzanisa kwebyte-byte, iyo yakarongwa kuita inogadzirwa tichitarisa kushandiswa kwakazara kwe64-bit uye 32-bit CPU marejista. Panzvimbo pemabheti, kuenzanisa kunoitwa uchishandisa mazwi emuchina, ayo anobvumira kanenge 4 bytes kuenzaniswa panguva.

Iyi nhevedzano yezvigamba yakagadziridza "memchr()" uye yakawedzera macro ye
"memchr_inv()" kuitira kuti mabasa ese ari maviri anogona kuishandisa kugadzira bitmask.

Kuitwa kwekutanga kwe "memchr()" kunobva pakuenzanisa kwebyte,
iyo isingashandisi zvizere iyo 64 kana 32 bit rejista muCPU. Tinoita a
kuenzanisa nemashoko kuitira kuti angangoita mana mabhayiti anogona kuenzaniswa neamwechete
weather. Iyo optimized memchr() inomhanya zvakapetwa ka4 pane yekutanga
nokuda kwengetani refu. MuLinux Kernel, tinoona kuti kureba kwetambo
yakatsvagwa ne "memchr()" inosvika 512 bytes mu drivers/misc/lkdtm/heap.c.

Kana uchitsvaga patambo huru, iyo vhezheni itsva yakave yakakurumidza 4 nguva kupfuura yekare (semuenzaniso, kune tambo dzemavara 1000). Kune maketani maduku, kushanda kwekushandiswa kutsva hakusi kwakakosha, asi kuchiri kwakakwirira kudarika shanduro yepakutanga.

Chinhu chinonakidza pamusoro pechikumbiro chitsva ndiko kuvandudzwa kwemaketani makuru, ayo anovandudza nguva zvakanyanya. Zvakakodzera kutaura kuti muLinux kernel, saizi yetambo dzakagadziriswa memchr () inosvika 512 bytes. Mumiyedzo yedu, kuita kunowanikwa kwe512-byte tambo, mune mamiriro ekutsvaga hunhu iri pamagumo etambo, iri 20%.

Zvakakodzera kutaura kuti iyo yekutanga vhezheni ye memchr () inoshandiswa neiyo byte-huchenjeri kuenzanisa nzira, iyo isingashandisi zvizere marejista pa64-bit kana 32-bit CPU.

Isu tinoshandisa izwi rose kuenzanisa kuitira kuti 8 mavara anogona kuenzaniswa panguva imwe chete paCPU. Iyi kodhi yakavakirwa pakuitwa kwaDavid Chiedza.

Isu tinogadzira mafaira maviri kuyera kushanda kwefaira rekutanga iyo ine paavhareji mavara gumi pamberi penzvimbo yekuenda. Iyo yechipiri faira ine angangoita 1000 mavara pamberi pe chinangwa chemunhu.

Kuitwa kwedu kwe "memchr()" zvishoma zviri nani pabvunzo yekutanga uye dzinenge 4 nguva nekukurumidza kupfuura yekutanga kushandiswa mumuedzo wechipiri.

Kernel 5.18 kuyedza ine nyowani "memchr()" musiyano we 32-bit uye 64-bit zvivakwa haana kuburitsa chero dambudziko.

Chii chinoitika kana p isiri 8 (kana 4 pa 32 bit targets) byte yakabatana? Hazvisi zvese zvinangwa zvinotsigira zvisina kuenderana (zvinobudirira) mitoro, handiti?
 Ini ndinofunga inoshanda kana p isiri 8 kana 4 byte yakabatana. Ngatiti tambo ndeye 10 bytes. Iyo ye loop pano ichatsvaga yekutanga 8 bytes. Kana hunhu hwekuenda huri mu2 bytes yekupedzisira, yechipiri yeloop ichaiwana. Inoshandawo seizvi pamichina ye32-bit.

Kuwanda kwekuita kwese kusati kwaongororwa ye kernel subsystems paunenge uchishandisa yakagadziridzwa "memchr ()" musiyano, uye hazvina kukurukurwa kuti kupfuudza kuita (iyo memchr () basa rekufona rinoitika ka129 mukernel kodhi, kusanganisira vatyairi nemafaira masisitimu).

Finalmente Kana iwe uchifarira kuziva zvakawanda nezvazvo, unogona kutarisa ruzivo Mune inotevera chinongedzo.


Siya yako yekutaura

Your kero e havazobvumirwi ichibudiswa. Raida minda anozivikanwa ne *

*

*

  1. Inotarisira iyo data: Miguel Ángel Gatón
  2. Chinangwa cheiyo data: Kudzora SPAM, manejimendi manejimendi.
  3. Legitimation: Kubvuma kwako
  4. Kutaurirana kwedata
  5. Dhata yekuchengetedza: Dhatabhesi inobatwa neOccentus Networks (EU)
  6. Kodzero: Panguva ipi neipi iwe unogona kudzora, kupora uye kudzima ruzivo rwako