Çalakkirina tevlihevkirina jit - çareseriyên pirsgirêkan
Wateya xeletiya JIT çi ye?
Di dema xwe dexeletkirintaybetmendiyek e ku Visual Studio dest pê dikedebuggerjixweber dema ku bernameyek, li derveyî Visual Studio dixebite, bi xeletiyek kujer re rûbirû dibe. Di dema xwe dexeletkirindihêle hûn berî ku sepandin ji hêla pergala xebitandinê ve were bidawîkirin çewtiyê lêkolîn bikin.
Di gotara dawîn de, me vekolîn ka JavaScriptCore, motora JavaScript-a Webkit-ê, tişt û nirxan di bîra xwe de tomar dike.
Di vê gotarê de ez dixwazim li ser JIT, berhevkarê tenê-di-dem, hinekî din hîn bibim. Ev rêzeya karanîna gerokê ji hêla SSD Secure Disclosure ve tê piştgirî kirin. Ji bo bêtir agahdarî, binihêrin danasînê Bi hêsanî danîn, berhevkarê tenê-di-demê de bytecode-a JavaScript-ê ku ji hêla makîneya nîgaşî ya JavaScript-ê ve hatî bicîhkirin, li kodê makîneya xwemalî berhev dike.
Dê kod berhev bike. Lê JIT di JavaScriptCore de hebkî nifştir e. Ji ber vê yekê em çawa dikarin pê fêr bibin? Ji bo ku hin çavkaniyên fermî yên Webkit-ê mîna vê gotarê li ser tevnvîsa Webkit-ê kontrol bike, ji Linus-ê seriştek xweş stend.
JavaScriptCore CSI: Çîrokek Lêpirsîna Malpera Qeşmer. Todayro ez ê hin ji van amûrên ku endezyarên WebKit bikar tînin bi vegotina çîroka ku me çewtiyek rastîn di JSC Makîne Virtual (VM) de teşxîs kir, vebêjim. Ev tevnvîsek e ji bo mirovên ku dixwazin tevkariyê li Webkit bikin, û nivîskar gelek têgihiştinên pir hêja parve dike ka meriv çawa çewtiyek têk dibe da ku sedem bibîne.
That's tiştê ku em dixwazin wekî lêkolînerên ewlehiyê dixwazin fêr bibin ev e. Mînakî, ew diyar dike ka meriv çawa çêkirina navgînek paqijkerê navnîşanê ya Webkit-ê vedike da ku çewtiyên mimkun ên wekî zêdebûna heap-ê an pirsgirêkên piştî-belaş-ê bikar bînin, ku pir caran bi bernameyên normal re yekser naşewitin. Lê em nuha bi tiştên JIT re eleqedar dibin.
Further bêtir di gotarê de em jêrîn dibînin. JSC bi gelek tebeqeyên motorên darvekirinê tê. Dibe ku we li vir li ser vê yekê xwendibe, ev gotarek danasîna FTL JIT e.
4 tebeqe hene: Tier 1: wergêrê LLInt Tier 2: Bilezînerê JIT Berhevkar Tier 3: DFG JIT û Tier 4: FTL JITS Ji ber vê yekê Tier 1 wergêrê rêkûpêk e. Ev makîneya bingehîn a JavaScript-a bingehîn e. Em dikarin zûka li pelê çavkanî LowLevelInterpreter.cpp, ku tê de loopê wergêr, binêrin.
Ji ber vê yekê ew tenê di bytecode Javascript-ê re derbas dibe û dûv re her vegotinê pêk tîne. Ji ber vê yekê ... heke niha ji fonksiyonê re timûtim bang were kirin, ew dikare 'germ' bibe.
realtek dorpêçê virtual
Ev bêjeyek e ku diyar dike ku gelek tişt hene. Then hingê JavaScriptCore dikare biryar bide ku fonksiyona JIT bi qonaxa yekem. JIT-a bingehîn.
In di pelê pêwendîdar JIT.cpp de em dikarin dîsa hin agahdariyên din bigirin. Ger LLInt kifş bike ku di JIT-a bingehîn de navnîşek OSR-ê di nav xelekekê de heye, ew derbasî bytecode-ê dibe ku dema ku dest bi berhevdana me kirî hate pêkanîn.
Em tenê hewce ne ku ji bo her tiştê ku ji wê berdêla bytecode gihîştî ye koda berhev bikin. OSR, Li Ser Guhestina Stack, di bingeh de celebek JIT-ê ye ku dihêle hûn li ser balafirê biçin ser koda berhevkirî. Ew hîna jî bi bytecode-ê re pir lihevhatî ye, da ku meriv bipeyive, ji ber ku hîn jî çu optimîzasyonên din çênebûne.
Ji 'Nasandina Webkit FTL JIT:' em jî dixwînin: Yekem pêkanîna fonksiyonekê her gav di tebeqeya wergêr de dest pê dike. Gava ku daxuyaniyek di fonksiyonê de ji 100 carî zêdetir were darve kirin an ji fonksiyonê re ji 6 caran zêdetir were gotin (kîjan pêşîn were), darvekirin ji bo koda ku ji hêla JIT-a bingehîn ve hatî berhev kirin ve tête rêve kirin ku hin ji yên jorîn ên Wergêran ji holê radike, lê heye nebûna optimizations berhevkar cidî. Hema ku di koda bingehîn de fermanek ji 1000 carî zêdetir tê xebitandin an jî fonksiyona bingehîn ji 66 carî zêdetir tê gotin, em ê darvekirinê vegerînin DFG JIT. DFG ji bo Grafika Danûstendina Daneyê ye, da ku ew hinekî qala wê bike ev gav çi ye.
Di gotarê de wêneyek xweş jî heye ku xeta boriya DFG vedibêje. DFG dest bi veguheztina bytecode-ê di formata DFG-CPS de dike. CPS tê wateya Styleêwaza Berdewam-Derbasbûnê, ku tê vê wateyê ku koda we vegerê bikar nayîne, lê li şûna wê berdewam dike û derbasî fonksiyona din dibe.
Ger we berê geşedanek NodeJS Express kiribe, hûn dikarin wê mîna têkiliyên herikîna fonksiyona din () ên di navbera guhêrbar û yên demkî de bifikirin. Piştre agahdariya profîlasyonê ji bo destnîşankirina celebên texmînan tê bikar anîn, û ew texmîn têne bikar anîn ku komek kêmîn a testên tipê werin destnîşan kirin. Optimîzasyonên berhevkar ên kevneşopî dişopînin.
Berhevkar ji grafika herika daneyê rasterast koda makîneyê çêdike, ji ber vê yekê ev e ku tişt balkêş dibin. Berhevkar JIT celeb texmîn dike, û heke JIT bawer bike ku celeb naguherin, JIT dikare biryar bide ku hin venêran derxîne. Ku bê guman dikare koda kodê bileztir bike heke ew fonksiyonek ku tê gotin Lê ev ne hemî ye.
Piştî DFG JIT hîn jî JIT heye. FTL - ji ronahiyê zûtir. Dema ku ev ajal hate destnîşankirin, wî paşnavê berhevkarê navdar LLVM bikar anî da ku pir xweşbîniyên berhevkar ên tîpîktir bicîh bîne FTL JIT hate pêşxistin da ku optimîzasyonên C-mîna êrîşkar bîne JavaScript-ê.
Di demekê de, LLVM ji hêla B3 ve hate guhertin, lê raman yek e. This ev berhevkarê JIT-ê dikare di derheqê kodê de hêj bêtir texmînan bike. Lê ka em hinekî lê mêze bikin, ku dîsa li ku gotara lêpirsîna qeza çêtir e.
Ew gelek guherbarên hawîrdorê destnîşan dike ku dikarin werin bikar anîn da ku tevgera JIT-ê were kontrol kirin û hilberîna çewtkirinê bikarbînin. Mînakî, em dikarin JSC_useJIT bikar bînin da ku JIT bi tevahî seqet bikin, an JSC_useFTLJITJ bikar bînin da ku tenê FTL, qonaxa dawîn neçalak bikin. An jî em dikarin têlên ku JIT paralel dikin bêbandor bikin.
An jî em dikarin her carê ku JIT optimîzasyonekê dike rapor û çap bike. Ji ber vê yekê di lldb de min guhêrbariya hawîrdorê saz kir ku her tiştî vemirîne û dûv re JSC ji nû ve dest pê bike, ev jixwe di hin çapên debugkirina optimîzasyona JIT de encam dide. Ger hûn li navên fonksiyonên ku hatine darvekirin mêze bikin, wusa dixuye ku tiştên wekî charAt, abs, hwd. Berê hatine tewandin.
Lê naha em dixwazin fonksiyona xweya JIT-ê, fonksiyona eoverflow-ê bikin, ku hejmarek hêsan wekî pîvanek digire, dûv re guherînek encamê amade dike û ji i = 0-an n vedigerîne û bi encam dike. germ ”. Em dikarin vê yekê bi xelekek hêsan a ku vê fonksiyonê bang dike re bikin.
Ka em tenê bi çar guhertoyan dest pê bikin. Ew hin derketinê nîşan dide, lê ya ku em dixwazin nîşan nade. Tewra 10 caran di xelekan de darvekirin jî tiştek nake.
Lê 100 caran pêkanîna fonksiyonê dê JIT-a bingehîn bide destpêkirin. Li vir hevkêşeyek koda civînê ya fonksiyona Javascript-ê tête berhev kirin. Ka em biceribînin ku J anTek hêj êrişker bidin meşandin. ka em xelek zêde bikin.
Bo Boom DFG Jit ...
Now naha werin em bi tevahî dîn bibin, loopê sererast bikin. FTL Jit. boom, derketinek pir zêde heye, lê rastgo bêjim, tu raman wateya vê yekê çi ye.
Lê tiştê herî girîng tenê ev e ku em fêrbûnên cûda yên çewt û hîleyên ku em kûrtir bikin fêr bûn. Naha hûn di derbarê berhevkarê JIT de hinekî din jî dizanin. Ji gotara paşîn jî hûn dizanin ka çawa tiştan, rêzikan û nirxên JavaScript-ê di bîrê de têne nimînandin.
Naha ramana jêrîn bifikirin. Ger berhevkarê JIT di kodê de texmîn dike û cûreyan digire dest xwe û venêran radike û, mînakî, bi hêsanî wan ji bîranînek diyarkirî bar dike, gelo dibe ku ew were îstismarkirin? Tenê bi hîpotetikî, bêjin, koda JIT li bende ye ku rêzeyek duçûtirên JavaScript-ê hebe û rasterast li hember wan Bersivan re bike. Hingê berhevkar JIT hemî venêran çêtir dike, lê hingê hûn ê awayek bibînin ku navnîşek nav rêzê bi hêmanekê veguherînin.
Naha dê objeyek wekî pointer di vê array de were bicîh kirin. Ji ber vê yekê heke koda jied tune ku kontrol bike û navnîşa yekem a vê rêzikê vegerîne, mînakî, ew ê wê nîşankerê du qat vegerîne, ne rast? Ew ê pir xirab be, û '' Ew bi rastî yek ji nimûneyên qelsiya rûgera gerok e û em ê di çalakiyê de zû bibînin. Lê JIT çawa hewl dide pêşiya tiştên weha bigire? Belê, derket holê ku pêşdebir hewl didin ku her fonksiyona ku bandorê li ser ramanan dike model bikin. berhevkar JIT heye.
Ji ber vê yekê heke tiştek hebe ku dikare ravekirina vê rêzikê biguherîne, mînakî heke tiştek li rêzeyek ducar were danîn, wê hingê divê fonksiyonek weha wekî xeternak were nîşankirin. Ka ez ji vê gotara ZDI-ya derheqê kurteyek jê re vebêjim. 'BERXWEDANA GIRTINON XWE: Rêbernameyek ji bo berhevdanên JIT' bixwînin.
Li vir ew dinivîsin: Awayê ku bêje operasyonek bi potansiyelî xeternak e ku pêşî li optimîzasyonên pêşerojê bigire ev e ku meriv fonksiyonek bi navê clobberWorld bi nav dike ku, di nav tiştên din de, hemî ramanan di derbarê celebên hemî rêzikên nav grafîkî de dişikîne. Ji ber vê yekê motora Javascript-ê hewl dide ku bi gazîkirina clobberWorld her tiştê ku bandorên wê yên potansiyel hebe nîşan bike. Bandorên alî dikarin bibin tiştên ku em tenê li ser wan difikirîn mîna guhertina celebek nirxek û tiştek din li hêviya wê guhertinê nebû.
Ji ber vê yekê li vir fonksiyona clobberWorld e, ku di beşa DFG-JIT de tête bicîh kirin. Ev gazî avahiyên clobber dike, ku setStructureClobberState bi baldarî datîne ser StructuresAreClobember eşkere tiştên ku li wir, bo nimûne, avahiya nesneyek diguheze. Ka em bibêjin JIT gihîştina taybetmendiyek .x ya li ser tiştê çêtir dike, û ji nişkê ve hûn wê radikin, ew hewce ye ku were nîşankirin ku avahî guherî ye da ku koda JIT-ê were avêtin, nebe ku hûn ê vê jitter-ê bikar bînin fesadiya bîranînê bistînin karî.
Lê êdî bes e. Di gotara din de em derbasî îstismara Linus dibin, ku dozek wusa xirab dike.
Dema ku çewtkirina JIT-ê çalak be dê ji bilî veqetandek bê destûr ji JIT-ê re were şandin?
BerbikêrkirinDi dema xwe de (JIT)xeletkirin, pelê mîhengê ji bo vê sepanê an komputerê (makîne. mîheng) divê hebejitDebuggingnirxa ku di pergalê de hatî danîn.Dema ku çewtkirina JIT-ê çalak be,her îstîsnayek bêserûber dê ji nûvekêşana JIT re were şandinji ber ku di vê qutîka diyalogê de nayê xebitandin li ser computerê qeydkirî ye. '
Ez çawa dikarim çewtkirina JIT-ê seqet bikim?
Di Panela Kontrolê ya Windows> Torgilok û Internetnternet> Vebijarkên Internetnternetê de, hilbijêrinNeçalak bikenivîsxeletkirin(Internet Explorer) ûNeçalak bikenivîsxeletkirin(yên din).23 gulan 2018
Ma ez çawa sererast bikim Çênebûyera JIT-a qeydkirî nehatî diyar kirin?
Çu defterek JIT-a tomarkirî nehat diyarkirin. Ji nû ve bikirtînin da ku pêvajo li bendê bimîne dema adebuggerbi destan. Ji bo betalkirinê Bişkojkê bikirtîninJITdaxwaza debugê.10ê Gulana 2018an
Meriv çawa dikare ji bo Microsoft.NET 'xeletkirina JIT ' çalak bike?
'Di serlêdana we de îstîsna bêserûber pêk hat ..... Pergal nikare pelê diyar kirî bibîne ... Ji bo çalakkirina xeletiya Just In Time (JIT), divê pelê .config ji bo vê sepanê an komputerê (machine.config) hebe nirxa jitDebugging di beşa system.windows.forms de hatî danîn. Pêdivî ye ku serlêdanê bi verastkirina çalakkirinê jî were berhev kirin.
Ma qutiyek diyaloga xeletkirina di wextê de (JIT) heye?
li şûna vê qutiya diyalogê xeletkirina tenê-di-demê (JIT) de. System.UnauthorizedAccessException: Gihîştina riya 'C: Program Files (x86) BotBoy prefs.xml' nayê pejirandin. nirxa jitDebugging di beşa system.windows.forms de hatî danîn. çalak kirin. ji dêvla ku bi vê qutiya diyalogê were rêve birin. Ev xelek girtî ye.
userinit.exe wêneyê xirab
Meriv çawa tenê di xeletiya demê de çalak dike an neçalak dike?
Ji bo çewtkirina Just-In-Time-ê çalak bikin an neçalak bikin: 1 Di pêşeka Amûran an Debugê de, Vebijarkan hilbijêrin & gt; Debugging & gt; Di dema xwe de. 2 Di Debugkirina Tenê-Di-Demê de ji bo van celebên qutiya kodê Çalak bikin, celebên koda ku hûn dixwazin Debugkirina Tenê-Di-Demê de hilbijêrin hilbijêrin: Birêvekirî, Niştimanî, û / an Nivîsar. 3 OK hilbijêrin. See More ...
Ez ê çawa vê pirsgirêkê di JIT de çareser bikim?
Ez ê çawa vê pirsgirêkê çareser bikim? li şûna vê qutiya diyalogê xeletkirina tenê-di-demê (JIT) de. System.UnauthorizedAccessException: Gihîştina riya 'C: Program Files (x86) BotBoy prefs.xml' nayê pejirandin. Nirxa jitDebugging di beşa system.windows.forms de hatî danîn. çalak kirin. ji dêvla ku bi vê qutiya diyalogê were rêve birin. Ev xelek girtî ye.