<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="../assets/xml/rss.xsl" media="all"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Linux Sin Humo (Publicaciones sobre RAM)</title><link>https://sergiobelkin.com/</link><description></description><atom:link href="https://sergiobelkin.com/categories/ram.xml" rel="self" type="application/rss+xml"></atom:link><language>es</language><copyright>Contents © 2026 &lt;a href="mailto:sebelk@gmail.com"&gt;sebelk&lt;/a&gt; 
&lt;a rel="license" href="https://creativecommons.org/licenses/by-nc-sa/4.0/"&gt;
&lt;img alt="Creative Commons License BY-NC-SA"
style="border-width:0; margin-bottom:12px;"
src="https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png"&gt;&lt;/a&gt;
</copyright><lastBuildDate>Thu, 07 May 2026 16:23:33 GMT</lastBuildDate><generator>Nikola (getnikola.com)</generator><docs>http://blogs.law.harvard.edu/tech/rss</docs><item><title>Plan Táctico y Estratégico de la Memoria en Linux</title><link>https://sergiobelkin.com/posts/plan-tactico-y-estrategico-de-la-memoria-en-linux/</link><dc:creator>sebelk</dc:creator><description>&lt;figure&gt;&lt;img src="https://sergiobelkin.com/images/sk-CNBRg1K9QvQ-unsplash.jpg"&gt;&lt;/figure&gt; &lt;p&gt;La mitología en torno a la memoria en Linux ha producido una serie de relatos:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;En un extremo: Linux puede funcionar con muy poca memoria RAM.&lt;/li&gt;
&lt;li&gt;Del otro lado: Linux consume mucha memoria.&lt;/li&gt;
&lt;li&gt;Y que una partición SWAP debe tener entre 1 a 2 veces la memoria RAM.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Como vemos algunas historias son más recientes, otros más antiguas, pueden ser parcialmente ciertas y hasta contradictorias entre sí.&lt;/p&gt;
&lt;p&gt;Este artículo tiene como propósitos:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Explicar de manera sencilla el funcionamiento de la memoria en Linux, desmitificando también algunos conceptos.&lt;/li&gt;
&lt;li&gt;Enumerar y describir tácticas para que el uso de la memoria proporcione la mejor usabilidad y experiencia del usuario.&lt;/li&gt;
&lt;li&gt;Ofrecer alternativas para que cada uno elija la mejor opción de acuerdo a sus necesidades.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="definiciones"&gt;Definiciones&lt;/h3&gt;
&lt;p&gt;Vamos a repasar algunos conceptos básicos que de manera más o menos frecuente usamos, usaremos metáforas en el camino. Ninguna metáfora es perfecta, sin embargo ellas nos ayudan a entender la realidad.&lt;/p&gt;
&lt;h4 id="memoria-virtual"&gt;Memoria Virtual&lt;/h4&gt;
&lt;p&gt;La memoria virtual es el mecanismo por el cual cada proceso recibe un espacio de direcciones propio, independiente y protegido. El hardware traduce direcciones virtuales a físicas según tablas de páginas. Esto permite aislamiento, sobreasignación, mapeos de archivos y demanda dinámica de páginas, más allá de la cantidad de RAM disponible. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Linux trata de usar la mayor cantidad de memoria posible, para poder ejecutar las aplicaciones y acceder a los archivos de la manera más rápida posible. De manera que si la memoria libre es baja no es necesariamente un indicativo de un problema.&lt;/strong&gt;&lt;/p&gt;
&lt;h4 id="page"&gt;Page&lt;/h4&gt;
&lt;p&gt;Una página es la unidad mínima de memoria, de tamaño fijo (típicamente 4 KB), que el kernel y el hardware de gestión de memoria del procesador utilizan para organizar el espacio de direcciones y realizar el mapeo entre direcciones virtuales y físicas.&lt;/p&gt;
&lt;h4 id="page-table"&gt;Page table&lt;/h4&gt;
&lt;p&gt;Es una estructura de datos jerárquica administrada por el kernel y usada por el hardware para traducir direcciones virtuales a direcciones físicas, con información de permisos y estado de cada página.&lt;/p&gt;
&lt;h4 id="page-fault"&gt;Page Fault&lt;/h4&gt;
&lt;p&gt;Un &lt;strong&gt;page fault&lt;/strong&gt; ocurre cuando un proceso accede a una dirección válida de su espacio de memoria pero la página correspondiente no está preparada para ese acceso. Puede deberse a que la página aún no fue cargada, a que debe asignarse, o a que debe traerse desde disco. Si la página no está en RAM, el kernel debe cargarla, lo que puede ser lento; si ya estaba en RAM, el costo es menor.&lt;/p&gt;
&lt;h4 id="page-cache"&gt;Page cache&lt;/h4&gt;
&lt;p&gt;Es la caché de páginas de archivos gestionada por el kernel, usada para acelerar lecturas y escrituras almacenando en RAM los datos y metadatos de archivos y directorios, reduciendo accesos al disco.&lt;/p&gt;
&lt;p&gt;&lt;a class="image-reference" href="https://sergiobelkin.com/images/cache.png"&gt;&lt;img src="https://sergiobelkin.com/images/cache.thumbnail.png" alt="Page cache"&gt;&lt;/a&gt;  &lt;/p&gt;
&lt;h4 id="tipos-de-memoria"&gt;Tipos de memoria&lt;/h4&gt;
&lt;h5 id="file-memory"&gt;File Memory&lt;/h5&gt;
&lt;p&gt;Es la memoria relacionada con el &lt;strong&gt;Page Cache&lt;/strong&gt;.&lt;/p&gt;
&lt;h5 id="anonymous-memory"&gt;Anonymous Memory&lt;/h5&gt;
&lt;p&gt;Es la memoria que un proceso usa y que no está respaldada por un archivo: heap (asignada dinámicamente), stack (llamadas a funciones y almacenamiento de variables locales), COW (parte de la memoria cuando se crea un proceso hijo) y mapeos con MAP_ANONYMOUS. Su único respaldo posible es la swap.
La memoria anónima se crea y utiliza en RAM. Si el kernel necesita expulsarla de RAM, su único destino posible es la swap, porque no tiene un archivo desde el cual reconstruirse. Pero su existencia normal no depende de la swap.&lt;/p&gt;
&lt;h4 id="memory-pressure"&gt;Memory Pressure&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Memory pressure&lt;/strong&gt; es estado en el que las páginas libres caen por debajo de umbrales críticos, obligando al kernel a iniciar mecanismos de liberación de memoria.&lt;/p&gt;
&lt;p&gt;En términos prácticos cuando la presión es alta pueden surgir ciertos síntomas:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Sitios web / servidores HTTP:&lt;/strong&gt;
  La latencia aumenta porque los workers deben esperar a que el kernel libere páginas. Además, puede haber más CPU gastada en recuperar memoria, lo que degrada aún más los tiempos de respuesta.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Sistemas de escritorio:&lt;/strong&gt;
  El sistema pierde fluidez porque el scheduler empieza a verse afectado por stalls debidos a las operaciones para liberar memoria y, si hay swap, el sistema puede entrar en &lt;em&gt;swap thrashing&lt;/em&gt;. Esto produce lag del mouse, ventanas que tardan en responder, escritorios congelados por segundos, etc.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Acceso remoto (SSH, RDP, VNC):&lt;/strong&gt;
  Al haber presión, las operaciones de usuario-espacio tardan más en ejecutarse, y los daemons pueden quedar brevemente estancados esperando memoria. Esto causa retrasos notables en la interacción remota.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;¿Y qué sucede si la presión de memoria puede llegar a ser tan alta que el kernel ya no logra conseguir memoria ni siquiera después de intentar liberarla?&lt;/p&gt;
