stringtranslate.com

Трэшинг (компьютерные науки)

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

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

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

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

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

Обзор

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

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

Если процессы используют всю основную память и нуждаются в дополнительных страницах памяти, произойдет каскад серьезных промахов кэша , известных как ошибки страниц , что часто приводит к заметному отставанию в скорости реагирования операционной системы . Этот процесс вместе с бесполезной, повторяющейся подкачкой страниц, которая происходит, известен как «пробуксовка». Это часто приводит к высокой, неконтролируемой загрузке ЦП, которая может полностью остановить систему. В современных компьютерах пробуксовка может происходить в системе подкачки страниц (если недостаточно физической памяти или время доступа к диску слишком велико) или в подсистеме коммуникаций ввода-вывода (особенно при конфликтах из-за доступа к внутренней шине ) и т. д.

В зависимости от конфигурации и задействованных алгоритмов пропускная способность и задержка системы могут ухудшиться на несколько порядков . Пробуксовка — это когда ЦП выполняет меньше «продуктивной» работы и больше «подкачки». Общее время доступа к памяти может увеличиться, поскольку память более высокого уровня работает так же быстро, как и следующий более низкий уровень в иерархии памяти. [2] ЦП занят подкачкой страниц так много, что не может отвечать программам пользователей и прерывается столько, сколько требуется. Пробуксовка происходит, когда в памяти слишком много страниц, и каждая страница ссылается на другую страницу. Реальная память уменьшает свою емкость для хранения всех страниц, поэтому она использует «виртуальную память». Когда каждая страница в процессе выполнения требует страницу, которая в данный момент не находится в реальной памяти (ОЗУ), он помещает некоторые страницы в виртуальную память и настраивает требуемую страницу в ОЗУ. Если ЦП слишком занят выполнением этой задачи, происходит пробуксовка.

Причины

В системах виртуальной памяти пробуксовка может быть вызвана программами или рабочими нагрузками, которые представляют недостаточную локальность ссылок : если рабочий набор программы или рабочей нагрузки не может эффективно удерживаться в физической памяти, то может возникнуть постоянная подкачка данных, т. е. пробуксовка. Этот термин впервые был использован во времена ленточной операционной системы для описания звука, который издавали ленты при быстрой записи и считывании данных. Худший случай может возникнуть на процессорах VAX . Однократное MOVLпересечение границы страницы может иметь исходный операнд, использующий режим отложенной адресации со смещением, где длинное слово, содержащее адрес операнда, пересекает границу страницы, и целевой операнд, использующий режим отложенной адресации со смещением, где длинное слово, содержащее адрес операнда, пересекает границу страницы, и источник, и целевой операнд могут пересекать границы страницы. Эта единственная инструкция ссылается на десять страниц; если не все они находятся в ОЗУ, каждая из них вызовет ошибку страницы. Общее количество страниц, таким образом, вовлеченных в эту конкретную инструкцию, равно десяти, и все десять страниц должны одновременно присутствовать в памяти. Если какую-либо из десяти страниц не удастся поменять местами (например, чтобы освободить место для любой из других страниц), инструкция завершится ошибкой, и любая попытка перезапустить ее будет безуспешной до тех пор, пока не будут заменены все восемь страниц.

Пробуксовка системы часто является результатом внезапного всплеска спроса на страницы от небольшого числа запущенных программ. Swap-token [3] — это легкий и динамический механизм защиты от пробуксовки. Основная идея заключается в установке токена в системе, который случайным образом выдается процессу, у которого возникают ошибки страниц при пробуксовке. Процессу, имеющему токен, дается привилегия выделять больше страниц физической памяти для построения своего рабочего набора, который, как ожидается, быстро завершит свое выполнение и освободит страницы памяти для других процессов. Для передачи токенов по одному используется временная метка. Первая версия swap-token реализована в Linux. Вторая версия называется preempt swap-token. В этой обновленной реализации swap-token для каждого процесса устанавливается счетчик приоритетов для отслеживания количества страниц подкачки. Токен всегда выдается процессу с высоким приоритетом, который имеет большое количество страниц подкачки. Длина временной метки не является константой, а определяется приоритетом: чем больше количество страниц подкачки процесса, тем длиннее будет временная метка для него.

Другие применения

Перегрузка наиболее известна в контексте памяти и хранения, но аналогичные явления происходят и с другими ресурсами , включая:

Провал кэша
Где доступ к основной памяти осуществляется по шаблону, который приводит к тому, что несколько ячеек основной памяти конкурируют за одни и те же строки кэша, что приводит к чрезмерным промахам кэша . Это, скорее всего, будет проблематичным для кэшей с ассоциативностью .
TLB-пробивание
Где буфер трансляции (TLB), действующий как кэш для блока управления памятью (MMU), который транслирует виртуальные адреса в физические адреса, слишком мал для рабочего набора страниц. Пробуксовка TLB может произойти, даже если не происходит пробуксовка кэша инструкций или кэша данных, поскольку они кэшируются в разных размерах. Инструкции и данные кэшируются небольшими блоками ( строками кэша ), а не целыми страницами, но поиск адреса выполняется на уровне страницы. Таким образом, даже если рабочие наборы кода и данных помещаются в кэш, если рабочие наборы фрагментированы на многих страницах, рабочий набор виртуальных адресов может не поместиться в TLB, что приведет к пробуксовке TLB.
куча молотьбы
Частая сборка мусора из-за невозможности выделить память для объекта, из-за недостатка свободной памяти или недостаточного количества непрерывной свободной памяти из-за фрагментации памяти называется пробуксовкой кучи. [4]
Процесс обмолота
Аналогичное явление происходит и с процессами: когда рабочий набор процесса не может быть перепланирован , т. е. когда не все взаимодействующие процессы запланированы для выполнения в одно и то же время, они испытывают «пробуксовку процесса» из-за того, что они неоднократно планируются и не планируются, и продвигаются очень медленно. [5]

Смотрите также

Ссылки

  1. ^ Деннинг, Питер Дж. (1968). «Брошение: его причины и профилактика» (PDF) . Труды AFIPS, Осенняя совместная компьютерная конференция . 33 : 915–922 . Получено 15.02.2012 .
  2. ^ L., Hennessy, John (2012). Архитектура компьютера: количественный подход . Patterson, David A., Asanović, Krste . (5-е изд.). Waltham, MA: Morgan Kaufmann. ISBN 9780123838728. OCLC  755102367.{{cite book}}: CS1 maint: несколько имен: список авторов ( ссылка )
  3. ^ Сун Цзян и Сяодун Чжан (2005). «LRU с токеновым порядком: эффективная политика замены страниц и ее реализация в системах Linux» . Оценка производительности. стр. 5–29. doi :10.1016/j.peva.2004.10.002.
  4. ^ Методы оптимизации и настройки производительности для процессоров IBM, включая IBM POWER8 , "heap+thrashing" стр. 170
  5. ^ Оустерхаут, Дж. К. (1982). «Методы планирования для параллельных систем» (PDF) . Труды Третьей международной конференции по распределенным вычислительным системам . С. 22–30.