Почему частично заполненная оперативная память вызывает задержку?

Почему частично заполненная оперативная память вызывает задержку?

Почему частично заполненная оперативная память (скажем, на 80%) заставляет устройство сильно тормозить, даже если есть место для хранения дополнительных данных? Я ожидаю, что она будет работать хорошо до 99%.

Я замечаю, что на мобильном телефоне это происходит чаще, чем на ПК, так как там меньше оперативной памяти, например, на моем мобильном телефоне 2 ГБ оперативной памяти; когда у меня свободно менее 1 ГБ оперативной памяти, он сильно тормозит! Почему это происходит, хотя у него все еще есть ~ 1 ГБ для использования?

решение1

Здесь много всего запутанного, но я постараюсь объяснить все максимально просто и так, чтобы это было применимо практически к любой ОС.

Здесь есть два основных принципа:

  1. Сумма всего, что должно быть в ОЗУ, и тех вещей, которые выиграют от нахождения в ОЗУ, почти всегда больше размера ОЗУ. Вещи, которые выиграют от нахождения в ОЗУ, включают рабочие наборы процессов и резервный список. Последний содержит данные и код, которые когда-то активно использовались, но с тех пор перешли в неактивное состояние. Большая часть этого будет использоваться снова, часть довольно скоро, поэтому выгодно хранить это в ОЗУ. Эта память действует как своего рода кэш, но на самом деле не является необходимой, поэтому относится к категории доступной памяти. Как и свободная память, она может быть быстро предоставлена ​​любой программе, которой она нужна. В интересах производительности резервная память должна быть большой.

  2. Частота использования блоков памяти далека от случайной, но может быть предсказана со значительной точностью. Память делится на блоки, часто по 4 Кбайт. К некоторым блокам осуществляется доступ много раз в секунду, в то время как к другим не обращались в течение многих минут, часов, дней или даже недель, если система работала достаточно долго. Между этими двумя крайностями существует широкий диапазон использования. Менеджер памяти знает, к каким блокам недавно обращались, а к каким нет. Разумно предположить, что блок памяти, к которому недавно обращались, скоро снова понадобится. Память, к которой недавно не обращались, вероятно, не понадобится в ближайшее время. Длительный опыт доказал, что это верный принцип.

Менеджер памяти использует второй принцип, чтобы в значительной степени смягчить нежелательные последствия первого. Для этого он выполняет балансирующий акт, сохраняя недавно использованные данные в оперативной памяти, в то время как редко используемые данные сохраняются в исходных файлах или в файле подкачки.

Когда оперативной памяти достаточно, этот баланс легко выполним. Значительная часть не так давно использованных данных может храниться в оперативной памяти. Это хорошая ситуация.

Все становится сложнее, когда рабочая нагрузка увеличивается. Общая сумма используемых данных и кода увеличивается, но размер оперативной памяти остается прежним. Это означает, что меньшая ее часть может храниться в оперативной памяти. Некоторые из недавно использованных данных больше не могут находиться в оперативной памяти, а должны оставаться на диске. Менеджер памяти изо всех сил старается поддерживать хороший баланс между активно используемой памятью и доступной памятью. Но по мере увеличения рабочей нагрузки менеджер памяти будет вынужден предоставить больше доступной памяти запущенным процессам. Это нехорошая ситуация, но у менеджера памяти нет выбора.

Проблема в том, что перемещение данных в ОЗУ и из ОЗУ во время работы программ занимает время. Когда ОЗУ много, это будет происходить не очень часто и даже не будет замечено. Но когда использование ОЗУ достигает высокого уровня, это будет происходить гораздо чаще. Ситуация может стать настолько плохой, что больше времени будет тратиться на перемещение данных в ОЗУ и из ОЗУ, чем на фактическое ее использование. Это пробуксовка, то, чего менеджер памяти изо всех сил старается избежать, но при высокой нагрузке этого часто невозможно избежать.

Менеджер памяти на вашей стороне, всегда старается поддерживать оптимальную производительность даже в неблагоприятных условиях. Но когда нагрузка велика, а доступной памяти мало, он должен делать плохие вещи, чтобы продолжать функционировать. Это на самом деле самое важное. Приоритет в первую очередь в том, чтобы все работало, а затем сделать это как можно быстрее.

решение2

Все современные операционные системы используют неиспользуемую память для кэширования данных, чтобы к ней можно было получить доступ из быстрой оперативной памяти, а не из более медленного хранилища. Обычно они сообщают об этом как о свободной памяти, поскольку приложения могут очистить кэш и использовать его, если им это нужно, но на самом деле он все равно используется. Чем его меньше, тем меньше данных можно кэшировать, и тем медленнее будет работать компьютер.