&lt;h4 id="thrashing"&gt;Thrashing&lt;/h4&gt;
&lt;p&gt;El &lt;strong&gt;thrashing&lt;/strong&gt; ocurre cuando la memoria RAM no alcanza para mantener las páginas que los procesos usan todo el tiempo. El kernel empieza a sacar páginas de memoria para hacer lugar a otras nuevas, pero enseguida vuelve a necesitarlas. Esto genera un bucle de fallos de página y de recarga constante desde el disco.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Con swap:&lt;/strong&gt; las páginas anónimas van y vienen entre RAM y swap, lo que dispara el uso de disco y vuelve el sistema extremadamente lento.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sin swap:&lt;/strong&gt; las páginas anónimas no tienen adónde ir y el kernel termina activando el &lt;strong&gt;OOM killer&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Incluso sin swap:&lt;/strong&gt; puede haber thrashing si las páginas vienen de archivos (page cache), ya que el kernel debe recargarlas una y otra vez.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="oom-out-of-memory"&gt;OOM (Out-Of-Memory) 💀 🔥&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Out-Of-Memory&lt;/strong&gt; es una situación en la cual el kernel agotó todos los mecanismos para liberar memoria:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Liberar páginas del caché.&lt;/li&gt;
&lt;li&gt;Sacar páginas anónimas de swap.&lt;/li&gt;
&lt;li&gt;Compactar memoria.&lt;/li&gt;
&lt;li&gt;Liberar memoria mediante &lt;code&gt;kswapd&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Aplicación de políticas de cgroups (muy común al usar contenedores).&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="oomkiller"&gt;OOMKiller&lt;/h4&gt;
&lt;p&gt;El &lt;strong&gt;OOM-killer&lt;/strong&gt; es el mecanismo que usa el kernel cuando ya no puede asignar más memoria, incluso después de intentar liberar todas las páginas que es posible descartar o mover fuera de la RAM.
En esa situación crítica, el kernel calcula un puntaje para cada proceso (&lt;code&gt;oom_score&lt;/code&gt;) y finaliza al que resulte más conveniente para recuperar memoria rápidamente y permitir que el sistema siga funcionando.
Este comportamiento puede influenciarse ajustando &lt;code&gt;oom_score_adj&lt;/code&gt;, que hace que un proceso sea más o menos propenso a ser elegido.&lt;/p&gt;
&lt;h4 id="oom_score"&gt;oom_score&lt;/h4&gt;
&lt;p&gt;Como ya se mencionó a cada proceso se le asigna un puntaje de acuerdo a distintos factores, cuanto más alto es, más susceptible es a ser terminado por OOMKiller. &lt;/p&gt;
&lt;p&gt;&lt;a class="image-reference" href="https://sergiobelkin.com/images/oom_score-from-proc.webp"&gt;&lt;img src="https://sergiobelkin.com/images/oom_score-from-proc.thumbnail.webp" alt="OOM Scores por proceso en /proc" title="Clic para agrandar"&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Y también, como dijimos mediante oom_score_adj podemos influir en el score de un proceso:&lt;/p&gt;
&lt;p&gt;&lt;a class="image-reference" href="https://sergiobelkin.com/images/oom_score-adjfrom-proc.webp"&gt;&lt;img src="https://sergiobelkin.com/images/oom_score-adjfrom-proc.thumbnail.webp" alt="Incidencia en oom_score mediante oom_score_adj"&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;En versiones más recientes de las distribuciones existe el comando &lt;strong&gt;&lt;em&gt;choom&lt;/em&gt;&lt;/strong&gt; que permite ver y/o ajustar dicho valor.&lt;/p&gt;
&lt;p&gt;&lt;a class="image-reference" href="https://sergiobelkin.com/images/choom.png"&gt;&lt;img src="https://sergiobelkin.com/images/choom.thumbnail.png" alt="choom"&gt;&lt;/a&gt; &lt;/p&gt;
&lt;h4 id="swap"&gt;Swap&lt;/h4&gt;
&lt;p&gt;Los usuarios ocasionales de Linux y aun muchos sysadmins tienen una idea negativa sobre "la swap". Simplificaciones extremas y conceptos anticuados la han convertido en le gran villana de la historia del sistema operativo.&lt;/p&gt;
&lt;p&gt;Si comparamos a la memoria con un escritorio, sin swap podría lucir así:&lt;/p&gt;
&lt;p&gt;&lt;a class="image-reference" href="https://sergiobelkin.com/images/ashim-d-silva-Kw_zQBAChws-unsplash.jpg"&gt;&lt;img src="https://sergiobelkin.com/images/ashim-d-silva-Kw_zQBAChws-unsplash.jpg" alt="Prescindir de swap no es una opción sana."&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Photo by &lt;a href="https://unsplash.com/@randomlies?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText"&gt;Ashim D’Silva&lt;/a&gt; on &lt;a href="https://unsplash.com/s/photos/mess?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText"&gt;Unsplash&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Así que primero vamos a decir lo que &lt;strong&gt;no&lt;/strong&gt; es:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;No&lt;/strong&gt; es la &lt;strong&gt;memoria virtual&lt;/strong&gt; sino que &lt;strong&gt;forma parte&lt;/strong&gt; de la &lt;strong&gt;técnica&lt;/strong&gt; que realiza el sistema operativo para administrar la memoria.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;No&lt;/strong&gt; es un espacio de reserva ni un último recurso. &lt;strong&gt;Es&lt;/strong&gt; un espacio complementario sirve para liberar RAM.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;No&lt;/strong&gt; funciona como último recurso, pero el sistema operativo puede mover hacia la swap las páginas de memoria no usadas recientemente.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;No&lt;/strong&gt; es algo que el sistema operativo pueda alegremente prescindir aun cuando la cantidad de memoria RAM física sea grande. Quienes parecen haber inventado la pólvora, nos cuentan que es posible técnicamente que Linux funcione sin swap. Si bien es cierto, al carecer de swap, el kernel no tiene manera de mover páginas de memoria anónimas hacia el área de swap y liberar así RAM para procesos que la necesitan urgentemente.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Nuestro escritorio con swap:&lt;/p&gt;
&lt;p&gt;&lt;a class="image-reference" href="https://sergiobelkin.com/images/alexandru-acea-Zg9R__O-8fM-unsplash.jpg"&gt;&lt;img src="https://sergiobelkin.com/images/alexandru-acea-Zg9R__O-8fM-unsplash.thumbnail.jpg" alt="Analogía de Swap"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;span&gt;Photo by &lt;a href="https://unsplash.com/@alexacea?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText"&gt;Alexandru Acea&lt;/a&gt; (edited by me) on &lt;a href="https://unsplash.com/s/photos/desktop-drawer?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText"&gt;Unsplash&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;¿Los cajones de un escritorio los usamos cuando lo tenemos abarrotado de cosas? No, los usamos para guardar cosas que no son de alta prioridad. Aunque es cierto, si luego queremos usar esa tijera o aquel destornillador en algún momento requerirá un poco más de trabajo, tendremos que abrir el cajón, buscarlo, extraerlo, etc.&lt;/p&gt;
&lt;p&gt;Ah, y la swap también sirve para hibernar, aunque honestamente no se cuanta gente mantiene esa práctica.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="tuning"&gt;Tuning&lt;/h3&gt;
&lt;p&gt;Ahora veremos diferentes tácticas que podemos usar para optimizar el uso de la memoria.&lt;/p&gt;
&lt;h4 id="cgroupv2"&gt;cgroupv2&lt;/h4&gt;
&lt;p&gt;cgroup es un mecanismo para organizar los procesos de manera jerárquica y distribuir los recursos del sistema a lo largo  de la jerarquía en una manera controlada y configurada.&lt;/p&gt;
&lt;p&gt;Un cgroup se compone de un núcleo que es responsable primariamente en organizar de manera jerárquica los procesos y controladores que comúnmente distribuyen un tipo específico de recurso del sistema a lo largo de la jerarquía.&lt;/p&gt;
&lt;p&gt;En la versión 2 de cgroup un proceso no puede pertenecer a diferentes grupos para diferentes controladores. Si el proceso se uno al grupo alfa, todos los controladores para alfa tomarán control de ese proceso.&lt;/p&gt;
&lt;p&gt;&lt;a class="image-reference" href="https://sergiobelkin.com/images/ps-cgroup..jpg.png"&gt;&lt;img src="https://sergiobelkin.com/images/ps-cgroup.thumbnail.png" alt="ps mostrando cgroup"&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Supongamos que los procesos de un cgroup (y todos los grupos hijos) usan poca memoria, podríamos decirle al kernel que libere memoria de otros cgroups. Esto es precisamente lo que hace el parámetro memory.low.&lt;/p&gt;
&lt;p&gt;&lt;a class="image-reference" href="https://sergiobelkin.com/images/memory_low.png"&gt;&lt;img src="https://sergiobelkin.com/images/memory_low.thumbnail.png" alt="el parámetro memory.low"&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Otro parámetro interesante para monitorear es &lt;strong&gt;memory.pressure&lt;/strong&gt;, la primera línea tiene el tiempo físico de una o más tareas demoradas debido a la falta de memoria. La segunda sería lo mismo pero para todas las tareas del grupo, full es lo mismo pero para todas las tareas del grupo, Entonces si miramos el archivo &lt;code&gt;/sys/fs/cgroup/user.slice/memory.pressure&lt;/code&gt;:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;some avg10=0.00 avg60=0.13 avg300=0.12 total=1690238
full avg10=0.00 avg60=0.10 avg300=0.09 total=1394199
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Significa que, dentro del grupo de control user.slice, en los últimos 10 segundos no hubo tareas afectadas por presión de memoria. Sin embargo, en el último minuto las tareas estuvieron bloqueadas un 0,13% del tiempo y un 0,12% en los últimos cinco minutos. El valor total indica que estas situaciones acumulan aproximadamente 1,7 segundos de espera.
La segunda línea muestra las mismas métricas, pero aplicadas a los casos en que todas las tareas del grupo estuvieron simultáneamente afectadas por presión de memoria (full en lugar de some).&lt;/p&gt;
&lt;p&gt;Es decir:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;some&lt;/code&gt; → indica si un retraso afectó al menos una tarea.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;full&lt;/code&gt; → indica si el retraso afectó a todo el cgroup simultáneamente.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="zram"&gt;zram&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;zram&lt;/strong&gt; es por así decirlo, una manera cool de usar swap gracias a un módulo del kernel. 
&lt;br&gt;
&lt;a class="image-reference" href="https://sergiobelkin.com/images/chuttersnap-4LnSe9KwewA-unsplash.jpg"&gt;&lt;img src="https://sergiobelkin.com/images/chuttersnap-4LnSe9KwewA-unsplash.thumbnail.jpg" alt="zram, swap pero cool"&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&lt;span&gt;Photo by &lt;a href="https://unsplash.com/@chuttersnap?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText"&gt;chuttersnap&lt;/a&gt; on &lt;a href="https://unsplash.com/s/photos/cool-drawer-desktop?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText"&gt;Unsplash&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;En lugar de gastar espacio en un disco (sea rígido o sólido) usamos dispositivos de bloque en la propia RAM. Los bloques swapeados se guardan comprimidos. Esto discos virtuales son rápidos y ahorran memoria.&lt;/p&gt;
&lt;p&gt;Una de las pocas desventajas que tiene esta metodología es la incapacidad para poder hibernar el sistema operativo, al no estar presente la partición en un almacenamiento de tipo persistente.&lt;/p&gt;
&lt;p&gt;&lt;a class="image-reference" href="https://sergiobelkin.com/images/zram.png"&gt;&lt;img src="https://sergiobelkin.com/images/zram.png" alt="zram"&gt;&lt;/a&gt; &lt;/p&gt;
&lt;h4 id="sistemas-de-archivos"&gt;Sistemas de archivos&lt;/h4&gt;
&lt;p&gt;El journal de ext4 puede ser lento, xfs puede ser una mejor alternativa o mejor aun btrfs.&lt;/p&gt;
&lt;h4 id="earlyoom"&gt;EarlyOOM&lt;/h4&gt;
&lt;p&gt;El oom-killer del kernel solamente se dispara en situaciones extremas y le puede llevar mucho tiempo hasta que puede enviar SIGKILL a los procesos que sean necesarios para poder liberar memoria. Durante ese tiempo probablemente el usuario no pueda interactuar con el sistema operativo.&lt;/p&gt;
&lt;p&gt;EarlyOOM trabaja en espacio de usuario y por lo tanto se puede anticipar y ser mucho más rápido.&lt;/p&gt;
&lt;p&gt;El comportamiento predeterminado en Fedora es que si hay menos del 10% de RAM y/o SWAP libre, earlyoom envía una señal de terminación a todos los procesos con oom_score más alto. Si la RAM como SWAP libre bajan por debajo del 5%, earlyroom enviará una señal para matar todos los procesos con oom_score más elevado.&lt;/p&gt;
&lt;p&gt;La idea es recuperar la usabilidad (especialmente en un entorno de escritorio) lo antes posible.&lt;/p&gt;
&lt;p&gt;El problema es que EarlyOOM no soporta al momento la medición de la &lt;strong&gt;memory pressure&lt;/strong&gt; como indicativo para tomar decisiones.&lt;/p&gt;
&lt;h4 id="nohang"&gt;nohang&lt;/h4&gt;
&lt;p&gt;Este servicio es mucho más configurable y aporta una mejor solución que EarlyOOM.&lt;/p&gt;
&lt;p&gt;Algunas funcionalidades son:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Se puede elegir la acción que realizará en una situación OOM.&lt;/li&gt;
&lt;li&gt;Ofrece varios criterios para elegir los procesos a finalizar.&lt;/li&gt;
&lt;li&gt;Soporta zram&lt;/li&gt;
&lt;li&gt;Puede usar &lt;strong&gt;memory pressure&lt;/strong&gt; para tomar una acción.&lt;/li&gt;
&lt;li&gt;El archivo de configuración es medianamente sencillo&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Sin embargo, este proyecto en la actualidad tiene poca actividad comparado por ejemplo con EarlyOOM&lt;/p&gt;
&lt;p&gt;&lt;a class="image-reference" href="https://sergiobelkin.com/images/nohangvseoom.webp"&gt;&lt;img src="https://sergiobelkin.com/images/nohangvseoom.thumbnail.webp" alt="Repos: nohang vs EarlyOOM en Github"&gt;&lt;/a&gt; &lt;/p&gt;
&lt;h4 id="zswap"&gt;zswap&lt;/h4&gt;
&lt;p&gt;Con zswap no reemplazamos el espacio swap en el disco sino que usamos un caché comprimido en la RAM. Este método ahorra I/O, obteniendo entonces mejor rendimiento y alargando la vida útil de discos flash o sólidos. La única desventaja es usar algo de tiempo del procesador para realizar la compresión.&lt;/p&gt;
&lt;p&gt;&lt;a class="image-reference" href="https://sergiobelkin.com/images/pineapple-supply-co-SRKxB1B_sn4-unsplash.jpg"&gt;&lt;img src="https://sergiobelkin.com/images/pineapple-supply-co-SRKxB1B_sn4-unsplash.thumbnail.jpg" alt="zswap"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Photo by &lt;a href="https://unsplash.com/@pineapple?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText"&gt;Pineapple Supply Co.&lt;/a&gt; on &lt;a href="https://unsplash.com/s/photos/tray-desktop?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText"&gt;Unsplash&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Mediante el caché se logra una diferenciación entre páginas más usadas (zswap) y menos usadas (swap).&lt;/p&gt;
&lt;h4 id="systemd-oomd"&gt;systemd-oomd&lt;/h4&gt;
&lt;p&gt;El servicio systemd-oomd es un proyecto en el que comenzó en Facebook para integrarlo con systemd. En un principio estaba pensado para manejo de memoria a gran escala, y bastante más complejo de configurar. Sin embargo ha sido adoptado desde Fedora 34 reemplazando a EarlyOOM. En las distribuciones que usan versiones recientes de systemd, está disponible, aunque no todas lo habilitan de manera predeterminada.&lt;/p&gt;
&lt;p&gt;&lt;a class="image-reference" href="https://sergiobelkin.com/images/systemd-oomd.webp"&gt;&lt;img src="https://sergiobelkin.com/images/systemd-oomd.thumbnail.webp" alt="systemd-oomd"&gt;&lt;/a&gt; &lt;/p&gt;
&lt;h3 id="resumen"&gt;Resumen&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Swap no es la villana de la película&lt;/li&gt;
&lt;li&gt;Si existe la opción de migrar a otros sistema de archivos aunque con características un tanto experimental, elegir btrfs. Una opción más moderada es xfs.&lt;/li&gt;
&lt;li&gt;El tuning de cgroupv2 puede traer grandes beneficios, no obstante existen proyectos y distribuciones que no lo usan.&lt;/li&gt;
&lt;li&gt;EarlyOOM es una solución rápida y aplicable a una amplia gama de sistemas Linux, aunque no siempre es la más exacta ni más elegante.&lt;/li&gt;
&lt;li&gt;El servicio nohang (o no hang-desktop) es una opción más madura aunque algo más compleja que EarlyOOM, pero que sin embargo ha caído en cierta inactividad.&lt;/li&gt;
&lt;li&gt;El servicio &lt;strong&gt;systemd-oomd&lt;/strong&gt; inicialmente incorporado por Facebook es seguramente la opción más adecuada para escenarios más complejos y de manejo de memoria a gran escala. También es utilizado actualmente en sistemas de escritorio.&lt;/li&gt;
&lt;li&gt;Sin embargo, muchas distribuciones o &lt;em&gt;sabores&lt;/em&gt; de distribuciones prefieren usar el mecanismo clásico de OOMKiller.&lt;/li&gt;
&lt;li&gt;A veces se sugiere el ajuste de parámetros del kernel mediante &lt;code&gt;sysctl&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Si se desea ahorrar espacio en disco se puede reemplazar la swap por zram, sacrificando la opción de hibernar el sistema.&lt;/li&gt;
&lt;li&gt;La opción zswap es más sofisticada, aunque dependemos del uso de swap en disco.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span&gt;Photo by &lt;a href="https://unsplash.com/@rollelflex_graphy726?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText"&gt;sk&lt;/a&gt; on &lt;a href="https://unsplash.com/s/photos/chess?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText"&gt;Unsplash&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h3 id="fuentes-consultadas"&gt;Fuentes consultadas&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.suse.com/support/kb/doc/?id=000017834"&gt;Is a swap partition required for SLES? | Support | SUSE&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Virtual_memory#Thrashing"&gt;Virtual memory - Wikipedia&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Page_(computer_memory)"&gt;Page (computer memory) - Wikipedia&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://linux-mm.org/VirtualMemory?action=fullsearch&amp;amp;context=180&amp;amp;value=glossary"&gt;VirtualMemory - linux-mm.org Wiki&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://kernelnewbies.org/KernelGlossary"&gt;KernelGlossary - Linux Kernel Newbies&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lwn.net/Articles/411845/"&gt;Ghosts of Unix Past: a historical search for design patterns [LWN.net]&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.vishalchovatiya.com/how-does-virtual-memory-work/#How_Does_Virtual_Memory_Work"&gt;How does virtual memory work&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Virtual_memory#Thrashing"&gt;Virtual memory - Wikipedia&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Paging#Page_stealing"&gt;Paging - Wikipedia&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://linux-mm.org/Memory_pressure"&gt;Memory_pressure - linux-mm.org Wiki&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.kernel.org/doc/html/latest/admin-guide/mm/concepts.html?highlight=write%20back%20cache#virtual-memory-primer"&gt;Concepts overview — The Linux Kernel documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.linux.com/news/all-about-linux-swap-space/"&gt;All about Linux swap space - Linux.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://unix.stackexchange.com/questions/417855/why-does-linux-need-swap-space-in-a-vm"&gt;Why does Linux need swap space in a VM? - Unix &amp;amp; Linux Stack Exchange&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://chrisdown.name/2018/01/02/in-defence-of-swap.html"&gt;In defence of swap: common misconceptions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://medium.com/nttlabs/cgroup-v2-596d035be4d7"&gt;The current adoption status of cgroup v2 in containers | by Akihiro Suda | nttlabs | Medium&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://facebookmicrosites.github.io/cgroup2/docs/memory-controller.html"&gt;Memory Controller · cgroup2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://git.kernel.org/pub/scm/linux/kernel/git/tj/cgroup.git/tree/Documentation/admin-guide/cgroup-v2.rst"&gt;cgroup-v2.rst « admin-guide « Documentation - kernel/git/tj/cgroup.git - cgroup export tree&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://git.kernel.org/pub/scm/linux/kernel/git/tj/cgroup.git/tree/Documentation/admin-guide/cgroup-v2.rst"&gt;cgroup-v2.rst « admin-guide « Documentation - kernel/git/tj/cgroup.git - cgroup export tree&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://wiki.archlinux.org/index.php/Cgroups#Switching_to_cgroups_v2"&gt;cgroups - ArchWiki&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.kernel.org/doc/html/latest/admin-guide/blockdev/zram.html"&gt;zram: Compressed RAM-based block devices — The Linux Kernel documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://fedoraproject.org/wiki/Changes/SwapOnZRAM#Summary"&gt;Changes/SwapOnZRAM - Fedora Project Wiki&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://fedoraproject.org/wiki/Changes/EnableEarlyoom#Summary"&gt;Changes/EnableEarlyoom - Fedora Project Wiki&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://man7.org/linux/man-pages/man5/proc.5.html"&gt;proc(5) - Linux manual page&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/hakavlad/nohang"&gt;hakavlad/nohang: A sophisticated low memory handler for Linux&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Zswap"&gt;zswap - Wikipedia&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.phoronix.com/scan.php?page=news_item&amp;amp;px=Systemd-OOMD-April-WIP"&gt;Systemd-OOMD Continues Coming Together For Better Linux Out-Of-Memory Handling - Phoronix&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=beefUhRH5lU"&gt;SREcon19 Asia/Pacific - Linux Memory Management at Scale: Under the Hood - YouTube&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.man7.org/linux/man-pages/man2/mmap.2.html"&gt;mmap(2) — Linux manual page&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.kernel.org/doc/html/v6.13/core-api/mm-api.html"&gt;Memory Management APIs¶&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://fedoraproject.org/wiki/Changes/EnableSystemdOomd"&gt;Changes/EnableSystemdOomd&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description><category>kernel</category><category>RAM</category><guid>https://sergiobelkin.com/posts/plan-tactico-y-estrategico-de-la-memoria-en-linux/</guid><pubDate>Mon, 01 Dec 2025 05:00:32 GMT</pubDate></item><item><title>Obtener datos provechosos del uso de memoria</title><link>https://sergiobelkin.com/posts/obtener-datos-provechosos-del-uso-de-memoria/</link><dc:creator>sebelk</dc:creator><description>&lt;h3 id="memoria-virtual-y-ps_mem"&gt;Memoria Virtual y ps_mem&lt;/h3&gt;
&lt;p&gt;Hay herramientas que sirven para cuanta memoria consume un determinado proceso, pero &lt;a href="https://github.com/pixelb/ps_mem"&gt;ps_mem&lt;/a&gt; en cambio puede calcularla por programa.&lt;/p&gt;
&lt;p&gt;Está escrito por &lt;a href="https://www.pixelbeat.org/"&gt;Pádraig Brady&lt;/a&gt; es encargado de mantenimiento de &lt;a href="https://github.com/coreutils/coreutils/commits?author=pixelb"&gt;las GNU coreutils&lt;/a&gt;, e involucrados en otros importantes proyectos de software libre.&lt;/p&gt;
&lt;p&gt;&lt;a class="image-reference" href="https://sergiobelkin.com/images/20190702111846504_178913270.png"&gt;&lt;img src="https://sergiobelkin.com/images/20190702111846504_178913270.thumbnail.png" alt="Todos los programas"&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;La memoria compartida es problemático para calcular, y la herramienta automáticamente selecciona el método más exacto para el kernel en ejecución.&lt;/p&gt;
&lt;p&gt;Además de la memoria que es específica para un programa, esta herramienta puede calcular de la manera más exacta la memoria compartida para comunicarse con otros procesos. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Importante: Necesita privilegios de root para dar resultados más exactos.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a class="image-reference" href="https://sergiobelkin.com/images/20190702110413768_2111725841.png"&gt;&lt;img src="https://sergiobelkin.com/images/20190702110413768_2111725841.thumbnail.png" alt="Por Procesos"&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;También puede mostrar los valores diferenciados de acuerdo a sus argumentos:&lt;/p&gt;
&lt;p&gt;&lt;a class="image-reference" href="https://sergiobelkin.com/images/20190702184633815_1872623307.png"&gt;&lt;img src="https://sergiobelkin.com/images/20190702184633815_1872623307.thumbnail.png" alt="Diferenciados según argumentos"&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;La herramienta funciona examinando el directorio proc analizando por cada proceso la línea del comando completa, el estado, las asignaciones de memoria y la cantidad de páginas de memoria utilizadas.&lt;/p&gt;
&lt;p&gt;En definitiva, &lt;strong&gt;ps_mem&lt;/strong&gt; un complemento excelente para &lt;em&gt;ps&lt;/em&gt;, &lt;em&gt;free&lt;/em&gt; y &lt;em&gt;top&lt;/em&gt;&lt;/p&gt;</description><category>RAM</category><guid>https://sergiobelkin.com/posts/obtener-datos-provechosos-del-uso-de-memoria/</guid><pubDate>Sun, 07 Jul 2019 23:50:38 GMT</pubDate></item><item><title>Como medir la memoria compartida</title><link>https://sergiobelkin.com/posts/como-medir-la-memoria-compartida/</link><dc:creator>Sergio Belkin</dc:creator><description>&lt;p&gt;Medir la memoria RAM es una tarea complicada. Podemos ejecutar el comando ps y somar los valores de una determinada columna, pero no nos va a dar el resultado correcto.
Los sistemas operativos actuales como Linux usan memoria virtual, esta les permite utilizar parte de la memoria RAM que necesita cada aplicación y sobreasignar la cantidad de memoria RAM, simulando que poseen mucha más memoria.
Además, la mayoría de los programas usan librerías compartidas. Entonces al abrir otra aplicación que usa la misma librería que otro programa en ejecución ahorra cierta cantidad de memoria RAM.
Por ejemplo, supongamos que queremos ver la cantidad de memoria que consume Firefox, si lo intentamos con ps:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;ps -Cfirefox -o vsz --no-headers | awk '{ sum += $1 } END { print sum/1024/1024  }'&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Eso da como resultado (en este caso particular) 3.75465 GB ¿Parece mucho, no?&lt;/p&gt;
&lt;p&gt;En realidad ese resultado es poco significativo. El campo &lt;em&gt;vsz&lt;/em&gt; es el tamaño de la memoria virtual que usa un proceso. Esto es: la memoria física realmente utilizada más memoria que el proceso puede llegar a necesitar en algún momento, más la memoria swap empleada.&lt;/p&gt;
&lt;p&gt;Podríamos medirlo con un parámetro un poco más exacto tal como ls RSS. RSS (&lt;em&gt;Resident Set Size&lt;/em&gt;) es la cantidad de memoria asignada a ese proceso y está en RAM. No incluye swap. Incluye la memoria de librerías compartidas siempre que las páginas de esas librerías estén en memoria.&lt;/p&gt;
&lt;p&gt;Estos serían los resultados&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;&lt;span class="n"&gt;pgrep&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;usr&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;lib64&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;firefox&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="n"&gt;xargs&lt;/span&gt; &lt;span class="n"&gt;ps&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;o&lt;/span&gt; &lt;span class="n"&gt;rss&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="n"&gt;no&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;headers&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="n"&gt;awk&lt;/span&gt; &lt;span class="s"&gt;'{ sumrss += $1 }  END { print sumrss/1024/1024  }   '&lt;/span&gt;
&lt;span class="mf"&gt;2.92811&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Pero existe una herramienta llamada &lt;strong&gt;smem&lt;/strong&gt; que mide valores más útiles, estos son &lt;strong&gt;PSS&lt;/strong&gt; y &lt;strong&gt;USS&lt;/strong&gt;.
PSS divide los bloques de memoria virtual compartida por la cantidad de procesos que en ese momento tienen una entrada en la tabla que traduce direcciones virtuales a físicas para la página. Dicho de otro modo la memoria compartida se divide por la cantidad de procesos que la usan.&lt;/p&gt;
&lt;p&gt;Además, smem informa acerca de USS que es la memoria que no está compartida con otros procesos.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;smem -tk -P/usr/lib64/firefox&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;a class="image-reference" href="https://sergiobelkin.com/images/smem.png"&gt;&lt;img src="https://sergiobelkin.com/images/smem.thumbnail.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Como se puede apreciar una diferencia de 17% respecto a la RSS&lt;/p&gt;
&lt;p&gt;Además, smem puede mostrar la información de manera gráfica:&lt;/p&gt;
&lt;p&gt;&lt;a class="image-reference" href="https://sergiobelkin.com/images/namebypss.png"&gt;&lt;img src="https://sergiobelkin.com/images/namebypss.thumbnail.png"&gt;&lt;/a&gt;
&lt;a class="image-reference" href="https://sergiobelkin.com/images/namebyrss.png"&gt;&lt;img src="https://sergiobelkin.com/images/namebyrss.thumbnail.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4 id="fuentes-y-recursos-adicionales"&gt;Fuentes y recursos adicionales&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://utcc.utoronto.ca/~cks/space/blog/linux/LinuxMemorySt%0A%20%20ats"&gt;Chris's Wiki :: blog/linux/LinuxMemoryStats&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.selenic.com/smem/"&gt;smem memory reporting tool&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Proportional_set_size"&gt;Proportional set size - Wikipedia&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Unique_set_size"&gt;Unique set size - Wikipedia&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Resident_set_size"&gt;Resident set size - Wikipedia&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description><category>RAM</category><guid>https://sergiobelkin.com/posts/como-medir-la-memoria-compartida/</guid><pubDate>Sun, 10 Jun 2018 21:56:00 GMT</pubDate></item><item><title>Razor-qt  (Parte 1)</title><link>https://sergiobelkin.com/posts/2012/11/19/razor-qt-parte-1/</link><dc:creator>sebelk</dc:creator><description>&lt;p&gt;&lt;strong&gt;Razor-qt&lt;/strong&gt; es un entorno de escritorio relativamente nuevo. Utiliza las librerías Qt al igual que KDE, sin embargo, a diferencia de este último su propósito es consumir muchos menos recursos.&lt;/p&gt;
&lt;p&gt;La librería principal es se libqtxdg, que implementa las especificaciones de freedesktop.org.&lt;/p&gt;
&lt;p&gt;Los componenetes principales son:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Panel (razor-panel)&lt;/strong&gt; (que incluye un lanzador de aplicaciones, es decir un sector del panel al cual podemos arrastrar ìconos del menú)&lt;br&gt;
&lt;strong&gt;Escritorio&lt;/strong&gt; (razor-desktop)&lt;br&gt;
&lt;strong&gt;Centro de configuración&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Sesiones&lt;/strong&gt; (razor-session)&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Como instalarlo en Fedora&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Bajar archivo del repositorio desde &lt;a title="Razor-qt repo" href="http://download.opensuse.org/repositories/X11:/QtDesktop/Fedora_17/X11:QtDesktop.repo"&gt;aquí&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Instalar la clave pública desde &lt;a href="http://download.opensuse.org/repositories/X11:/QtDesktop/Fedora_17/repodata/repomd.xml.key"&gt;este lugar&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Instalar razorqt usando yum.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Para usar el display manager nativo Razor-qt&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;El display-manager recordemos es la pantalla mediante la cual podemos ingresar nuestro usuario y contraseña y elegir el entorno de escritorio&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Asegurarse que esté instalada solamente la versión del repositorio X11_QtDesktop del paquete lightdm-gobject&lt;/li&gt;
&lt;li&gt;Verificar que el paquete lightdm está instalado lightdm&lt;/li&gt;
&lt;li&gt;Ajustar convenientemente el archivo /etc/sysconfig/desktop&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Aplicaciones destacadas&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Juffed&lt;/strong&gt;: Editor avanzado de texto&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;zNotes&lt;/strong&gt;: Sirve para crear notas, de tres tipos:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Texto puro&lt;/li&gt;
&lt;li&gt;Tareas para hacer (se puede asignar fecha e ir tachándolas a medida que se realizan)&lt;/li&gt;
&lt;li&gt;Text HTML, permite copiar y pegar, por ejemplo, parte de un página que web que nos interese&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;La aplicación queda anclada en el panel, de manera que no se sale del programa al cerrar la ventana del mismo.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;EasyPaint&lt;/strong&gt;: Aplicación similar a MS Paint.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;nomacs&lt;/strong&gt;: Visor de imágenes&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;flo&lt;/strong&gt;: Aplicación para crear mapas mentales&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;yarock&lt;/strong&gt;: Reproductor de música, puede manejar colecciones, listas y algunos servicios de Internet.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Andromeda&lt;/strong&gt;: Gestor de archivos y navegador web&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Comparativa en uso de memoria &lt;/strong&gt;&lt;/p&gt;
&lt;table width="100%" cellspacing="0" cellpadding="4"&gt;
&lt;colgroup&gt;
&lt;col width="85*"&gt;
&lt;col width="85*"&gt;
&lt;col width="85*"&gt; &lt;/colgroup&gt;
&lt;tbody&gt;
&lt;tr valign="TOP"&gt;
&lt;td style="border-top: 1px solid #000000; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0.1cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm;" width="33%"&gt;&lt;strong&gt;Entorno de escritorio&lt;/strong&gt;&lt;/td&gt;
&lt;td style="border-top: 1px solid #000000; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0.1cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm;" width="33%"&gt;&lt;strong&gt;Gestor de Ventanas&lt;/strong&gt;&lt;/td&gt;
&lt;td style="border: 1px solid #000000; padding: 0.1cm;" width="33%"&gt;&lt;strong&gt;Memoria usada (MB)&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr valign="TOP"&gt;
&lt;td style="border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm;" width="33%"&gt;KDE&lt;/td&gt;
&lt;td style="border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm;" width="33%"&gt;Kwin&lt;/td&gt;
&lt;td style="border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0.1cm;" width="33%"&gt;515&lt;/td&gt;
&lt;/tr&gt;
&lt;tr valign="TOP"&gt;
&lt;td style="border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm;" width="33%"&gt;LXDE&lt;/td&gt;
&lt;td style="border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm;" width="33%"&gt;Openbox&lt;/td&gt;
&lt;td style="border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0.1cm;" width="33%"&gt;377&lt;/td&gt;
&lt;/tr&gt;
&lt;tr valign="TOP"&gt;
&lt;td style="border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm;" width="33%"&gt;XFCE&lt;/td&gt;
&lt;td style="border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm;" width="33%"&gt;Xfwm4&lt;/td&gt;
&lt;td style="border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0.1cm;" width="33%"&gt;308&lt;/td&gt;
&lt;/tr&gt;
&lt;tr valign="TOP"&gt;
&lt;td style="border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm;" width="33%"&gt;Razor-qt&lt;/td&gt;
&lt;td style="border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm;" width="33%"&gt;Openbox&lt;/td&gt;
&lt;td style="border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0.1cm;" width="33%"&gt;470&lt;/td&gt;
&lt;/tr&gt;
&lt;tr valign="TOP"&gt;
&lt;td style="border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm;" width="33%"&gt;Razor-qt&lt;/td&gt;
&lt;td style="border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm;" width="33%"&gt;Kwin&lt;/td&gt;
&lt;td style="border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0.1cm;" width="33%"&gt;526&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Para las mediciones, se usó el entorno, más el firefox y una consola nativa en cada caso. Sorprende lo económico que es Xfce y que Razor-qt al combinarse con kwin usa más memoria.&lt;/p&gt;
&lt;p&gt;A manera de vistazo apresurado, se trata de una opción interesante frente quienes les agrada un escritorio estilo KDE, pero sin toda la aparatosidad que implica, plasma, akonadi, kwin, etc. Parece en principio, una opción interesante para equipos con recursos modestos, y por ser un proyecto relativamente nuevo está  bien documentado si se lo compara con emprendimientos que llevan ya unos cuantos años.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://sergiobelkin.com/wp-content/uploads/2012/11/razor.png"&gt;&lt;img class="aligncenter size-medium wp-image-556" title="razor-qt" alt="razor-qt" src="https://sergiobelkin.com/wp-content/uploads/2012/11/razor-300x168.png" width="300" height="168"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Más información el sitio oficial de &lt;a title="Razor-qt Sitio Oficial" href="http://razor-qt.org/"&gt;Razor-qt&lt;/a&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;</description><category>kde-plasma</category><category>RAM</category><guid>https://sergiobelkin.com/posts/2012/11/19/razor-qt-parte-1/</guid><pubDate>Mon, 19 Nov 2012 17:11:44 GMT</pubDate></item><item><title>Entendiendo el comando free</title><link>https://sergiobelkin.com/posts/2012/11/12/entendiendo-el-comando-free/</link><dc:creator>sebelk</dc:creator><description>&lt;p&gt;&lt;a href="http://creativecommons.org/licenses/by-sa/3.0/deed.es_AR" rel="license"&gt;&lt;img style="border-width: 0;" alt="Licencia Creative Commons" src="http://i.creativecommons.org/l/by-sa/3.0/88x31.png"&gt;&lt;/a&gt;&lt;br&gt;
&lt;span&gt;Entendiendo el comando free&lt;/span&gt; por &lt;a href="http://sergiobelkin.com" rel="cc:attributionURL"&gt;Sergio Belkin&lt;/a&gt; se encuentra bajo una &lt;a href="http://creativecommons.org/licenses/by-sa/3.0/deed.es_AR" rel="license"&gt;Licencia Creative Commons Atribución-CompartirIgual 3.0 Unported&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;El comando free es habitualmente utilizado para ver el estado de la memoria del sistema. Pero para muchos usuarios los resultados que muestra pueden resultar confusos.&lt;/p&gt;
&lt;p&gt;Así que abramos una consola y ejecutemos el comando &lt;strong&gt;free -m&lt;/strong&gt;, en este caso en un entorno &lt;strong&gt;KDE&lt;/strong&gt; con &lt;strong&gt;Firefox&lt;/strong&gt; y otras aplicaciones abiertas…&lt;br&gt;
Analicemos la primer fila y sus respectivas columnas:&lt;/p&gt;
&lt;table border="0" cellspacing="0"&gt;
&lt;colgroup width="118"&gt;&lt;/colgroup&gt;
&lt;colgroup width="97"&gt;&lt;/colgroup&gt;
&lt;colgroup span="5" width="85"&gt;&lt;/colgroup&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td align="LEFT" height="17"&gt;&lt;/td&gt;
&lt;td align="LEFT"&gt;total&lt;/td&gt;
&lt;td align="LEFT"&gt;used&lt;/td&gt;
&lt;td align="LEFT"&gt;free&lt;/td&gt;
&lt;td align="LEFT"&gt;shared&lt;/td&gt;
&lt;td align="LEFT"&gt;buffers&lt;/td&gt;
&lt;td align="LEFT"&gt;cached&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align="LEFT" height="16"&gt;Mem:&lt;/td&gt;
&lt;td align="RIGHT"&gt;3898&lt;/td&gt;
&lt;td align="RIGHT"&gt;3342&lt;/td&gt;
&lt;td align="RIGHT"&gt;556&lt;/td&gt;
&lt;td align="RIGHT"&gt;0&lt;/td&gt;
&lt;td align="RIGHT"&gt;36&lt;/td&gt;
&lt;td align="RIGHT"&gt;652&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align="LEFT" height="16"&gt;-/+ buffers/cache:&lt;/td&gt;
&lt;td align="LEFT"&gt;&lt;/td&gt;
&lt;td align="RIGHT"&gt;2653&lt;/td&gt;
&lt;td align="RIGHT"&gt;1245&lt;/td&gt;
&lt;td align="LEFT"&gt;&lt;/td&gt;
&lt;td align="LEFT"&gt;&lt;/td&gt;
&lt;td align="LEFT"&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align="LEFT" height="16"&gt;Swap:&lt;/td&gt;
&lt;td align="RIGHT"&gt;7999&lt;/td&gt;
&lt;td align="RIGHT"&gt;524&lt;/td&gt;
&lt;td align="RIGHT"&gt;7475&lt;/td&gt;
&lt;td align="LEFT"&gt;&lt;/td&gt;
&lt;td align="LEFT"&gt;&lt;/td&gt;
&lt;td align="LEFT"&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;ul&gt;
&lt;li&gt;total: Es la memoria RAM total disponible (la cantidad real es 4096 pero teóricamente hay unos 198 MB reservados por el kernel en este caso).&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;used: Muestra que hay 3342 MB usados. ¿Parece demasiado, no es cierto? Sin embargo, esa cifra incluye también la memoria reservada tanto en los buffers como la que está cacheada.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;free: Muestra solamente 556 MB libres, de nuevo puede impresionarnos un valor tan bajo.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;shared: No hay que prestarle importancia a este valor, ya que es obsoleto.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;buffers: Es parte de la memoria que almacena información acerca de los bloques, que son cantidades discretas de información que se guarda en un dispositivo de almacenamiento, por ejemplo, un disco rígido. ¿Qué ventaja tiene eso? Por ejemplo aumentar la velocidad de operaciones relacionadas con el acceso al sistema de archivos. Hágase la siguiente operación para verificarlo: Ejecute dos veces seguidos un comando como el siguiente:&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;sync &amp;amp;&amp;amp; echo 3 &amp;gt; /proc/sys/vm/drop_caches&lt;br&gt;
time find /var -mmin +10&lt;br&gt;
time find /var -mmin +10&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Se podrá notar que la segunda vez que se ejecuta el comando el tiempo que demora la tarea es significativamente menor.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;cached: Es parte de la memoria que se usa para acceder con mayor rapidez al sistema de almacenamiento persistente (generalmente un disco dígido). Siempre es más rápido extraer datos de la memoria RAM que de un disco electromecánico. Para comprobarlo, se puede realizar la siguiente operación:&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;time tar cvzf -9 etc.tar.gz  /etc/&lt;br&gt;
time tar cvzf -9 etc.tar.gz  /etc/&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;La segunda vez el tarball se creará mucho más rápidamente.&lt;/p&gt;
&lt;p&gt;La tercer fila&lt;code&gt; &lt;/code&gt;muestra la cantidad de memoria usada y libre activamente por las aplicaciones, es decir en este caso no se cuenta la memoria utilizada ni por los buffers ni por el caché.&lt;/p&gt;
&lt;p&gt;La cuarta fila finalmente muestra las estadísticas de la memoria del área de intercambio, que en Linux es generalmente una partición específica, el sistema operativo echa mano de ella cuando la memoria RAM se va a agotando.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Resumiendo:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Memoria Potencialmente Libre=Free+Buffers+Cached&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Memoria usada por los datos de las aplicaciones=Used-Buffers-Cached&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Nota: Si se hacen los cálculos mencionados se verá alguna diferencia en MB, tener en cuenta que la opción “-m” convierte KB a MB quitando la parte decimal, por lo tanto para entenderlo mejor, primero sería conveniente ejecutando el comando &lt;strong&gt;free&lt;/strong&gt; a secas.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;¿Hay una manera gráfica de esto?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Por supuesto, por ejemplo usando KInfocenter&lt;/p&gt;
&lt;p&gt;&lt;a href="https://sergiobelkin.com/wp-content/uploads/2012/11/KInfocenter.png"&gt;&lt;img class="aligncenter size-medium wp-image-529" title="KInfocenter" alt="KInfocenter mostrando el uso de la memoria en Linux" src="https://sergiobelkin.com/wp-content/uploads/2012/11/KInfocenter-300x168.png" width="300" height="168"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Pero ahora el lector sabrá entender mejor el resultado de esos gráficos tan bonitos :)&lt;/p&gt;</description><category>RAM</category><guid>https://sergiobelkin.com/posts/2012/11/12/entendiendo-el-comando-free/</guid><pubDate>Mon, 12 Nov 2012 16:33:20 GMT</pubDate></item></channel></rss>