Мой коллега использует приложение, которое потребляет много памяти, что делает систему слишком медленной. Можно ли делить память с другими ПК через Интернет?
Система имеет 8 ГБ оперативной памяти, а приложение потребляет более 6 ГБ.
Мой коллега использует приложение, которое потребляет много памяти, что делает систему слишком медленной. Можно ли делить память с другими ПК через Интернет?
Система имеет 8 ГБ оперативной памяти, а приложение потребляет более 6 ГБ.
Ответы:
Я рассматривал только отдельное приложение, которое запускается на «стандартной» машине без возможности просто установить его в другом месте или использовать специальное аппаратное или программное обеспечение. Другие ответы (правильно) относятся к миграции программного обеспечения или выделенному оборудованию для выполнения задачи.
Любой способ «совместного использования ОЗУ» через сеть будет ограничен этой сетевой средой. Поскольку даже гигабитный Ethernet ограничен до 100 МБ / с (мегабайт), это означает, что скорость вашей «оперативной памяти» также будет ограничена.
100 МБ / с - это ничтожная доля скорости оперативной памяти, которая в действительности находится в вашей системе. Ваша программа будет мучительно медленной и она будет работать на компьютере с начала 90-х годов.
Современные жесткие диски для последовательного чтения и записи немного быстрее, чем этот. SSD в несколько раз быстрее.
Это игнорирует проблемы с задержкой, которые сделают вашу программу на порядок медленнее.
Из-за медлительности и других связанных с этим технических проблем это не та проблема, которую кто-либо, вероятно, когда-либо считал стоящей попытки решить для «домашних» или «офисных» систем. Дешевле и эффективнее покупать больше оперативной памяти, если это необходимо.
Просто купите больше оперативной памяти или даже SSD для файла подкачки. Нет другого способа сделать это, который не требует безумного количества работы или оборудования для небольшой выгоды.
Просто для полноты: InfiniBand обеспечивает прямой доступ к памяти других машин.
Тем не менее, это требует:
Он НЕ работает в существующей сети, он требует полностью независимой инфраструктуры для всех подключенных узлов. Это также не работает через Интернет
Is there any alternative solution?
Это сильно зависит от характера данных.
Вы можете запустить 2 разных сервера MySQL на 2 разных машинах.
Затем разделите данные на 1/2 и напишите программу, чтобы автоматически узнать, на какой сервер перейти.
Конечно, это можно масштабировать на любое количество серверов, если они у вас есть.
Да, это довольно легко сделать (и я сделал это для бездисковых систем, нуждающихся в обмене), используя протокол Network Block Device.
Установите nbd-server
на серверный компьютер и настройте его для автоматического создания файлов для каждого хоста.
Убедитесь, что на ваших клиентских компьютерах NBD скомпилирован в их ядра, а затем настройте их для обмена на устройство, смонтированное на NBD. nbd-client
Пакет может помочь.
Извините, если вышеупомянутое немного расплывчато - машины, на которых я это сделал, недоступны отсюда; Я могу заполнить детали, когда у меня будет к ним доступ.
Существует альтернативная реализация NBD-сервера nbdkit
; Я ничего не знаю об этом.
Учитывая мелкие, неважные детали: «Windows 10, рабочая станция имеет 8 ГБ ОЗУ» , на самом деле есть только один вменяемый ответ: покупайте больше ОЗУ и меньше занимайтесь ерундой.
Покупка SSD и размещение файла подкачки будет следующим лучшим вариантом, но на самом деле ... купите больше оперативной памяти.
Обслуживание файла подкачки («разделяемой памяти») по сети, конечно, возможно, но это очень плохая идея. Несмотря на то, что существуют пограничные случаи, когда время доступа по сети будет лучше, чем доступ к локальному диску, это не имеет значения для вашего случая использования, потому что вам необходимо постоянное низкое время доступа и высокая пропускная способность одновременно. Помните, что вы не ожидаете ошибок на одну или две страницы, вы постоянно меняетесь местами. Если вы не готовы заплатить пару тысяч, вы никак не приблизитесь к покупке ОЗУ или SSD.
8 ГБ недостаточно для запуска Windows 10 и приложения, требующего памяти, одновременно. Этого едва хватает для одновременного запуска Word, Excel и Outlook. Это как раз та типичная совершенно непригодная «полная ерунда корпоративная установка», с которой миллионам людей приходится жить каждый день на своих рабочих ноутбуках. Вложите 100-200 валют в другой модуль памяти, и он амортизирует свою стоимость в течение недели (вещи, которые занимали минуты, теперь занимают секунды, а время - деньги - к несчастью, это часто трудно получить в голову вашему местному прилавку бобов).
В качестве альтернативы, если у вас есть машина, вы можете использовать NTLite, чтобы сократить дерьмо Windows 10, уменьшив объем памяти. Или вы можете просто отключить 80% ненужных сервисов. Это кажется невероятным, но возможно запустить последнюю версию Windows с менее чем 2 ГБ ОЗУ.
Но на самом деле, просто купите ОЗУ ... это намного быстрее и проще, чем тратить часы своего драгоценного времени на сокращение чушь Windows.
Простая альтернатива - запустить приложение на удаленном ПК , возможно, под специальной учетной записью пользователя, и просто управлять им через RDP, VNC или любым другим удобным способом.
Другой вариант - временно развернуть приложение в среде, в которой оперативная память может быть легко увеличена или уменьшена.
Я бы посмотрел на экземпляр Amazon AWS, размер которого можно изменить за одну перезагрузку.
IE небольшой экземпляр, такой как C5.large, имеет 4 ГБ оперативной памяти и 2 ядра, и стоит 2,04 доллара США в день для Linux, или 4,26 доллара США в день для установки Windows. Дисковое пространство EBS является дополнительной платой и линейно масштабируется с выделением ГБ.
Вы можете настроить свою систему на этот меньший размер, а затем, когда вы захотите сделать полный шум, остановить его, изменить размер экземпляра и запустить программное обеспечение.
Или самый большой ...
https://www.ec2instances.info/ поможет вам выбрать подходящий размер. Обратите внимание, что некоторые места стоят дороже, чем другие. Сингапур и Северная Калифорния дорогие. Однако ваша виртуальная машина ничего не стоит, когда она не работает, кроме затрат на хранение на диске.
Недостатком является то, что если вам нужна эта память в течение длительного времени, покупка виртуального времени является дорогим способом сделать это. Однако бухгалтеры, кажется, иногда предпочитают эксплуатационные расходы, такие как аренда, капитальным затратам, таким как модернизация.
Как уже говорили другие, это технически возможно, но оно того не стоит.
Однако, если вы хотите ускорить использование вашего компьютера, вы можете перенести некоторые из ваших приложений на удаленный сервер.
В основном это будет зависеть от того, над чем вы работаете и какое приложение вы используете. Если вы запускаете программы, требующие много времени для обработки небольших данных, вы можете настроить их запуск на сервере, отличном от вашего компьютера, чтобы сэкономить время и ресурсы, пока вы работаете над чем-то другим.
Я имею в виду пример сервера, который проверяет мой код каждый раз, когда я нажимаю на модификацию. Идея такого решения заключается в том, что оно ограничено конкретными вариантами использования.
Попросите ИТ-отдел купить больше оперативной памяти для вашего ПК и продемонстрируйте необходимость, используя скриншот использования приложения в диспетчере задач.
Для этого есть коммерческое решение через компанию Kove ( http://kove.net/). Для работы на «объединительной плате» требуется инфраструктура Infiniband (Ethernet работает нормально), хотя иногда могут быть доступны и другие параметры, например RoCE, в зависимости от особенностей. Они предоставляют ряд прозрачных интерфейсов, позволяющих интеграцию с нулевым изменением кода, и API для обхода ядра с более прямым доступом к процессору (т. Е. Избегая нагрузки на ядро). С точки зрения производительности, это зависит от вашего приложения. Если вы связаны с процессором, то влияние может быть минимальным (что может быть удивительным). Если вы ограничиваете пропускную способность памяти на локальном хосте, они предоставят вам больший объем памяти, но вы будете ограничены уже существующим узким местом. В этом случае выгодно ли рабочей нагрузке иметь больший объем памяти, чем можно поместить в коробку, а не кончилась оперативка? Мы получили (очень) хорошие результаты с библиотеками машинного обучения виртуализации и Python. Высокопроизводительные высокопроизводительные приложения, как правило, хуже, но мы использовали API-интерфейсы C и сумели сохранить приемлемый уровень производительности при одновременном снижении количества узлов (узлы были для оперативной памяти, а не для циклов ЦП), что является плюсом по сравнению с MPI. , Трудно сказать, является ли это хорошим решением для вашего коллеги, но это вариант, который вы можете рассмотреть. Надеюсь, это поможет. Чтобы быть ясным, я не работаю на Kove, и у меня нет финансовых стимулов, но я сотрудничаю с ними в течение ряда лет и думаю, что эта технология может существенно повлиять на то, как выполняются определенные вычисления. но мы использовали API-интерфейсы C и сумели сохранить приемлемый прирост производительности, одновременно уменьшая количество узлов (узлы были для оперативной памяти, а не для циклов ЦП), что является плюсом по сравнению с MPI. Трудно сказать, является ли это хорошим решением для вашего коллеги, но это вариант, который вы можете рассмотреть. Надеюсь, это поможет. Чтобы быть ясным, я не работаю на Kove, и у меня нет финансовых стимулов, но я сотрудничаю с ними в течение ряда лет и думаю, что эта технология может существенно повлиять на то, как выполняются определенные вычисления. но мы использовали API-интерфейсы C и сумели сохранить приемлемый прирост производительности, одновременно уменьшая количество узлов (узлы были для оперативной памяти, а не для циклов ЦП), что является плюсом по сравнению с MPI. Трудно сказать, является ли это хорошим решением для вашего коллеги, но это вариант, который вы можете рассмотреть. Надеюсь, это поможет. Чтобы быть ясным, я не работаю на Kove, и у меня нет финансовых стимулов, но я сотрудничаю с ними в течение ряда лет и думаю, что эта технология может существенно повлиять на то, как выполняются определенные вычисления.
Другая точка зрения - возможно, проблема не в ограничении системных ресурсов, а в расточительном приложении, которое пишет ваш друг. 6 ГБ ОЗУ ужасно много памяти.
Тот факт, что многие другие приложения чрезмерно раздуты , не обязательно означает, что приложение вашего друга должно быть одним из них. Использование различных методов программирования может снизить требования к памяти при одновременном повышении скорости. Например, если приложение загружает весь набор данных в память, а затем работает с ним, это будет гораздо более расточительным, чем, например, хранение данных в (локальной или удаленной) базе данных SQL с несколькими выбранными индексами и доступ к ней там. Сделайте так, чтобы это обрабатывало данные по блокам, если это возможно, вместо того, чтобы загружать их все сразу. Структуры в памяти тоже могут быть расточительными. Свободная память, когда вы закончите с этим. Не загружайте в RAM то, что вы можете вместо карты памяти. И сотни других советов ...
Однако, если приложению действительно требуется больше памяти, которую необходимо хранить на других компьютерах, ее можно изменить, чтобы использовать memcached и т.п. для ее хранения там. Бонусные баллы, так как это будет лучше масштабироваться в будущем.
Таким образом, пользователь попросил Как использовать память по сети. Нет, если это хорошая идея. Так вот на самом деле, как вы могли бы сделать это.
Я не говорю, что это хорошая идея, или она будет эффективной, но она должна работать.
Я предполагаю, что это не Windows Server, где вы могли бы создать точку монтирования iSCSI.
Компьютер 1 Шаги:
Компьютер 2 шага:
Готово!
Предостережения - вы можете пропустить чепуху VHD, если Windows позволяет вам переместить файл подкачки в общий сетевой ресурс. Там не так много примеров этого онлайн (по понятным причинам).
Может произойти полная нестабильность системы или что-то еще полностью. Никто на самом деле не знает, что произойдет.
Поскольку вы упоминаете «ОЗУ» для совместного использования по сети, а не просто «память» любого рода, окончательный ответ будет теоретически да, практически нет.
В то время как другие типы памяти, такие как хранилище и другие временные данные, регулярно распределяются по сети по различным причинам и причинам. Точно так же, если это необходимо, технически можно использовать ОЗУ для совместного использования по сети. Но производительность и стоимость будут слишком высоки, чтобы их можно было реализовать в реальном мире.
Оперативная система использует оперативную память или оперативную память в качестве рабочего пространства, поэтому на ней выполняется множество операций чтения / записи. В средней системе скорость передачи данных с ОЗУ является самой высокой по сравнению с другими частями. Если вы размещаете ОЗУ в сети, вам потребуется очень высокая скорость передачи данных, а стоимость будет очень высока, даже если это возможно технически. За небольшую часть затрат на обновление скорости сети вы получите оперативную память для вашей машины локально.
Приложения обычно работают в виртуальной памяти, поэтому их требования к виртуальной памяти могут превышать доступную физическую память системы без каких-либо последствий, кроме производительности. Операционная система будет просто страница виртуальная память из на диск , чтобы освободить физическую память по мере необходимости в любой момент для активного использования. Обычно это прекрасно работает для приложений, которые имеют разумную локальность (активность в любой момент времени несколько ограничена областями виртуальной памяти приложения). Если приложение имеет плохую локальность (постоянно ссылается на память во всем своем виртуальном пространстве), оно будет работать плохо, если вся его виртуальная память не будет размещена в физической памяти (вся ее виртуальная память является резидентной).
Итак, здесь есть несколько возможностей:
Идея использования памяти на удаленном компьютере заключается в создании сетевого файла подкачки . Теоретически, это может работать, но на практике производительность будет намного лучше, если файл подкачки будет локальным для компьютера (его собственный жесткий диск) из-за пропускной способности сети и задержки. Неважно, будет ли удаленная система размещать файл подкачки в своей памяти или на диске, узким местом (наиболее существенным ограничителем производительности) будет сеть. Это будет особенно актуально через Интернет, но также будет верно, даже если удаленный компьютер находится рядом в той же локальной сети.
Это действительно зависит от того, какой тип приложения и для чего используется оперативная память.
Например, многие веб-приложения могут использовать оперативную память по сети, подключившись к memcached
серверу. Это позволит хранить данные кэша (и другие данные, к которым должен быть быстрый доступ) на другом компьютере с большим объемом оперативной памяти.
Конечно, это зависит от приложения и требует приложения, которое может использовать memcached. Это не поможет вам открыть второй экземпляр слабины, так как браузер не поддерживает использование такого кеш-сервера.