В информатике пробуксовка происходит в системе с виртуальной памятью , когда реальные ресурсы хранения компьютера перегружены , что приводит к постоянному состоянию подкачки и сбоев страниц , замедляя большую часть обработки на уровне приложений . [1] Это приводит к снижению производительности компьютера или даже его краху. Ситуация может продолжаться бесконечно, пока пользователь не закроет некоторые работающие приложения или активные процессы не освободят дополнительные ресурсы виртуальной памяти.
После инициализации большинство программ работают с небольшим количеством страниц кода и данных по сравнению с общим объемом памяти, который требуется программе. Страницы, к которым чаще всего обращаются в любой момент, называются рабочим набором , который может меняться со временем.
Когда рабочий набор не намного больше общего числа реальных страниц памяти системы , системы виртуальной памяти работают наиболее эффективно, и незначительное количество вычислений тратится на разрешение ошибок страниц. По мере роста общего числа рабочих наборов разрешение ошибок страниц остается управляемым до тех пор, пока рост не достигнет критической точки, в которой число ошибок резко возрастет, а время, затрачиваемое на их разрешение, превысит время, затрачиваемое на вычисления, для которых была написана программа. Это состояние называется пробуксовкой. Пробуксовка может возникнуть в программе, которая случайным образом обращается к огромным структурам данных, так как ее большой рабочий набор вызывает постоянные ошибки страниц, которые резко замедляют работу системы. Удовлетворение ошибок страниц может потребовать освобождения страниц, которые вскоре придется перечитывать с диска.
Этот термин также используется для обозначения различных схожих явлений, в частности перемещения между другими уровнями иерархии памяти , когда процесс протекает медленно, поскольку значительное время тратится на получение ресурсов.
Термин «просеивание» также используется в контекстах, отличных от систем виртуальной памяти, например, для описания проблем с кэшем в вычислениях или синдрома глупого окна в сетях.
Виртуальная память работает, рассматривая часть вторичного хранилища, такого как жесткий диск компьютера , как дополнительный уровень иерархии кэша . Виртуальная память позволяет процессам использовать больше памяти, чем физически присутствует в основной памяти . Операционные системы, поддерживающие виртуальную память, назначают процессам виртуальное адресное пространство , и каждый процесс ссылается на адреса в своем контексте выполнения с помощью так называемого виртуального адреса. Чтобы получить доступ к данным , таким как код или переменные по этому адресу, процесс должен преобразовать адрес в физический адрес в процессе, известном как трансляция виртуального адреса . По сути, физическая основная память становится кэшем для виртуальной памяти, которая в общем случае хранится на диске в страницах памяти .
Программам выделяется определенное количество страниц по мере необходимости операционной системы . Активные страницы памяти существуют как в оперативной памяти, так и на диске. Неактивные страницы удаляются из кэша и записываются на диск , когда основная память заполняется.
Если процессы используют всю основную память и нуждаются в дополнительных страницах памяти, произойдет каскад серьезных промахов кэша , известных как ошибки страниц , что часто приводит к заметному отставанию в скорости реагирования операционной системы . Этот процесс вместе с бесполезной, повторяющейся подкачкой страниц, которая происходит, известен как «пробуксовка». Это часто приводит к высокой, неконтролируемой загрузке ЦП, которая может полностью остановить систему. В современных компьютерах пробуксовка может происходить в системе подкачки страниц (если недостаточно физической памяти или время доступа к диску слишком велико) или в подсистеме коммуникаций ввода-вывода (особенно при конфликтах из-за доступа к внутренней шине ) и т. д.
В зависимости от конфигурации и задействованных алгоритмов пропускная способность и задержка системы могут ухудшиться на несколько порядков . Пробуксовка — это когда ЦП выполняет меньше «продуктивной» работы и больше «подкачки». Общее время доступа к памяти может увеличиться, поскольку память более высокого уровня работает так же быстро, как и следующий более низкий уровень в иерархии памяти. [2] ЦП занят подкачкой страниц так много, что не может отвечать программам пользователей и прерывается столько, сколько требуется. Пробуксовка происходит, когда в памяти слишком много страниц, и каждая страница ссылается на другую страницу. Реальная память уменьшает свою емкость для хранения всех страниц, поэтому она использует «виртуальную память». Когда каждая страница в процессе выполнения требует страницу, которая в данный момент не находится в реальной памяти (ОЗУ), он помещает некоторые страницы в виртуальную память и настраивает требуемую страницу в ОЗУ. Если ЦП слишком занят выполнением этой задачи, происходит пробуксовка.
В системах виртуальной памяти пробуксовка может быть вызвана программами или рабочими нагрузками, которые представляют недостаточную локальность ссылок : если рабочий набор программы или рабочей нагрузки не может эффективно удерживаться в физической памяти, то может возникнуть постоянная подкачка данных, т. е. пробуксовка. Этот термин впервые был использован во времена ленточной операционной системы для описания звука, который издавали ленты при быстрой записи и считывании данных. Худший случай может возникнуть на процессорах VAX . Однократное MOVL
пересечение границы страницы может иметь исходный операнд, использующий режим отложенной адресации со смещением, где длинное слово, содержащее адрес операнда, пересекает границу страницы, и целевой операнд, использующий режим отложенной адресации со смещением, где длинное слово, содержащее адрес операнда, пересекает границу страницы, и источник, и целевой операнд могут пересекать границы страницы. Эта единственная инструкция ссылается на десять страниц; если не все они находятся в ОЗУ, каждая из них вызовет ошибку страницы. Общее количество страниц, таким образом, вовлеченных в эту конкретную инструкцию, равно десяти, и все десять страниц должны одновременно присутствовать в памяти. Если какую-либо из десяти страниц не удастся поменять местами (например, чтобы освободить место для любой из других страниц), инструкция завершится ошибкой, и любая попытка перезапустить ее будет безуспешной до тех пор, пока не будут заменены все восемь страниц.
Пробуксовка системы часто является результатом внезапного всплеска спроса на страницы от небольшого числа запущенных программ. Swap-token [3] — это легкий и динамический механизм защиты от пробуксовки. Основная идея заключается в установке токена в системе, который случайным образом выдается процессу, у которого возникают ошибки страниц при пробуксовке. Процессу, имеющему токен, дается привилегия выделять больше страниц физической памяти для построения своего рабочего набора, который, как ожидается, быстро завершит свое выполнение и освободит страницы памяти для других процессов. Для передачи токенов по одному используется временная метка. Первая версия swap-token реализована в Linux. Вторая версия называется preempt swap-token. В этой обновленной реализации swap-token для каждого процесса устанавливается счетчик приоритетов для отслеживания количества страниц подкачки. Токен всегда выдается процессу с высоким приоритетом, который имеет большое количество страниц подкачки. Длина временной метки не является константой, а определяется приоритетом: чем больше количество страниц подкачки процесса, тем длиннее будет временная метка для него.
Перегрузка наиболее известна в контексте памяти и хранения, но аналогичные явления происходят и с другими ресурсами , включая:
{{cite book}}
: CS1 maint: несколько имен: список авторов ( ссылка )