CCoW: оптимизация копирования при записи с учетом пространственной локальности в рабочих нагрузках, часть 3
Apr 02, 2024
3. Дизайн CCoW
В этом разделе мы сначала представим нашу мотивацию для улучшения копирования при записи и объясним базовую концепцию копирования при записи на основе покрытия (CCoW). Затем мы объясним, как CCoW фиксирует местоположение в различных сценариях, а также оптимизацию для захвата местоположения с низкими накладными расходами.
Память – это способность людей приобретать, хранить и извлекать информацию. Память людей также будет различаться в разных сценариях. В этой статье мы рассмотрим взаимосвязь между памятью в различных сценариях.
Первый – это сценарий обучения. Обучение является важным средством приобретения людьми знаний и навыков. В процессе обучения память играет жизненно важную роль. Если у вас сильная память, вы сможете быстрее освоить новые знания и легче сохранить полученные знания. Поэтому в сценариях обучения нам необходимо сохранять ясность и сосредоточенность мышления, чтобы лучше улучшить память.
Во-вторых, это сфера туризма. Путешествия позволяют нам познакомиться с различными культурами и средами, значительно обогащая наш кругозор. Во время путешествия мы можем приобрести богатые культурные знания, запоминая географические места, людей, обычаи и другую информацию. Поэтому в сцене путешествия нам нужно внимательно наблюдать и активно переживать ее, чтобы лучше улучшить нашу память.
И снова это рабочая сцена. На работе нам приходится обрабатывать большой объем информации, такой как данные, контакты, задачи, планы и т. д. Если наша память недостаточно сильна, это повлияет на эффективность нашей работы и достижения. Поэтому в рабочих сценариях нам нужно хорошо поработать над записью и организацией и постараться максимально сузить диапазон «информационной связи». Таким образом, мы сможем лучше улучшить нашу память.
Наконец, есть сцены из жизни. Людям необходимо запоминать множество повседневных вещей, таких как адреса, номера телефонов, задачи на день и так далее. Если наша память недостаточно хороша, в жизни возникнет много проблем. Поэтому в жизненных сценах нам необходимо тренировать свою память. Мы можем улучшить нашу память, развивая ассоциативное мышление и повторяя про себя.
Подводя итог, можно сказать, что память в разных сценариях тесно связана. Мы можем улучшить нашу память и добиться более высоких результатов в различных ситуациях посредством целенаправленной практики и концентрации. Давайте стремиться к лучшей жизни и карьере с оптимистичным настроем. Видно, что нам необходимо улучшить память, а Cistanche Deserticola может значительно улучшить память, поскольку Cistanche Deserticola также может регулировать баланс нейротрансмиттеров, например, повышая уровень ацетилхолина и факторов роста. Эти вещества очень важны для памяти и обучения. Кроме того, Cistanche Deserticola также может улучшить кровоток и способствовать доставке кислорода, что может гарантировать, что мозг получает достаточное количество питательных веществ и энергии, тем самым повышая жизнеспособность и выносливость мозга.

