Sun ba da shawarar haɗawa a cikin kwaya ta Linux aiwatarwa har zuwa sau 4 cikin sauri na memchr

Kwanan nan an fitar da wani tsari na kernel na Linux, wanda aka ba da shawarar haɗa saitin faci tare da a ingantaccen aiwatar da aikin memchr(). ana amfani da shi don nemo hali a cikin tsararru.

Aikin memchr() yana duba manyan n bytes na wurin ƙwaƙwalwar ajiya da aka nuna ta s don misalin farko na c. Dukansu c da bytes a cikin wurin ƙwaƙwalwar ajiya da aka nuna ta s ana fassara su azaman haruffa marasa sa hannu.

Da shawara alkawuran yi sauri don gano wani hali a cikin toshe ƙwaƙwalwar ajiya. A cikin gwaje-gwajen masu haɓakawa, sabon aiwatarwa na iya zama kusan sau huɗu cikin sauri akan manyan bincike

Ba kamar sigar baya ba, wacce tayi amfani da kwatancen byte-byte, an ƙirƙiri aiwatar da aiwatarwa ta la'akari da cikakken amfani da rajistar CPU 64-bit da 32-bit. Maimakon bytes, ana yin kwatancen ta amfani da kalmomin inji, wanda ke ba da damar kwatanta akalla 4 bytes a lokaci guda.

Wannan jerin faci sun inganta "memchr()" kuma sun kara macro don
"memchr_inv()" domin ayyukan biyu su yi amfani da shi don samar da bitmask.

Asalin aiwatar da "memchr()" ya dogara ne akan kwatancen byte,
wanda baya amfani da cikakken rajista na 64 ko 32 a cikin CPU. Muna aiwatar da a
kwatanta da kalmomi ta yadda za a iya kwatanta akalla 4 bytes da iri ɗaya
yanayi. Ingantaccen memchr() ya kusan sau 4 sauri fiye da na asali
don dogon sarƙoƙi. A cikin Linux Kernel, mun sami cewa tsayin kirtani
Neman ta "memchr()" ya kai 512 bytes a cikin direbobi/misc/lkdtm/heap.c.

Lokacin bincike akan manyan igiyoyi, Sabuwar sigar ta juya ta kasance kusan sau 4 sauri fiye da tsohuwar (misali, don kirtani na haruffa 1000). Don ƙananan sarƙoƙi, ingantaccen sabon aiwatarwa ba shi da mahimmanci, amma har yanzu yana da girma fiye da sigar asali.

Abu mai ban sha'awa game da sabon tsari shine haɓakawa ga manyan sarƙoƙi, wanda ke inganta lokutan da yawa. Yana da kyau a ambaci cewa a cikin kernel Linux, Girman igiyoyin da aka sarrafa a cikin memchr() ya kai 512 bytes. A cikin gwaje-gwajenmu, haɓakar wasan kwaikwayon don igiyoyin 512-byte, a cikin halin da ake ciki inda halin bincike yana a karshen kirtani, shine 20%.

Yana da kyau a faɗi cewa ainihin sigar memchr() ana aiwatar da ita tare da dabarar kwatanta hikimar byte, wacce ba ta cika amfani da rijistar akan 64-bit ko 32-bit CPU.

Muna amfani da kwatancen kalmomi gabaɗaya domin a iya kwatanta haruffa 8 a lokaci guda akan CPU. Wannan lambar ta dogara ne akan aiwatar da David Light.

Muna ƙirƙirar fayiloli guda biyu don auna aikin fayil ɗin farko wanda ke ƙunshe da matsakaita haruffa 10 gabanin halin da aka nufa. Fayil na biyu ya ƙunshi aƙalla haruffa 1000 kafin manufa hali.

Aiwatar da mu na "memchr()" kadan ne mafi kyau akan gwajin farko kuma kusan sau 4 da sauri fiye da na asali aiwatarwa a gwaji na biyu.

Gwajin Kernel 5.18 tare da sabon nau'in "memchr()" don gine-ginen 32-bit da 64-bit bai bayyana wata matsala ba.

Menene zai faru idan p ba 8 ba (ko 4 akan 32 bit hari) byte daidaitacce? Ba duk makasudin ba ne ke goyan bayan lodi marasa daidaituwa (m) ba, daidai?
 Ina tsammanin yana aiki idan p bai daidaita 8 ko 4 byte ba. Bari mu ce kirtani 10 bytes ne. Madauki a nan zai nemi 8 bytes na farko. Idan yanayin inda aka nufa yana cikin bytes 2 na ƙarshe, na biyu don madauki zai same shi. Hakanan yana aiki kamar wannan akan injunan 32-bit.

Gabaɗaya ribar aikin ba a tantance ba tukuna na kernel subsystems lokacin amfani da ingantaccen bambance-bambancen "memchr()", kuma ba a tattauna ko za a soke aiwatarwa ba (kiran aikin memchr() yana faruwa sau 129 a cikin lambar kernel, gami da direbobi da tsarin fayil).

Finalmente Idan kuna da sha'awar sanin game da shi, zaka iya duba bayanan A cikin mahaɗin mai zuwa.


Bar tsokaci

Your email address ba za a buga. Bukata filayen suna alama da *

*

*

  1. Wanda ke da alhakin bayanan: Miguel Ángel Gatón
  2. Manufar bayanan: Sarrafa SPAM, sarrafa sharhi.
  3. Halacci: Yarda da yarda
  4. Sadarwar bayanan: Ba za a sanar da wasu bayanan ga wasu kamfanoni ba sai ta hanyar wajibcin doka.
  5. Ajiye bayanai: Bayanin yanar gizo wanda Occentus Networks (EU) suka dauki nauyi
  6. Hakkoki: A kowane lokaci zaka iyakance, dawo da share bayanan ka.