решение3

Этот ответ был в основном переписан, чтобы реорганизовать структуру и сделать сообщение более понятным. Я также открыл его как ответ сообщества вики; Не стесняйтесь редактировать.

Пейджинг — это схема управления памятью, посредством которой блоки памяти фиксированного размера имеют процессы, назначенные им. Когда использование памяти достигает высокого уровня (т. е. 80% емкости), пэйджинг начинает распространяться из RAM в vRAM (виртуальную RAM).

vRAM располагается в системном хранилище, обычно на жестком диске или в других местах хранения большого объема.

Процессы назначают часть вашего жесткого диска для работы в качестве памяти и будут рассматривать свой раздел как RAM. Это совершенно нормальный процесс, однако, когда время, затрачиваемое на передачу данных в vRAM и из нее, увеличивается, производительность системы снижается.

В то время как доступ к выделенной оперативной памяти осуществляется напрямую через материнскую плату от ЦП, что обеспечивает быстрое соединение, виртуальная оперативная память должна прокладывать кабели между платой и местом расположения vRAM.

Однако это вызывает лишь незначительное влияние на производительность. Когда скорость подкачки в vRAM резко возрастает (когда выделенная RAM приближается к емкости), происходит пробуксовка.

Thrashing — это практика быстрой и стремительной передачи страниц памяти в вашу виртуальную память. Это сильно влияет на производительность, поскольку больше времени тратится на выборку и адресацию данных.

Допустим, вы хотите записать число длиной в 30 цифр. Вы можете либо сесть рядом с экраном с блокнотом и записать его (используя выделенную память), либо запомнить куски по 5, побежать в соседнюю комнату и записать их в блокноте там (используя виртуальную память). Оба варианта справятся с задачей, но что будет быстрее?

Узнайте больше оздесь тряска!

Большое спасибо всем, кто внес вклад в этот ответ, включаяДэниел Б.,ксеноидиДжон Бентли.

решение4

Помните, жесткие диски — это на порядок большепомедленнеечем RAM, и сама RAM не так уж и быстры изначально (в общей архитектуре). В порядке скорости доступа (где каждая ступень на порядок медленнее предыдущей) у вас есть

  1. Регистры процессора- На практике регистры доступныв течение 1 цикла процессора. Учитывая, что процессоры выполняют миллиарды циклов в секунду (3 ГГц = 3 миллиарда циклов в секунду), это невероятно быстро.
  2. Кэш процессора- Зависит от уровня, но они все равно довольно быстрые (доступность кэша L1 составляет 3–5 циклов).
  3. Оперативное запоминающее устройство (ОЗУ)- Случайная часть означает, что вы не знаете, в каком состоянии она находится, когда вы к ней обращаетесь. Представьте себе курьера, который должен остановиться, забрать посылку, подойти к двери, позвонить в дверной звонок и ждать ответа. Может быть, вы вообще не ждете, а может быть, ждете минуту или две, пока миссис Смит не добежит до двери, чтобы попасть в заднюю часть дома. На практике мы говорим о 14-27 циклах (в зависимости от того, в каком состоянии была оперативная память, когда мы к ней обращались).
  4. Накопитель на жестком диске- Здесь сейчас происходит физический процесс, и пока он происходит максимально быстро, вы ждете, когда головки начнут двигаться, а гусеницы будут двигаться под этими головками. На практике,Жесткий диск со скоростью вращения 7200 об/мин может совершить один оборот примерно за 4 мс., или где-то около750 000 циклов для процессора 3 ГГц. Это медленно.

Менеджер виртуальной памяти — игрок. Он делает ставку на то, что вам не нужна вся ваша оперативная память постоянно, поэтому он делает обоснованное предположение и бросает кости, что ваша программа для работы с документами (которая была в фоновом режиме последние 10 минут, пока вы это читаете) на самом деле не важна, и он запихивает ее на жесткий диск.

Но затем вы нажимаете кнопку «вернуться к документу»! Теперь VMM должен загрузить все эти данные обратно с жесткого диска. Хуже того, если у вас мало оперативной памяти, ему теперь приходится загружать другие данные (еще более азартные) на жесткий диск, чтобы освободить полезное пространство. Linux любит жить на грани. Он заполнит большую часть оперативной памяти часто используемыми данными (отлично подходит для серверов с небольшим количеством процессов).

Связанный контент