Date: Fri, 3 Sep 2021 18:34:03 GMT From: =?utf-8?Q?Fernando Apestegu=C3=ADa?= <fernape@FreeBSD.org> To: doc-committers@FreeBSD.org, dev-commits-doc-all@FreeBSD.org Subject: git: 3e6e02c9ba - main - [doc-es] Update vm-design article Message-ID: <202109031834.183IY3AF009365@gitrepo.freebsd.org>
next in thread | raw e-mail | index | archive | help
The branch main has been updated by fernape: URL: https://cgit.FreeBSD.org/doc/commit/?id=3e6e02c9baa226f83cdb2732159158f0ebf4f6aa commit 3e6e02c9baa226f83cdb2732159158f0ebf4f6aa Author: Fernando Apesteguía <fernape@FreeBSD.org> AuthorDate: 2021-09-03 16:30:06 +0000 Commit: Fernando Apesteguía <fernape@FreeBSD.org> CommitDate: 2021-09-03 16:33:22 +0000 [doc-es] Update vm-design article Update with tags. Add .po file. --- .../content/es/articles/vm-design/_index.adoc | 3 +- .../content/es/articles/vm-design/_index.po | 1596 ++++++++++++++++++++ 2 files changed, 1598 insertions(+), 1 deletion(-) diff --git a/documentation/content/es/articles/vm-design/_index.adoc b/documentation/content/es/articles/vm-design/_index.adoc index 01bef76726..2616d6035d 100644 --- a/documentation/content/es/articles/vm-design/_index.adoc +++ b/documentation/content/es/articles/vm-design/_index.adoc @@ -3,7 +3,8 @@ authors: - author: 'Matthew Dillon' email: dillon@apollo.backplane.com -releaseinfo: $FreeBSD$ +description: 'Una descripción fácil de seguir del diseño del sistema de memoria virtual de FreeBSD' +tags: ["Design", "virtual machine", "FreeBSD"] title: 'Elementos de diseño del sistema de Memoria Virtual de FreeBSD' trademarks: '["freebsd", "linux", "microsoft", "opengroup", "daemon-news", "general"]' --- diff --git a/documentation/content/es/articles/vm-design/_index.po b/documentation/content/es/articles/vm-design/_index.po new file mode 100644 index 0000000000..00cbc4f0e0 --- /dev/null +++ b/documentation/content/es/articles/vm-design/_index.po @@ -0,0 +1,1596 @@ +# SOME DESCRIPTIVE TITLE +# Copyright (C) YEAR The FreeBSD Project +# This file is distributed under the same license as the FreeBSD Documentation package. +# Fernando Apesteguía <fernando.apesteguia@gmail.com>, 2021. +msgid "" +msgstr "" +"Project-Id-Version: FreeBSD Documentation VERSION\n" +"POT-Creation-Date: 2021-06-03 17:02-0300\n" +"PO-Revision-Date: 2021-09-03 18:10+0000\n" +"Last-Translator: Fernando Apesteguía <fernando.apesteguia@gmail.com>\n" +"Language-Team: Spanish <https://translate-dev.freebsd.org/projects/" +"documentation/articlesvm-design_index/es/>\n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.8\n" + +#. type: YAML Front Matter: description +#: documentation/content/en/articles/vm-design/_index.adoc:1 +#, no-wrap +msgid "An easy to follow description of the design of the FreeBSD virtual memory system" +msgstr "" +"Una descripción fácil de seguir del diseño del sistema de memoria virtual de " +"FreeBSD" + +#. type: Title = +#: documentation/content/en/articles/vm-design/_index.adoc:1 +#: documentation/content/en/articles/vm-design/_index.adoc:11 +#, no-wrap +msgid "Design elements of the FreeBSD VM system" +msgstr "Elementos de diseño del sistema de Memoria Virtual de FreeBSD" + +#. type: Plain text +#: documentation/content/en/articles/vm-design/_index.adoc:35 +msgid "Abstract" +msgstr "Resumen" + +#. type: Plain text +#: documentation/content/en/articles/vm-design/_index.adoc:42 +msgid "" +"The title is really just a fancy way of saying that I am going to attempt to " +"describe the whole VM enchilada, hopefully in a way that everyone can " +"follow. For the last year I have concentrated on a number of major kernel " +"subsystems within FreeBSD, with the VM and Swap subsystems being the most " +"interesting and NFS being \"a necessary chore\". I rewrote only small " +"portions of the code. In the VM arena the only major rewrite I have done is " +"to the swap subsystem. Most of my work was cleanup and maintenance, with " +"only moderate code rewriting and no major algorithmic adjustments within the " +"VM subsystem. The bulk of the VM subsystem's theoretical base remains " +"unchanged and a lot of the credit for the modernization effort in the last " +"few years belongs to John Dyson and David Greenman. Not being a historian " +"like Kirk I will not attempt to tag all the various features with peoples " +"names, since I will invariably get it wrong." +msgstr "" +"El título es sólo una forma elegante de decir que voy a intentar describir " +"la enchilada de la Memoria Virtual, espero que de un modo que todo el mundo " +"pueda seguir. Durante el último año me he concentrado en un número de " +"subsistemas principales del kernel de FreeBSD, con los subsistemas de " +"Memoria Virtual e Intercambio siendo los más interesantes y NFS siendo \"una " +"tarea necesaria\". Reescribí sólo pequeñas porciones del código. En el área " +"de Memoria Virtual la única reescritura importante que he hecho es el " +"subsistema de intercambio. La mayor parte de mi trabajo fue de limpieza y " +"mantenimiento, con tan sólo reescrituras moderadas de código y sin ajustes " +"algorítmicos importantes en el subsistema de Memoria Virtual. El grueso de " +"la base teórica del subsistema de Memoria Virtual permanece sin cambios y " +"mucho del crédito del esfuerzo de modernización en los últimos años es para " +"John Dyson y David Greenman. Como no soy un historiador como Kirk no " +"intentaré etiquetar todas las características con nombres de personas, ya " +"que me equivocaría irremediablemente." + +#. type: Plain text +#: documentation/content/en/articles/vm-design/_index.adoc:44 +msgid "'''" +msgstr "'''" + +#. type: Title == +#: documentation/content/en/articles/vm-design/_index.adoc:48 +#, no-wrap +msgid "Introduction" +msgstr "Introducción" + +#. type: Plain text +#: documentation/content/en/articles/vm-design/_index.adoc:64 +msgid "" +"Before moving along to the actual design let's spend a little time on the " +"necessity of maintaining and modernizing any long-living codebase. In the " +"programming world, algorithms tend to be more important than code and it is " +"precisely due to BSD's academic roots that a great deal of attention was " +"paid to algorithm design from the beginning. More attention paid to the " +"design generally leads to a clean and flexible codebase that can be fairly " +"easily modified, extended, or replaced over time. While BSD is considered " +"an \"old\" operating system by some people, those of us who work on it tend " +"to view it more as a \"mature\" codebase which has various components " +"modified, extended, or replaced with modern code. It has evolved, and " +"FreeBSD is at the bleeding edge no matter how old some of the code might " +"be. This is an important distinction to make and one that is unfortunately " +"lost to many people. The biggest error a programmer can make is to not " +"learn from history, and this is precisely the error that many other modern " +"operating systems have made. Windows NT(R) is the best example of this, and " +"the consequences have been dire. Linux also makes this mistake to some " +"degree-enough that we BSD folk can make small jokes about it every once in a " +"while, anyway. Linux's problem is simply one of a lack of experience and " +"history to compare ideas against, a problem that is easily and rapidly being " +"addressed by the Linux community in the same way it has been addressed in " +"the BSD community-by continuous code development. The Windows NT(R) folk, " +"on the other hand, repeatedly make the same mistakes solved by UNIX(R) " +"decades ago and then spend years fixing them. Over and over again. They " +"have a severe case of \"not designed here\" and \"we are always right " +"because our marketing department says so\". I have little tolerance for " +"anyone who cannot learn from history." +msgstr "" +"Antes de avanzar con el diseño real dediquemos un poco de tiempo a la " +"necesidad de mantener y modernizar cualquier base de código de larga " +"duración. En el mundo de la programación, los algoritmos tienen a se más " +"importantes que el código y es precisamente debido a las raíces académicas " +"de BSD que una gran parte de la atención se puso desde el comienzo en el " +"diseño algorítmico. Prestar más atención al diseño generalmente lleva a una " +"base de código limpio y flexible que puede ser modificado fácilmente, " +"extendido o reemplazado a lo largo del tiempo. Aunque BSD es considerado por " +"alguna gente como un sistema operativo\"viejo\", aquellos de nosotros que " +"trabajamos en él solemos verlo más como una base de código\"madura\" la cual " +"tiene varios componentes modificados, extendidos, o reemplazados con código " +"moderno. Ha evolucionado, y FreeBSD está a la vanguardia independientemente " +"de cómo de viejo sea parte del código. Es importante hacer esta distinción y " +"que mucha gente pasa por alto. El mayor error que puede cometer un " +"programador es no aprender de la historia, y es precisamente este error el " +"que han cometido muchos otros sistemas operativos modernos. Windows NT(R) es " +"el mejor ejemplo, y las consecuencias han sido nefastas. Linux también " +"comete este error hasta cierto punto—lo suficiente para que nosotros la " +"gente de BSD hagamos pequeñas bromas de vez en cuando, por lo menos. El " +"problema de Linux es simplemente la falta de experiencia y de una historia " +"contra la que comparar ideas, un problema que está siendo tratado " +"rápidamente por la comunidad Linux de la misma forma que ha sido tratado en " +"la comunidad BSD—mediante el desarrollo continuo de código. La gente de " +"Windows NT(R), por otro lado, repiten los mismos errores solucionados por " +"UNIX(R) hace décadas y pasan años arreglándolos. Una y otra vez. Sufren un " +"caso severo de \"no diseñado aquí\" y \"siempre tenemos la razón porque " +"nuestro departamento de marketing así lo dice\". Tengo poca tolerancia hacia " +"cualquiera que no puede aprender de la historia." + +#. type: Plain text +#: documentation/content/en/articles/vm-design/_index.adoc:69 +msgid "" +"Much of the apparent complexity of the FreeBSD design, especially in the VM/" +"Swap subsystem, is a direct result of having to solve serious performance " +"issues that occur under various conditions. These issues are not due to bad " +"algorithmic design but instead rise from environmental factors. In any " +"direct comparison between platforms, these issues become most apparent when " +"system resources begin to get stressed. As I describe FreeBSD's VM/Swap " +"subsystem the reader should always keep two points in mind:" +msgstr "" +"Mucha de la aparente complejidad del diseño de FreeBSD, especialmente en el " +"subsistema de Memoria Virtual/Intercambio, es un resultado directo de tener " +"que resolver serios problemas de rendimiento que ocurren bajo condiciones " +"variadas. Estos problemas no se deben aun mal diseño algorítmico sino que " +"surgen de factores ambientales. En cualquier comparación directa entre " +"plataformas, estos problemas se hacen más evidentes cuando los recursos del " +"sistema empiezan a sufrir estrés. Como describo en el subsistema de Memoria " +"Virtual/Intercambio de FreeBSD el lector siempre debería tener en mente dos " +"puntos:" + +#. type: Plain text +#: documentation/content/en/articles/vm-design/_index.adoc:71 +msgid "" +"The most important aspect of performance design is what is known as " +"\"Optimizing the Critical Path\". It is often the case that performance " +"optimizations add a little bloat to the code in order to make the critical " +"path perform better." +msgstr "" +"El aspecto más importante del diseño de rendimiento es lo que se conoce como " +"\"Optimización del Camino Crítico\". Es común que las optimizaciones de " +"rendimiento inflen algo el código con el fin de mejorar el rendimiento del " +"camino crítico." + +#. type: Plain text +#: documentation/content/en/articles/vm-design/_index.adoc:72 +msgid "" +"A solid, generalized design outperforms a heavily-optimized design over the " +"long run. While a generalized design may end up being slower than an heavily-" +"optimized design when they are first implemented, the generalized design " +"tends to be easier to adapt to changing conditions and the heavily-optimized " +"design winds up having to be thrown away." +msgstr "" +"Un diseño sólido, generalizado tiene mejor rendimiento a largo plazo que un " +"diseño altamente optimizado. Mientras que un diseño generalizado puede " +"terminar siendo más lento que un diseño altamente optimizado cuando se " +"implementan inicialmente, el diseño generalizado tiende a ser más fácil de " +"adaptar a condiciones cambiantes y el diseño altamente optimizado termina " +"siendo desechado." + +#. type: Plain text +#: documentation/content/en/articles/vm-design/_index.adoc:76 +msgid "" +"Any codebase that will survive and be maintainable for years must therefore " +"be designed properly from the beginning even if it costs some performance. " +"Twenty years ago people were still arguing that programming in assembly was " +"better than programming in a high-level language because it produced code " +"that was ten times as fast. Today, the fallibility of that argument is " +"obvious - as are the parallels to algorithmic design and code generalization." +msgstr "" +"Cualquier base de código que sobrevivirá y será mantenible durante años debe " +"por lo tanto ser diseñada adecuadamente desde el comienzo incluso si tiene " +"algo de coste en rendimiento. Hace veinte años la gente todavía discutía si " +"la programación en ensamblador era mejor que programar en un lenguaje de " +"alto nivel porque producía código que era diez veces más rápido. Hoy, la " +"falibilidad de ese argumento es obvio — de modo paralelo al diseño " +"algorítmico y la generalización de código." + +#. type: Title == +#: documentation/content/en/articles/vm-design/_index.adoc:78 +#, no-wrap +msgid "VM Objects" +msgstr "Objetos de Memoria Virtual" + +#. type: Plain text +#: documentation/content/en/articles/vm-design/_index.adoc:88 +msgid "" +"The best way to begin describing the FreeBSD VM system is to look at it from " +"the perspective of a user-level process. Each user process sees a single, " +"private, contiguous VM address space containing several types of memory " +"objects. These objects have various characteristics. Program code and " +"program data are effectively a single memory-mapped file (the binary file " +"being run), but program code is read-only while program data is copy-on-" +"write. Program BSS is just memory allocated and filled with zeros on " +"demand, called demand zero page fill. Arbitrary files can be memory-mapped " +"into the address space as well, which is how the shared library mechanism " +"works. Such mappings can require modifications to remain private to the " +"process making them. The fork system call adds an entirely new dimension to " +"the VM management problem on top of the complexity already given." +msgstr "" +"La mejor manera de empezar describiendo el sistema de Memoria Virtual de " +"FreeBSD is mirarlo desde la perspectiva de un proceso de usuario. Cada " +"proceso de usuario ve una espacio de direcciones de Memoria Virtual único, " +"privado y contiguo que contiene diversos tipos de objetos de memoria. Estos " +"objetos tienen diversas características. Código de programa y datos de " +"programa son de forma efectiva un solo fichero mapeado en memoria (el " +"fichero binario que se está ejecutando), pero el código del programa es de " +"solo lectura mientras que los datos de programa son copy-on-write. El BSS " +"del programa es sólo memoria asignada y rellenada con ceros bajo demanda, " +"llamada rellenado de página cero bajo demanda. Ficheros arbitrarios pueden " +"ser mapeados en memoria en el espacio de direcciones también, que es como " +"funciona el mecanismo de librerías compartidas. Dichos mapeos pueden " +"requerir modificaciones para permanecer privados al proceso que los realiza. " +"La llamada al sistema fork añade una nueva dimensión a al problema de la " +"gestión de la Memoria Virtual a añadir a la complejidad ya existente." + +#. type: Plain text +#: documentation/content/en/articles/vm-design/_index.adoc:94 +msgid "" +"A program binary data page (which is a basic copy-on-write page) illustrates " +"the complexity. A program binary contains a preinitialized data section " +"which is initially mapped directly from the program file. When a program is " +"loaded into a process's VM space, this area is initially memory-mapped and " +"backed by the program binary itself, allowing the VM system to free/reuse " +"the page and later load it back in from the binary. The moment a process " +"modifies this data, however, the VM system must make a private copy of the " +"page for that process. Since the private copy has been modified, the VM " +"system may no longer free it, because there is no longer any way to restore " +"it later on." +msgstr "" +"Una página de datos binarios de un programa (que es una página copy-on-write " +"básica) ilustra esta complejidad. Un programa binario contiene una sección " +"de datos preinicializados que es inicialmente mapeado directamente por el " +"fichero del programa. Cuando un programa se carga en el espacio de " +"direcciones de Memoria Virtual del proceso, este área es inicialmente " +"mapeado en memoria y respaldado por el programa binario mismo, permitiendo " +"al sistema de Memoria Virtual liberar/reutilizar la página y después " +"cargarla de nuevo desde el binario. Sin embargo, en el momento en que un " +"proceso modifica estos datos, el sistema de Memoria Virtual debe hacer una " +"copia privada para ese proceso. Puesto que la copia privada ha sido " +"modificada, el sistema de Memoria Virtual podría no ser capaz de liberarla, " +"porque no hay forma de restaurarla posteriormente." + +#. type: Plain text +#: documentation/content/en/articles/vm-design/_index.adoc:101 +msgid "" +"You will notice immediately that what was originally a simple file mapping " +"has become much more complex. Data may be modified on a page-by-page basis " +"whereas the file mapping encompasses many pages at once. The complexity " +"further increases when a process forks. When a process forks, the result is " +"two processes-each with their own private address spaces, including any " +"modifications made by the original process prior to the call to `fork()`. " +"It would be silly for the VM system to make a complete copy of the data at " +"the time of the `fork()` because it is quite possible that at least one of " +"the two processes will only need to read from that page from then on, " +"allowing the original page to continue to be used. What was a private page " +"is made copy-on-write again, since each process (parent and child) expects " +"their own personal post-fork modifications to remain private to themselves " +"and not effect the other." +msgstr "" +"Notarás inmediatamente que lo que originalmente era un simple mapeo de un " +"fichero se ha convertido en algo más complejo. Los datos pueden ser " +"modificados página a página mientras que el mapeo de ficheros engloba varias " +"páginas a la vez. La complejidad aumenta más cuando un proceso se bifurca. " +"Cuando un proceso se bifurca, el resultado son dos procesos—cada uno con su " +"propio espacio de direcciones privado que incluye cualquier modificación " +"hecha por el proceso original antes de la llamada a `fork()`. Sería tonto " +"para el sistema de Memoria Virtual hacer una copia completa de los datos en " +"el momento de llamar a `fork()` porque es bastante posible que al menos uno " +"de los dos procesos solamente necesite leer de esa página a partir de este " +"momento, permitiendo así que se use la página original. Lo que era una " +"página privada se ha convertido en una página copy-on-write de nuevo, puesto " +"que cada proceso (padre y hijo) espera que sus propias modificaciones " +"personales después del fork permanezcan privadas para ellos y que afecten al " +"otro." + +#. type: Plain text +#: documentation/content/en/articles/vm-design/_index.adoc:110 +msgid "" +"FreeBSD manages all of this with a layered VM Object model. The original " +"binary program file winds up being the lowest VM Object layer. A copy-on-" +"write layer is pushed on top of that to hold those pages which had to be " +"copied from the original file. If the program modifies a data page " +"belonging to the original file the VM system takes a fault and makes a copy " +"of the page in the higher layer. When a process forks, additional VM Object " +"layers are pushed on. This might make a little more sense with a fairly " +"basic example. A `fork()` is a common operation for any *BSD system, so " +"this example will consider a program that starts up, and forks. When the " +"process starts, the VM system creates an object layer, let's call this A:" +msgstr "" +"FreeBSD gestiona todo esto con un modelo de Objetos de Memoria Virtual en " +"capas. El fichero del programa binario original termina siendo la capa de " +"Objetos de Memoria Virtual más baja. Una capa copy-on-write se sitúa encima " +"de ella para mantener aquellas páginas que han sido copiadas del fichero " +"original. Si el programa modifica una página de datos que pertenece al " +"fichero original el sistema de Memoria Virtual recibe un fallo de página y " +"hace una copia de la página en la capa superior. Cuando un proceso bifurca, " +"se empujan nuevas capas de Objetos de Memoria Virtual. Esto puede cobrar más " +"sentido con un ejemplo bastante básico. Un `fork()` es una operación común " +"para cualquier sistema *BSD, así que este ejemplo considerará un programa " +"que arranca, y bifurca. Cuando el proceso arranca, el sistema de Memoria " +"Virtual crea una capa de objetos, llamémosla A:" + +#. type: Positional ($1) AttributeList argument for macro 'image' +#: documentation/content/en/articles/vm-design/_index.adoc:111 +#, no-wrap +msgid "A picture" +msgstr "Una imagen" + +#. type: Target for macro image +#: documentation/content/en/articles/vm-design/_index.adoc:111 +#, no-wrap +msgid "fig1.png" +msgstr "fig1.png" + +#. type: Plain text +#: documentation/content/en/articles/vm-design/_index.adoc:116 +msgid "" +"A represents the file-pages may be paged in and out of the file's physical " +"media as necessary. Paging in from the disk is reasonable for a program, " +"but we really do not want to page back out and overwrite the executable. " +"The VM system therefore creates a second layer, B, that will be physically " +"backed by swap space:" +msgstr "" +"A representa el fichero—las páginas pueden ser paginadas hacia o desde el " +"medio físico del fichero según sea necesario. Paginar desde el disco es " +"razonable para un programa, pero en realidad no queremos paginar de vuelta y " +"sobrescribir el ejecutable. Por tanto, el sistema de Memoria Virtual crea " +"una segunda capa, B, que estará respaldada físicamente por espacio de " +"intercambio:" + +#. type: Target for macro image +#: documentation/content/en/articles/vm-design/_index.adoc:117 +#, no-wrap +msgid "fig2.png" +msgstr "fig2.png" + +#. type: Plain text +#: documentation/content/en/articles/vm-design/_index.adoc:122 +msgid "" +"On the first write to a page after this, a new page is created in B, and its " +"contents are initialized from A. All pages in B can be paged in or out to a " +"swap device. When the program forks, the VM system creates two new object " +"layers-C1 for the parent, and C2 for the child-that rest on top of B:" +msgstr "" +"En la primera escritura a una página después de esto, se crea una nueva " +"página en B, y su contenido es inicializado desde A. Todas las páginas en B " +"pueden ser paginadas a o desde el dispositivo de intercambio. Cuando el " +"programa bifurca, el sistema de Memoria Virtual crea dos capas de objetos " +"nuevas—C1 para el padre, y C2 para el hijo—que descansan sobre B:" + +#. type: Target for macro image +#: documentation/content/en/articles/vm-design/_index.adoc:123 +#, no-wrap +msgid "fig3.png" +msgstr "fig3.png" + +#. type: Plain text +#: documentation/content/en/articles/vm-design/_index.adoc:134 +msgid "" +"In this case, let's say a page in B is modified by the original parent " +"process. The process will take a copy-on-write fault and duplicate the page " +"in C1, leaving the original page in B untouched. Now, let's say the same " +"page in B is modified by the child process. The process will take a copy-on-" +"write fault and duplicate the page in C2. The original page in B is now " +"completely hidden since both C1 and C2 have a copy and B could theoretically " +"be destroyed if it does not represent a \"real\" file; however, this sort of " +"optimization is not trivial to make because it is so fine-grained. FreeBSD " +"does not make this optimization. Now, suppose (as is often the case) that " +"the child process does an `exec()`. Its current address space is usually " +"replaced by a new address space representing a new file. In this case, the " +"C2 layer is destroyed:" +msgstr "" +"En este caso, digamos que una página en B es modificada por el proceso padre " +"original. El proceso recibirá un fallo de copy-on-write y duplicará la " +"página en C1, dejando la página original en B sin tocar. Ahora, digamos que " +"la misma página en B es modificada por el proceso hijo. El proceso recibirá " +"un fallo de copy-on-write y duplicará la página en C2. La página original en " +"B está ahora completamente oculta ya que tanto C1 como C2 tienen una copia y " +"B podría teóricamente ser destruida si no representa un fichero \"real\"; " +"sin embargo, este tipo de optimización no es trivial de hacer porque es muy " +"fina. FreeBSD no hace esta optimización. Ahora, supón (como suele ser el " +"caso) que el proceso hijo hace un `exec()`. Su espacio de direcciones actual " +"es habitualmente remplazado por un nuevo espacio de direcciones que " +"representa un nuevo fichero. En este caso, la capa C2 es destruida:" + +#. type: Target for macro image +#: documentation/content/en/articles/vm-design/_index.adoc:135 +#, no-wrap +msgid "fig4.png" +msgstr "fig4.png" + +#. type: Plain text +#: documentation/content/en/articles/vm-design/_index.adoc:141 +msgid "" +"In this case, the number of children of B drops to one, and all accesses to " +"B now go through C1. This means that B and C1 can be collapsed together. " +"Any pages in B that also exist in C1 are deleted from B during the " +"collapse. Thus, even though the optimization in the previous step could not " +"be made, we can recover the dead pages when either of the processes exit or " +"`exec()`." +msgstr "" +"En este caso, el número de hijos de B ha bajado a uno, y todos los accesos a " +"B van ahora a través de C1. Esto significa que B y C1 pueden colapsarse " +"juntas. Cualquier página en B que también existe en C1 se borran de B " +"durante el colapso. Por lo tanto, incluso aunque la optimización en el paso " +"anterior no se pudo hacer, podemos recuperar las páginas muertas bien cuando " +"el proceso sale o cuando llama a `exec()`." + +#. type: Plain text +#: documentation/content/en/articles/vm-design/_index.adoc:148 +msgid "" +"This model creates a number of potential problems. The first is that you " +"can wind up with a relatively deep stack of layered VM Objects which can " +"cost scanning time and memory when you take a fault. Deep layering can " +"occur when processes fork and then fork again (either parent or child). The " +"second problem is that you can wind up with dead, inaccessible pages deep in " +"the stack of VM Objects. In our last example if both the parent and child " +"processes modify the same page, they both get their own private copies of " +"the page and the original page in B is no longer accessible by anyone. That " +"page in B can be freed." +msgstr "" +"Este modelo crea un número de problemas potenciales. El primero es que " +"puedes terminar con una pila de Objetos de Memoria Virtual relativamente " +"profunda que puede tener un coste de tiempo de escaneo y de memoria cuando " +"recibes un fallo. Capas muy profundas pueden ocurrir cuando los procesos se " +"bifurcan y se bifurcan de nuevo (en el padre o en el hijo). El segundo " +"problema es que puedes terminar con páginas muertas, inaccesibles en lo " +"profundo de la pila de Objetos de Memoria Virtual. En nuestro último ejemplo " +"si tanto los el proceso padre como el hijo modifican la misma página, ambos " +"obtienen su propia copia privada de la página y la página original en B ya " +"no es accesible por nadie. Esa página en B puede ser liberada." + +#. type: Plain text +#: documentation/content/en/articles/vm-design/_index.adoc:159 +msgid "" +"FreeBSD solves the deep layering problem with a special optimization called " +"the \"All Shadowed Case\". This case occurs if either C1 or C2 take " +"sufficient COW faults to completely shadow all pages in B. Lets say that C1 " +"achieves this. C1 can now bypass B entirely, so rather then have C1->B->A " +"and C2->B->A we now have C1->A and C2->B->A. But look what also happened-" +"now B has only one reference (C2), so we can collapse B and C2 together. " +"The end result is that B is deleted entirely and we have C1->A and C2->A. " +"It is often the case that B will contain a large number of pages and neither " +"C1 nor C2 will be able to completely overshadow it. If we fork again and " +"create a set of D layers, however, it is much more likely that one of the D " +"layers will eventually be able to completely overshadow the much smaller " +"dataset represented by C1 or C2. The same optimization will work at any " +"point in the graph and the grand result of this is that even on a heavily " +"forked machine VM Object stacks tend to not get much deeper then 4. This is " +"true of both the parent and the children and true whether the parent is " +"doing the forking or whether the children cascade forks." +msgstr "" +"FreeBSD soluciona el problema de capas profundas con una optimización " +"especial llamada \"Caso de Todo Sombreado\". Este caso ocurre si C1 o C2 " +"generan suficientes fallos COW como para sombrear (ocultar) todas las " +"páginas en B. Digamos que C1 lo consigue. C1 puede ahora puentear B " +"completamente, así que en lugar de tener C1->B->A y C2->B->A ahora tenemos " +"C1->A y C2->B->A. Pero mira lo que ha pasado también—ahora B tiene sólo una " +"referencia (C1), así que podemos colapsar B y C2 juntas. El resultado final " +"es que B se borra completamente y tenemos C1->A y C2->A. Habitualmente el " +"caso es que B contendrá un gran número de páginas y ni C1 ni C2 serán " +"capaces de ocultarla completamente. Si bifurcamos de nuevo y creamos un " +"conjunto de capas D, sin embargo, es mucho más probable que una de las capas " +"de D eventualmente sea capaz de ocultar el conjunto mucho menor representado " +"por C1 o C2. La misma optimización funcionará en cualquier punto del grafo y " +"el resultado total de esto es que incluso en una máquina con muchas " +"bifurcaciones las pilas de Objetos de Memoria Virtual tienen a no ser mucho " +"más profundas de 4. Esto es verdad tanto para el padre como para los hijos y " +"es así tanto si el padre hace la bifurcación como si los hijos bifurcan en " +"cascada." + +#. type: Plain text +#: documentation/content/en/articles/vm-design/_index.adoc:163 +msgid "" +"The dead page problem still exists in the case where C1 or C2 do not " +"completely overshadow B. Due to our other optimizations this case does not " +"represent much of a problem and we simply allow the pages to be dead. If " +"the system runs low on memory it will swap them out, eating a little swap, " +"but that is it." +msgstr "" +"El problema de la página muerta todavía existe en el caso en el que C1 o C2 " +"no ocultan completamente B. Debido a otras optimizaciones este caso no es " +"demasiado problema y simplemente permitimos que haya páginas muertas. Si el " +"sistema se queda sin memoria las intercambiará a disco, utilizando un poco " +"de espacio de intercambio, pero eso es todo." + +#. type: Plain text +#: documentation/content/en/articles/vm-design/_index.adoc:167 +msgid "" +"The advantage to the VM Object model is that `fork()` is extremely fast, " +"since no real data copying need take place. The disadvantage is that you " +"can build a relatively complex VM Object layering that slows page fault " +"handling down a little, and you spend memory managing the VM Object " +"structures. The optimizations FreeBSD makes proves to reduce the problems " +"enough that they can be ignored, leaving no real disadvantage." +msgstr "" +"La ventaja del modelo de Objetos de Memoria Virtual es que `fork()` es " +"extremadamente rápido, ya que no se necesita realizar una copia real de " +"datos. La desventaja es que puedes construir un conjunto de capas de Objetos " +"de Memoria Virtual relativamente complejo que haga un poco más lento el " +"manejo de fallos de página, y que tienes que gastar memoria en la gestión de " +"las estructuras de los Objetos de Memoria Virtual. Las optimizaciones que " +"hace FreeBSD demuestran que reducen los problemas lo suficiente de forma que " +"pueden ser ignorados, eliminando prácticamente la desventaja." + +#. type: Title == +#: documentation/content/en/articles/vm-design/_index.adoc:169 +#, no-wrap +msgid "SWAP Layers" +msgstr "Capas de Intercambio" + +#. type: Plain text +#: documentation/content/en/articles/vm-design/_index.adoc:177 +msgid "" +"Private data pages are initially either copy-on-write or zero-fill pages. " +"When a change, and therefore a copy, is made, the original backing object " +"(usually a file) can no longer be used to save a copy of the page when the " +"VM system needs to reuse it for other purposes. This is where SWAP comes " +"in. SWAP is allocated to create backing store for memory that does not " +"otherwise have it. FreeBSD allocates the swap management structure for a VM " +"Object only when it is actually needed. However, the swap management " +"structure has had problems historically:" +msgstr "" +"Las páginas de datos privadas se crean como páginas copy-on-write o rellenas " +"con ceros. Cuando se hace un cambio, y por lo tanto una copia, el objeto de " +"respaldo original (normalmente un fichero) ya no puede ser utilizado para " +"guardar una copia de la página cuando el sistema de Memoria Virtual necesita " +"reutilizarla para otros fines. Aquí es donde aparece el Intercambio. El " +"Intercambio se asigna para crear almacenamiento de respaldo para memoria que " +"de otra forma no la tendría. FreeBSD asigna la estructura de gestión del " +"intercambio para un Objeto de Memoria Virtual solo cuando se necesita " +"realmente. Sin embargo históricamente, la estructura de gestión del " +"intercambio ha tenido problemas:" + +#. type: Plain text +#: documentation/content/en/articles/vm-design/_index.adoc:179 +msgid "" +"Under FreeBSD 3.X the swap management structure preallocates an array that " +"encompasses the entire object requiring swap backing store-even if only a " +"few pages of that object are swap-backed. This creates a kernel memory " +"fragmentation problem when large objects are mapped, or processes with large " +"runsizes (RSS) fork." +msgstr "" +"En FreeBSD 3.X la estructura de gestión de intercambio preasigna un array " +"que engloba todo el objeto que requiere almacenamiento de respaldo de " +"intercambio—incluso si solo unas pocas páginas de ese objeto están " +"respaldadas en el área de intercambio. Esto crea un problema de " +"fragmentación de la memoria del núcleo cuando se mapean objetos grandes, o " +"cuando procesos con tamaños de ejecución grandes (RSS) bifurcan." + +#. type: Plain text +#: documentation/content/en/articles/vm-design/_index.adoc:180 +msgid "" +"Also, in order to keep track of swap space, a \"list of holes\" is kept in " +"kernel memory, and this tends to get severely fragmented as well. Since the " +"\"list of holes\" is a linear list, the swap allocation and freeing " +"performance is a non-optimal O(n)-per-page." +msgstr "" +"Además, para llevar la cuenta del espacio de intercambio, una \"lista de " +"huecos\" es mantenida en la memoria del núcleo, y esta tiende a fragmentarse " +"de forma severa también. Puesto que la \"lista de huecos\" es una lista " +"lineal, el rendimiento de asignación y liberación de intercambio es de un " +"orden subóptimo de O(n) por página." + +#. type: Plain text +#: documentation/content/en/articles/vm-design/_index.adoc:181 +msgid "" +"It requires kernel memory allocations to take place during the swap freeing " +"process, and that creates low memory deadlock problems." +msgstr "" +"Requiere que se lleven a cabo asignaciones de memoria del núcleo durante el " +"proceso de liberación de espacio de intercambio, y eso crea problemas de " +"bloqueo por baja memoria." + +#. type: Plain text +#: documentation/content/en/articles/vm-design/_index.adoc:182 +msgid "" +"The problem is further exacerbated by holes created due to the interleaving " +"algorithm." +msgstr "" +"El problema se exacerba debido a los huecos creados por el algoritmo de " +"entrelazado." + +#. type: Plain text +#: documentation/content/en/articles/vm-design/_index.adoc:183 +msgid "" +"Also, the swap block map can become fragmented fairly easily resulting in " +"non-contiguous allocations." +msgstr "" +"Además, el mapa de bloques de intercambio se puede fragmentar fácilmente " +"dando como resultado asignaciones no contiguas." + +#. type: Plain text +#: documentation/content/en/articles/vm-design/_index.adoc:184 +msgid "" +"Kernel memory must also be allocated on the fly for additional swap " +"management structures when a swapout occurs." +msgstr "" +"La memoria del núcleo se debe asignar al vuelo para las estructuras " +"adicionales de gestión de intercambio cuando se escribe en el área de " +"intercambio." + +#. type: Plain text +#: documentation/content/en/articles/vm-design/_index.adoc:187 +msgid "" +"It is evident from that list that there was plenty of room for improvement. " +"For FreeBSD 4.X, I completely rewrote the swap subsystem:" +msgstr "" +"De esa lista se hace evidente que había mucho margen de mejora. Para FreeBSD " +"4.X, reescribí completamente el subsistema de intercambio:" + +#. type: Plain text +#: documentation/content/en/articles/vm-design/_index.adoc:189 +msgid "" +"Swap management structures are allocated through a hash table rather than a " +"linear array giving them a fixed allocation size and much finer granularity." +msgstr "" +"Las estructuras de gestión de intercambio se asignan mediante una tabla has " +"en lugar de un array lineal dándoles un tamaño de asignación fijo y mucha " +"mayor granularidad." + +#. type: Plain text +#: documentation/content/en/articles/vm-design/_index.adoc:190 +msgid "" +"Rather then using a linearly linked list to keep track of swap space " +"reservations, it now uses a bitmap of swap blocks arranged in a radix tree " +"structure with free-space hinting in the radix node structures. This " +"effectively makes swap allocation and freeing an O(1) operation." +msgstr "" +"En lugar de utilizar una lista enlazada linear para llevar la cuenta de las " +"reservas de espacio de intercambio, ahora usa un mapa de bits de bloques de " +"intercambio dispuestos en una estructura tipo árbol radix con anotaciones " +"sobre el espacio libre en las estructuras de nodos del radix." + +#. type: Plain text +#: documentation/content/en/articles/vm-design/_index.adoc:191 +msgid "" +"The entire radix tree bitmap is also preallocated in order to avoid having " +"to allocate kernel memory during critical low memory swapping operations. " +"After all, the system tends to swap when it is low on memory so we should " +"avoid allocating kernel memory at such times in order to avoid potential " +"deadlocks." +msgstr "" +"El mapa de bits entero para el árbol radix también se preasigna para evitar " +"tener que asignar memoria del núcleo durante operaciones de intercambio con " +"un nivel crítico de memoria baja. Después de todo, el sistema tiende a " +"utilizar intercambio cuando está bajo en memoria de forma que deberíamos " +"evitar asignar memoria del núcleo en esas situaciones para evitar " +"potenciales bloqueos." + +#. type: Plain text +#: documentation/content/en/articles/vm-design/_index.adoc:192 +msgid "" +"To reduce fragmentation the radix tree is capable of allocating large " +"contiguous chunks at once, skipping over smaller fragmented chunks." +msgstr "" +"Para reducir la fragmentación el árbol radix es capaz de asignar de una sola " +"vez grandes trozos contiguos, saltándose pequeños trozos fragmentados." + +#. type: Plain text +#: documentation/content/en/articles/vm-design/_index.adoc:194 +msgid "" +"I did not take the final step of having an \"allocating hint pointer\" that " +"would trundle through a portion of swap as allocations were made in order to " +"further guarantee contiguous allocations or at least locality of reference, " +"but I ensured that such an addition could be made." +msgstr "" +"No realicé el paso final de tener un \"puntero de anotaciones para las " +"asignaciones\" que recorrería una porción del espacio de intercambio según " +"se hicieran las asignaciones para así garantizar asignaciones contiguas o al " +"menos localidad de referencia, pero aseguré que esa condición no podría " +"darse." + +#. type: Title == +#: documentation/content/en/articles/vm-design/_index.adoc:196 +#, no-wrap +msgid "When to free a page" +msgstr "Cuando liberar una página" + +#. type: Plain text +#: documentation/content/en/articles/vm-design/_index.adoc:201 +msgid "" +"Since the VM system uses all available memory for disk caching, there are " +"usually very few truly-free pages. The VM system depends on being able to " +"properly choose pages which are not in use to reuse for new allocations. " +"Selecting the optimal pages to free is possibly the single-most important " +"function any VM system can perform because if it makes a poor selection, the " +"VM system may be forced to unnecessarily retrieve pages from disk, seriously " +"degrading system performance." +msgstr "" +"Como el sistema de Memoria Virtual usa toda la memoria disponible para " +"cachear disco, normalmente hay pocas páginas que estén realmente libres. El " +"sistema de Memoria Virtual depende de su habilidad para adecuadamente " +"escoger las páginas que no están en uso para reutilizarlas en nuevas " +"asignaciones. Seleccionar las páginas óptimas para liberar es posiblemente " +"la función más importante que cualquier sistema de Memoria Virtual puede " +"realizar porque si la elección no es buena, el sistema de Memoria Virtual " +"puede verse forzada a recuperar páginas de disco innecesariamente, " +"degradando seriamente el rendimiento del sistema." + +#. type: Plain text +#: documentation/content/en/articles/vm-design/_index.adoc:204 +msgid "" +"How much overhead are we willing to suffer in the critical path to avoid " +"freeing the wrong page? Each wrong choice we make will cost us hundreds of " +"thousands of CPU cycles and a noticeable stall of the affected processes, so " +"we are willing to endure a significant amount of overhead in order to be " +"sure that the right page is chosen. This is why FreeBSD tends to outperform " +"other systems when memory resources become stressed." +msgstr "" +"¿Cuánto trabajo extra estamos dispuestos a sufrir en el camino crítico para " +"evitar liberar la página equivocada? Cada decisión errónea que hacemos " +"costará cientos de miles de ciclos de CPU y una parada notable de los " +"procesos afectados, así que estamos dispuestos a soportar una cantidad " +"significativa de trabajo extra para estar seguros que se escoge la página " +"adecuada. Por esto es por lo que FreeBSD tiende a superar en rendimiento a " +"otros sistemas cuando se estresan los recursos de memoria." + +#. type: Plain text +#: documentation/content/en/articles/vm-design/_index.adoc:207 +msgid "" +"The free page determination algorithm is built upon a history of the use of " +"memory pages. To acquire this history, the system takes advantage of a page-" +"used bit feature that most hardware page tables have." +msgstr "" +"El algoritmo que determina la página libre se construye en base al histórico " +"de uso de las páginas de memoria. Para adquirir este histórico, el sistema " +"se aprovecha de la característica del bit de página utilizada que la mayoría " +"del hardware de tablas de página posee." + +#. type: Plain text +#: documentation/content/en/articles/vm-design/_index.adoc:213 +msgid "" +"In any case, the page-used bit is cleared and at some later point the VM " +"system comes across the page again and sees that the page-used bit has been " +"set. This indicates that the page is still being actively used. If the bit " +"is still clear it is an indication that the page is not being actively " +"used. By testing this bit periodically, a use history (in the form of a " +"counter) for the physical page is developed. When the VM system later needs " +"to free up some pages, checking this history becomes the cornerstone of " +"determining the best candidate page to reuse." +msgstr "" +"En cualquier caso, el bit de página utilizada se blanquea y en algún momento " +"posterior el sistema de Memoria Virtual se encuentra con la página de nuevo " +"y ve que el bit de página utilizada ha sido marcado. Esto indica que la " +"página todavía se está utilizando activamente. Si el bit está blanqueado eso " +"indica que la página no se usa activamente. Mediante el chequeo periódico de " +"este bit, se desarrollo (en forma de contador) un histórico de uso . Cuando " +"posteriormente el sistema de Memoria Virtual necesita liberar algunas " +"páginas, examinar este histórico se convierte en la piedra de toque para " +"determinar la mejor página candidata para reutilizar." + +#. type: Plain text +#: documentation/content/en/articles/vm-design/_index.adoc:218 +msgid "" +"For those platforms that do not have this feature, the system actually " +"emulates a page-used bit. It unmaps or protects a page, forcing a page " +"fault if the page is accessed again. When the page fault is taken, the " +"system simply marks the page as having been used and unprotects the page so " +"that it may be used. While taking such page faults just to determine if a " +"page is being used appears to be an expensive proposition, it is much less " +"expensive than reusing the page for some other purpose only to find that a " +"process needs it back and then have to go to disk." +msgstr "" +"Para esas plataformas que no tienen esta característica, el sistema en " +"realidad emula un bit de página utilizada. Desmapea o protege una página, " +"forzando un fallo de página si ésta es accedida de nuevo. Cuando se maneja " +"el fallo de página, el sistema simplemente marca la página como usada y " +"desprotege la página de forma que puede ser utilizada. Aunque realizar este " +"fallo de página tan solo para determinar si una página está siendo usada " +"puede parecer una proposición cara, es mucho menos cara que reutilizar la " +"página para otro propósito para darse cuenta después de que otro proceso la " +"necesita y tener que ir al disco." + +#. type: Plain text +#: documentation/content/en/articles/vm-design/_index.adoc:228 +msgid "" +"FreeBSD makes use of several page queues to further refine the selection of " +"pages to reuse as well as to determine when dirty pages must be flushed to " +"their backing store. Since page tables are dynamic entities under FreeBSD, " +"it costs virtually nothing to unmap a page from the address space of any " +"processes using it. When a page candidate has been chosen based on the page-" +"use counter, this is precisely what is done. The system must make a " +"distinction between clean pages which can theoretically be freed up at any " +"time, and dirty pages which must first be written to their backing store " +"before being reusable. When a page candidate has been found it is moved to " +"the inactive queue if it is dirty, or the cache queue if it is clean. A " +"separate algorithm based on the dirty-to-clean page ratio determines when " +"dirty pages in the inactive queue must be flushed to disk. Once this is " +"accomplished, the flushed pages are moved from the inactive queue to the " +"cache queue. At this point, pages in the cache queue can still be " +"reactivated by a VM fault at relatively low cost. However, pages in the " +"cache queue are considered to be \"immediately freeable\" and will be reused " +"in an LRU (least-recently used) fashion when the system needs to allocate " +"new memory." +msgstr "" +"FreeBSD utiliza varias colas de páginas para refinar aún más la selección de " +"páginas a reutilizar así como para determinar cuando se deben llevar las " +"páginas sucias a su almacenamiento de respaldo. Puesto que las tablas de " +"páginas en FreeBSD son entidades dinámicas, cuesta virtualmente nada " +"desmapear una página del espacio de direcciones de cualquier proceso que la " +"esté usando. Cuando se ha escogido una página candidata basándose en el " +"contador de página utilizada, esto es precisamente lo que se hace. El " +"sistema debe distinguir entre páginas limpias que pueden en teoría ser " +"liberadas en cualquier momento, y páginas sucias que deben ser escritas " +"primero en el almacenamiento de respaldo antes de ser reutilizadas. Cuando " +"se encuentra una página candidata se mueve a la cola inactiva si está sucia, " +"o a la cola de caché si está limpia. In algoritmo separado que se bajas en " +"el ratio de páginas sucias respecto de las limpias determina cuándo se " +"tienen que escribir a disco las páginas sucias de la cola inactiva. Una vez " +"hecho esto, las páginas escritas se mueven de la cola inactiva a la cola de " +"caché. En este punto, las páginas en la cola de caché todavía pueden ser " +"reactivadas por un fallo de Memoria Virtual con un coste relativamente bajo. " +"Sin embargo, las páginas de la cola de caché se consideran como " +"\"inmediatamente liberables\" y serán reutilizadas de modo LRU (Usada Menos " +"Recientemente) cuando el sistema necesita asignar nueva memoria." + +#. type: Plain text +#: documentation/content/en/articles/vm-design/_index.adoc:232 +msgid "" +"It is important to note that the FreeBSD VM system attempts to separate " +"clean and dirty pages for the express reason of avoiding unnecessary flushes " +"of dirty pages (which eats I/O bandwidth), nor does it move pages between " +"the various page queues gratuitously when the memory subsystem is not being " +"stressed. This is why you will see some systems with very low cache queue " +"counts and high active queue counts when doing a `systat -vm` command. As " +"the VM system becomes more stressed, it makes a greater effort to maintain " +"the various page queues at the levels determined to be the most effective." +msgstr "" +"Es importante señalar que el sistema de Memoria Virtual de FreeBSD intenta " +"separar páginas limpias y sucias para expresar la razón de evitar la " +"escritura innecesaria de páginas sucias (que come ancho de banda de E/S), y " +"tampoco mueve de forma gratuita páginas entre distintas colas de páginas " +"cuando el sistema de memoria no está bajo estrés. Este es el motivo por el " +"que verás algunos sistemas con contadores de cola de caché muy bajos y " +"contadores de cola de páginas activa altos cuando se ejecuta el comando " +"`systat -vm`. Según el sistema de Memoria Virtual va sufriendo más estrés, " +"hace un gran esfuerzo por mantener varias colas de páginas en los niveles " +"que determina que son más efectivos." + +#. type: Plain text +#: documentation/content/en/articles/vm-design/_index.adoc:236 +msgid "" +"An urban myth has circulated for years that Linux did a better job avoiding " +"swapouts than FreeBSD, but this in fact is not true. What was actually " +"occurring was that FreeBSD was proactively paging out unused pages in order " +"to make room for more disk cache while Linux was keeping unused pages in " +"core and leaving less memory available for cache and process pages. I do " +"not know whether this is still true today." +msgstr "" +"Durante años ha circulado una leyenda urbana acerca de que Linux hacía un " +"mejor trabajo que FreeBSD evitando escribir en intercambio, pero de hecho " +"esto no es cierto. Lo que ocurría en realidad era que FreeBSD estaba " +"llevando a intercambio de forma proactiva páginas no utilizadas para hacer " +"sitio para más caché de disco mientras que Linux estaba manteniendo las " +"páginas sin utilizar y dejando menos memoria disponible para la caché y para " +"páginas de procesos. No sé si esto sigue siendo cierto a día de hoy." + +#. type: Title == +#: documentation/content/en/articles/vm-design/_index.adoc:238 +#, no-wrap +msgid "Pre-Faulting and Zeroing Optimizations" +msgstr "Optimizaciones de Prefallo y de Rellenado con Ceros" + +#. type: Plain text +#: documentation/content/en/articles/vm-design/_index.adoc:248 +msgid "" +"Taking a VM fault is not expensive if the underlying page is already in core " +"and can simply be mapped into the process, but it can become expensive if " +"you take a whole lot of them on a regular basis. A good example of this is " +"running a program such as man:ls[1] or man:ps[1] over and over again. If " +"the program binary is mapped into memory but not mapped into the page table, " +"then all the pages that will be accessed by the program will have to be " +"faulted in every time the program is run. This is unnecessary when the " +"pages in question are already in the VM Cache, so FreeBSD will attempt to " +"pre-populate a process's page tables with those pages that are already in " +"the VM Cache. One thing that FreeBSD does not yet do is pre-copy-on-write " +"certain pages on exec. For example, if you run the man:ls[1] program while " +"running `vmstat 1` you will notice that it always takes a certain number of " +"page faults, even when you run it over and over again. These are zero-fill " +"faults, not program code faults (which were pre-faulted in already). Pre-" +"copying pages on exec or fork is an area that could use more study." +msgstr "" +"Realizar un fallo de Memoria Virtual no es costoso y la página subyacente ya " +"está cargada y simplemente puede ser mapeada en el proceso, pero puede ser " +"costoso si hay muchas de ellas de forma regular. Un buen ejemplo de esto es " +"ejecutar un programa como man:ls[1] o man:ps[1] una y otra vez. Si el " +"programa binario está mapeado en la memoria pero no lo está en la tabla de " +"páginas, entonces todas las páginas que serán accedidas por el programa " +"generarán un fallo cada vez que el programa se ejecute. Esto es innecesario " +"cuando las páginas en cuestión ya están en la Caché de Memoria Virtual, de " +"modo que FreeBSD intentará pre-poblar las tablas de páginas de un proceso " +"con aquellas páginas que ya están en la Caché de Memoria Virtual. Algo que " +"FreeBSD no hace todavía es un pre-copy-on-write de ciertas páginas al hacer " +"exec. Por ejemplo, si ejecutas el programa man:ls[1] mientras ejecutas " +"`vmstat 1` notarás que siempre produce un cierto número de fallos de página, " +"incluso cuando lo ejecutas una y otra vez. Estos son fallos de página de " +"rellenados de ceros, no fallos de código de programa (que ya han sido pre-" +"fallados). Realizar una pre-copia de páginas en un exec o fork es un área en " +"el que ser sujeto de más estudio." + +#. type: Plain text +#: documentation/content/en/articles/vm-design/_index.adoc:257 +msgid "" +"A large percentage of page faults that occur are zero-fill faults. You can " +"usually see this by observing the `vmstat -s` output. These occur when a " +"process accesses pages in its BSS area. The BSS area is expected to be " +"initially zero but the VM system does not bother to allocate any memory at " +"all until the process actually accesses it. When a fault occurs the VM " +"system must not only allocate a new page, it must zero it as well. To " +"optimize the zeroing operation the VM system has the ability to pre-zero " +"pages and mark them as such, and to request pre-zeroed pages when zero-fill " +"faults occur. The pre-zeroing occurs whenever the CPU is idle but the " +"number of pages the system pre-zeros is limited in order to avoid blowing " +"away the memory caches. This is an excellent example of adding complexity " *** 648 LINES SKIPPED ***
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202109031834.183IY3AF009365>