Tengo un servidor bastante antiguo que tiene 4 GB de RAM y está sirviendo prácticamente los mismos archivos todo el día, pero lo hace desde el disco duro, mientras que los 3 GB de RAM son "gratuitos".
Cualquiera que haya intentado ejecutar una memoria RAM puede ser testigo de que es increíble en términos de velocidad. El uso de memoria de este sistema generalmente nunca es superior a 1 GB / 4 GB, así que quiero saber si hay una manera de usar esa memoria adicional para algo bueno.
- ¿Es posible decirle al sistema de archivos que siempre sirva ciertos archivos fuera de RAM?
- ¿Hay algún otro método que pueda usar para mejorar las capacidades de lectura de archivos mediante el uso de RAM?
Más específicamente, no estoy buscando un 'hack' aquí. Quiero que las llamadas al sistema de archivos sirvan los archivos desde la RAM sin necesidad de crear una unidad de memoria ram y copiar los archivos allí manualmente. O al menos un guión que hace esto por mí.
Las posibles aplicaciones aquí son:
- Servidores web con archivos estáticos que se leen mucho
- Servidores de aplicaciones con grandes bibliotecas.
- Computadoras de escritorio con demasiada RAM
¿Algunas ideas?
Editar:
- Encontré esto muy informativo: el caché de página de Linux y pdflush
- Como señaló Zan, la memoria no es realmente libre. Lo que quiero decir es que las aplicaciones no lo usan y quiero controlar lo que se debe almacenar en la memoria caché.
fuente
Respuestas:
vmtouch parece una buena herramienta para el trabajo.
Reflejos:
manual de vmtouch
EDITAR: El uso como se hizo en la pregunta aparece en el ejemplo 5 en vmtouch Hompage
EDIT2: Como se señaló en los comentarios, ahora hay un repositorio git disponible.
fuente
vmtouch
Se adapta bien a este nicho.Esto también es posible usar el vmtouch Toucher memoria virtual utilidad .
La herramienta le permite controlar el caché del sistema de archivos en un sistema Linux. Puede forzar o bloquear un archivo o directorio específico en el subsistema de caché de VM, o usarlo para verificar qué partes de un archivo / directorio están contenidas dentro de VM.
O...
fuente
El truco de un pobre hombre para introducir cosas en el caché del sistema de archivos es simplemente atraparlo y redirigirlo a / dev / null.
fuente
cat
es el archivo a / dev / null periódicamenteLinux almacenará en caché la mayor cantidad de E / S de disco que pueda. Esto es lo que son las estadísticas de memoria caché y memoria intermedia. Probablemente hará un mejor trabajo que usted para almacenar las cosas correctas.
Sin embargo, si insiste en almacenar sus datos en la memoria, puede crear una unidad ram usando tmpfs o ramfs. La diferencia es que ramfs asignará toda la memoria que solicite, ya que tmpfs solo usará la memoria que está utilizando su dispositivo de bloque. Mi memoria está un poco oxidada, pero deberías poder hacer:
o
y luego copie sus datos al directorio. Obviamente, cuando apaga la máquina o desmonta esa partición, sus datos se perderán.
fuente
Después de una extensa lectura sobre las características de intercambio de kernel 2.6 y almacenamiento en caché de páginas, encontré 'fcoretools'. Que consta de dos herramientas;
(En caso de que alguien más encuentre esto interesante, estoy publicando esto aquí)
fuente
Hay dos configuraciones de kernel que pueden ayudar considerablemente, incluso sin usar otras herramientas:
intercambio
le dice a linux kernel cuán agresivamente debería usar swap. Citando el artículo de Wikipedia:
vfs_cache_pressure
Citando de vm.txt :
Al establecer
swappiness
high (como 100), el kernel mueve todo lo que no necesita intercambiar, liberando RAM para almacenar en caché los archivos. Y al establecervfs_cache_pressure
un valor más bajo (¡digamos a 50, no a 0!), Favorecerá el almacenamiento en caché de archivos en lugar de mantener los datos de la aplicación en la RAM.(Trabajo en un gran proyecto Java y cada vez que lo ejecuto, tomó mucha RAM y enjuagué el caché del disco, así que la próxima vez que compilé el proyecto todo se volvió a leer desde el disco. Al ajustar estas dos configuraciones, administro para mantener las fuentes y la salida compilada en caché en RAM, lo que acelera el proceso considerablemente).
fuente
Dudo mucho que en realidad esté sirviendo archivos del disco con 3 GB de RAM libre. El almacenamiento en caché de archivos de Linux es muy bueno.
Si está viendo IO de disco, buscaría en sus configuraciones de registro. Muchos registros se configuran como no almacenados, para garantizar que la información de registro más reciente esté disponible en caso de bloqueo. Independientemente de los sistemas que deban ser rápidos, use el registro de E / S con buffer o use un servidor de registro remoto.
fuente
Si tiene mucha memoria, simplemente puede leer los archivos que desea almacenar en caché con cat o similar. Linux hará un buen trabajo para mantenerlo.
fuente
Es posible que pueda tener un programa que solo
mmap
contenga sus archivos y luego permanezca ejecutándose.fuente
Hay varios sistemas ramfs que puede usar (por ejemplo, ramfs, tmpfs), pero en general, si los archivos se leen con tanta frecuencia, se almacenan en la memoria caché del sistema de archivos. Si su conjunto de archivos de trabajo es más grande que su ram libre, entonces los archivos se borrarán de él, pero si su conjunto de trabajo es más grande que su ram libre, tampoco hay forma de que lo coloque todo en un disco RAM.
Verifique la salida del comando "libre" en un shell: el valor en la última columna, en "En caché", es la cantidad de ram libre que se está utilizando para la memoria caché del sistema de archivos.
fuente
En cuanto a su última pregunta, asegúrese de que su RAM se encuentre en diferentes canales de memoria para que el procesador pueda obtener los datos en paralelo.
fuente
Creo que esto podría resolverse mejor a nivel de aplicación. Por ejemplo, probablemente haya servidores web especializados para esto, o podría considerar mod_cache con Apache. Si tiene un objetivo específico, como servir contenido web más rápido, puede obtener mejoras de este tipo de cosas, creo.
Pero su pregunta es de naturaleza general, el subsistema de memoria de Linux está diseñado para proporcionar el mejor uso general de RAM. Si desea apuntar a ciertos tipos de rendimiento, considere buscar todo en / proc / sys / vm.
El paquete fcoretools es interesante, me interesaría cualquier artículo sobre su aplicación ... Este enlace habla sobre las llamadas reales al sistema utilizadas en una aplicación.
fuente
Las computadoras de escritorio (por ejemplo, ubuntu) ya utilizan archivos de precarga (al menos, bibliotecas compartidas populares) para la memoria en el arranque. Se utiliza para acelerar el tiempo de arranque y arranque de diferentes bloarware como FF, OO, KDE y GNOME (con evolution bloat-mailer).
La herramienta se llama readahead http://packages.ubuntu.com/dapper/admin/readahead
También hay syscall correspondiente: readahead (2) http://linux.die.net/man/2/readahead
También hay un proyecto de precarga de daemon: http://linux.die.net/man/8/preload
fuente
http://www.coker.com.au/memlockd/ hace esto
Aunque realmente no lo necesita, Linux hará un buen trabajo al almacenar en caché los archivos que está utilizando por sí solo.
fuente
acabo de probar dd if = / dev / yourrootpartition of = / dev / null \ bs = 1Mcount = howmuchmemoryyouwanttofill
no me da el control que deseas, pero al menos intenta usar memoria desperdiciada
fuente
utilizo find / -name stringofrandomcharacter que ayuda mucho
fuente
No es exactamente lo que se pidió, pero yo uso
para activar la inicialización de archivos en un volumen de AWS creado a partir de una instantánea. Está más enfocado que la recomendación oficial de usar dd si solo desea leer algunos archivos.
fuente
A veces es posible que desee almacenar en caché los archivos en una carpeta determinada y sus subcarpetas. Solo voy a esta carpeta y ejecuto lo siguiente:
encontrar . -exec cp {} / dev / null \;
Y esos archivos están en caché
fuente