TRADUCCION DIALOGO Nosotros estamos muy contentos de presentar hoy a Rik van riel. El es un Hacker del kernel que trabaja sobre direcciones de memoria. Actualmente él está trabajando en Conectiva S.A. en Brazil, Como todos ustedes conocen es una gran compañia de Linux en suramerica aparte de hackear en el Kernel, él también corre el sitio-Web de Linux-MM y el canal IRC #kernelnewbies en openprojects.net usted puede encontrar mas informacion de este sitio en: www.surriel.com ( en este lugar puede encontrar entre, otras cosas las diapositivas de esta conversacion en: (http://www.surriel.com/lectures/mmtour.html) Él hablará aquí sobre las direcciónes de memoria pero otras cosas interesantes de él es: La alta disponibilidad de los sistemas de archivos y varias cosas mas. La charla estará aquí, en el canal de #Linux, Mr riel nos hecho pensar en hacer otro canal (#qc -> canal de preguntas)en donde se escribiran preguntas durante la charla. si usted tiene alguna pregunta, comentario, etc escribalo en el canal #qc y Mr. riel le contestara. Agradeciendole a usted Mr. riel por estar aqui y tambien gracias a ustedes el titulo de esta conversacion es: Demasiado poco, demasiado lento; Direcciones de Memoria Mr. riel .... Yo supongo que es tiempo para empezar ... bien, bienvenidos a todos hoy estaré dando una charla sobre Direcciones de Memoria en Linux las diapositivas las pueden encontrar en: http://www.surriel.com/lectures/mmtour.html nosotros empezaremos con algunas de las diapositivas introductorias de direcciones de memoria y explicando por qué nosotros necesitamos de las direcciones de memoria si tiene alguna pregunta de mi charla, puede preguntarme en #qc en en canal #qc, usted también puede discutir entre sí sobre las cosas que yo hablo este canal (#Linux), significa estar en silencio... excepto si esta en curso ...... (pagina1) ...... permítame empezar hablando un poco sobre lo que estoy haciendo Conectiva me paga por trabajar mejorando el Kernel de Linux en tiempo completo esto significa que trabajo para Linux Torvals y Alan Cox, pero conectiva me paga a mi Gracias Conectiva :) ahora continuare con charla... (pagina2) [Para nuevas personas ... http://www.surriel.com/lectures/mmtour.html Diapositivas] empezaré explicando sobre las direcciones de memoria la mayoría de la introducción que me la saltaré pero yo diré unas cosas sobre la jerarquía de memoria y sobre las fallas de las páginas y el reemplazo de las páginas comenzare con el cuadro siguente ... (pagina3) esta imagen representa "La jerarquia de la Memoria" cada computadora tiene varios tipos de memoria muy rapidas y muy pequeñas y muy grandes pero lentas las memorias rapidas pueden ser registradas en L1 cpu cache las memorias lentas pueden ser registradas en L2 o Ram y entonces usted tiene un disco duro que REALMENTE es sumamente lento ;) cuándo usted ve este cuadro, algunas personas se harán la pregunta "pero por qué mi máquina no tiene sólo memoria rápida? " o "por qué nosotros no ejecutamos todo simplemente de la memoria rápida? " a razón para esto es que es imposible de hacer la memoria rápida muy grande y aun cuando era posible, simplemente sería demasiado caro y usted no puede ejecutar todo de la memoria rápida porque los programas son absolutamente demasiado grandes ahora nosotros hemos hablado la memoria casi rápida y lenta... (página 4) nos dice sobre los tipos diferentes de velocidades usted tiene "latency" y "throughput" bueno para recuperar todos si usted le parece (página 6) usted puede ver cómo los rediculously retardan que algunas cosas de memoria son permite va a (página 7) la "latencia" == "si pido algo, cuánto tiempo tarda, tengo que esperar hasta que yo consiga la respuesta" el "throughput" == "cuánto datos yo puedo conseguir por minuto" yo pienso que nosotros no tenemos tiempo para mirar el L1 y L2 escondiendo las cosas Continuo con el Direccionamiento de la RAM en (página 14) la RAM es la memoria electrónica más lenta en una computadora es a menudo 100 veces más lenta que el corazón de la CPU (en la latencia) esto es muy, muy lento pero cuando usted ve que el disco es más lento que la RAM 100000 veces (en la latencia), de repente la memoria parece rápidamente de nuevo...;) esta diferencia enorme en el asiento de velocidad muy importante que usted tiene los datos en memoria que usted necesita - si usted no tiene los datos que usted necesita en la RAM, usted necesita esperar MUCHO (a menudo más de 5 millones de ciclos de CPU) antes de sus datos está allí y su programa puede continuar por otro lado, todos sabemos que usted NUNCA tiene bastante memoria;) para que el sistema tenga que escoger qué páginas para contener la memoria (o qué páginas para leer del disco) y qué páginas para tirar (el cambalache fuera) permitir la prueba de nuevo esto;) la interrupción del ping probablemente perdió mis últimos 3 minutos de la charla para que permite el movimiento adelante a la dirección de la RAM Sadie ha dejado (la interrupción del Ping para Sadie[orka.go2.pl]) y la diferencia de velocidad es MUY grande... esto significa que el sistema tiene que escoger qué datos muy cuidadosamente que contiene RAM y qué datos tira (los cambalaches fuera) movimiento adelante a página 18 si una página de un proceso no está en la memoria (excepto el proceso lo quiere) entonces el CPU dará un error y abortará el programa entonces el Sistema operativo (OS) consigue el trabajo de arreglar este error y permitir que el programa continué esta trampa se llama PAGINA MAL el OS arregla el trabajo consiguiendo una página libre, mientras pone los datos correctos en esa página y dando la página a ese programa después de que el proceso simplemente continúa como nada pasó el ÚNICO problema grande es ese tal una falta de la página toma 5 _million_ fácilmente ciclos de CPU para que quiere asegurarse que tiene las faltas de las páginas pequeñas como sea posible el otro problema es que usted sólo tiene un pedazo" "pequeño de memoria en su máquina y usted corre muy rápidamente fuera de memoria libre a ese punto, el OS necesita escoger qué datos guarda en la memoria y qué datos fuera que cambalachea fuera ..... movimiento a (página 19) de http://www.surriel.com/lectures/mmtour.html.... la cosa perfecta para hacer es tirar (el cambalache fuera) esos datos que no se necesitarán de nuevo durante el tiempo más largo de esta manera usted tiene el tiempo más largo entre las faltas de la página y el número mínimo de faltas de la página por minuto... para que la actuación del sistema sea mejor el único problema con este método es que usted necesita volverd el futuro para hacer esto y eso no es muy posible...;))) hara que nosotros tenemos que proponer otras ideas que aproximan a esta idea .... la idea es LRU... nosotros cambalacheamos fuera la página que no se ha usado durante el tiempo más largo La idea es: "si una página no se ha usado durante 30 minutos, yo puedo estar bastante seguro que yo no lo usaré de nuevo en los próximos 5 segundos" qué realmente tiene mucho sentido en más situaciónes hay desgraciadamente, unos (muy comúnes) casos dónde LRU hace la cosa mal exacta tome un sistema dónde alguien está quemando un CD por ejemplo quemar un CD a la 8-velocidad, usted estará vertiendo sus datos a las 1.2MB por segundo a esa velocidad, tomará simplemente 30 segundos en sus 64MB del puesto de trabajo ante su lector del correo es más "viejo" que los datos viejos del CD escrito en el programa y su sistema cambalacheará fuera el lector del correo qué es la cosa MAL exacta para hacer porque más probablemente usted usará a su lector del correo antes de que usted quemara la misma imagen del CD de nuevo LFU evitarían esta situación LFU los cambalaches fuera de la página que se han usado a menudo así que vería que el lector del correo está usándose todo el tiempo (las páginas se usaron 400 veces en los últimos 2 minutos) mientras la imagen del CD se ha usado sólo un tiempo (lea del disco, queme al CD y se olvida y LFU tiraría los datos de imagen de CD que se han usado muy bien y guarda al lector del correo en la memoria en esta situación LFU es casi el perfecto ... ahora nosotros tomamos otro ejemplo;) si nosotros miramos GCC, usted verá que consiste en 3 partes un preprocessor (el cpp), un recopilador (el cc1) y ensamblador (as) sólo suponga usted tiene la memoria para uno de éstos en un momento el cpp estaba corriendo fino simplemente y usó su memoria 400 veces en el último minuto ahora es el giro de cc1 para trabajar pero el cc1 no encaja al mismo tiempo en la memoria como el cpp y LFU cambalacheará fuera las partes de cc1 porque los cpp usaron mucho su memoria... y hace la cosa mal exacta... el cpp _para haciendo que el trabajo se realice un segundo atras y el cc1 es ahora el proceso importante para contener en la memoria ... esto significa que LRU y LFU son buenos para algunas situaciones, pero muy malo para otras situaciones yo conseguí una pregunta si LRU o LFU es bueno... la respuesta no es ninguno de ellos;) eso que nosotros realmente necesitamos es algo que tiene las partes buenas de LRU y LFU pero no las partes malas por suerte nosotros tenemos tal una solución... el envejecimiento de la página (en página 20) el envejecimiento de la página es muy simple el sistema examina encima de todos los lotes de memoria, y cada página tiene una edad (sólo puntos) si la página se ha usado desde que nosotros examinamos la página última, nosotros aumentamos la edad de la página : ¿Cómo usted mide cuándo una página se ha usado en último lugar? ... el umm sí... yo casi me olvidé de esa parte;)) --- cuando una página está usándose, el CPU pone un pedazo especial, el pedazo" "accedido en la página (o la mesa de la página) --- y nosotros sólo tenemos que mirar esto mordió para ver si la página fuera usada --- y después de que nosotros miramos el momento, nosotros lo pusimos a 0 para que cambiará si está usándose de nuevo después de que nosotros examinamos tan atrás para compaginar el envejecimiento si la página fuera usada desde que nosotros la examinamos en último lugar, la página va a envejecer más si la página no fuera usada, la página se va a envejecer menos y cuando la edad de la página alcanza 0, la página es una candidata para el swapout... nosotros quitamos los datos y usamos la memoria para algo más hay ahora las maneras diferentes de hacer la página envejecen más y menos por hacerlo más grande, nosotros agregamos apenas un número mágico a la edad de la página... página->edad + = 3 para hacerlo más pequeño, nosotros podemos hacer las cosas múltiples si nosotros sustraemos un número mágico (página->edad - = 1), nosotros estaremos cerca de LFU si nosotros dividimos la edad de la página por 2 (página->edad / = 2), nosotros estaremos cerca de LRU para ser honrada, yo tengo ninguna idea que de los dos trabajaría el mejor absolutamente o si nosotros queremos que administradores del sistema seleccionen esto ellos, mientras dependiendo de lo que el sistema está haciendo el envejecimiento de la página se usa por Linux 2.0, FreeBSD y Linux 2.4 alguien pensó que sería una idea buena para quitar el envejecimiento de la página en Linux 2.2, pero resultó no trabajar muy bien...;) ... para que nosotros lo volvimos a poner para Linux 2.4;)) y otra pregunta: riel: ¿qué linux está usando? HoraPe: Linux 2.0 usos la "página->edad - = 1" estrategia HoraPe: y Linux 2.4 usos el "página->edad / = 2" estrategia quizá la primera estrategia es buena, quizá la segunda estrategia es buena si nosotros tenemos cualquier voluntario que quiere probar esto, hable conmigo después de la conferencia;)) yo continuare adelante a (página 21) y habla sobre gota-detrás de la mayoría de usted probablemente ha oído leer-delante sobre donde el sistema intenta leer en los datos de un archivo * antes de * el programa que usa el archivo lo necesita esto parece difícil, pero si el programa está leyendo simplemente el archivo de empezar a acabar él es bastante simple... un problema es que este lineal lea llenará rápidamente a toda la memoria si es muy rápido y usted no quiere que, porque usted también tiene otras cosas que usted quiere hacer con su memoria la solución es poner todas las páginas _behind_ dónde el programa ha estado siguiendo leyendo la lista de páginas nosotros cambalachearemos fuera próximo (la lista inactiva) para que delante de dónde el programa es ahora, usted leyó en todos los datos el programa necesita luego (muy amistoso para el programa) y a cambio de eso, usted quita los datos el programa probablemente no necesitará más claro usted puede hacer equivoca aquí, pero si usted le hace derecho 90% del tiempo que todavía es bueno para la actuación... usted no necesita ser perfecto ... de la parte sobre los discos duros, yo saltaré casi todo ... sólo (página 23) yo discutiré hoy como usted probablemente sepa, los discos duros son los dispositivos muy extraños ellos consisten en un manojo de metal (o vaso) los platos con una capa magnética en ellos qué giro alrededor de al rediculously las velocidades altas y hay un leer-escriba brazo que puede buscar por el disco a las velocidades muy bajas las consecuencias de este plan son que los discos duros tienen un throughput alto... 20 MB/second es bastante normal hoy éste es el ayuno bastante para guardar un CPU moderno ocupe por otro lado, si usted necesita algún pedazo de datos, su CPU tendrá que esperar por 5 _million_ ciclos de CPU para que los discos duros son MUCHO demasiado lento si usted no está leyendo el disco de empezar a acabar esto significa que para que llamó "lineal lee" es muy rápido mientras el acceso" "aleatorio es sumamente lento usted no debe sorprenderse si 90% de los datos son en lineal lee, pero los discos duros gastan 95% de su tiempo que hace el disco aleatorio IO porque el IO lineal es tan rápido que el disco puede hacerlo por casi ningún tiempo;) el optimisation normal para esto es el "IO arracimándose", dónde el OS lee (o escribe) los tanto datos en un lugar del disco como posible el "cuando posible" no puede ser demasiado grande, sin embargo... si usted tiene "sólo" 64 MB RAM en su máquina, usted no quiere hacer el readahead en 2MB pedazos probablemente porque esa manera que usted tirará a los datos útiles de memoria que usted necesitará leer de nuevo después en, etc... para que es bueno leer en una parte pequeña de datos, pero también es bueno leer en las partes muy grandes de datos... y el OS tendrá que decidir en algún valor bueno solo Linux tiene algún readahead de automóvil-afinación codificar para esta situación (en mm/filemap.c::generic_file_readahead (), para el interesado) pero ese código todavía necesita algún trabajo para hacerlo bien y claro, otra manera de hacer el "disco accede" ayune es asegurarse usted no accede el disco usted puede hacer esto si el datos que usted necesita ya es (o todavía) en la memoria Linux usa toda la memoria "extra" como un escondite del disco en la esperanza que puede evitar el disco lee y más otros sistemas operativos buenos hacen el mismo (FreeBSD por ejemplo) ... ahora yo seguiré con la Linux memoria dirección ... en (página 28) y furter yo explicaré cómo la dirección de memoria en Linux 2.2 escoge qué páginas para cambalachear fuera, lo que está equivocado con eso y cómo nosotros arreglamos la situación en Linux 2.4 y también las cosas que todavía están equivocado en Linux 2.4 y necesitan ser arreglado después;) el ok, otra pregunta,: el riel: ¿guardar los datos en la memoria, usted ha pensado alguna vez sobre los datos comprimidos en la memoria? --- ésta es una idea buena en algunas circunstancias --- la investigación ha mostrado ese medios del escondite comprimidos que algunos sistemas pueden hacer con menos disco IO y pueden ser más rápido --- por otro lado, para algunos otros sistemas hace el sistema más lento debido al arriba de condensación --- realmente depende de lo que usted hace con su sistema si el escondite" comprimido el truco merece la pena él o no --- y sería interesante ver como una opción en Linux desde que es muy útil para algunos sistemas especiales --- por ejemplo, sistemas que no tienen el cambalache ... el ok, permite el movimiento adelante a (página 31) Linux 2.2 código del swapout es muy simple (por lo menos, ésa es la idea) la función principal es el do_try_to_free_pages () esta función llama el shrink_mmap (), swap_out () y unos otro - menos importante - las funciones el shrink_mmap () simplemente examina todos memoria y tirará (el cambalache fuera) todo el escondite compagina que no se usó desde la última vez nosotros examinamos y swap_out () examina la memoria de todos los programas y cambalaches fuera cada página del programa que no se usó desde la última vez nosotros lo examinamos ... (página 32) éste es un sistema muy simple que trabaja bien si la carga del sistema no es demasiado alta pero en cuanto la carga consiga superior, puede estropearse completamente por algunas razones si, por ejemplo, la carga en el sistema es muy inconstante, nosotros conseguimos los problemas si usted tiene bastante memoria durante 30 minutos y toda la memoria se ha usado en esos 30 minutos, entonces después de que 30 minutos página de _every_ se ha usado desde la última vez que nosotros examinamos (hace 30 minutos) y entonces algo pasa en el sistema (Netscape se empieza) pero el OS no tiene ninguna idea que la página para cambalachear fuera, desde que todas las páginas se usaron en los últimos 30 minutos, cuando nosotros examinamos en último lugar en esa situación, el OS cambalachea normalmente fuera el 'malo' las páginas y esas páginas malas se necesitan de nuevo después 5 milliseconds qué hace al OS cambalachear fuera * otro * las páginas malas de nuevo, hasta que todo se establezca para que cada vez los aumentos de carga de sistema, usted tiene un período dónde el sistema es muy lento y tiene que ajustar a la carga... otro problema es que (en el shrink_mmap) nosotros examinamos y cambalacheamos fuera las páginas de la misma función esto se estropea cuando nosotros tenemos una carga muy alta en el sistema y mucho las páginas que nosotros queremos cambalachear fuera la necesidad ser escrito primero al disco el shrink_mmap () examinará cada página en la memoria y disco de la salida IO para las páginas que necesitan ser escrito al disco después de eso empezará examinando al principio de nuevo y ninguna página que ve se ha usado desde la última vez nosotros lo examinamos, desde que el kswapd era el único funcionamiento de la cosa a ese punto el sistema - de nuevo - la alternancia de las salidas fuera las páginas malas una pregunta: ¿ es este el do_try_to_free_pages () printk que nosotros oímos tanto sobre en el lkml? --- este printk se llama cuando el do_try_to_free_pages () no puede encontrar las páginas para cambalachear fuera --- no cuando el do_try_to_free_pages () los cambalaches las páginas malas por el accidente --- para que estas cosas no son el mismo ... permite el movimiento adelante a (página 33) y ve cómo nosotros arreglamos estos problemas en Linux 2.4 los dos cambios grandes para Linux 2.4 son el envejecimiento de la página y la separación de página que envejece y compaginan el writeback al disco el envejecimiento de la página significa nosotros somos más precisos en chosing que compagina fuera que nosotros cambalacheamos, para que nosotros tendremos una oportunidad buena de tener las páginas que nosotros necesitamos en la memoria y el sistema realizará bien cuando la memoria está poniéndose llena la separación de página que envejece y compagina vaciando medios que nosotros simplemente no cambalachearemos fuera la página mala porque la página correcta todavía necesita ser escrita al disco y nosotros no podemos usarlo todavía para algo más ... en (página 35) yo explicaré sobre las colas de memoria que nosotros tenemos en Linux 2.4 nosotros tenemos 3 tipos de páginas en Linux 2.4 las páginas activas, el inactive_dirty compagina y páginas del inactive_clean nosotros compaginamos el envejecimiento en las páginas activas y los inactive_dirty y páginas del inactive_clean simplemente son gallinas ponedoras esperando ser usado para algo más allí ... ahora nosotros regresamos a (página 34) teniendo los medios de las páginas más inactivos que el sistema puede bien tratar con las asignaciones grandes y púas en la carga del sistema sin embargo, las páginas mudanza del activo a la lista inactiva y regresa sobre la cabeza mucho teniendo las páginas menos inactivas así también es bueno... la solución Linux 2.4 tomas son ver cuánta memoria está salvándose para otro propone cada segundo (promedió durante un minuto) y simplemente guarda 1 segundo de asignaciones en las colas inactivas yo estoy bastante seguro nosotros podemos hacer este bueno para Linux 2.5, pero nadie ha tenido tiempo todavía para investigar esto... lo que Linux 2.4 también hace es algún luz fondo examinando todos los minutos o para que toda la memoria del escondite se examina y cuando el página->age de páginas en el escondite alcanza 0, se moverá a la lista inactiva para que cuando el sistema consigue un estallido de actividad de nuevo después de 30 minutos, el sistema conoce qué páginas exactamente a los swapout y qué páginas contener la memoria esto arregla los problemas más grandes que nosotros tenemos con Linux 2.2 VM ** ... porque nosotros tenemos la izquierda de tiempo pequeña, yo iré ahora al Fuera De Memoria (OOM) el asesino en (página 43) qué será la última parte de la conferencia, después de esto usted puede hacer las preguntas;) el ok, el asesino de OOM, cuando la memoria * y * el cambalache está lleno, no hay mucho que usted puede hacer de hecho, usted o puede sentarse allí y espera hasta que un programa se marche, o usted puede matar un programa y puede esperar el sistema sigue corriendo en Linux, el sistema mata siempre un proceso Linux 2.2 muertes el proceso que está haciendo una asignación que es una pena muy actualmente si pasa para ser syslog o init Linux 2.4 intenta ser inteligente y seleccionar un proceso "bueno" para matar para esto, mira el tamaño del proceso (matando 1 proceso así nos vuelve toda la memoria nosotros necesitamos) pero también a si es un proceso de la raíz o si el proceso tiene el acceso del hardware directo (es una pena muy matar estos programas) y a la cantidad de tiempo el proceso ha estado corriendo y los CPU cronometran ha usado porque es bueno matar un 5-segundo Netscape viejo que para matar su cálculo matemático que ha estado corriendo durante 3 semanas aun cuando el Netscape es más pequeño... matando el cálculo grande significarán la computadora pierde mucho trabajo que es una pena para Linux 2.5, yo supongo algunas personas también querrán tener la OOM asesino mirada a que _user_ está haciendo las cosas malas al sistema pero ese es las cosas para hacer en el futuro ... en (página 44) usted puede encontrar algún URLs con la información interesante ... gracias por su tiempo, si usted tiene cualquier pregunta, siéntase libre para unir la discusión adelante #el qc ... éste es el fin de mi charla, pero yo seré en #el qc durante un pedazo más tiempo la clap clap clap clap clap clap clpa clpar clap la clap clap clap clap clap clap clpa clpar clap la clap clap clap clap clap clap clpa clpar clap el btw, para las personas interesadas en grano de Linux que taja nosotros tenemos un cauce de IRC especial en irc.openprojects.net #el kernelnewbies vea http://kernelnewbies.org / para el #el website del kernelnewbies la mayoría del tiempo usted puede encontrarme (y otros computomaníacos del grano) en ese cauce si usted tiene algunas preguntas en profundidad o hallazgo algo interesante que al leer mis diapositivas, usted siempre puede ir allí bien, mis amigos siéntase libre para continuar discutiendo a #el qc muchos gracias al Rik carro de mudanzas riel y a todos ustedes para el comming aquí