2009-06-24 12 views
14

¿Hay alguna manera de decirle a Windows que no debe cambiar la memoria de un proceso en particular al disco?¿Puedo decirle a Windows que no intercambie la memoria de ningún proceso en particular?

Es un servicio de Windows .NET con bastante uso de memoria. Obtuve mucha RAM física pero el sistema operativo parece mover parte de la memoria de proceso al archivo de paginación de todos modos.

+2

de Windows mueve páginas de conjuntos de procesos de trabajo en una base accedida menos recientemente. En general, esto ofrece buenos resultados, pero casos de uso específicos pueden requerir control. Antes de hacerlo, lea las notas internas de Windows (para comenzar) para comprender mejor lo que está tratando de hacer. – Richard

+1

En segundo lugar el comentario. En la mayoría de los casos, tratar de superar al administrador de memoria de Windows generará un peor rendimiento. –

+1

Pregunta clave: ¿por qué es esto ("mover parte de la memoria de proceso al archivo de paginación") un problema de todos modos? – Stobor

Respuesta

17

Puede usar VirtualLock para evitar que la memoria se coloque en el disco, pero realmente creo que es mejor que deje que el sistema operativo administre la memoria del sistema. Es bastante bueno en eso, y no voy a adivinar por qué el sistema operativo estaba intercambiando cosas en el disco a menos que realmente supiera lo que estaba haciendo.

+0

+1: mejor no hacerlo. – Richard

+1

Si fuera bueno, ¿veríamos tantas aplicaciones tomando segundos para abrir un menú contextual simplemente porque alguna operación de copia está activada y bloqueando la paginación io? – John

12

VirtualLock se agotará la cuota de forma predeterminada, incluso si autoriza al usuario (de forma predeterminada, la configuración de política de seguridad de "Bloquear páginas en la memoria" no tiene entradas (ni siquiera administrador)).

Si configura esto, también deberá configurar "Ajustar las cuotas de memoria para un proceso".

Esta pregunta es un poco ambigua, ¿qué parte del espacio de VM desea evitar que se cancele? ¿Heap/Stack/Module's ...?

En general, una solución que había utilizado en el pasado, es crear una DLL con una gran sección que era LEER + ESCRIBIR, inamovible, también puede marcarla EJECUTAR y COMPARTIR si fuera necesario, pero luego HeapCreate en la sección de ese módulo, lo que me permite usarlo como un montón.

Puede buscar los bits exactos para establecer here, IMAGE_SCN_MEM_NOT_PAGED parece que haría el truco.

Si realiza el proceso de marcar todos sus módulos y secciones con este bit, el cargador de módulos de Windows no cargará una cuota de usuario articular ni requerirá que se modifiquen las configuraciones de política en cada sistema que implemente su código. Tendrá que codificar en un ajuste especial para proporcionar acceso a los HEAP que cree en estos dll NON_PAGEABLE también.

Es un poco trabajo, pero funcionó bien para mí en el pasado, tenía el requisito adicional de compartir memoria en múltiples procesos, que se basaba en la misma dirección.

Creo que lo más fácil de probar sería deshabilitar por completo el archivo de su página. Pero antes de esto, si usas Vista/2008 + OS, el intercambio que ves puede deberse a la superposición, que podría estar "ajustando" proactivamente tu sistema con la suposición de que en el futuro cercano necesitarás usar una aplicación u otra. Algunas otras tareas sencillas serían detener servicios no utilizados como la búsqueda, que podría indexar grandes cantidades de archivos, también debe ir al "planificador de tareas", que configura las tareas del sistema, de manera predeterminada hay algunas docenas en la mayoría de los sistemas con valores predeterminados acción que transmitirá todos los archivos de descarga del Dr. Watson a la MS, defragmente su unidad y una cantidad de otras operaciones de tipo de memoria posiblemente demasiado intensas.

Puede responder con un poco más de detalle para obtener mejores respuestas ... pero otra sugerencia sería simplemente comprar una unidad de estado sólido grande y usarla exclusivamente para el intercambio, tenga en cuenta que estas se degradan con el tiempo en el rendimiento general un tamaño debido a malas asignaciones de bloques que son comunes con todas las tecnologías SSD existentes.

Recientemente me encontré con un proyecto CodePlex llamado "non-paged clr host", desde su página:

Implementación Desde una perspectiva de implementación, el anfitrión no paginado CLR utiliza la SetProcessWorkingSetSize, SetProcessWorkingSetSizeEx (en Windows Server 2003 y superior) y VirtualLock APIs en ensu re esa memoria asignada por está bloqueada en la memoria física. Tenga en cuenta que el uso de las API anterior nogarantía con absoluta certeza que no se produzcan paginación; en su lugar, minimiza las probabilidades de que ocurra a escenarios muy excepcionales. En algunos pruebas de carga hemos llevado a cabo, incluso cuando el sistema como un todo se hogged por la falta de memoria física, ninguna página se observaron fallas en el proceso de usando el host CLR no paginada.

0

¿Está seguro de que las páginas en cuestión están siendo expulsadas de la memoria? Es posible que el subsistema VM esté escribiendo proactivamente páginas sucias en el disco, sin desalojo, de modo que las futuras asignaciones potenciales tengan una latencia menor.

Además, si el sistema está haciendo una gran cantidad de IO, que puede ser mejor para el rendimiento de utilizar la memoria en cuestión de memorias intermedias en lugar de datos de la aplicación, tal como se describe por Martin Pool

+0

MS lanzó recientemente una herramienta DynCache, que le permite preconfigurar o configurar algunas preferencias en estas configuraciones, http://blogs.msdn.com/ntdebugging/archive/2009/02/06/microsoft-windows-dynamic- cache-service.aspx & http://sqlblogcasts.com/blogs/grumpyolddba/archive/2009/03/18/x64-memory-problems.aspx – RandomNickName42

+0

Gheeze Detesto desgarrarte pero realmente necesito los puntos;). La referencia que citó es para Linux, la variedad sutil de la lengua vernácula puede ser bastante confusa si no se indica claramente ... Si se refiere a (http://msdn.microsoft.com/en-us/library/cc644950(VS) .85) .aspx), "Cuando FILE_FLAG_NO_BUFFERING se combina con FILE_FLAG_OVERLAPPED, los indicadores ofrecen el máximo rendimiento asincrónico, porque la E/S no depende de las operaciones síncronas del administrador de memoria. Sin embargo, algunas operaciones de E/S toman más hora, porque los datos no se mantienen en la memoria caché ". - Así que Windows = NO_BUFFER> * :) – RandomNickName42

Cuestiones relacionadas