Почему частично полное ОЗУ (скажем, 80%) заставляет устройство сильно зависать, даже если есть место для хранения большего количества данных? Я ожидаю, что он продолжает работать хорошо до 99%.
Я замечаю, что на мобильном устройстве больше, чем на ПК, поскольку у него меньше оперативной памяти, например, у моего мобильного телефона 2 ГБ ОЗУ; когда у меня меньше 1 ГБ свободной памяти, это сильно отстает! Почему это происходит, несмотря на то, что он все еще имеет ~ 1 ГБ для использования?
Ответы:
Здесь многое задействовано, но я постараюсь объяснить это настолько просто, насколько смогу, и способом, применимым практически к любой ОС.
Здесь есть 2 основных принципа:
Общая сумма всего, что должно быть в ОЗУ, и тех вещей, которые могут быть полезны в ОЗУ, почти всегда больше, чем размер ОЗУ. Вещи, которые могут быть полезны в ОЗУ, включают рабочие наборы процессов и резервный список. Последний содержит данные и код, которые когда-то были в активном использовании, но с тех пор перестали работать. Многое из этого будет использовано снова, а некоторые довольно скоро, поэтому полезно хранить это в оперативной памяти. Эта память действует как своего рода кеш, но на самом деле она не так важна, как в категории доступной памяти. Как и свободная память, она может быть быстро предоставлена любой программе, которая в этом нуждается. В интересах производительности резервная память должна быть большой.
Частота использования блоков памяти далеко не случайна, но может быть предсказана со значительной точностью. Память делится на блоки, часто 4 байта. Доступ к некоторым блокам осуществляется много раз в секунду, в то время как другие блокировались без доступа в течение многих минут, часов, дней или даже недель, если система работала достаточно долго. Между этими двумя крайностями существует широкий диапазон использования. Диспетчер памяти знает, какие блоки были доступны недавно, а какие нет. Разумно предположить, что к блоку памяти, к которому недавно обращались, скоро потребуется снова. Память, к которой недавно не обращались, вероятно, не понадобится в ближайшее время. Многолетний опыт доказал, что это действительный принцип.
Диспетчер памяти использует преимущества второго принципа, чтобы в значительной степени смягчить нежелательные последствия первого. Для этого он выполняет балансировку, сохраняя данные, к которым недавно обращались, в ОЗУ, в то время как хранит редко используемые данные в исходных файлах или файле подкачки.
Когда оперативной памяти много, этот процесс балансировки прост. Большая часть недавно использованных данных может храниться в оперативной памяти. Это хорошая ситуация.
Все становится сложнее, когда увеличивается нагрузка. Общая сумма используемых данных и кода больше, но размер оперативной памяти остается неизменным. Это означает, что меньшее подмножество этого может быть сохранено в RAM. Некоторые из недавно использованных данных больше не могут быть в оперативной памяти, но должны быть оставлены на диске. Менеджер памяти очень старается поддерживать хороший баланс между памятью в активном использовании и доступной памятью. Но по мере увеличения рабочей нагрузки диспетчер памяти будет вынужден предоставлять больше доступной памяти для запущенных процессов. Это не очень хорошая ситуация, но у менеджера памяти нет выбора.
Проблема в том, что перемещение данных в оперативную память и из нее при запуске программ занимает много времени. Когда оперативной памяти много, это случается не очень часто и даже не замечается. Но когда использование оперативной памяти достигнет высокого уровня, это произойдет гораздо чаще. Ситуация может стать настолько плохой, что на перемещение данных в оперативную память и из нее тратится больше времени, чем на ее фактическое использование. Это ужасно, но менеджер памяти старается избегать этого, но при высокой рабочей нагрузке этого часто не избежать.
Менеджер памяти на вашей стороне, всегда стараясь поддерживать оптимальную производительность даже в неблагоприятных условиях. Но когда рабочая нагрузка велика и доступной памяти не хватает, она должна делать плохие вещи, чтобы продолжать функционировать. Это на самом деле самое главное. Первоочередной задачей является сохранение работоспособности, а затем как можно быстрее.
источник
memory manger
часть моегоOS
права? так что, если бы я имел дело с указателями и этими очень низкоуровневыми вещами, сможет ли он по-прежнему делать пейджинг?Все современные операционные системы используют неиспользуемую память для кэширования данных, чтобы к ней можно было обращаться из быстрой оперативной памяти, а не из более медленного хранилища. Как правило, они сообщают об этом как о свободной памяти, поскольку приложения могут очищать кэш и использовать его при необходимости, но он все еще используется. Чем меньше его, тем меньше данных можно кэшировать, и тем медленнее будет компьютер.
источник
Пейджинг - это схема управления памятью, посредством которой блокам памяти фиксированного размера назначаются процессы. Когда использование памяти возрастает до высокого уровня (т. Е. 80% емкости), подкачка начинает расширяться из ОЗУ в виртуальную ОЗУ.
vRAM находится в системном хранилище, обычно на жестком диске или в других значительных хранилищах.
Процессам назначается часть вашего жесткого диска для работы в качестве памяти, и они будут рассматривать их как оперативную память. Это совершенно нормальный процесс, однако, когда время, затрачиваемое на передачу данных в vRAM и из него, увеличивается, производительность системы падает.
В то время как доступ к выделенной оперативной памяти осуществляется непосредственно через материнскую плату из ЦП, что обеспечивает быстрое соединение, виртуальная память должна проходить через кабели между платой и местом расположения vRAM.
Это, однако, вызывает лишь незначительное влияние на производительность. Когда скорость подкачки к vRAM резко возрастает (когда объем выделенной ОЗУ приближается к емкости), происходит перегрузка.
Thrashing - это практика быстрого и быстрого переноса страниц памяти в вашу виртуальную память. Это сильно сказывается на производительности, так как нужно больше времени для извлечения и обработки данных.
Допустим, вы хотите записать число 30 цифр. Вы можете либо сидеть рядом со своим экраном с блокнотом и писать его (используя выделенную память), либо помните куски по 5, бегать в следующую комнату и записывать его в свой блокнот там (используя виртуальную память). Оба выполнили свою работу, но что будет быстрее?
Узнайте больше о разбивке здесь !
источник
Это связано с тем, что операционная система должна выполнять много операций подкачки (загрузки частей активных программ) и подкачки (перемещения данных из ОЗУ на HD и наоборот), чтобы поддерживать работу программного обеспечения. Когда нужно будет загружать новые страницы, которым может потребоваться больше места, чем 20% свободных ресурсов, ОС придется выгрузить существующие страницы в ОЗУ, которые, по ее мнению, вряд ли будут использоваться в ближайшее время. Особенно при запуске других программ. Обмен и возврат в страницы занимает много времени и резко снижает производительность вашего ПК, потому что вы сейчас работаете на скорости HD, а не оперативной памяти.
Это немного помогает на жестком диске создать специальный раздел на вашем жестком диске и назначить его в качестве выделенного пространства «подкачки» (не используйте его для «настоящих» файлов), чтобы на перестановку меньше влияла фрагментация HD.
источник
Помните, что жесткие диски на порядок медленнее, чем ОЗУ, а само ОЗУ не так уж и быстро (в общей архитектуре). В порядке скорости доступа (где каждая ступенька на порядок медленнее, чем та, что указана выше) у вас есть
Менеджер виртуальной памяти является игроком. Он делает ставку на то, что вам не нужна вся ваша оперативная память все время, поэтому он делает обоснованное предположение и бросает кубик, что ваша программа для документов (которая находилась в фоновом режиме в течение последних 10 минут, пока вы читали это) не является действительно важно, и это пихает его на жесткий диск.
Но затем вы возвращаетесь к документу! Теперь VMM должен загрузить все эти данные обратно с жесткого диска. Хуже того, если у вас мало оперативной памяти, теперь нужно перенести другие данные (больше азартных игр) на жесткий диск, чтобы освободить используемое пространство. Linux любит жить на грани. Он заполнит большую часть оперативной памяти часто используемыми данными (отлично подходит для серверов с небольшим количеством процессов).
источник
Поразительные ответы в значительной степени прибивают это. Если вы можете, вы можете минимизировать, как быстро это происходит, уменьшив перестановку (сколько оперативной памяти система будет использовать, прежде чем перемещать объекты в пространство подкачки). Я бы хотел, чтобы системы оставались вне обмена, пока оперативная память не достигнет 99% для серверных приложений, поскольку значение по умолчанию фактически означало бы, что мне потребуется код для вещей, использующих только 80% оперативной памяти, чтобы воспользоваться преимуществами кэширования без наказания за подталкивание система в пространство подкачки.
источник