CCoW: оптимизация копирования при записи с учетом пространственной локальности в рабочих нагрузках, часть 4
Apr 03, 2024
3.3. Отслеживание доступа к предварительно скопированным страницам
Предполагается, что CCoW амортизирует накладные расходы, связанные с частыми ошибками страниц. Однако предварительное копирование страниц приводит к другой проблеме: отслеживанию доступа к страницам после копирования.
Существует сильная связь между обработкой ошибок и памятью. Для большинства людей ошибки часто рассматриваются как нечто плохое, но они могут стать для нас возможностью учиться и расти. Правильно обрабатывая ошибки, мы можем улучшить нашу память и помочь нам лучше понимать подобные ситуации и реагировать на них.
Один из способов справиться с ошибками — это размышлять и анализировать. Когда мы совершаем ошибку, нам следует уделить время размышлению о том, как произошла ошибка и что мы можем сделать, чтобы предотвратить повторение подобной ошибки. Посредством размышления мы можем выявить коренные причины проблем и разработать контрмеры для их решения. Этот вид анализа касается не только ошибок, он может помочь нам принимать более правильные решения в других жизненных ситуациях и улучшить наши навыки и способности.
Еще один способ справиться с ошибками — позволить себе принять их и двигаться дальше. Мы не должны позволять ошибкам замедлять нас или расстраивать нас. Вместо этого мы должны рассматривать их как возможность для роста, позволяя себе учиться на своих ошибках и продолжать совершенствоваться. Если мы сможем принять ошибки и справиться с ними с позитивным настроем, мы сможем сформировать сильное мышление и веру в себя, что очень важно для поддержания хорошей памяти.
Наконец, мы можем укрепить нашу память, делясь своими ошибками. Когда мы рассказываем другим о допущенных нами ошибках, мы склонны помнить эти события глубже. Это потому, что когда мы рассказываем другим, нам нужно прояснить ситуацию и вспомнить каждую деталь ошибки. Таким образом, мы сможем лучше понять эти ошибки и предотвратить их повторение.
Таким образом, существует тесная связь между обработкой ошибок и памятью. Правильно справляясь с ошибками, мы можем укрепить нашу память, улучшить свои навыки и способности и стать лучше. Мы должны рассматривать ошибки как возможность, активно преодолевать трудности, учиться на них и расти. Видно, что нам необходимо улучшить память, а цистанхе пустынный может значительно улучшить память, потому что цистанхе пустынный — это традиционное китайское лекарственное средство, обладающее множеством уникальных эффектов, одним из которых является улучшение памяти. Эффективность Cistanche Deserticola обусловлена множеством содержащихся в нем активных ингредиентов, включая дубильную кислоту, полисахариды, флавоноидные гликозиды и т. д. Эти ингредиенты могут способствовать здоровью мозга различными путями.

Нажмите «Знать кратковременную память», как ее улучшить.
В исходной схеме копирования при записи первая запись на каждую страницу фиксируется обработчиком ошибок страницы.
Копируется только ошибочная страница, и система может точно отслеживать доступ к каждой странице с помощью обработчика ошибок страницы. С другой стороны, когда система копирует весь регион, все страницы этого региона сопоставляются с процессом с письменного разрешения.
Таким образом, последующая запись в эти скопированные страницы может происходить без запуска механизма обработки ошибок страниц, поэтому система не может отслеживать доступ к скопированным страницам. Это может быть проблематично, если процесс неоднократно выполняет вилки. Предположим, что регион имеет высокую пространственную локальность, а эпоха определяется как период между двумя развилками.
Высокая локальность может быть зафиксирована путем подсчета ошибок страниц, произошедших в регионе. Предположим, что процесс создает новый процесс с ответвлением. Когда с помощью форка начинается новая эпоха, первый доступ на запись к одной из страниц региона инициирует CCoW, копируя все страницы региона. Теперь у процесса есть все страницы с разрешением на запись, и до конца эпохи в этом регионе больше не возникает ошибок страниц.
Когда новая эпоха начинается снова, считается, что регион имеет низкий охват в эпоху, учитывая, что в регионе есть только одна страница копирования при записи. Таким образом, каждая запись в регион обрабатывается с помощью исходного механизма копирования при записи для каждой страницы, тем самым ставя под угрозу возможность оптимизации производительности, даже если регион имеет высокую локальность.
Обратите внимание, что в следующую эпоху регион снова считается высоколокальным, и процесс повторяется, чтобы изменить ситуацию. Чтобы решить эту проблему, нам нужен механизм для отслеживания доступа к странице после копирования.
В этом исследовании предлагается использовать «грязный бит» в записи таблицы страниц (PTE). В общем, современные архитектуры сохраняют различную информацию в PTE для каждой страницы, а «грязный бит» — это одно из полей, поддерживаемых большинством архитектур.
Когда MMU обрабатывает доступ к памяти для записи, он автоматически устанавливает грязный бит соответствующей страницы. Это наоборот означает, что когда для страницы установлен грязный бит, страница была обновлена с доступом для записи.
На основе этой идеи мы модифицировали механизм расчета покрытия. Изначально все регионы считаются обычными регионами. Во время разветвления покрытие для нормальных регионов рассчитывается по количеству операций копирования при записи с использованием уравнения (1).

