Paging Time Window
Paging Time Window (PTW) — это временной интервал, в течение которого система управления памятью (подсистема подкачки) операционной системы ожидает завершения операции ввода-вывода (I/O) для страницы виртуальной памяти, прежде чем принять решение о её замене или повторном использовании. PTW является ключевым параметром в алгоритмах управления страничной памятью, используемых для оценки эффективности подкачки и предотвращения «пробуксовки» (thrashing).
История и контекст
Концепция временного окна подкачки возникла в 1960-х годах с развитием систем виртуальной памяти в мейнфреймах, таких как IBM System/360. В ранних реализациях подкачки (например, в системах с разделением времени) операционная система сталкивалась с проблемой: если процесс запрашивал страницу, которая была выгружена на диск, система должна была дождаться её загрузки. В этот период процесс блокировался, а другие процессы могли использовать процессор. Однако без чёткого временного ограничения система могла бесконечно долго ждать завершения I/O, что приводило к неэффективному использованию ресурсов.
В 1970-х годах, с появлением более сложных алгоритмов управления памятью (например, алгоритм «рабочего набора» (Working Set) Питера Деннинга), стало ясно, что для предотвращения thrashing необходимо учитывать время, затрачиваемое на подкачку. PTW стал формальным параметром, позволяющим системе отличать «полезные» страницы (которые активно используются и должны оставаться в памяти) от «временных» (которые можно выгрузить без значительного ущерба для производительности). В современных операционных системах, таких как Linux, Windows и macOS, PTW реализован неявно через механизмы таймеров и очередей запросов.
Принцип работы
Paging Time Window определяется как промежуток времени от момента, когда система инициирует загрузку страницы с диска (или другого вторичного хранилища), до момента, когда она либо получает уведомление о завершении операции, либо истекает заданный лимит. В типичной реализации:
- Инициация: Процесс обращается к виртуальному адресу, отсутствующему в физической памяти (page fault). Система отправляет запрос на чтение страницы с диска.
- Ожидание: Запрос помещается в очередь I/O. PTW начинает отсчёт.
- Завершение или тайм-аут: Если страница загружена в течение PTW, система обновляет таблицу страниц и возобновляет выполнение процесса. Если время истекло, система может:
- Повторно отправить запрос (если ошибка I/O).
- Завершить процесс (если страница критична).
- Переключиться на другой процесс (если система поддерживает многозадачность).
PTW тесно связан с понятием «времени доступа к диску» (disk access time). В современных системах типичное время доступа к SSD составляет 0,1–0,5 мс, а к HDD — 5–10 мс. PTW обычно устанавливается в диапазоне от 10 мс до 100 мс, в зависимости от типа хранилища и нагрузки.
Значение в алгоритмах управления памятью
Алгоритм «рабочего набора»
В алгоритме рабочего набора (Working Set Model) PTW используется для определения того, какие страницы процесса должны оставаться в физической памяти. Рабочий набор — это множество страниц, к которым процесс обращался в течение последнего PTW. Если страница не была запрошена в течение этого окна, она считается кандидатом на выгрузку. PTW здесь выступает как «окно наблюдения» (observation window).
Алгоритм «часы» (Clock)
В алгоритме замены страниц «Часы» (или «Вторая попытка») PTW может быть реализован как дополнительный бит «использовано» (referenced bit), который сбрасывается через заданные интервалы. Если страница не была использована в течение PTW, она помечается как доступная для замены.
Предотвращение thrashing
Thrashing возникает, когда система тратит больше времени на подкачку, чем на выполнение процессов. PTW позволяет системе оценить, превышает ли время ожидания I/O допустимый порог. Если среднее время подкачки (average page fault service time) становится больше PTW, система может снизить степень многозадачности (degree of multiprogramming), приостановив или завершив некоторые процессы.
Реализация в операционных системах
Linux
В ядре Linux PTW реализован через механизм page_fault и swap-подсистему. Параметр vm.swappiness (от 0 до 100) косвенно влияет на PTW: более высокое значение заставляет систему чаще выгружать страницы, сокращая время ожидания. Конкретное значение PTW не задаётся явно, но ядро использует таймеры для отслеживания времени завершения I/O. В версиях ядра 5.x и 6.x для SSD применяется адаптивный PTW, который динамически подстраивается под скорость диска.
Windows
В Windows NT и более поздних версиях (Windows 10, 11) PTW является частью диспетчера памяти (Memory Manager). Система использует «рабочий набор» (working set) с фиксированным минимальным и максимальным размером. PTW здесь неявно задаётся через параметр PagefileSize и время ожидания ввода-вывода (I/O timeout), которое по умолчанию составляет 60 секунд для дисковых операций. Однако для страничных файлов (pagefile.sys) время ожидания сокращено до 10–30 секунд.
macOS
В macOS (XNU-ядро) PTW интегрирован в механизм vm_pageout. Система использует «динамический рабочий набор» (dynamic working set) с учётом времени доступа к страницам. PTW здесь составляет около 5–15 секунд для активных процессов и до 30 секунд для фоновых. В macOS Big Sur и более новых версиях для SSD применяется алгоритм «сжатия памяти» (memory compression), который уменьшает необходимость в подкачке, тем самым снижая влияние PTW.
Критика и ограничения
Жёсткость границ
PTW, заданный как фиксированное значение, может быть неэффективным в системах с переменной нагрузкой. Например, на серверах с быстрыми NVMe-дисками (время доступа 0,01 мс) PTW в 100 мс приведёт к излишнему ожиданию, тогда как на медленных HDD (10 мс) это же значение может быть недостаточным. Современные системы пытаются решить эту проблему через адаптивные алгоритмы, но они требуют дополнительных вычислительных ресурсов.
Зависимость от типа хранилища
PTW, оптимизированный для HDD, может быть неэффективным для SSD или Optane-памяти. В SSD время доступа почти не зависит от расположения данных, но имеет ограничение по количеству операций записи (write endurance). Если PTW слишком короткий, система может часто выгружать и загружать одни и те же страницы, увеличивая износ накопителя.
Влияние на многозадачность
Слишком большое PTW может привести к тому, что система будет удерживать в памяти страницы, которые уже не нужны, снижая доступную память для других процессов. Слишком маленькое PTW — к частым page fault и thrashing. Оптимальное значение зависит от профиля нагрузки и требует ручной настройки.
Интересные факты
- В ранних версиях UNIX (1970-е) PTW был жёстко задан в коде ядра и составлял 1/60 секунды (один тик таймера). Это приводило к проблемам на системах с медленными дисками.
- В суперкомпьютерах, использующих технологию «единого адресного пространства» (Uniform Memory Access, UMA), PTW может быть равен нулю, так как вся память считается быстрой.
- В мобильных операционных системах (Android, iOS) PTW часто отключается для приложений, работающих в фоновом режиме, чтобы экономить энергию батареи.
Источники
- Деннинг, П. Дж. (1968). «The Working Set Model for Program Behavior» (Communications of the ACM).
- Таненбаум, Э., Бос, Х. (2015). «Современные операционные системы» (4-е издание).
- Документация ядра Linux: «Memory Management», «Page Cache and Page Writeback».
- Microsoft Docs: «Memory Management in Windows 10 and Windows Server 2016».
- Apple Developer Documentation: «Virtual Memory System in macOS».
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →