Me gustaría configurar el sistema para usar la mayoría de la RAM para el almacenamiento en caché de metadatos del sistema de archivos, pero solo una cantidad razonablemente pequeña para el almacenamiento en caché de lectura / escritura y la captación previa de archivos. Idealmente, me gustaría poder navegar por el sistema de archivos (tanto como cabe en la RAM) sin girar los discos hasta que realmente abra un archivo.
Aquí están los detalles:
Tengo un servidor de archivos casero. Tiene cinco discos en un volumen LVM de alrededor de 9 TB, pero solo 4 GB de RAM. Como el servidor no hace mucho más que servir archivos, la mayor parte de la RAM se usa para el almacenamiento en caché. ("Gratis" informa 3.4G de 3.9G usado para caché).
El servidor vive en mi habitación, y si todos los discos están girando, hace suficiente ruido para ser molesto cuando está en silencio. (No me refiero a buscar ruido, solo ruido de giro. Los discos son de varias marcas y modelos, y creo que pequeñas diferencias en las velocidades de rotación causan interferencia. Ningún disco es ruidoso por sí solo, pero si algunos de ellos están girando juntos, hay un ligero ruido con un período de menos de Hertz.) Así que configuré el servidor para girar los discos la mayor parte del tiempo.
Por supuesto, si los discos se vuelven hacia abajo cuando abro una carpeta en mi administrador de archivos, hay una demora mientras cualquiera de los discos tiene esa carpeta gira. Solo que no es gran cosa. Pero dependiendo de dónde mire, puede suceder varias veces seguidas, si LVM extendió los metadatos para cada subcarpeta en los diferentes discos.
Sospecho que Linux en su mayoría llena su caché con contenido de archivos y posiblemente con datos previamente capturados. El almacenamiento en caché no es muy útil más allá de unos pocos MB para garantizar una reproducción fluida; Si acabo de ver una película, probablemente no la volveré a ver pronto. La captación previa, si sucede, también es completamente inútil en mi caso , después de más de unos pocos MB.
Pero uno pensaría que 4GB deberían ser suficientes para poder almacenar en caché la mayoría de los metadatos del sistema de archivos, al menos las partes que ya se visitaron, para poder examinar los archivos sin necesidad de girar los discos si resulta que son dormido.
Todavía habría un retraso al abrir el archivo, pero está bien. Comparar "clic; espere ; hacer clic; espere ; hacer clic; espere ; jugar; mirar "con" clic; hacer clic; hacer clic; jugar; espere ; reloj". El primero es increíblemente frustrante; este último es casi esperado.
Notas:
Si importa, el núcleo es 3.2, el sistema operativo es Debian, el volumen es lvm2 y el FS es ext4.
La única razón del descenso es el ruido durante la noche; de lo contrario, el servidor se ejecuta continuamente. (Lo hice con tan poca potencia como sea razonable). El retraso de la rotación varía según la hora del día.
Los discos duros son solo para medios. El sistema operativo está en una unidad flash (pequeña) separada. (Lo que significa que cualquier retraso en la rotación proviene de los datos, no solo porque necesitaba algo
/usr
o lo que sea. Podría ahorrarle unos pocos GB si pudiera ayudar con mi problema de alguna manera.Un impacto razonable en el rendimiento no es gran cosa. Los discos son más rápidos que mi red de todos modos.
fuente
find / -ls > /dev/null
, gire los discos, luegofind
todos los archivos nuevamente, los discos no giran.free
muestra buffers que se elevan a unos 202MB al hacer esto. Pero, si hago elfind
, entoncescat /file/bigger/than/ram > /dev/null
,free
muestra uncached
aumento para llenar el espacio vacío, y por alguna razónbuffers
baja a unos 195 MB. Luego, si giro los discos yfind
vuelvo a hacerlo, los discos siguen girando :-(swappiness
: está configurado en el valor predeterminado de60
, pero la máquina no tiene ninguna partición de intercambio, por lo que no estoy seguro de si tiene mucho. Supongo que podría poner un archivo de intercambio en la unidad flash, pero no tengo idea de cómo ayudaría o cómo dimensionarlo.