При обработке ошибки страницы для региона с высокой локальностью все страницы в регионе копируются с очищенным грязным битом. Кроме того, этот регион помечен как предварительно скопированный. Во время форка покрытие скопированного региона рассчитывается с учетом количества грязных страниц в регионе следующим образом:
![]()
Вычисленное покрытие для каждого региона передается через разветвление и используется в качестве показателя пространственной локализации региона. Когда в регионе происходит ошибка записи страницы, система проверяет покрытие региона и может предварительно скопировать страницы для регионов с высокой локализацией.
На рисунке 2 показана ситуация, когда покрытие рассчитывается после предварительных копий. Предположим, что обе области скопированы (заштрихованы красным), и на страницах 0, 2, 3, 4 и 11 установлен грязный бит.
Чтобы вычислить покрытие при обработке ветвления, система использует «грязный бит» вместо счетчика копирования при записи, поскольку регионы копируются в текущую эпоху. Таким образом, регион 0 имеет покрытие 66%.
Тогда как охват региона 1 составляет 15%. Для обработки ошибки страницы для страницы 3 область 0 копируется снова, тогда как ошибка страницы для страницы 9 обрабатывается с помощью исходного механизма. Таким образом, мы можем не допустить ускользания из внимания высоколокальных регионов.

3.4. Захват местности
Поскольку обработчик ошибок страниц находится на критическом для производительности пути в ОС, нам следует минимизировать накладные расходы на реализацию предложенной схемы.
По сути, CCoW требует механизма расчета покрытия, и самый простой способ реализации этой функции — отслеживание страниц, вызывающих сбои страниц, с помощью растрового изображения, как мы описали в разделе 3.2.
При обработке ошибки страницы система устанавливает бит, соответствующий странице с ошибкой. Во время форка система сканирует растровое изображение, чтобы подсчитать количество ошибочных страниц для каждого региона, и вычисляет покрытие. Растровое изображение сбрасывается после расчета.
Этот подход прост, но накладывает большие ограничения по пространству и времени. Система должна поддерживать однобитовую запись растрового изображения для каждой страницы размером 4 КБ и проверять все растровое изображение во время разветвления. Учитывая огромный объем памяти, потребляемый приложениями, интенсивно использующими память, эти операции будут сопряжены с высокими накладными расходами во время разветвления, что нивелирует преимущества CCoW в производительности. Мы оптимизируем эту реализацию, используя характеристики ошибки страницы.
Если ошибка страницы происходит на странице, страница не вызывает дополнительных ошибок страницы, пока процесс не создаст новый процесс. Таким образом, каждая страница может вызвать ошибку максимум на одной странице, а для региона с n страницами ошибки страницы могут произойти только до n раз. Это означает, что подсчет количества ошибок страниц на регион достаточен для расчета покрытия, а не для сохранения растрового изображения для отдельных страниц.
Таким образом, мы заменяем растровое изображение счетчиками ошибок. Каждый регион связан с парой счетчиков следующим образом: один для подсчета ошибок страниц в последней эпохе, а другой для подсчета ошибок страниц в текущей эпохе.
Первый используется для определения пространственной локализации регионов, тогда как второй используется для мониторинга пространственной локализации текущей эпохи. Во время разветвления текущий счетчик ошибок копируется в предыдущий счетчик ошибок.
Если регион копируется в эту эпоху, количество грязных страниц в регионе вместо этого записывается в счетчик предыдущих ошибок. Счетчики заполняются при создании новой области виртуальной памяти (VMA) и освобождаются, когда соответствующая им VMA сжимается или не отображается. Эта оптимизация уменьшает объем накладных расходов CCoW с одного бита на страницу до нескольких байтов на регион.

For more information:1950477648nn@gmail.com






