¿Tiene sentido almacenar en caché los datos obtenidos de un archivo asignado en memoria?

StackOverflow https://stackoverflow.com/questions/2516443

  •  22-09-2019
  •  | 
  •  

Pregunta

¿O sería más rápido volver a leer esos datos de la memoria asignada, ya que el sistema operativo podría implementar su propio caché?

La naturaleza de los datos no se conoce de antemano; se supone que las lecturas de archivos son aleatorias.

¿Fue útil?

Solución

Quería mencionar algunas cosas que he leído sobre el tema.La respuesta es No, no querrás dudar del administrador de memoria del sistema operativo.

El primero proviene de la idea de que desea que su programa (p. ej.MongoDB, SQL Server) para intentar limitar tu memoria en función de un porcentaje de RAM libre:

No intentes asignar memoria hasta que solo haya un x% libre

Ocasionalmente, un cliente solicitará una forma de diseñar su programa para que siga consumiendo RAM hasta que solo quede un x% libre.La idea es que su programa debería utilizar la RAM de forma agresiva, dejando al mismo tiempo suficiente RAM disponible (x%) para otros usos.A menos que esté diseñando un sistema en el que usted sea el único programa que se ejecuta en la computadora, esta es una mala idea.

(lea el artículo para obtener la explicación de por qué es malo, incluidas las fotos)

Lo siguiente viene de algunas notas del autor de Varnish y proxy inverso:

Caché de barniz: notas del arquitecto

Entonces, lo que sucede con la gestión de memoria elaborada de los calamares es que se pelea con la gestión de memoria elaborada del núcleo y, como en cualquier guerra civil, nunca se hace nada.

Lo que pasa es esto:Squid crea un objeto HTTP en "RAM" y algunas veces se utiliza rápidamente después de la creación.Luego, después de un tiempo, no recibe más visitas y el kernel lo nota.Luego, alguien intenta obtener memoria del kernel para algo y el kernel decide sacar esas páginas de memoria no utilizadas para intercambiar espacio y usar la (RAM-caché) de manera más sensata para algunos datos que realmente usa un programa.Sin embargo, esto se hace sin que el calamar se dé cuenta.Squid todavía piensa que estos objetos http están en la RAM, y lo estarán en el momento en que intente acceder a ellos, pero hasta entonces, la RAM se usa para algo productivo.

Imagínate hacer almacenar en caché algo de un archivo asignado en memoria.En algún momento en el futuro, la memoria que contiene ese "caché" se cambiará al disco.

  • el sistema operativo ha escrito en el disco duro algo que ya existe en el disco duro

Luego llega un momento en el que desea realizar una búsqueda desde su memoria "caché", en lugar de desde la memoria "real".Intenta acceder al "caché" y, dado que se ha cambiado de la RAM, el hardware genera un PAGE FAULT, y el caché se vuelve a intercambiar en la RAM.

  • su memoria caché es tan lenta como la memoria "real", ya que ambas ya no están en la RAM

Finalmente, desea liberar su caché (quizás su programa se esté cerrando).Si se ha cambiado el "caché", el sistema operativo primero debe volver a cambiarlo para poder liberarlo.Si, en cambio, simplemente desasignó su archivo asignado en memoria, todo desaparecerá (no es necesario intercambiar nada).

  • en este caso tu caché hace que las cosas sean más lentas

De nuevo de Raymon Chen:Si su solicitud se está cerrando, ciérrela ya:

Cuando DLL_PROCESS_DETACH le indica que el proceso está saliendo, lo mejor que puede hacer es regresar sin hacer nada.

Utilizo habitualmente un programa que no sigue esta regla.El programa asigna mucha memoria durante el transcurso de su vida, y cuando Salga del programa, simplemente se queda allí durante varios minutos, a veces girando al 100% de la CPU, a veces agitando el disco duro (a veces ambos).Cuando irrumpo con el depurador para ver qué está pasando, Descubre que el programa no está haciendo nada productivo.Es solo liberando metódicamente hasta el último byte de memoria que había asignado durante su vida útil.

Si mi computadora no estaba bajo mucha presión de memoria, entonces la mayoría de los memoria que el programa había asignado durante su vida útil aún no ha sido paginado, por lo que liberar hasta la última gota de memoria es un operación.Por otro lado, si hubiera iniciado una compilación o hecho otra cosa que hace un uso intensivo de la memoria, luego la mayor parte de la memoria del programa asignado durante su vida útil ha sido paginado, lo que significa que El programa vuelve a colocar toda esa memoria desde el disco duro, para que Podría llamarlo gratis.Suena un poco rencoroso, en realidad."Ven aquí para que pueda decirte que te vayas".

Toda esta gestión de la memoria anal rentiva no tiene sentido.El proceso está saliendo.Toda esa memoria se liberará cuando el espacio de direcciones sea destruido.Deja de perder el tiempo y sal ya.


La realidad es que los programas ya no se ejecutan en "RAM", entran corriendo memoria - virtual memoria.

poder hacer uso de un caché, pero hay que trabajar con administrador de memoria virtual del sistema operativo:

  • desea mantener su caché en tan pocos paginas como sea posible
  • desea asegurarse de que permanezcan en la RAM, debido a que se accede a ellos con frecuencia (es decir,siendo en realidad un caché útil)

Accediendo a:

  • mil ubicaciones de 1 byte alrededor de un archivo de 400 GB

es mucho más caro que acceder

  • una única ubicación de 1000 bytes en un archivo de 400 GB

En otras palabras:realmente no necesitas hacerlo cache datos, necesita una información más localizada estructura de datos.

Si mantiene sus datos importantes confinados en una sola página de 4k, jugará mucho mejor con el VMM;ventanas es tu caché.

Cuando agrega líneas de caché alineadas de cuatro palabras de 64 bytes, hay aún más incentivos para ajustar el diseño de su estructura de datos.Pero entonces no lo quieres también compacto, o comenzarás a sufrir penalizaciones de rendimiento por los vaciados de caché de Falso compartir.

Otros consejos

La respuesta es altamente el sistema operativo específico. En términos generales, no habrá ningún sentido en el almacenamiento en caché de estos datos. Tanto los datos almacenados en caché "", así como el mapeado en memoria Es posible localizar de distancia en cualquier momento.

Si va a haber ninguna diferencia que será específico para un sistema operativo -. A menos que necesite que granularidad, no hay un sentido en el almacenamiento en caché los datos

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top