Press "Enter" to skip to content

GOTO 2012 • Dynamic Lang. in Production: Progress & Open Challenges • Brian Cantrill & Dave Pacheco


buongiorno a tutti, sono Brian Cantor
Sono qui il mio collega Dave the Chico I
da Joyent, quindi parleremo
particolare sulla distribuzione di sistemi in
la produzione e so che che
a volte le persone corrono per le loro vite
quando sentono la produzione parola così
cercheremo di facilitare portando
speriamo che cosa sia una figura familiare
forse a qualcuno di voi, quindi questo è John
McCarthy e ovviamente lui ed è fantastico
per vederti salgono le mani e così tante
riconoscere uno dei veri uno dei
pionieri del linguaggio di programmazione John
McCarthy è scomparso di recente e ancora via
John McCarthy ha inventato il Lisp naturalmente
e Lisp è credo che mi senta libero di farlo
correggimi se ho torto ma Lisp lo è
il primo linguaggio interpretato è il
primo linguaggio dinamico o il primo il
inizio di un linguaggio dinamico ed è
in realtà molto interessante da leggere il
la storia di Lisp era un’interpretazione
linguaggio quasi per caso, in realtà
non lo sapevano, ma ci stavano provando
per progettare un linguaggio compilato intendo
questo è per il presente è la parte posteriore IBM 704
nel giorno in cui stavano cercando di progettare a
linguaggio compilato ed erano solo loro
tipo di caduto che era in realtà
solo più facile da implementare le cose da fare
ha interpretato e poi l’hanno fatto
scoperta incredibile che una volta il
il linguaggio è stato interpretato come potresti
effettivamente spostare più velocemente l’esistenza di un
interprete e l’assenza di
le dichiarazioni lo rende particolarmente
naturale usare le liste in una condivisione del tempo
ambiente è conveniente da definire
le funzioni li testano e li modificano nuovamente
senza mai lasciare la liscivia
interprete e anche questo è stato il primo a
la fine degli anni ’50 era quella lista
sviluppato e il primo Lisp
interpreti circa 1960 quindi questo è un
molto tempo fa e la cosa che è
sorta di interessante per me di questo è
che fin dall’inizio la dinamica
le lingue interpretate erano le lingue
sulla produttività del programmatore che è il
motivo per cui usiamo queste lingue la ragione
non scriviamo tutto in C o
in realtà anche il montaggio è tutto il tempo
perché ci vorrebbe più tempo sarebbe
prendici più tempo perché alcuni aspetti
ne è più difficile e ne è certo
cose che sono più noiose in queste
lingue di livello inferiore quindi queste più in alto
linguaggi interpretati dinamici di livello di
quale
javascript è uno tutto su come fare
siamo più produttivi come programmatori ora
per molti anni intendo che hai Lisp is is
un ambiente interpretato nel 1960 ma
le lingue interpretate non entrano veramente
il mainstream fino alla metà degli anni ’90, ora io
sappi che sai che piccole chiacchiere sono
il latte materno e un sacro qui e io così
Voglio voglio rispettare questo ma il
la realtà è che non stavamo tutti programmando
chiacchiere a metà degli anni ’90 Mi dispiace tanto
non è perché le chiacchiere non erano
ovviamente superiore a tutto ciò
veniva fatto sempre nella storia di
umanità perché sono sicuro che probabilmente
era
Sono sicuro che sia saggio dirlo adesso
comunque, abbiamo lavorato con linguaggi dinamici
non era diventato mainstream e questo è per a
sacco di motivi e ora sto andando io sono
calpestare molto delicatamente e con sensibilità
ma dirò che parte di questo è stato
il fatto che le CPU fossero in realtà
underpowered rispetto a ciò che questi
gli ambienti stanno cercando di fare DRAM era
sotto dimensioni relative a ciò che questi
gli ambienti stanno cercando di fare e sì
puoi e c’è il nostro fantastico
pubblicazioni su chiacchiere ad essere
implementato su risorse molto limitate
macchine ma la realtà era che non lo era
la corrente principale dei linguaggi dinamici in
la metà degli anni Novanta e poi ma le cose
stavano migliorando e le cose stavano diventando
migliore e più veloce e il mondo era
pronto per una sorta di dinamica di breakout
lingua e l’abbiamo visto in Java per
meglio o male quando era Java
introdotto nel 1995 è diventato così rapidamente
uno dei più popolari al mondo
lingue che penso tu non possa aiutare
ma sostengo che il mondo era pronto
il mondo era pronto per essere più in alto
strato di astrazione e Java era
fantastico perché specialmente quando
ne conosci cinque o sei o sette anni
più tardi quando altre lingue iniziarono a
fiore in cima alla JVM che ora siamo
in un ambiente che è fantastico
che sono le lingue dinamiche
ovunque e per cui vengono usati
software di produzione reale che è fantastico
perché ci rende molto di più
produttivi possiamo andare a fare queste cose e
costruire le cose in modo molto più rapidamente di oggi
di quanto potessimo anche dieci anni fa, perché
di queste lingue quindi è molto
importante
che c’è anche un lato oscuro che c’è
un lato oscuro di queste dinamiche
ambienti sì è molto veloce
costruire cose e questo per introdurre questo
lato oscuro stiamo andando andare in un altro
pioniere qualcuno sa chi è
quindi McCarthy è la tua tribù
questo ragazzo è mio così Dylan oh questo è così
questo in realtà ha vinto il suo tour prima
McCarthy ha vinto il suo è Morris Wilkes
Morris Wilkes è su di esso è uno dei
primi pionieri del computer
lui e il suo team a Cambridge si sono sviluppati
l’EDSAC che è stato il primo vero
computer con programmi memorizzati sì
ENIAC era una macchina ma Edsac era davvero
la prima vera incarnazione di Von
La visione di Neumann è una macchina molto importante
e Wilkes è un pioniere tremendo in
molti saluti ma questa citazione da Wilkes
quando l’ho letto per la prima volta come un ragazzo che ho sentito
che Wilkes mi stava parlando dall’altra parte
i decenni che non appena abbiamo iniziato
programmazione abbiamo trovato la nostra sorpresa che
non era così facile ottenere programmi giusti
come pensavamo fosse il debugging
ho scoperto che posso ricordare l’esatto
istante in cui ho capito che un grande
parte della mia vita da quel momento stava andando
da spendere nel trovare errori nel mio
possedere programmi che è vero oggi come lui
era proprio il primo programma memorizzato
computer in realtà ne farei uno
piccolo aggiustamento a ciò che sono io
ricorda l’esatto istante in cui io
capito che gran parte della mia vita
da quel momento in poi avrebbe trovato il
errori di altri che non troviamo solo
i nostri stessi errori troviamo gli errori di
anche gli altri e penso di essere
certo che c’è come una macchina ci deve essere un
equilibrio di caramello per il mondo intendo io
pensa che non tutti ci sentiamo come se
spesso troviamo i bug e altro
codice della gente ma in ordine per tutto questo
per essere vero ci devono essere persone che
stanno introducendo molti altri bug che potrebbero
loro stessi stanno facendo il debug, è vero io
non so che non ho alcuna spiegazione è
come un tizio
un ragazzo se solo potessimo trovarlo, facciamolo
vai a trovare quel ragazzo che è un problema lui è un
problema ma così intendo la realtà è
probabilmente abbiamo tutti torto e probabilmente
è tutto ciò che sai come te
tutti pensano che la nostra flatulenza
puzza bene , è quel tipo di
cosa ti dimentichi dei tuoi bug
siamo tutti passare il tempo in ogni altro di
codici giusto così sai che ne abbiamo 10
persone su una squadra stiamo spendendo un sacco di
il nostro tempo nel codice di altre persone comunque
quindi immagino che abbia un senso
questa prospettiva ha un senso
quindi questi linguaggi dinamici hanno un
problema di debug molto serio intendo
che sono fantastici è così
fantastico per la produttività del programmatore ma
in realtà cercando di eseguire il debug di queste cose
quando si dirigono a sud può essere davvero
davvero brutto ora nella realtà è
quello per mettere a punto il tuo così
hai un programma in cui è in esecuzione
VM e il programma si sono spostati lateralmente
sta facendo qualcosa che tu non vuoi
fare per essere in grado di ragionare
su cosa ti sta facendo quel programma
c’è bisogno di una grande quantità di VM
specificità che devi avere e così
al fine di essere in grado di eseguire il debug di questi
le cose che abbiamo storicamente avuto queste
ambienti di sviluppo integrati e
ci permettono di fare cose molto potenti
Intendo essere giusto che gli IDE siano venuti a
lunga strada negli ultimi 10-15 anni e
lo sviluppatore in fase di sviluppo è in grado di
in realtà il debug e capire il proprio
software ed è fantastico il problema
è quello che è stato l’obiettivo esclusivo di
debug di linguaggi dinamici che quando
quando quel software si sposta da no
gestire uno sviluppo ma correre dentro
produrre gli strumenti di debug che noi
non sono solo anemici ma
storicamente inesistente per questi
ambienti dinamici e tu hai questo
questa scatola nera la VM in cui tu
non può ragionare su ciò che è in esecuzione
dentro sì sta eseguendo le istruzioni
sul microprocessore ma su quelli
le istruzioni sono le nostre in tal modo sono così
molto in basso rispetto al codice di alto livello attuale
è stato generato che lo è
straziante per arrivare davvero a quello
codice di alto livello e quindi quali sono i
vincoli di sviluppo approssimativo
forma ciò che è una parte di produzione cosa fare
intendi con questo
quindi un ambiente adatto è il codice
che le persone dipendono dal giusto e
in però quelli che quell’ambiente
non puoi semplicemente modificare l’applicazione
aggiungere dichiarazioni di debug
spesso non riesci nemmeno a ricominciare
l’ applicazione ma questo codice è
effettivamente utilizzato attivamente tutto il
tempo ed è molto difficile da aggiungere
effettivamente distribuire versioni modificate a
ottenere più informazioni di debug che non è possibile
supponiamo che l’errore sarà
riproducibili quelli di voi che sono
sviluppatori di software contro il
concentrati sul lato OP sai che quando
hai un bug in produzione il primo
cosa che voglio fare è andare riprodurlo
nello sviluppo il problema è che il nostro
i sistemi di produzione sono così complicati
ora che abbiamo molti bug che tu
semplicemente non può riprodursi nello sviluppo
e anche se riproduci il bug in
sviluppo come sai di avere
riprodotto il bug corretto e non solo
i sintomi dell’insetto quindi non puoi
non posso presumere che sarai in grado
per riprodurre queste cose a tutti lascia
da solo nello sviluppo e il fallimento
le modalità stesse potrebbero anche non a volte
sono esplosivi e tu ottieni uno stack
traccia e prova a ragionare su di esso ma
spesso non sono transitori
o l’app entra nel buco nero
infelicità, ragione per cui le compagnie aeree
sembra farlo più di me
non voglio prendere su compagnia aerea ma compagnie aeree
sembra amare il buco nero della miseria
Messenia ma tu vai in questi ambienti
dentro e loro solo stanno facendo
qualcosa di coniglio sta consumando tutti i 16
core e al cento per cento
è come il coniglio che stai eseguendo 32
miliardi di istruzioni al secondo che è un
un sacco di calcoli che diavolo sei
per favore dimmi cosa stai facendo
non abbiamo idea quindi è necessario
questi sono i limiti del problema
è che dobbiamo essere in grado di camminare fino a
questa cosa che ha fallito in modo transitorio
i fallimenti non sono riproducibili e noi
Devo essere in grado di capirlo così io
significa che non conosco questi limiti
sembra impossibile, intendo come fai tu
possibilmente eseguire il debug di qualsiasi cosa Dave come facciamo noi
forse il debug nulla distacco
buona domanda Brian così per questo ci rivolgiamo
ancora una volta alla storia e questo è
una citazione da un articolo del 1951
essenzialmente conosci l’alba di
calcolo come sappiamo che questo è Stanley
Branchia da una carta che è eccellente
la carta ha chiamato la diagnosi di errori
nei programmi sull’EDSAC avrei fortemente
consiglio di leggere questo se non lo sei affatto
interessato a questa roba lo sai
non richiede un sacco di fondo su
la macchina o altro, ma è a
carta eccezionale ma lui
questa osservazione in un modo che suona
molto eufemistico con cui dice esperienza
l’EDSAC ha dimostrato che anche se un massimo
la percentuale di errori può essere rimossa da
controllo preliminare lì frequentemente
sono rimasti errori che potevano solo avere
stato rilevato nelle prime fasi di
studi prolungati e laboriosi intendo
che questo è ovviamente un eufemismo destra
è come se non avessimo modo di farlo
hanno effettivamente capito queste cose
a meno che non abbiamo trascorso anni studiando il
codice alla ricerca di tutto ciò che potrebbe
forse va male e lui dice un po ‘
l’attenzione quindi è stata data a
il problema di affrontare gli errori
dopo che il programma è stato provato e
trovato fallire e poi prosegue
descrivere qualcosa che chiama il post
tecnica mortem che è un modo di
essenzialmente cercando di capire dopo
programma ha fallito quale stato del
macchina era e capire il
problema da quello che abbiamo avuto questo per
molto tempo ovviamente dal 1951 a
meno ed è su sistemi moderni che puoi
fai questo con i programmi nativi scrivi
i programmi che scrivi in C puoi ottenere a
core dump e con un core dump che puoi
guarda lo stato variabile globale che puoi
guarda tutti i fili che sono
intorno a te puoi presumibilmente molto
dei casi hai un po ‘di extra
informazioni sulle strutture degli oggetti
offset che ti permettono di esaminare dentro
dettaglio estremo ogni pezzo del
stato del programma quante persone hanno
ho visto una discarica core ok, è grandioso
Sapevo che eravamo nella stanza giusta questo è
ottimo dolce così e non ce ne sono due
importanti proprietà su questo troppo
ovvero quando un programma fallisce
fatalmente e discarica il nucleo sì un nativo
programma un programma C dire questo sistema
Voglio dire immediatamente che il processo termina
giusto così se stai usando qualche tipo di
riavviare immediatamente il sistema
riavvia il servizio e ripristina
servizio giusto e, soprattutto, puoi
prendi il manufatto di ciò che è il
core dump e copialo su un altro
sistema in cui hai molto
strumenti sofisticati per capire
cosa è successo così sei tu lo conosci
non c’è bisogno di aspettare un ingegnere per
sali su quel sistema e sai entrare a
debugger e sorta di colpetto intorno
nel frattempo le richieste di produzione non lo sono
essere revisionato perché questo programma è
fermato o lo stato sta cambiando da
sotto di essa in modo che il programmatore è
diventando confuso questo è estremamente
importante proprietà giusto questo è il
punto cruciale di ciò che stiamo ottenendo ed è
non è unico per noi, voglio dire, questo è
chiamato ingegneria forense un altro
dominio
altri domini hanno ingegneria forense
ed effettivamente ingegneria legale nel
la capacità di fare ingegneria forense è
ciò che ci consente di offrire una vita fondamentale
sistemi di sicurezza critici che si assomigliano
aviazione giusto ce ne sono solo quattro
incidenti aerei irrisolti negli Stati
Dichiara tutti e quattro quelli che precedono il
registratore di dati di volo e cabina di guida dell’orologio
registratore vocale letteralmente ogni altra
importante accento aereo e questo è ora
dagli anni ’60 è stato percorso causato e
quella via spesso sai che ce ne sono molti
cause principali sono fallimenti a cascata
e lo usiamo per riparare il sistema come un
risultato puoi pensare alla parte superiore del tuo
capo l’ ultima volta che è andato un grande aereo di linea
giù negli Stati Uniti gli aerei di linea
non è più in crash, in realtà è carina
incredibile che noi solo perché questi
i sistemi sono così maturi ma noi siamo
perché siamo stati in grado di fare forense
ingegneria è così francese contro l’ udito è
critico per tutti i domini di ingegneria no
solo software sì sì sì e credo
che tu sappia la domanda che sto dalla nostra
la prospettiva è è possiamo davvero fare
questo con ambienti dinamici e
formale , sai che io e Dave siamo
siamo oh s kernel ragazzi questo è come noi
sviluppare il kernel quando il kernel
Arresti anomali otteniamo sempre un completo
snapshot di stato e kernel si bloccano così
raramente di avere un solo colpo
per eseguire il debug di molti problemi e questo è quanto
che quel crash dump non puoi averlo
crash di nuovo così possiamo farlo con dinamico
ambienti è la domanda
storicamente questo è stato carino
difficile, se prendi semplicemente il
stessi strumenti che si applicherebbero ad una
programma nativo sai che hai applicato gdb
applichi lo stack P che non ottieni veramente
tutto ciò che è utile giusto che tu non sia e
ci sono un sacco di ragioni per questo uno
è questo se guardi le cose
che sono in una discarica principale
hai i simboli che hai mappato
ricordi così proprio lì hai ottenuto tutto il
funzioni native e puoi smontare
loro e vedi cosa sta succedendo sai
di nuovo hai alcuni metadati
descrivendo le compensazioni delle strutture
e cose così da poter stampare quelle cose
fuori ma non ne hai per quello
l’ambiente dinamico se il tuo Python
programma scaricato core o il tuo programma Java
core scaricato non hai nulla di simile
assomiglia a una classe java oa un metodo java
o conosci un oggetto Python per
in realtà costruisci queste astrazioni che vorresti
devo fare un sacco di lavoro in cima
quello essenzialmente per modellare fondamentalmente
resynthize tutte quelle astrazioni da
le informazioni contenute nel file principale
ci sono anche alcune cose che tu
voglio includere che non esistono nemmeno in
il linguaggio stesso così in JavaScript
hai la coda degli eventi questo è questo
lista degli eventi che stanno andando a quello sono
verrà eseguito non appena il
evento corrente sia finita essendo
elaborato che non esiste nemmeno nel
linguaggio non c’è modo di introspettarsi
e guarda cosa succede in quella coda
da solo, quindi se vuoi presentarlo
questo per un utente che devi ordinare
capire come persino presentarlo e
allora devi scavare quell’informazione
fuori dal file principale e l’ altro
cosa molto importante a riguardo
il vero nodo del vincolo è
questi strumenti non possono presumere che il
VM è attualmente in esecuzione che è il tutto
indica che il programma si è già arrestato
forse la macchina virtuale si è arrestata in modo anomalo ma anche se si
non ti ha voglia di essere in grado di fare queste
cose dopo il fatto su un diverso
sistema che vuoi essere in grado di fare
sofisticata analisi post-mortem
tecniche che parleremo di un
un po ‘più tardi ma cose che potrebbero
coinvolgere la forza bruta potrebbero prendere un
davvero molto tempo quindi la VM è impossibile
supponiamo che la VM sia ancora in esecuzione quando
lo fai mentre stai operando su a
istantanea della memoria quindi abbiamo preso un
particolato abbiamo preso una pugnalata a questo per
nodejs
avevamo un particolare interesse per nodejs
ma questo in realtà non lo sai noi
abbiamo guardato altre dinamiche
ambienti e questo problema non lo è
davvero risolto in nessuno di quelli che noi
guardato uno dei più grandi sì sì
stiamo andando in qualche modo in profondità
il nodo qui come fanno le persone ad usare il nodo
Ho sentito parlare di nodo ok molte persone
l’ho distribuito in produzione ok bene
e c’è un sacco di mani salendo su
ho usato il nodo e ho eseguito il debug da
cornell quindi questo è buono sì
porteremo noi abbiamo ragione
classe insieme e ci unificheremo
questo e fuori che l’ origine di questo
in termini di nostro particolare interesse è
che noi di Joyent avevamo sviluppato un nuovo
Il servizio David ha sviluppato un nuovo servizio per
permettici di capire la latenza di
la nostra infrastruttura cloud in esecuzione
software quindi siamo un’infrastruttura
come fornitore di servizi e abbiamo sviluppato un
facilità per consentire ai nostri clienti di vedere
la latenza della loro app sullo sfondo
questo non importa necessariamente cosa sia
importante è che si tratta di un’app node.js
che ci stavamo preparando per l’ implementazione
in produzione e giuro che è stato come
è stato come il giorno prima eravamo andando
giocare con la dottrina era un giorno prima
stavamo progettando di andare così siamo
letteralmente solo per andare a vivere e il
la cosa è rockin e funziona e
siamo tutti eccitati ed eccitati un po ‘
un po ‘ nervoso, sai un po ‘
nervoso che tutto sarà a
disastro fiammeggiante quando ci schieriamo
produzione
ma tu sai fondamentalmente eccitato e noi siamo
solo facendo una specie di demo finale
l’un l’altro o qualunque cosa e tutto a
improvviso uno dei nostri processi di aggregazione
è scritto in nodo tutto ad un tratto
inizia a girare fuori controllo sulla CPU oh
cos’è questo e non sembra essere
arrivando è nella CPU ed è sulla CPU
in terra utente nel buco nero e il
il sintomo a proposito è l’utente che è
guardando i grafici in tempo reale
grafici del loro programma sono solo
ha fermato i grafici fermare l’utente
interfaccia completamente bloccata in modo opposto
è sicuramente un questo è un particolare
il problema è ridimensionato ma se sei un
utente a cui è stato assegnato
a questo aggregatore quello che stai vedendo è
nessun dato che esce da te
va bene, andiamo a bugare così abbiamo fatto
ho preso Dave e me e poi la bambola che era
l’ inventore del nodo, chi è quell’articolazione
e così tutti e tre andiamo a fare il debug di questo
problema ora Dave ha ovviamente scritto il
il software Ryan ha scritto node e io a Sun
insieme a due colleghi avevano inventato un
particolare tecnologia chiamata dtrace
ci consente di strumentare dinamicamente il
sistema in modi arbitrari Hai avuto modo di
pensa tra noi tre
questa cosa è stata inchiodata e siamo stati così fantastici
scimpanzè stupidi fissano il portatile come
graffiare noi stessi cercando ricorda
io dei brutti vecchi tempi del kernel
debugging quando prima avevamo questo
utensili e non avevamo idea di cosa fosse
andando avanti e noi siamo e nessuna capacità di
capire e se guardiamo il bambino
vale la pena tirar su come una traccia di pila
da quel problema solo così le persone hanno un
un’idea di quando dico nessuna idea in realtà ho
ottenuto un perché in realtà abbiamo preso un cavo su
sperando che saremmo in grado di venire
tornando a questa cosa ti ho preso qui così
sì lasciami lasciatemi quando dico idea
questo è quello che abbiamo fatto noi
può prendere una corda di una cosa dal vivo questo
è la traccia dello stack effettiva che vedi
così quando ho cuz si potrebbe dire vabbè che
non ne ho idea, ma sono bravo, avrei un
idea okay smarty-pants tutto ciò che dobbiamo fare
trova chi ha scritto fc2 1 a 0 c 5
perché quel ragazzo è il nostro problema in realtà
è ancora più frustrante perché
in realtà non lo sapevamo
il nostro problema in realtà lo sapevamo perché
noi dopo aver osservato questo per un certo periodo
il tempo è come in realtà come succede FC
2 1 a 0 C 5
è il problema che non avevamo modo di
determinare se potessi sapere cosa
funzione basta dirmi il file solo per
in realtà dimmi solo alcune lettere
presente nel nome del file ho solo un
davvero per favore qualsiasi cosa sarò
bene starò bene lo prometto ma lo siamo
guardando questo e loro sono proprio come
questo è in realtà senza speranza, noi e noi
se fosse presente un debugger del nodo e
era giusto così così aveva suggerito Ryan
cercando di utilizzare il debugger del nodo in
tempo il prot in modo da poter inviare sig utente
uno sul nodo e si aprirà un debug
porta e potresti collegare con la v8
debugger il problema è stato solo fatto
quando sei tornato al ciclo degli eventi
quindi eravamo bloccati in quel ciclo
sì, è una storia divertente dell’evento
ciclo è come bene aprirò up che
debug port solo per finire quello che sei
fare
non appena hai finito di fare qualsiasi cosa
lo farai aprirà questo
debugger possiamo capire cosa sei
facendo è come si, non lo farò
finisco che lo sto facendo perché non lo so
cosa sto facendo sai cosa fc2 180
o c5 è così è frustrante e così
abbiamo avuto così non abbiamo fatto bug
abbiamo preso un core ma non è stato possibile eseguirne il debug e
poi la domanda era quanto rapidamente dopo
stiamo schierando in produzione stiamo andando
per vedere questo ovunque e la domanda
Avevo era questo sarà millisecondi o
microsecondi dopo che implementiamo nei
produzione giusta hai capito che è
sarà un disastro fiammeggiante
quando vai in produzione hai ragione
ottenuto questo sistema altamente concorrente e noi
sono stati in grado di attivare questo bug solo
come giocare con esattamente e
ma Dave’s ti ricordo che eri molto
più ottimista di quanto lo fossi
potrebbe essere stato inizialmente voglio dire che a malapena
Ricordo, forse ho pensato che saremmo andati
come una settimana o qualcosa del genere ma io
pensi di avermi parlato per piacere
certamente entro il primo giorno bene io
penso di averti parlato perché abbiamo bisogno
per ottenere effettivamente una scommessa sul posto , non lo faccio
sappi se voi ragazzi fate questo nel vostro nel vostro
posto di lavoro devi fare le persone
in realtà mettere soldi sulle loro affermazioni
questo è il modo in cui le conversazioni ottengono molto di più
concentrato così Dave e io dovemmo fare un
scommessa reale e sì entro un giorno
è stato denaro facile, quindi siamo stati schierati
produzione vedremo tutto questo
prepararsi per l’impatto non lo vediamo
ovunque sia successo, passate i giorni
Dave a questo punto gongole settimane
passare a questo punto è come Dave
dimenticato di gongolare che sta cercando di
ricordati di andare ogni giorno ma solo
come fa il gongolante è diventato vecchio
i mesi passano letteralmente sei mesi dopo
ora ci siamo semplicemente dimenticati di questa cosa e
certo e questa è la differenza
tra dilettante e professionista dal
il modo amatoriale dice hey great we must have
risolto il bug professionale dice oh no no
no no, so che non abbiamo aggiustato quel dollaro
questo è un bug nel nostro software e
è in agguato per scoparci al nostro
il momento più inopportuno proprio sul
il giorno peggiore della nostra vita il peggio è
in agguato e ci piomberà addosso
per rendere quel giorno ancora peggio è questo
accadrà e abbastanza sicuro che ero dentro
Davanti a un cliente, ovviamente, demo
questo naturalmente e usando tutto di a
improvvisamente si blocca di nuovo e ottieni
quel tipo di reazione di combattimento o fuga
sai che hai una demo che vai a sud con te
speriamo che non accada qui ma ed è
molto allarmante I tipi di inventato
qualcosa si sperava probabilmente questo
guarda questo stesso identico sintomo ma ora noi
può davvero andare , potremmo effettivamente a
La ragione per cui ti mostreremo la demo
un po ‘più tardi, ma così
è il problema il problema è che guardiamo
questa cosa e abbiamo assolutamente no
idea di cosa stia veramente succedendo così
Ho appena parlato di nessuna possibilità solo
solo un po ‘perché solo troppi
la gente ne ha sentito parlare una cosa tu
potrebbe trovare un po ‘sorprendente è
che molti dei nostri software si uniscono al nostro
il software di base viene scritto nel nodo
roba che è stata scritta in cose sicure
che avremmo pregiudizi schiaccianti
correre e scrivere e dire fidarsi di me se
c’era comunque essere fatta per
scrivere queste cose e dire che avremmo fatto
amiamo dire C ++ non tanto C sì
ma ma da una di queste cose
e intendo questo i servizi sono
in realtà abbastanza semplice e v8 è veloce
basta che in realtà fa molto di più
senso o non mi nota in modo intendo ed e
David significa che sei considerato C per il
servizio che stai costruendo ma è solo questo
semplicemente non ha senso parlare di me
che sapevo che era assolutamente la
chiamata giusta siamo stati in grado di ottenere un
prototipo su in come due settimane e it
era in produzione in come due mesi ho
pensa e si sa che ci aspettavamo che a
prendere molto più tempo e sicuramente lo farebbe
abbiamo impiegato molto più tempo se avessimo finito
quello in C e così abbiamo fatto questo con a
un sacco di servizi ora che sai che abbiamo
scuoti la lista lassù
ed è solo un po ‘pazzo come un
esempio qualcuno mi ha chiesto DHCP davvero tu
ha scritto un server DHCP
nodo è come dire, sì, davvero così
ciò che accomuna è che scriviamo questo noi
costruisci questo prodotto chiamato Smart Data
Centro che gestisce il cloud pubblico comune
e così hai che sei essenzialmente
gestione dei server che compongono un dato
centro e uno dei pezzi importanti
di ciò sta gestendo le immagini della piattaforma
i sistemi operativi che ognuno è
andando ad avviare in modo da poter andare nel web
Interfaccia utente e puoi dire che voglio questo per l’avvio
questa versione del kernel e poi cosa
sai che voglio avere questo altro
server di avvio qualche altra versione che voglio
rendere attiva la nuova versione di questa nuova versione
tutti i nuovi sistemi quando si riavviano così
fondamentalmente voglio quando queste cose avviano
loro netboot l’immagine della piattaforma dal
capo nodo del data center bene il
il modo più semplice per farlo è se controlli
DHCP ma la fonte di tali informazioni
è questa fonte dinamica che abbiamo
che è il set di immagini del sistema operativo e il
configurazione e roba è come perché
non solo avere un piccolo server di nodi
quello sta parlando DHCP ad un’estremità e
parla al nostro back-end dall’altra parte
e in realtà sai che sono pochi
cento righe di codice non è davvero un
gran bel affare quindi non era il nostro primo
pensato dal modo in cui il nostro primo pensiero è stato
certo che prenderò solo CD
httpd indietro con una mazza da baseball e
Io sto andando battere con un pollice della sua
la vita e farlo fare ha senso
ma è stato fantastico dopo fondamentalmente a
settimana e mezzo di fare che il
ingegnere che stava facendo questo Josh
Willesden era come se tu sapessi cosa penso
Potrei davvero scrivere questa cosa
nel nodo da zero e lo sarebbe
più veloce ed erano tre giorni per scrivere a
Server DHCP da zero nel nodo che
è un incredibile testamento di tre cose
un JavaScript mi piace JavaScript I’m
forte e orgoglioso di questo come un kernel
vedi un programmatore di assemblaggi che mi ha portato
molti anni per venire alle prese con il mio
attrazione che JavaScript sentiva
il frutto proibito per un po ‘ma io
so che sono rumoroso e orgoglioso che amo
JavaScript un sacco di cose che mi piace di
in particolare javascript ha ottenuto un
supporto di prima classe per l’ asincronia
grazie alle chiusure quindi puoi farlo è molto
facile costruire un evento orientato
sistema asincrono in JavaScript ma se
Gli script Java non erano sufficienti avevamo bisogno di v8
enorme debito di gratitudine per v8 non solo
per v8 ma per decollare una corsa agli armamenti
con tutte le altre VM ogni volta che
abbiamo una VM JavaScript ad alte prestazioni
Lo dobbiamo al v8 perché v8 è quello che
in realtà ci ha buttati lì e questo è
critico e poi anche noi abbiamo cosa
nota è fondamentalmente queste due cose
JavaScript plus plus v8 e quindi acquisizione
le astrazioni del sistema UNIX che
o le astrazioni della sorella che Dio
Destinato sto parlando in maniera regolare
su queste cose così mi ha voluto
comunica chiaramente che sì questo era il mio
intento si è confuso un po ‘
un po ‘per questo ha chiamato Dennis a casa I
pensa che voleva così il the
astrazioni di sistema che sono
in realtà le astrazioni di sistema giuste
che sono UNIX, lo prendi insieme
e questo è ciò che è così importante
notare per noi è stato fantastico con il
asterisco di come si fa effettivamente andare a
bug questi gravi problemi di produzione
che come il problema che abbiamo avuto sì
quindi prima di arrivare dove stiamo andando a
Parliamo del nostro modo di conoscere il nostro approccio
debug postmoderno per nodejs prima
ne parliamo abbiamo bisogno di parlare
questo strumento che abbiamo sul nostro sistema è
chiamato MDB questo è il debugger modulare
questo è un debugger inizialmente creato come
parte dello sviluppo del kernel Solaris per
analisi post-mortem del crash del kernel
discariche e cosa è veramente importante
il kernel è che è molto grande
numero di sottosistemi ciascuno dei quali è
piuttosto complesso e così e loro ovviamente
loro interagiscono tra loro così è
molto importante essere in grado di costruire strumenti
per scorrere l’ordinamento dell’oggetto di a
sottosistema particolare e tu sai figura
fuori ciò che le connessioni tra questi
le cose sono così MDB si concentra davvero sul
possibilità di costruire utensili e costruire
strumenti sopra gli altri strumenti e
il modo in cui interagisci con esso saremo
la dimostrazione in un secondo è che hai questo
cosa che sembra una shell e tu sei
sai che puoi incanalare i comandi insieme
quindi puoi camminare anche se un po ‘di
oggetti e tu lo tubi a qualcun altro
Comando D che sai stampare
informazioni su quelli e poi su di te
condividi quello con qualcos’altro
questo è estremamente importante e di nuovo
la possibilità di stratificare queste cose così
La demo di Brian sul live non lo farà
il kernel live, quindi MDB, ovviamente
anche operare sul kernel che è
correndo sul sistema cosa sta dimostrando
ora è un comando chiamato stack what
pile fa è attraversa tutto
i thread sul sistema afferrano una pila
tracciare e poi fondersi come quelli così
conta quanti hanno lo stesso stack e
ti dà un puntatore rappresentativo
per ognuno che è piuttosto semplice
idea, ma è incredibilmente importante essere
in grado di farlo su un sistema con
migliaia di thread e puoi filtrare
quello dal modulo del kernel per funzione o
qualunque cosa tu voglia ora camminerà
proc così freddo scatola da passeggio in modo che la sintassi
per m2b è sicuramente
un po ‘strano solo una specie di put
quello a parte per un secondo così a piedi croc
sta andando a ripetere su tutti
le strutture proxy nel kernel e
ora lo ha convogliato su quel PS sì:
PS puoi pipe per stampare proc TP
utente che vieni e ora stai ricevendo
quel campo da tutte le strutture proc
quindi è solo che è davvero importante essere
in grado di scorrere rapidamente rapidamente il
stato del sistema e può che
piattaforma naturale per la costruzione
debug post-mortem per il nodo perché
è già stato progettato con l’idea di
costruire nuovi strumenti in esso e ed essere
in grado di mettere insieme queste cose così
con quello dovremmo tuffarci proprio nel
file di base per quel modo sì sì, quindi noi
parlato del problema in cui abbiamo avuto
questo programma nodo gira su CPU
non abbiamo detto che abbiamo controllato molto
cose che abbiamo controllato come log
abbiamo controllato quale sistema era chiamato
facendo bene perché un programma ha un duro
tempo facendo un sacco di cose interessanti
senza effettuare chiamate di sistema
non stai parlando sulla rete
non stai scrivendo file quindi è come
non stai emettendo nulla così è
stavamo semplicemente lavorando alla CPU
file nella speranza che un giorno dopo noi
sarebbe in grado di capire di cosa si trattava
ora Bryan ha aperto questo file principale
questo è il file principale che abbiamo avuto
produzione la prima volta che noi
visto questo problema che potremmo letteralmente
non analizzare per qualcosa come otto
mesi sì solo per correggerti
cosa hai detto che abbiamo preso il file principale in
la speranza che saremmo in grado di eseguire il debug
in realtà è davvero mancato
leggere della storia perché non avevamo speranza
che stavamo per infastidire noi e noi
ha preso il file principale perché questo posto
non è costoso e si potrebbe pure
avere le informazioni ma Dave in
in particolare era come l’uomo che dobbiamo andare
fare il debug post-mortem per il nodo e I
sapeva quanto fosse complicato e come
brutale lo stato VM sarebbe anche per a
una VM molto più semplice con prestazioni molto inferiori
VM è come se fosse impossibile
in realtà impossibile, intendo sì, è tutto
software bla bla bla ma questo è intendo
veramente alcuni software sono impossibili e
questo è stato sicuramente nell’impossibile
secchio per me, um, ma mi sento pronto a
risolvi una nuova macchina dal modo in cui Tracey
L’anima di Kidder di una nuova macchina um
eccellente libro eccellente e lo farei
dire deve leggere per tutti i software
ingegneri l’anima di una nuova macchina e
è una lettura obbligata perché ha anche due
pepite di saggezza e una delle pepite
di saggezza appartiene direttamente a questo
hanno portato un ingegnere junior e
nessuno ha voluto affrontare in realtà con questo
ragazzo come tutti è occupato non perché lui
era un cretino ma perché tutti sono occupati
con questo generale non datato 1979 sono
tutto occupato su questo prossimo computer e loro
non posso permettermi di guidare questo ragazzo così
loro solo tipo di andare a dirgli di andare
risolvi un problema che dicono loro di andare
scrivere un simulatore per il nuovo
microprocessore perché sanno che è
impossibile scrivere un simulatore e
lo terrà impegnato e allerterà molto e
poi tornerai e lo saresti
frustrato e ti capire come ha fatto
possono dare una mano e torna due
mesi dopo e dice okay ho finito di esserlo
fatto con quello che ho finito con
simulatore mi hai detto di andare a scrivere il
simulatore Ho finito con il simulatore
e c’è questo grande momento in cui il
gli ingegneri si guardano l’un l’ altro e loro
rendersi conto che ognuno aveva dimenticato di dire
lui che in realtà era impossibile lui
l’ha fatto perché non sapeva che fosse
impossibile e non volevo piacere
di ‘a Dave che questo era impossibile anche
anche se credo fermamente che sia stato così
taglierei oh sì sì sì forse giorno
e come si sono entusiasti di questo
come oh si, non sarà così male Dave
era come se sapessi che non penso sia così
sarà così male e sono come se non fosse così
essere così male
no certo che non sarà così male
non sarà così male e ovviamente come
tre settimane dopo è come il mio dio
è orribile come se fossero venuti
sei tu sei in tre settimane ora
devi continuare ad andare avanti così Dave ha fatto un
cosa incredibilmente difficile qui e cosa
eri tu quello che sto facendo ora sono io
caricamento del modulo Oh v8s e così via
questo è stato tanto tempo fa perché è così
sta facendo notare che questo era nodo vo
per sì esattamente lo sai in realtà
una vera e propria discarica per tanto tempo fa questo
so che sono sicuro che Casper e la gente devono
avere un attacco quando vedono i tre
punto un punto otto punto ventisei
ma sì questa è una vecchia versione del
otto così noi che è lo stack traccia um
in realtà molto più interessante è il
Traccia dello stack JavaScript, quindi cosa abbiamo
qui quello che stiamo guardando è lo stesso
stack traccia che avevamo prima con solo un
mazzo di indirizzi esadecimali ma ora per ciascuno
uno di quelli con cui è annotato
informazioni su ciò che il JavaScript
il livello di frame è così per il JavaScript
telai in realtà abbiamo il nome del
funziona il file in cui è stato definito
il numero di riga in cui è stato definito se
questo è stato calcolato ma almeno il
informazioni di posizione e quindi abbiamo
alcuni dei frame interni e roba di v8
così – V con un’opzione – V su questo
è come un’apparizione dal futuro
mi dice esattamente dove sono
ogni fotogramma della pila intendo che questo è
molto meglio del numero di vocali o
qualunque cosa e
nome del file questo è tutto e anche
meglio abbiamo effettivamente gli argomenti
e incredibilmente possiamo effettivamente decodificarlo
questi ambienti questi argomenti come
Oggetti JavaScript che non voglio stampare
che scusa scusa proviamoci in realtà
il computer è in realtà anche molto
entusiasta di questo è come wow ho fatto io
guarda cosa pensavo volessi
stampa questo è incredibile che ho avuto modo di
di ‘a qualcuno che devo andare a dirlo a qualcuno
a questo proposito, andrò a stamparlo
fuori continui a fare demo
So che sei sul palco ma wow è così
incredibile ed è sorprendente e in
in particolare questo ci avrebbe permesso e
ora come abbiamo fatto all’improvviso è
informazioni incredibili questo sta per
permettici di risolvere un altro
discussione che abbiamo avuto di chi è il culo
questo comunque perché Dave e io siamo entrambi
essendo gentiluomini, così abbiamo questo codice che ho
scritto del codice nel sistema di Dave
sono un po ‘di codice nel sistema entrambi
essere gentiluomini
ognuno di noi insiste che è un insetto nel nostro
proprio codice ovviamente anche noi onestamente
segretamente credere e sperare in realtà che
è un bug negli altri ragazzi che ti codificano
in realtà non voglio che sia un bug in
il tuo codice oh sono sicuro che sia un bug nel mio
codice oh no no sono sicuro che è un bug nel mio
codice per favore non lasciare che sia il mio codice
per favore non lasciare che sia il mio codice
um così questo è e sfortunatamente questo
in realtà non si stabilì necessariamente
cose quando guardi la traccia dello stack
perché questo è in realtà il codice che io
ha scritto e questo è il codice che Dave ha scritto
quindi questo potrebbe andare comunque ancora così andiamo
usa l’ incredibile stampa j / s su cosa
Ho fatto è che ho preso uno di questi
argomenti l’ argomento dell’oggetto JS
lì e lo stamperò davvero
fuori che è il JSON che in realtà
questo viene dal programma
significativo in JavaScript siamo andati tutti
la strada da quella fogna a quello che avevamo
per cena se questo puzza di puzzolente
compito lo è e non so se puoi
vedetelo ovviamente voi ragazzi non lo sapete
nulla di questo codice necessariamente ma
vedi qualcosa vicino a quello che sembra
sospetto ma potresti essere correlato con
un ciclo infinito min e Max sono i
stesso
si ora tutto a posto ora è quello
argomento come così va bene il mio codice sicuramente
non stava controllando per essere min e Max
lo stesso va bene, il ciclo infinito è in
il mio codice ma Dave come in realtà ciò che questo
il codice non dovrebbe mai essere chiamato con il minuto
il massimo è lo stesso
ora sia l’ essere
ognuno di noi insiste che è un insetto nel nostro
codice è bug nel mio codice che è giusto
è un bug nel mio codice ma vado a sistemare il tuo
bug III riparerò il mio bug che siamo entrambi
Penso che entrambi abbiamo deciso di sistemarli entrambi
dei nostri bug
è giusto e così l’ altra chiave
questa era la funzione che è in cima
della pila è completamente senza stato
che e abbiamo sia degli argomenti
il che significa che abbiamo effettivamente ottenuto un
test case riproducibile solo dal
core file quindi anche se sai che non lo era
totalmente ovvio che il principale è uguale a max
farò impazzire questa cosa
potrebbe facilmente testarlo a quel punto
che era enorme quindi abbiamo un mucchio
di altre cose anche qui Coquelin v8
la funzione in realtà ha sentito un modo semplice
può ottenere una funzione v8 su questo sì lì
noi siamo lì ne abbiamo uno così che lo farà
effettivamente stampare una funzione come e io
dovrebbe essere in grado di fare – D – è giusto se
si
quindi questa realtà e questo è importante per
probabilmente leggermente per la tua vista ma se
tu lavori su v8 questa è roba che tu sei
familiarità perché questo è in realtà
portandoci dall’oggetto reale
questo è il fatto che la funzione di J è ridotta a
l’assemblaggio effettivo generato e poi
smontandolo oh mio dio andrà
per molto tempo davvero
voglio colpire Q perché ci vorranno cinque
minuti sì, facciamo molto lavoro Wow
grazie a Dio i computer sono veloci così comunque
ti permette di ottenere un livello di
introspezione che non abbiamo mai veramente
aveva prima e così Dave aveva consegnato
questo a noi piace come Prometeo e noi
stavano cercando di pensare di sapere cosa sono
alcune delle altre cose che possiamo usare
questo per davvero no che non è nemmeno il
in che modo stiamo pensando a quello che siamo
pensando di avere un atroce
problema che non sappiamo come
debauch diverse incroci
problema straziante anche noi non avevamo idea
come capire giusto e questo è
la memoria lo usa quindi se hai distribuito il nodo
produzioni e programmi in
produzione o francamente qualsiasi dinamica
linguaggio in produzione sei stato
bruciato dall’utilizzo della memoria in alcuni
punto giusto e la gente ama OH I
incolpare il GC
oh è il GC um non è praticamente mai
la GA in particolare con il fantastico GC
um anche se il GC sta girando davvero male
probabilmente non è il GC il problema è
non stai generando alcuna immondizia è
cercando dappertutto la spazzatura ma
hai riferimenti ad oggetti che come
per quanto riguarda v8 è interessato almeno in parte
la VM è interessata a Java in qualsiasi altro modo
gli oggetti sono immobili
non è vero spazzatura il netturbino
non arriva da casa tua
la tua casa e ti rubi e butti
è fuori che è considerato
sconsideratamente non lo fai
quindi non è spazzatura ora puoi pensare
è spazzatura ma non è così come lo fai tu
in realtà finiscono il problema in v8 è o in
no, questo è un problema particolarmente acuto
sistema orientato agli eventi e la differenza
tra la tua capacità di fare il lavoro e il
di lavoro in arrivo che si deve fare la volontà
Sii memoria quindi se proprio non riesci a tenere il passo
la tua memoria inizierà a crescere e tu
ho bisogno di sapere disperatamente è la mia memoria
crescita perché non posso tenere il passo o è il mio
crescita della memoria perché in realtà ho un
perdita qui ho qualcosa che è
semanticamente trapelato che non lo sono
in realtà liberando e volevamo andare
come camminare per il e perché eri
pensando a come fare questo con VA
in questo momento potremmo davvero andare a fare una passeggiata
mucchio ho passato un sacco di tempo a pensare bene
lo sai che questo modulo di debugger lo farà
parlare ha un sacco di conoscenza
come v8 struttura le cose come se non fosse un ragazzo
Sarebbe un intero livello di
complessità se sapesse se fosse necessario
capire come iterare l’heap
correttamente sai partire dalle radici di GC
seguendo tutti gli oggetti che sono
referenziamento e sai che seguirlo
lungo e questo è sai quanto siamo giovani
diventiamo conosci i veterani cinici
questo problema oggi era già come
oh mio dio questo è orribile e poi ma
Ero in questo codice e e siamo
aiutando noi e così via e lo so
è come in realtà per
qualcosa da essere un oggetto v8 molto
le cose devono essere cose coerenti
Indirizzare le cose che devono tornare indietro
ad altre cose che devono essere a
tipi particolari e così via quindi se tu
basta guardare un po ‘di memoria arbitraria
nel tuo processo puoi effettivamente
motivo con un altissimo grado di
certezza se non può essere aa
un oggetto JavaScript quindi la domanda noi
era come se passassimo
memoria e cercare di trattare tutto come un
oggetto è come quello che è così sporco è
un grande esempio del tipo di bruto
forza che puoi fare se hai il
il lusso di operare su un file core tu
conoscere al di fuori del percorso critico di
servizio di restauro e ho detto che amo
forza bruta su un nucleo Dom si sente
come il computer sta facendo lavoro per a
modificare
sai che esci tu l’umano
è il signore di uscire per una tazza di
caffè bene mentre il computer è tuo
servo fa tutto questo lavoro quelli che ho
amalo quando andiamo
un core dump e non so quanto tempo
dovevano essere qui quindi ci siamo io
l’ho appena fatto girare Coco e trovare gli oggetti di Jay
e in realtà sai cosa mi permetti di fare
eseguilo di nuovo ma con il meno V
opzione ci daremo un sacco
dei tempi di saldatura B che ci darà
effettivamente più informazioni sul
quantità di tempo al secondo il numero di
oggetti the the e questo è il numero
di letture di tipi e ha fatto il numero
di oggetti JavaScript hanno trovato e
elaborare oggetto per gli oggetti unici
quello unico se osserva gli oggetti con i loro
proprietà attuali e ora c’è
c’è sicuramente qualche miglioramento noi
devi fare qui puoi vedere che siamo
identificando cose che sembrano un po ‘strane
ma stiamo anche trovando un sacco di
cose legittime anche qui, quindi facciamolo
prendi una specie di uno di questi a caso
e ora posso stampare uno di questi
ragazzi e potete vedere questo è in realtà
questo è un po ‘ovviamente un legittimo
Oggetto JavaScript e stiamo usando
questo tanto che io conosco quella gente
si sono lamentati sempre di più
sulle prestazioni di Fine J s
mi obietta Dave Dave
questo aspetta un minuto questo ne ha preso uno
secondo, ma quando in realtà ho intendo
questo è un file core da 27 Meg quando tu
in realtà ha un problema di memoria in questo
il file core è in realtà diverse centinaia
Meg’s ci è voluto un po ‘di più yeah I
ha preso un po ‘più a lungo come ha richiesto
come un minuto o come due minuti e
Mi dispiace che il prometheus sia trattenuto dentro
il traffico va bene che deve essere un
un po ‘paziente sono sulla mia fottuta
modo con il fuoco il con con il fuoco
esattamente ma il perché la ragione
quel giorno si lamentava su di esso
in realtà è perché abbiamo incorporato
nel modo in cui sviluppiamo i programmi del nodo
e ogni volta che qualcosa va storto, ora
programma la prima cosa che facciamo è il core G
lascia correre solo G Cora al centro
scarica e fai degli ottimi oggetti di J e tu
piacerebbe fare – P, giusto Dave
sì , vediamo che dovrei essere in grado di farlo
come – P esporta in modo che trovi ogni
Oggetto JavaScript con esportazioni
proprietà oops
maledizione, scusa communi e poi cosa ho
può fare in realtà andare attraverso la pipa
e possiamo effettivamente guardare tutti quelli
oggetti quindi corriamolo di nuovo e
dispiace uscire lì così se mi trovo J
oggetti – Le esportazioni P erano quelle esportazioni
scusa, posso passarlo a cercare J
s oggetti che mi dà quelli che stanno dando
io il riferimento
quelli sono tutti gli oggetti che lo abbinano
e poi se lo voglio posso farlo
attraverso la stampa di J e questi sono i
quelli sono i due tipi di oggetti che
avere membri di esportazione questo è utile come
si scopre e lo usiamo molto in
sviluppando i nostri propri programmi di nodo per il
punto che ora stiamo lamentando
le prestazioni che è buono è come
Che in realtà ha una posizione ideale per
essere così e in realtà penso che la maggior parte
è importante che lo abbiamo effettivamente usato
fare il debug di veri problemi onesti-divini così noi
ha avuto un problema davvero sgradevole dove noi
consumando troppo mucchio quindi eravamo
in grado di utilizzare oggetti di jazz fine e Isaac
era Issac Schluter lavora per provarlo
è stato in grado di usarlo effettivamente a
in realtà confermare l’ipotesi che lui
aveva già cose così tremendamente utili
e il proprietario, se si può informato voi
voglio toccare quello che sta succedendo qui
ma sì, lo sai che fondamentalmente noi
ho passato un po ‘a parlare di quanto sia difficile
questo era e poi abbiamo semplicemente mostrato
è come se fosse una specie di magia
come funziona, ovviamente, ovviamente
a un certo livello il nostro modulo di debugger solo
conosce un sacco di cose su v8 che conosce
come camminare le proprietà dell’oggetto per a
dato oggetto sa come camminare stack
cornici e sa come decodificare l’heap
oggetti ma era davvero importante
noi che non è così fragile
in qualsiasi momento v8 cambia affatto
che la cosa si rompe totalmente e
quindi quello che abbiamo fatto è che tu possa farlo
in realtà andare alla prossima diapositiva che codifichiamo
in Lib v8 e poi lo propaghiamo
nel nodo codifichiamo un gruppo di intendo
questo è davvero piuttosto cotto a metà noi
fondamentalmente basta codificare un mucchio di offset
descrivendo la struttura di questi heap
oggetti e altre costanti utili come
si conosce il l’argomento della funzione JS
essere usato in ogni frame ha sempre
memorizzato sai che offset due parole da
il puntatore del frame come quello era giusto
qualcosa che volevamo essere in grado di
parametrizzare in modo tale che se lo stessimo facendo
questo su un’architettura diversa o 32
64 o qualunque cosa funzionerebbe ancora e
questo è stato molto utile significa che
quando vengono apportate piccole modifiche
non ci rompiamo completamente tutto il tempo
ma continua ad essere una spina nel nostro
lato che se vengono apportate modifiche maggiori
a v8 sai se quegli algoritmi che
Ho descritto il cambiamento su come cammini
proprietà di oggetti che rompono il nostro
modulo debugger al momento perché
il modulo è costruito separatamente da
nodo stesso e questo è un po ‘quello che noi
vedere è uno dei maggiori problemi aperti
in futuro è come possiamo incorporare
conoscenza nella VM come possiamo codificarci
la VM abbastanza informazioni su come
esegue il debug di se stesso che non si basa sulla VM
ancora in esecuzione e abbiamo preso un
piccolo passo per quello e slava e il v8
il team è stato eccezionale nell’aiutarci
trovare modi per codificarlo meglio
informazioni dal 8 per rompere noi
un po ‘ meno frequentemente ma noi ancora
si è rotto sì ed è difficile il
la logica esiste in due posti quindi ci sono
problemi reali con questo approccio è
non completamente perfetto , pensiamo
è un grande approccio è completo
ha zero overhead ma tu hai
il problema è che è fragile e
noi vogliamo lavorare per renderlo meno
fragile abbiamo qualche idea in realtà
vai a fare la chiave è che quando siamo
quando abbiamo la tecnologia per farlo
non deve fare affidamento sul VM in esecuzione in modo
questa è la differenza secondo me
tra questo e molti altri debug
tecnologie che sono venute prima
per la dinamica e il bello di
anche questo è che, non appena abbiamo costruito
questo strumento immediatamente tutto il nostro nodo in
la produzione è diventata discutibile in questo modo
non abbiamo dovuto andare a modificare il
applicazione per fare ciò che penso sia
anche piuttosto significativo quindi è MTB
e debugging postino, voglio che non lo facciamo
avere una grande quantità di tempo ma dentro
il tempo che abbiamo lasciato vogliamo parlare
riguardo al tipo di un altro asse di debug
e questo è il debug di problemi transitori
problemi che sono problemi non fatali per
quale è un’istantanea di stato
insufficiente per eseguire il debug del problema ora a
l’istantanea dello stato può essere sufficiente per
un sacco di diversi tipi di problemi ma
in particolare le prestazioni possono essere molto
difficile eseguire il debug da una serie di core
discariche e passo un sacco di tempo a cercare
per fare questo nello sviluppo del kernel nel
kernel usato e nel kernel noi
non ho una g-chord
equivale a dire che in realtà tu prendi un
core dump devi effettivamente portare il
sistema in basso e gli strumenti erano così cattivi
storicamente che questo se un sistema dovesse
eseguendo male vorremmo
in realtà andare un amide il sistema si fondono o
effettivamente ottenere una discarica di Cordova sul
sistema e riavviare il sistema che è
come dire oh tu hai il raffreddore
okay, ti sparo nel cervello
e poi sapremo esattamente dove sei
il freddo è venuto come è, ma lo sarò
morto è come se si fosse morto
ma sapremo esattamente cosa è successo
è come se quello che è questo è
come un sadico con cui stai parlando e sì
certo che anche gli sviluppatori del kernel sono tutti
sadico a un certo livello ma così abbiamo avuto questo
problema di
come facciamo veramente a strumentare il
colonnello ugh il colonnello e in
particolare come capiamo perché il
il sistema sta succhiando e abbiamo avuto questo
problema di nuovo un decennio e mezzo fa
e io aggiungo undicesimo tutto il mio
Il Faraone in figlio ha sviluppato questa tecnologia
chiamato mangiare riso così DTrace ci permette di
strumenta dinamicamente la produzione
sistema il suo centro di design è in giro
sistemi di produzione quante persone hanno
tu usi DTrace oh ok è carino
bene, in realtà va bene così gente
Vassoi di tè usati quelli di voi non hanno questo
è una struttura che abbiamo spedito per la prima volta
nel 2000 ero il 2003 che abbiamo spedito per la prima volta
che ero open source nel 2005 è ora disponibile
tutti i sistemi di azionamento alluminosi come intelligenti
Sistema operativo dal gigante Omni OS anche unità Eris
sistemi è in bsd è in freebsd e
è sul tuo Mac. Ci sono porte Linux
progresso così che finalmente sta succedendo
dopo tanti anni di scuse per questo
non potrebbe accadere ma ora si sta muovendo
avanti così così è una tecnologia
cioè sta lentamente diventando onnipresente
certamente su Mac FreeBSD e illumisare
guidare i sistemi in modo dinamico ambiente
supponiamo lo stesso tipo di problema per
dtrace che MDB ha posto e nel postpartum
abbracci che è dire che ora voglio
istante il sistema e voglio
capire cosa sta succedendo al
livello più alto a strati di software quando
abbiamo prima sviluppato DTrace e quando io
prima facevo questo, ero solo imbarazzante
pensando al carnale, intendo chi
si occupa di applicazioni applicative
esiste solo per mettere il carico sul bello
sistema operativo lì ma come noi
in realtà è entrato e siamo andati tipo
avanti nel mondo con dtrace noi
Scoprì che il molto più grande
le vittorie di prestazioni dovute non provenivano da
migliorando il kernel in modo incrementale
su questi carichi patologici ma
capire dove la patologia è stata
in realtà proveniente da stack e C e
Gli ambienti C ++ possono fare una certa quantità
di danno ma oh mio Dio, la dinamica
gli ambienti possono fare molto più danni
hai una sceneggiatura perl che non posso dire
tu il numero di script Perl scritti
per monitorare il sistema ha fatto se stessi
diventare il problema con il sistema quando
vai su D traccia come quello che è questo
proscope oh che dovrebbe essere sul
monitorare il sistema
sì, sta uccidendo il sistema in realtà a
linea molto sottile tra la mente di polizia
e la mente criminale quando si tratta di
software di monitoraggio così
avevamo bisogno di salire su queste dinamiche
ambienti capire cosa sta succedendo
ma ora siamo da noi siamo dal kernel
stiamo guardando dal più basso
strati del software in questa VM
che non possiamo vedere nulla in come facciamo noi
in realtà vai a fare questo bene uno dei
le cose che abbiamo aggiunto erano qualcosa
chiamato tracciamento definito staticamente e
potresti avere queste cose chiamate il
uset provider ma tu hai strumentato il
VM stessa e ha detto che qui è dove sono
fare una chiamata di funzione ecco cosa sono
facendo questo ecco quello che sto facendo
e una compagnia aerea di Ruby Python PHP ha preso
quell’approccio funziona per alcuni senza mezzi termini
non funziona per prestazioni più elevate
Questo è VM per VM con prestazioni inferiori
più facile per VM con prestazioni più elevate
diventa insopportabile persino avere
codice aggiuntivo gonfia anche se
sono manopole dove sei in realtà
facendo queste chiamate di funzione quindi è necessario
prendere un approccio diverso o semplicemente
ha deciso di fare una virata diversa per
nodo
la prima cosa che abbiamo fatto è stata aggiunta
usa le sonde nella nota stessa e questo
ci ha permesso di ottenere per esempio le sonde sono
quando stiamo facendo un GC che è utile
Voglio dire se penso che sia tempo di farlo
sì l’esempio nella prossima diapositiva di
usando il nodo di strumentazione GC start e
GC fatto e in realtà salterò
la scatola qui e ti mostra cosa
sembra che torniamo qui
e siamo su una scatola che ha questo
gestendo un sacco di nodi tutto il tempo che farò
vai qui e voglio solo essere uno strumento
su GC start e GC fatto così se faccio nodo
nodo stella GC inizio vedrò uscita
ogni volta che inizia un processo qualsiasi nodo
GC e fortunatamente abbiamo abbastanza nodi
processi che fanno abbastanza lavoro non banale
Sono persino su questa VM che qualcuno solo
GC ora potresti voler sapere chi
in realtà ha fatto GC quindi potresti dire printf
% d% s ha iniziato un punto punto GC e lo faremo
rendi i punti info di pid ‘e di kurpius
a PR PS args potrebbe farlo e renderlo tranquillo
quindi ora, ovviamente, ora sono sicuro che non lo faranno
obbligato per ora nessuno farà un GC ma
la prossima volta che qualcuno non lo vedi
eccoci, vediamo che quel nodo
elaborare il runner del flusso di lavoro è giusto
ha iniziato una GC allora si può guardare le cose
puoi insegnarti a vedere che lui è Sarge
fatto misurare la latenza attraverso di esso e
così via, eccoci qui, abbiamo ottenuto un
tutti non vedete ok festa sul mio
il computer portatile
così e possiamo ottenere questo tipo di
istogrammi sono forti credenti e
Arte ASCII puoi ottenere questi grandi
istogrammi per capire veramente dove
questa latenza sta effettivamente arrivando
da e in realtà Dave hai un buono
in realtà poco un buon piccolo programma
che Dave ha scritto dov’è è tutto
NH EP Snoop right yeah quindi questo è un
piccolo idiota che Dave ha guidato questo è
solo uno script di shell e di cosa si tratta
script di shell attorno a tutti questi nodi
sonde quindi penso che potrei semplicemente eseguire questo
e senza alcuna opzione proprio lì sì
questo ti mostrerà l’attività HTTP che è
questo è quello che ho originariamente costruito per questo
ogni volta che un processo del nodo esegue un HTTP
richiedere o servire su HTTP penso come
bene oh ci andiamo bene così il the
di nuovo il flusso di lavoro che è un po ‘questo
piccolo amico, abbiamo il lavoro degli studenti
su questo appena fatto un nuovo mettere un gatto che si
può vedere l’effettiva latenza e il tipo
della cosa bella qui è e questo è acceso
a proposito, github se cerchi n HTTP
curiosare
Penso che sia meno giusto Dave yeah
ci siamo noi che in realtà ne emette
lo script D che ha effettivamente generato
sporca in alcuni casi ma è a
complicato uno script ma così questo è un
questo è solo uno script descrittivo di Essure
quel server di richiesta del server strumento
la risposta misura la luce e dice
lo stampa in una sorta di carino
formato e così via così questo era questo
stato buono e abbiamo usato questo um
questo è stato molto utile che abbiamo usato
questo per fare il debug di veri problemi in realtà
capire la latenza di GC latenza e note
così in realtà è stato bello condividere alcuni
di quella produzione datata con un v8 ragazzi
inizialmente perché i numeri che abbiamo pensato
sembrava fantastico e il v8 ragazzi come wow
è davvero bello che GC sia effettivamente
come è in realtà facendo GC per molto breve
per esso è un momento come si si ha fatto un
ottimo lavoro quindi è stato bello
effettivamente vedere i dati dalla produzione
sistemi che potrebbe feed back a loro
e in quel caso non c’era un problema
quindi è fantastico volevamo permettere alle persone
che quelli stavano aggiungendo le sonde
efficacemente in C ++ nel nodo perché
questo è ciò che è legato al v8 che volevamo
consentire alle persone di aggiungere sonde in JavaScript
stesso Chris Andrews ha fatto un lavoro fantastico
sul provider no dtrace questo modulo
ti consente di definire le tue sonde in
JavaScript e poi licenziarli
selettivamente
e questo è stato enorme per noi il nostro
il cavolo del contrassegno collega ha usi
estensivamente per il suo io ha fatto notificare e
LDAP das
è un’implementazione ex-novo di a
sn1 parsing per implementare un server LDAP
nel nodo no questa non era una punizione
questo era in realtà elettivo e sì
è stato fatto per buone ragioni è stato
fantastico ma così abbiamo usato questo a
molto ci ha permesso di misurare il
latenza in questi sistemi una delle chiavi
quando stai guardando Dtrace è
correlando l’ attività del sistema in profondità nel
sistema per quello che sta succedendo
in cima allo stack e tu sai di nuovo noi
avere lo stesso problema che abbiamo avuto quando
stavamo parlando di postpartum
dividendo dove se andate a fare questo voi
in realtà ha difficoltà a vedere cosa c’è
andando avanti così io in particolare ho il mio
Penso di avere un piccolo copione qui
come il sig. spinny J se me lo farò se io
corri signor spinny è il sig. spinny è giusto
girerò intorno e mi permetterò di accedere
quella scatola
e quello che faremo è che voglio
capisci cosa sta succedendo lì II
potrei vedere ad esempio che se io
eseguire PR in modo che possa vedere che va bene lui è
spendere per CPU voglio capire
cosa sta facendo , forse lo voglio fare
effettivamente eseguire una sonda di profilo e
storicamente quello che fai è eseguire a
sonda profilo e pronunciare il nome esatto uguale
nodo diciamo facciamo solo aggregazione
su un utente pila di back-trace se corro che
e tu controlli C in cui sono dentro
questo vecchio problema ricorda ancora questo
questo è un modo per cui stiamo vedendo di nuovo lo stack
fotogrammi che negli hack abbiamo avuto questo
problema storicamente in dtrace e noi
sapevamo che avevamo molti anni fa con
Java nella JVM e così stiamo cercando di
capire come risolverli con JVM e
semmai in realtà era ancora più difficile
risolverlo in dtrace di quanto non fosse un MDB
perché non avevamo il lusso di
essendo postmortem, lo risciacquiamo
tu dici che stiamo eseguendo nel kernel così
nel kernel questa cosa ha fatto un te
sapere e dire che ha fatto un sistema aperto
fermarsi o cosa hai o è essere
rimosso dalla CPU di cui abbiamo bisogno in quel momento
vai a salire in pila e correlare
questi indirizzi esadecimali veri e propri
fotogrammi che è brutale da fare in te
e così non siamo riusciti a trovare un modo migliore per
facciamo questo abbiamo inventato questo culo pazzo
meccanismo chiamato ti stack aiutanti che
ti permettono di scrivere questo pezzo molto strano
di software che compiliamo e glom
sulla eseguibile quando l’eseguibile
corre che ottiene
I ottale al piano di sotto nel kernel e
quel software che è scritto in a
touring in lingua completa D ci consente
in un modo totalmente sicuro in realtà
traduci in sei impilati fotogrammi
JavaScript incornicia ora che è un sacco di
chiacchiere leggere
quindi in realtà vediamo solo in azione
se dalla tua prospettiva qualcuno è
sviluppo di software che voglio capire
e mi devo un un’altra opzione lì per
allocare un sacco di dimensioni dello stack per questo I
dimensioni del negozio errate, quindi ora se eseguo a
J stack in cui J non è in realtà
JavaScript è per Java perché è così
ciò che originariamente lo abbiamo sviluppato per me
ora posso vedere dove sto borbottando
schiume e così via so esattamente dove sono
siamo in grado di prendere questi dati e poi andare
visualizzare che in realtà alcuni davvero
modi interessanti così una delle cose
è stato fatto dal nostro collega Brendan Gregg
e sono tutto il genere di tornare a questo come
necessario ma quindi questo è il profilo
fornitore di una cosa ti chiamerò Brendan
Greg ha fatto questo e l’ha visualizzato
come una cosa chiamata un grafico di fiamma e
il grafico della fiamma ci consente e lasciami
fai apparire la versione completa di quel David
vuoi spiegare questo perché sì così il
l’idea va bene che stai eseguendo questo profilo
sonda 100 volte al secondo su 32 CPU
per 60 secondi hai un enorme
numero di tracce dello stack ma come si fa
effettivamente li visualizzi bene
la maggior parte di loro probabilmente inizia con main at
in basso a destra e poi iniziano
divergere un po ‘bene il nodo
tutti diranno node star evie run UV
corri e poi iniziano a divergere e
allora ci sarà un paio di cose in comune
frame in questo silo e poi inizia
di nuovo divergente e quindi la domanda è
bene come lo si visualizza effettivamente
questo è quello che abbiamo fatto
beh, Brendan Gregg ha fatto davvero e così
hai questi silos che rappresentano
luoghi in cui divergeva relativamente bassi
nello stack e puoi zoomare su ciascuno di essi
di queste cose quindi se ti può piacere
si ingrandisce per l’angolo si può librarsi
su ciascuna di queste cose e in alto
ti dirà quale funzione è stata
e quanto del tempo complessivo era
trascorso in quella funzione quindi per a
processo di cpu-bound è un processo che è
sulla CPU come dire al cento per cento della
tempo puoi vedere esattamente quanto tempo
veniva speso in ogni JavaScript
funzione ed è in realtà un po ‘
meglio di così perché tu in realtà
avere funzioni JavaScript e C ++ e
qualsiasi altra cosa tu stia facendo così sai
se stai usando il ping di Lib come lo vogliamo noi
genera altri tipi di immagini che vedi
i telegrammi Ping Lib anche tu vedi l’SSL
anche lì ed è così
se guardi qui, questi sono tutti
solo Davis dice che ne hai preso un po ‘
c ++ frames in là ma poi anche tu
ha ottenuto i frame JavaScript e consente
per eseguire correttamente il debug in cui ti trovi
il tuo JavaScript e visualizzare e
importante per un sistema di produzione tu
sapere che non abbiamo riavviato il programma noi
non l’ho eseguito con nessuna bandiera speciale
questo fa diminuire le prestazioni della VM
questo era solo il programma era in esecuzione a
piena velocità nella produzione proprio questo ha
e questo è l’assioma più importante di
D cerca altro che sicurezza e sicurezza
produzione e nessun effetto sonda quando no
abilitato l’importante è che tu
può portare la traccia D a piedi fino a un sistema
che è totalmente ottimizzato e senza
riavviando qualcosa usa D trace a
rispondere alle domande su ciò che sta facendo
quindi questa è davvero una tecnologia chiave
ho un sacco di altri esempi del mondo reale
e ovviamente stiamo mettendo le nostre diapositive
online ma abbiamo vinto ovviamente
di tempo penso che tu sappia dal nostro
prospettiva questa tecnica di post
forma il bugging del nodo in
particolare è stato enorme e io se io
potrebbe entrare in una macchina del tempo proprio ora
torneremmo solo un anno fa e dire
noi che stiamo per andare ed essere
presentando questo incredibile lavoro
abbiamo fatto perché non lo pensavo
Era possibile, voglio dire, è incredibile per me
che siamo stati in grado di fare questo ed è
stato incredibilmente utile che abbiamo già
l’ ho usato per inchiodare questi insetti davvero cattivi
sì, problemi che potremmo letteralmente
non eseguire il debug come il ciclo infinito
uno che abbiamo descritto come se non avessimo avuto
idea di come eseguire il debug di prima, quindi questo è
non prendere qualcosa che è difficile e
rendendo più facile questo sta prendendo
qualcosa che è impossibile e che fa
è possibile e quello è stato
fantastico per noi che stiamo usando nel nostro
sono il nostro sviluppo ora che abbiamo
ho un po ‘ di cose che funzionano con esso
lavorando così bene ce ne sono alcuni aperti
problemi ancora vogliamo renderlo di meno
fragile vogliamo impacchettarlo con il
VM c’è molto di più che potremmo andare a fare io
pensa a una delle domande che avremmo
che Dave e io abbiamo sempre è se tu
stavamo progettando una VM da terra
zero dal giorno zero e tu eri
progettandolo per l’abilità di debug cosa
tipi di cose hai il tuo design
dentro senza sacrificare le prestazioni
e francamente non c’è davvero una macchina virtuale che
sono stati progettati pensando a questo
con abilità di debug di produzione quindi è così
davvero emozionante che siamo stati in grado di
ottenere tutto questo lavorando con l’aiuto e io
Penso che siamo stati un po ‘
sorpreso che l’ approccio post-mortem
è effettivamente funzionato a tutti per il calore
profilazione sì non penso che davvero
ha anticipato che ha mostrato molto
promessa che è un problema molto difficile quello
abbiamo dovuto trovare gli oggetti si è
grande avanti ma c’è molto più igname
da fare lì e con quello grazie
molto e gradiremmo il vostro
domande scusate l’ho fatto dal core dump
puoi dire che exec um no è il corto
risposta
che per exec è un brutale duro
problema che funziona sotto estremamente
condizioni isolate e funziona quando io
significa non appena hai una connessione
aprire ad un altro processo di quale nodo
molti sono i motivi per cui è molto difficile andare
e in realtà andare a reidratare tutto questo
quello stato dinamico così è stato
ha funzionato sul UH esattamente in effetti il
v8 voi ragazzi lo usate per fare un’istantanea
e parte del processo di compilazione che puoi fare
quando sai che è molto
tipo di ambiente confinato, io no
ho uno stato esterno che non devo I I
non ho connessioni Posso andare a farlo
lì in un processo in produzione questo
processo non abbiamo potuto Donna grazie
molto

Please follow and like us: