Meu colega está usando um aplicativo que consome muita memória, o que torna o sistema muito lento. É possível compartilhar memória com outros PCs pela Internet?
O sistema possui 8 GB de RAM e o aplicativo consome mais de 6 GB.
Meu colega está usando um aplicativo que consome muita memória, o que torna o sistema muito lento. É possível compartilhar memória com outros PCs pela Internet?
O sistema possui 8 GB de RAM e o aplicativo consome mais de 6 GB.
Respostas:
Eu considerei apenas um aplicativo independente que é executado em uma máquina "padrão", sem a capacidade de simplesmente instalá-lo em outro lugar ou usar hardware ou software especializado. Outras respostas (corretamente) tratam da migração de software ou hardware dedicado para a tarefa.
Qualquer maneira de "compartilhar RAM" via rede estará sujeita às limitações desse meio de rede. Como até a Ethernet de gigabit é limitada a aproximadamente 100 MB / s (megabytes), isso significa que a velocidade da sua "RAM" também será limitada.
100MB / s é uma fração minúscula da velocidade da RAM que está realmente no seu sistema. Seu programa será dolorosamente lento e parece que está sendo executado em um computador a partir do início dos anos 90
Os discos rígidos modernos são, para leitura e gravação seqüencial, um pouco mais rápidos que isso. SSDs são várias vezes mais rápidos.
Isso está ignorando os problemas de latência que tornarão seu programa uma ordem de magnitude mais lenta novamente.
Devido à lentidão e a outros problemas técnicos envolvidos, esse não é um problema que alguém possa considerar que vale a pena tentar resolver para sistemas "residenciais" ou "comerciais". É mais barato e mais eficaz comprar mais RAM, se necessário.
Basta comprar mais RAM ou até um SSD para um arquivo de paginação. Não há outra maneira de fazer isso que não exija uma quantidade insana de trabalho ou hardware com pouco benefício.
Apenas para ser completo: o InfiniBand permite acesso direto à memória de outras máquinas.
No entanto, requer:
NÃO funciona em uma rede existente, requer uma infraestrutura completamente independente para todos os nós conectados. Também NÃO funciona pela Internet
Is there any alternative solution?
Isso depende muito da natureza dos dados.
Você pode executar 2 servidores mysql diferentes em 2 máquinas diferentes.
Em seguida, divida os dados em 1/2 e escreva o programa para saber automaticamente para qual servidor acessar.
Obviamente, isso pode ser dimensionado para qualquer número de servidores, se você os tiver disponíveis.
Sim, é razoavelmente fácil de fazer (e já fiz isso, para sistemas sem disco que precisam de troca), usando o protocolo Network Block Device.
Instale nbd-server
na máquina servidor e configure-a para criar automaticamente arquivos por host.
Verifique se as máquinas clientes têm o NBD compilado em seus kernels e, em seguida, configure-os para trocar para um dispositivo montado no NBD. O nbd-client
pacote pode ajudar.
Desculpe se o acima é um pouco vago - As máquinas em que eu fiz isso não são acessíveis a partir daqui; Talvez eu consiga preencher os detalhes quando tiver acesso a eles.
Há uma implementação alternativa de servidor NBD chamada nbdkit
; Eu não sei nada sobre isso.
Dados os pequenos detalhes sem importância "Windows 10, estação de trabalho tem 8G B de RAM" , há realmente apenas uma resposta sã: compre mais RAM e execute menos porcaria.
Comprar um SSD e colocar o arquivo de paginação seria a próxima melhor opção, mas realmente ... compre mais RAM.
Servir o arquivo de paginação ("compartilhar memória") pela rede é obviamente possível, mas é uma péssima idéia. Embora seja verdade que existam casos limítrofes em que o tempo de acesso pela rede será melhor do que acessar uma unidade local, isso é irrelevante para o seu caso de uso, porque você precisa de um tempo de acesso baixo consistente e alta largura de banda ao mesmo tempo. Lembre-se de que você não está antecipando falhas de uma ou duas páginas, está trocando constantemente. A menos que você esteja disposto a pagar alguns milhares, não há como chegar perto de comprar RAM ou um SSD.
8 GB não é suficiente para executar o Windows 10 e um aplicativo que consome muita memória ao mesmo tempo. É apenas o suficiente para executar o Word, Excel e Outlook ao mesmo tempo. Essa é exatamente a "configuração corporativa total besteira" completamente inutilizável com a qual milhões de pessoas convivem todos os dias em seus laptops profissionais. Invista 100-200 moedas em outro módulo de memória, e ele amortiza seu custo em uma semana (coisas que levaram minutos agora levam segundos e tempo é dinheiro - infelizmente, muitas vezes é difícil entrar na cabeça do contador de grãos local).
Como alternativa, se você é o proprietário da máquina, pode usar o NTLite para reduzir a porcaria do Windows 10, reduzindo o consumo de memória. Ou então, você pode desativar 80% dos serviços desnecessários. Parece inacreditável, mas é possível executar uma versão recente do Windows com menos de 2 GB de RAM usada.
Mas, realmente, basta comprar RAM ... é muito mais rápido e fácil do que gastar horas do seu precioso tempo reduzindo as porcarias do Windows.
Uma alternativa simples seria executar o aplicativo no PC remoto , possivelmente em uma conta de usuário dedicada, e simplesmente controlá-lo via RDP, VNC ou o que for conveniente.
Outra opção é implantar temporariamente o aplicativo em um ambiente em que a ram possa ser ampliada ou reduzida facilmente.
Eu examinaria uma instância do Amazon AWS, que pode ser alterada em tamanho com uma reinicialização.
No IE, uma instância pequena como a C5.large possui 4 GB de RAM e 2 núcleos e custa US $ 2,04 por dia no Linux, ou US $ 4,26 por dia na instalação do Windows. O espaço em disco do EBS é um custo extra e aumenta linearmente com o GB alocado.
Você pode configurar seu sistema nesse tamanho menor e, quando desejar obter ruído total, pare-o, altere o tamanho da instância e execute o software.
Ou o maior deles ...
https://www.ec2instances.info/ ajudará você a escolher um tamanho adequado. Observe que alguns locais custam mais que outros. Cingapura e norte da Califórnia são caros. No entanto, sua VM não custa nada quando não está em execução, exceto os custos de armazenamento em disco.
A desvantagem é que, se você precisar dessa memória por um longo tempo, comprar tempo da VM é uma maneira cara de fazer isso. No entanto, os contadores parecem preferir custos operacionais, como aluguel, a custos de capital, como atualizações.
Como outros já disseram, é tecnicamente possível, mas não vale a pena.
No entanto, se você deseja acelerar o uso do seu computador, é possível externalizar alguns de seus aplicativos para um servidor remoto.
Isso dependerá principalmente do que você está trabalhando e do aplicativo usado. Se você estiver executando programas que exijam muito tempo de processamento para uma pequena saída de dados, poderá executá-los em um servidor diferente do seu computador para economizar tempo e recursos enquanto trabalha em outra coisa.
O exemplo que tenho em mente é um servidor que testa meu código toda vez que pressiono uma modificação. A idéia dessa solução é limitar-se a casos de uso específicos.
Peça à TI para comprar mais RAM para o seu PC e demonstre a necessidade usando uma captura de tela do uso do aplicativo no Gerenciador de Tarefas.
Existe uma solução comercial para isso, através de uma empresa chamada Kove ( http://kove.net/) Requer uma infraestrutura Infiniband para trabalhar no "backplane" (a ethernet funciona normalmente), embora outras opções como o RoCE às vezes possam ser disponibilizadas, dependendo de detalhes. Eles fornecem um número de interfaces transparentes para permitir a integração de alteração de código zero e APIs para desvio do kernel com acesso mais direto à CPU (ou seja, evitando a sobrecarga do kernel). Em termos de desempenho, isso depende da sua aplicação. Se você estiver vinculado à CPU, o impacto poderá ser mínimo (o que pode ser surpreendente). Se você tiver uma largura de banda de memória vinculada ao host local, eles fornecerão mais memória, mas você será prejudicado pelo gargalo já existente. Nesse caso, é vantajoso para a carga de trabalho ter memória maior do que a que pode ser colocada em uma caixa, e não ficar sem memória RAM? Vimos (muito) bons resultados com as bibliotecas de virtualização e aprendizado de máquina python. Os aplicativos HPC de ponta tendem a piorar bastante, mas usamos as APIs C e conseguimos manter o desempenho aceitável, reduzindo a contagem de nós (os nós estavam lá para a RAM, não para os ciclos da CPU), o que é um plus em comparação ao MPI . É difícil dizer se essa é uma boa solução para o seu colega, mas é uma opção que você pode procurar. Espero que ajude. Para deixar claro, não trabalho para a Kove e não tenho incentivo financeiro, mas colaborei com eles por vários anos e acho que essa tecnologia tem o potencial de impactar substancialmente a maneira como certa computação é feita. mas usamos as APIs C e conseguimos manter o desempenho aceitável, reduzindo a contagem de nós (os nós estavam lá para a RAM, não para os ciclos da CPU), o que é um plus em comparação ao MPI. É difícil dizer se essa é uma boa solução para o seu colega, mas é uma opção que você pode procurar. Espero que ajude. Para deixar claro, não trabalho para a Kove e não tenho incentivo financeiro, mas colaborei com eles por vários anos e acho que essa tecnologia tem o potencial de impactar substancialmente a maneira como certa computação é feita. mas usamos as APIs C e conseguimos manter o desempenho aceitável, reduzindo a contagem de nós (os nós estavam lá para a RAM, não para os ciclos da CPU), o que é um plus em comparação ao MPI. É difícil dizer se essa é uma boa solução para o seu colega, mas é uma opção que você pode procurar. Espero que ajude. Para deixar claro, não trabalho para a Kove e não tenho incentivo financeiro, mas colaborei com eles por vários anos e acho que essa tecnologia tem o potencial de impactar substancialmente a maneira como certa computação é feita.
Outro ponto de vista - talvez o problema não seja o limite de recursos do sistema, mas o aplicativo inútil que seu amigo está escrevendo. 6 GB de RAM são uma quantidade enorme de memória.
Só porque muitos dos outros aplicativos estão inchados demais , não significa necessariamente que o seu aplicativo amigo precisa ser um deles. O uso de diferentes métodos de programação pode reduzir os requisitos de memória e melhorar a velocidade. Por exemplo, se o aplicativo carregar um conjunto de dados inteiro na memória e funcionar, será muito mais inútil do que, por exemplo, armazenar dados no banco de dados SQL (local ou remoto) com poucos índices selecionados e acessá-lo por lá. Faça com que processe os dados bloco a bloco, se possível, em vez de carregar tudo de uma vez. As estruturas na memória também podem ser um desperdício. Liberte memória quando terminar. Não carregue na RAM o que você pode mapear na memória. E centenas de outras dicas ...
Se no entanto o aplicativo realmente precisar de mais memória que precise ser armazenada em outros computadores, poderá ser modificado para usar o memcached e similares para armazená-lo lá. Pontos de bônus, pois será melhor dimensionado no futuro.
Então, o usuário pediu COMO compartilhar memória pela rede. Não se for uma boa ideia. Então, aqui está como você pode fazer isso.
Não estou dizendo que essa é uma boa ideia ou terá desempenho, mas deve funcionar.
Estou assumindo que este não é o Windows Server onde você pode criar um ponto de montagem iSCSI.
Computador 1 etapas:
Computador 2 etapas:
Feito!
Advertências - você poderá ignorar o absurdo do VHD se o Windows permitir mover o arquivo de paginação para o compartilhamento de rede. Não há muitos exemplos disso online (por razões óbvias).
Pode ocorrer instabilidade completa do sistema ou algo completamente diferente. Ninguém realmente sabe o que aconteceria.
Como você menciona "RAM" para compartilhar na rede e não apenas "memória" de qualquer tipo, a resposta final será teoricamente sim, praticamente não.
Enquanto outros tipos de memória, como armazenamento e outros dados temporários, são compartilhados regularmente pela rede por vários propósitos e razões. Da mesma forma, pode ser tecnicamente possível compartilhar a RAM através da rede, se necessário. Mas o desempenho e o custo serão altos demais para serem possíveis no mundo real.
A RAM ou memória de acesso aleatório é usada por um sistema operacional como espaço de trabalho, para que muitas operações de leitura / gravação sejam executadas nele. Em um sistema médio, a capacidade de velocidade de dados com RAM é mais alta em comparação com outras partes. Se você colocar RAM em uma rede, precisará ter uma capacidade de transferência de dados em velocidade muito alta e o custo será altíssimo, mesmo se possível para alcançar tecnicamente. Com uma pequena parte do custo de uma atualização de velocidade da rede, você obterá RAM para sua máquina localmente.
Os aplicativos geralmente são executados na memória virtual, portanto, seus requisitos de memória virtual podem exceder a memória física disponível do sistema, sem nenhuma consequência além do desempenho. O sistema operacional simplesmente pagina a memória virtual em disco para liberar memória física conforme necessário em um determinado momento para uso ativo. Isso geralmente funciona bem para aplicativos com localidade razoável (a atividade a qualquer momento é um pouco focada em áreas limitadas no espaço de memória virtual do aplicativo). Se um aplicativo tiver uma localidade ruim (referenciando constantemente a memória em todo o espaço virtual), ele terá um desempenho ruim, a menos que toda a memória virtual possa ser acomodada na memória física (toda a memória virtual é residente).
Portanto, existem algumas possibilidades aqui:
A idéia de usar memória em um computador remoto é basicamente criar um arquivo de paginação em rede . Em teoria, ele pode funcionar, mas, na prática, o desempenho será muito melhor se o arquivo de paginação estiver local no computador (seu próprio disco rígido) devido à largura de banda e latência da rede. Não importa se o sistema remoto está hospedando o arquivo de paginação na memória ou no disco, o gargalo (o mais importante limitador de desempenho) será a rede. Isso será especialmente verdade na Internet, mas também será verdade mesmo se o computador remoto estiver adjacente na mesma LAN.
Isso realmente depende de que tipo de aplicativo é e para que tipo de memória RAM é usada.
Por exemplo, muitos aplicativos da Web podem usar RAM pela rede conectando-se a um memcached
servidor. Isso permitirá armazenar dados em cache (e outros dados que devem ser rápidos para acessar) em outro computador com muita RAM.
Claro que isso é específico do aplicativo e precisa de um aplicativo que possa usar o memcached. Isso não ajudará você a abrir uma segunda instância de folga, pois um navegador não suporta o uso de um back-end de cache.