Нажмите «Знайте добавки для улучшения памяти»
3.1. Мотивация
Как обсуждалось ранее, механизм копирования при записи играет ключевую роль в реализации функций виртуальной памяти в современных ОС. Однако его преимущества с точки зрения занимаемого пространства уменьшаются в современных вычислительных средах и рабочих нагрузках с интенсивными операциями записи, которые распространены в центрах обработки данных [21,22].
Новые технологии памяти, такие как память хранения (SCM) и постоянная память, позволяют повысить плотность данных для модулей памяти, одновременно снижая стоимость единицы данных.
Сегодня создание узла с огромным объемом памяти в терабайтном масштабе стало дешевле, чем когда-либо. Кроме того, поставщики облачных услуг сообщают, что узлы в центрах обработки данных страдают от низкого использования памяти, в результате чего 40–50% памяти остается неиспользуемым [23–26]. В этой ситуации становится возможным обменять пространство памяти на производительность в системах, критичных к производительности [27]. Преимущества с точки зрения производительности также уменьшаются.
Выгоду в производительности от копирования при записи можно охарактеризовать частотой и производительностью обработки ошибок страниц. При создании дочернего процесса было удалено разрешение на запись для всех страниц. С точки зрения корректности это неизбежно; однако это приводит к частым ошибкам страниц после разветвления при обслуживании каждого запроса на запись. Этот шторм ошибок записи случается не только с дочерними процессами, но и с родительским процессом.
Что еще хуже, время обработки ошибок страницы в последнее время не улучшилось, но имеет тенденцию увеличиваться по соображениям безопасности. Раньше все адресное пространство ядра постоянно отображалось в часть адресного пространства пользовательского процесса.
Однако такое расположение адресного пространства позволяет вредоносным пользовательским процессам косвенно читать важные данные в адресном пространстве ядра, используя спекулятивное выполнение процессоров [28,29].
Чтобы смягчить такую критическую уязвимость безопасности, современные ОС используют изоляцию таблицы страниц ядра (KPTI). В общем, только ограниченная часть адресного пространства ядра отображается в адресное пространство процесса, а остальная часть адресного пространства ядра динамически отображается и не отображается во время обработки прерываний и системных вызовов. Это должно сопровождаться очисткой TLB, что может существенно ухудшить производительность системы.
В этой работе мы стремимся снизить накладные расходы на копирование при записи за счет использования пространственной локальности ссылок на память. В настоящее время копирование при записи происходит для каждой страницы, и каждый раз, когда возникает ошибка страницы, должна вмешиваться ОС. Наша ключевая идея — снизить частоту участия ОС за счет использования пространственной локальности доступа к памяти. Если к странице осуществляется доступ для записи, то, скорее всего, ближайшие страницы также будут доступны для записи в ближайшее время.
Таким образом, если мы выполняем копирование при записи не только для ошибочной страницы, но и для соседних страниц вместе (т. е. предварительно копируем соседние страницы), мы можем амортизировать накладные расходы на копирование при записи во время обработки ошибок страницы. Однако нам следует быть осторожными, чтобы не копировать вслепую все соседние страницы.
Если скопированные страницы будут написаны позже, накладные расходы, понесенные на предварительное копирование, окупятся. Однако, если скопированные страницы не записываются впоследствии, предварительное копирование требует лишь дополнительных затрат времени и пространства.

Таким образом, очень важно определить правильные целевые страницы для копирования. Подобные подходы использовались для минимизации накладных расходов на обработку ошибок страниц. Linux использует так называемую функцию «обхода ошибок». При обработке ошибки страницы Linux инициирует обработку ошибки страницы для страниц, находящихся вокруг ошибочной страницы [2]. Однако эта функция применяется только к ошибкам чтения страниц для областей памяти с файловой поддержкой.
Учитывая, что предлагаемая идея фокусируется на написании ошибок страниц для анонимных страниц, мы можем утверждать, что наш подход отличается от функции обхода ошибок. Было предложено множество современных проектов [12–17] для оптимизации использования огромные страницы в ОС.
Эти системы, как правило, представляют собой схему для определения лучших страниц-кандидатов для преобразования в огромные страницы и эффективного продвижения (т. е. преобразования базовых страниц в огромную страницу) или понижения уровня (т. е. преобразования огромной страницы в базовые страницы). огромные страницы.
Однако независимо от предложенных схем копирование при записи выполняется только на базовой странице, после разбиения огромной страницы на базовые страницы, если это необходимо. Таким образом, их характеристики производительности копирования при записи такие же, как у системы Linux по умолчанию с механизмом прозрачных огромных страниц (THP). Напротив, предложенная нами схема уникальна тем, что она выполняет копирование при записи с разной степенью детализации в зависимости от степени локальности доступа к памяти.
3.2. Определение пространственной локализации
Для реализации предложенной схемы необходимо рассмотреть два сложных вопроса. Во-первых, целевые страницы должны быть определены точно и своевременно, чтобы польза от предварительного копирования была максимальной, а накладные расходы на предварительное копирование были сведены к минимуму.
После того, как страница скопирована автором, страница не будет вызывать никаких дальнейших ошибок страницы. Фактически это означает, что система потеряла возможность оптимизировать доступ для записи. Таким образом, система должна иметь возможность предвидеть будущее использование страниц, чтобы определить, какие страницы следует копировать, а какие нет. Во-вторых, идентификация целевых страниц должна иметь низкие издержки, поскольку операционная система не может позволить себе трудоемкую обработку в подсистеме управления памятью, критичной к производительности.
Как обсуждалось в разделе 2, многие функции виртуальной памяти в современных ОС основаны на механизме копирования при записи. Таким образом, накладные расходы могут легко перевесить выгоду от оптимизированного копирования при записи, если общая реализация недостаточно эффективна.
Чтобы предсказать будущее страницы, мы сначала собираем историю вилок для пользовательских процессов. В частности, ОС отслеживает количество вилок, которые вызывает каждый процесс. Низкое значение счетчика для процесса означает, что возможностей для использования этого процесса мало, и ОС не требуется полностью отслеживать ошибки страницы записи для этого процесса.
Напротив, когда процесс вызывает системный вызов разветвления в количестве, превышающем пороговое значение, система может ожидать возможности оптимизации. Это происходит с Redis, который периодически вызывает вилки для создания снимков в памяти, или со сценарием оболочки, который разветвляет несколько команд командной строки. В ответ система начинает отслеживать ошибки страниц для процесса.

