Mi colega está usando una aplicación que consume mucha memoria, lo que hace que el sistema sea demasiado lento. ¿Es posible compartir memoria con otras PC a través de Internet?
El sistema tiene 8 GB de RAM y la aplicación consume más de 6 GB.
windows
networking
memory
Innov
fuente
fuente
Respuestas:
Solo he considerado una aplicación independiente que se ejecuta en una máquina "estándar" sin la capacidad de instalarla en otro lugar o usar hardware o software especializado. Otras respuestas (correctamente) abordan la migración de software o hardware dedicado para la tarea.
Cualquier forma de "compartir RAM" a través de una red estará sujeta a limitaciones de ese medio de red. Como incluso Gigabit Ethernet está limitado a aproximadamente 100 MB / s (megabytes), esto significa que su velocidad de "RAM" también estará limitada.
100 MB / s es una pequeña fracción de la velocidad de la RAM que está realmente en su sistema. Su programa será muy lento y parecerá que se ejecuta en una computadora desde principios de los 90
Los discos duros modernos son, para lectura y escritura secuenciales, un poco más rápidos que esto. Los SSD son varias veces más rápidos.
Esto ignora los problemas de latencia que harán que su programa sea un orden de magnitud más lento nuevamente.
Debido a la lentitud y otros problemas técnicos involucrados, este no es un problema que cualquiera haya considerado que valga la pena intentar resolver para los sistemas de "hogar" u "oficina". Es más barato y más efectivo comprar más RAM si es necesario.
Simplemente compre más RAM, o incluso un SSD para un archivo de página. No hay otra forma de hacer esto que no requiera una cantidad increíble de trabajo o hardware para obtener pocos beneficios.
fuente
Solo para completar: InfiniBand permite el acceso directo a la memoria de otras máquinas.
Sin embargo, requiere:
NO funciona en una red existente, requiere una infraestructura completamente independiente para todos los nodos conectados. Tampoco funciona a través de Internet.
fuente
Esto depende en gran medida de la naturaleza de los datos.
Puede ejecutar 2 servidores mysql diferentes en 2 máquinas diferentes.
Luego divida los datos en 1/2 y escriba el programa para saber automáticamente a qué servidor ir.
Por supuesto, esto se puede escalar a cualquier número de servidores si los tiene disponibles.
fuente
Sí, es razonablemente fácil de hacer (y lo he hecho, para sistemas sin disco que necesitan intercambio), utilizando el protocolo Network Block Device.
Instale
nbd-server
en la máquina del servidor y configúrelo para crear automáticamente archivos por host.Asegúrese de que sus máquinas cliente tengan NBD compilado en sus núcleos, y luego configúrelos para cambiar a un dispositivo montado en NBD. El
nbd-client
paquete puede ayudar.Lo siento si lo anterior es un poco vago: las máquinas en las que he hecho esto no son accesibles desde aquí; Es posible que pueda completar los detalles cuando tenga acceso a ellos.
Hay una implementación alternativa de servidor NBD llamada
nbdkit
; No se nada de eso.fuente
Dados los pequeños detalles sin importancia "Windows 10, la estación de trabajo tiene 8G B de RAM" , en realidad solo hay una respuesta sensata: comprar más RAM y ejecutar menos basura.
Comprar una SSD y colocar el archivo de la página allí sería la siguiente mejor opción, pero realmente ... compre más RAM.
Por supuesto, es posible servir el archivo de página ("compartir memoria") a través de la red, pero es una muy mala idea. Si bien es cierto que existen casos límite donde el tiempo de acceso a través de la red va a ser mejor que el acceso a una unidad local, que es irrelevante para su caso de uso, ya que se necesita constante el tiempo de acceso de bajo y alto ancho de banda al mismo tiempo. Recuerde, no está anticipando fallas de una o dos páginas, está intercambiando constantemente. A menos que esté dispuesto a pagar un par de miles, no hay forma de que esté cerca de comprar RAM o un SSD.
8 GB no son suficientes para ejecutar Windows 10 y una aplicación con mucha memoria al mismo tiempo. Apenas es suficiente para ejecutar Word, Excel y Outlook al mismo tiempo. Esa es exactamente la típica "configuración corporativa de mierda total" completamente inutilizable con la que millones de personas tienen que vivir cada día en sus computadoras portátiles de trabajo. Invierta 100-200 monedas en otro módulo de memoria, y amortiza su costo en una semana (las cosas que tomaron minutos ahora toman segundos, y el tiempo es dinero; desafortunadamente, esto a menudo es difícil de conseguir en la cabeza de su contador local de frijoles).
Alternativamente, si posee la máquina, puede usar NTLite para reducir la basura de Windows 10, reduciendo su huella de memoria. O bien, puede desactivar el 80% de los servicios en su mayoría innecesarios. Parece increíble, pero es posible ejecutar una versión reciente de Windows con menos de 2 GB de RAM utilizada.
Pero en realidad, solo compre RAM ... es mucho más rápido y fácil que pasar horas de su valioso tiempo reduciendo la basura de Windows.
fuente
Una alternativa simple sería ejecutar la aplicación en la PC remota , posiblemente bajo una cuenta de usuario dedicada, y simplemente controlarla mediante RDP, VNC o lo que sea conveniente.
fuente
Otra opción es implementar temporalmente la aplicación en un entorno en el que la memoria RAM se pueda ampliar o reducir fácilmente.
Vería una instancia de Amazon AWS, que se puede cambiar de tamaño con un reinicio.
Es decir, una instancia pequeña como un C5.large tiene 4 GB de RAM y 2 núcleos, y cuesta $ 2.04 USD por día para Linux, o $ 4.26 USD por día para una instalación de Windows. El espacio en disco de EBS es un costo adicional y se escala linealmente con GB asignado.
Puede configurar su sistema en este tamaño más pequeño, y luego, cuando quiera hacer todo el ruido, detenerlo, cambiar el tamaño de la instancia y ejecutar el software.
O el más grande ...
https://www.ec2instances.info/ lo ayudará a elegir un tamaño adecuado. Tenga en cuenta que algunas ubicaciones cuestan más que otras. Singapur y el norte de California son caros. Sin embargo, su VM no cuesta nada cuando no se está ejecutando, aparte de los costos de almacenamiento en disco.
La desventaja es que si necesita esta memoria durante mucho tiempo, comprar tiempo de VM es una forma costosa de hacerlo. Sin embargo, los contadores parecen preferir a veces los costos operativos como el alquiler, a los costos de capital como las actualizaciones.
fuente
Como otros han dicho, es técnicamente posible pero no vale la pena.
Sin embargo, si desea acelerar el uso de su computadora, es posible externalizar algunas de sus aplicaciones a un servidor remoto.
Esto dependerá principalmente de lo que esté trabajando y de la aplicación que use. Si está ejecutando programas que requieren mucho tiempo de procesamiento para una pequeña salida de datos, puede hacer que se ejecuten en un servidor diferente de su computadora para ahorrar tiempo y recursos mientras trabaja en otra cosa.
El ejemplo que tengo en mente es un servidor que prueba mi código cada vez que presiono una modificación. La idea con tal solución es que se limita a casos de uso específicos.
fuente
Pídale a TI que compre más RAM para su PC y demuestre la necesidad de usar una captura de pantalla del uso de la aplicación en el Administrador de tareas.
fuente
Hay una solución comercial para esto, a través de una compañía llamada Kove ( http://kove.net/) Requiere una infraestructura Infiniband para funcionar en el "plano posterior" (Ethernet funciona normalmente), aunque otras opciones como RoCE a veces pueden estar disponibles, dependiendo de los detalles. Proporcionan una serie de interfaces transparentes para permitir la integración de cambio de código cero, y las API para omisión del núcleo con un acceso más directo a la CPU (es decir, evitando la sobrecarga del núcleo). En términos de rendimiento, depende de su aplicación. Si está vinculado a la CPU, el impacto podría ser mínimo (lo que puede ser sorprendente). Si tiene ancho de banda de memoria vinculado al host local, le proporcionarán una memoria más grande, pero el cuello de botella ya existente lo estrangulará. En este caso, ¿es ventajoso para la carga de trabajo tener una memoria más grande que la que se puede poner en una caja, y no se queda sin RAM? Hemos visto (muy) buenos resultados con las bibliotecas de virtualización y aprendizaje automático de Python. Las aplicaciones HPC de gama alta tienden a ser bastante peores, pero hemos utilizado las API de C y hemos logrado mantener el rendimiento aceptable mientras reducimos el recuento de nodos (los nodos estaban allí para la RAM, no para los ciclos de la CPU), lo cual es una ventaja en comparación con MPI . Es difícil saber si esta es una buena solución para su colega, pero es una opción que puede analizar. Espero que ayude. Para ser claros, no trabajo para Kove y no tengo ningún incentivo financiero, pero he colaborado con ellos durante varios años y creo que esta tecnología tiene el potencial de impactar sustancialmente la forma en que se realiza cierta computación. pero hemos utilizado las API de C y hemos logrado mantener el rendimiento aceptable mientras reducimos el recuento de nodos (los nodos estaban allí para la RAM, no los ciclos de la CPU), lo cual es una ventaja en comparación con MPI. Es difícil saber si esta es una buena solución para su colega, pero es una opción que puede analizar. Espero que ayude. Para ser claros, no trabajo para Kove y no tengo ningún incentivo financiero, pero he colaborado con ellos durante varios años y creo que esta tecnología tiene el potencial de impactar sustancialmente la forma en que se realiza cierta computación. pero hemos utilizado las API de C y hemos logrado mantener el rendimiento aceptable mientras reducimos el recuento de nodos (los nodos estaban allí para la RAM, no para los ciclos de la CPU), lo cual es una ventaja en comparación con MPI. Es difícil saber si esta es una buena solución para su colega, pero es una opción que puede analizar. Espero que ayude. Para ser claros, no trabajo para Kove y no tengo ningún incentivo financiero, pero he colaborado con ellos durante varios años y creo que esta tecnología tiene el potencial de impactar sustancialmente la forma en que se realiza cierta computación.
fuente
Otro punto de vista: tal vez el problema no sea el límite de recursos del sistema, sino la aplicación derrochadora que está escribiendo su amigo. 6 GB de RAM es una gran cantidad de memoria.
El hecho de que muchas de las otras aplicaciones estén demasiado hinchadas no significa necesariamente que su aplicación amiga deba ser una de ellas. El uso de diferentes métodos de programación puede reducir los requisitos de memoria al tiempo que mejora la velocidad. Por ejemplo, si la aplicación carga todo el conjunto de datos en la memoria y luego funciona, será mucho más derrochador que, por ejemplo, almacenar datos en una base de datos SQL (local o remota) con pocos índices seleccionados y acceder a ellos desde allí. Haga que procese datos bloque por bloque si es posible, en lugar de cargarlos todos a la vez. Las estructuras en memoria también podrían ser un desperdicio. Memoria libre cuando hayas terminado con eso. No cargue en RAM lo que puede asignar en su memoria. Y cientos de otros consejos ...
Sin embargo, si la aplicación realmente necesita más memoria que debe almacenarse en otras computadoras, puede modificarse para usar memcached y similares para almacenarla allí. Puntos de bonificación ya que se escalará mejor en el futuro.
fuente
Entonces, el usuario preguntó CÓMO compartir la memoria a través de la red. No si es una buena idea. Así que aquí es cómo puedes hacerlo.
No digo que esta sea una buena idea, o será rentable, pero debería funcionar.
Supongo que este no es Windows Server donde podría crear un punto de montaje iSCSI.
Computadora 1 Pasos:
Computadora 2 pasos:
¡Hecho!
Advertencias: puede omitir las tonterías de VHD si Windows le permite mover el archivo de página al recurso compartido de red. No hay muchos ejemplos de esto en línea (por razones obvias).
Puede ocurrir inestabilidad completa del sistema, o algo completamente diferente. Nadie sabe realmente lo que sucedería.
fuente
Como mencionas "RAM" para compartir en la red, no solo "memoria" de ningún tipo, la respuesta final será teóricamente sí, prácticamente no.
Mientras que otros tipos de memoria como el almacenamiento y otros datos temporales se comparten regularmente a través de la red por diversos fines y razones. De la misma manera, la RAM puede ser técnicamente posible compartir a través de la red si es necesario. Pero el rendimiento y el costo serán demasiado altos para ser factibles en el mundo real.
La memoria RAM o de acceso aleatorio es utilizada por un sistema operativo como espacio de trabajo, por lo que se realizan muchas operaciones de lectura / escritura. En el sistema promedio, la capacidad de velocidad de datos con RAM es más alta en comparación con otras partes. Si coloca RAM en una red, debe tener una capacidad de transferencia de datos de muy alta velocidad y el costo será muy alto, incluso si es posible lograrlo técnicamente. Con una pequeña parte del costo de una actualización de velocidad de red, obtendrá RAM para su máquina localmente.
fuente
Las aplicaciones generalmente se ejecutan en la memoria virtual, por lo que su requisito de memoria virtual puede exceder la memoria física disponible del sistema sin otra consecuencia que el rendimiento. El sistema operativo será simplemente la página virtual de la memoria a cabo disco para liberar la memoria física, según sea necesario en un momento dado para un uso activo. Esto generalmente funciona bien para aplicaciones que tienen una localidad razonable (la actividad en un momento dado está algo enfocada a áreas limitadas en el espacio de memoria virtual de la aplicación). Si una aplicación tiene una localidad pobre (haciendo referencia constantemente a la memoria en todo su espacio virtual), funcionará mal a menos que toda su memoria virtual se pueda acomodar en la memoria física (toda su memoria virtual es residente).
Entonces, hay algunas posibilidades aquí:
La idea de usar memoria en una computadora remota es básicamente crear un archivo de paginación en red . En teoría, puede funcionar, pero en la práctica, el rendimiento será mucho mejor si el archivo de paginación fuera local para la computadora (su propio disco duro) debido al ancho de banda y la latencia de la red. No importa si el sistema remoto aloja el archivo de paginación en su memoria o en su disco, el cuello de botella (el limitador de rendimiento más significativo) será la red. Esto será especialmente cierto en Internet, pero también será cierto incluso si la computadora remota está adyacente en la misma LAN.
fuente
Esto realmente depende de qué tipo de aplicación es y para qué se usa el ram.
Por ejemplo, muchas aplicaciones web pueden usar RAM a través de la red conectándose a un
memcached
servidor. Esto permitirá almacenar datos de caché (y otros datos de acceso rápido) en otra computadora con mucha RAM.Por supuesto, esto es específico de la aplicación y necesita una aplicación que pueda usar memcached. Esto no lo ayudará a abrir una segunda instancia de holgura ya que un navegador no admite el uso de dicho backend de caché.
fuente
En lugar de compartir la RAM, solo codifique esa aplicación para crear un archivo .exe secundario , que se ejecutará en la PC de red y hará lo mismo en esa PC.
fuente