Далее мы предлагаем метод прогнозирования возможности оптимизации на основе истории, предполагая, что общее поведение приложений существенно не меняется. Для этого мы делим адресное пространство процесса на области фиксированного размера. Каждый регион поддерживает растровое изображение, где каждый бит соответствует странице в регионе. Процесс запускается со всеми очищенными растровыми изображениями, как и для вновь заполненных областей виртуальной памяти (VMA). Когда часть или весь VMA не отображается, растровые изображения в соответствующем диапазоне адресов также освобождаются.
Растровое изображение выделяется только для заполненных частей VMA, а информация о странице размером 4 КБ суммируется в один бит. Таким образом, накладные расходы на растровое изображение составляют примерно 0,003% заполненного адресного пространства. Первоначально записи обрабатываются методом копирования при записи как есть.
Доступ на запись перехватывается обработчиком ошибок страницы, в результате чего устанавливается соответствующая запись растрового изображения. Со временем битовая карта эффективно фиксирует доступы к региону, и мы можем количественно оценить степень покрытия. Охват региона рассчитывается как процент копий на написанных страницах от всех страниц в регионе следующим образом:
![]()
Предположим, что в системе используются страницы размером 4 КБ, а адресное пространство разделено на области по 2 МБ.
Тогда каждый регион имеет 512 4 страниц КБ. Если при записи копируется 300 страниц, покрытие региона составляет 300/512 × 100=58,6%. Чем выше покрытие региона, тем большую выгоду регион может получить от возможности оптимизации предварительного копирования. Эта информация о покрытии передается через ответвление и используется в качестве показателя для определения выгоды от копирования соседних страниц.
В частности, если область памяти имеет высокий охват, страницы в этой области, скорее всего, в конечном итоге будут копироваться. Таким образом, было бы полезно предварительно скопировать другие страницы в регионе во время обработки ошибки записи страницы. Принимая во внимание, что возможности оптимизации при предварительном копировании страниц невелики, если охват невелик. Таким образом, обработчик pagefault копирует при записи только неисправную страницу.
В дальнейшем в оставшейся части статьи мы будем называть эту схему копированием при записи на основе покрытия или CCoW. Рисунок 1 иллюстрирует концепцию CCoW. Существует два региона: регионы 0 и 1, каждый из которых состоит из шести страниц.
Страницы с зеленым оттенком заполняются с возможностью копирования при записи. Когда процесс вызывает системный вызов fork, разрешение на запись для всех страниц, включая зеленые, должно быть удалено во время разветвления. Предположим, что порог определения региона высокой локальности составляет 60%. В регионе 0 четыре страницы (страницы 1, 2, 3 и 4) были скопированы при записи до разветвления, что обеспечивает покрытие 4/6=66%.
Таким образом, считается, что этот регион имеет высокую пространственную локальность, и все страницы копируются для обработки ошибки страницы для страницы 3, заштрихованной красным. Принимая во внимание, что нижняя область обеспечивает охват 33%, поскольку две из шести страниц были переписаны до форка.
Следовательно, этот регион имеет меньший охват, чем пороговый, что подразумевает низкую пространственную локальность региона. Таким образом, когда к странице 9 осуществляется доступ для записи, при записи в обработчике ошибок страницы копируется только неисправная страница, как и при обычной процедуре копирования при записи.

For more information:1950477648nn@gmail.com






