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

Нажмите, чтобы узнать, как улучшить работу мозга
Чтобы снизить затраты на преобразование виртуальных адресов в физические, многие современные архитектуры включают в себя кэш для преобразования адресов. TheMMU хранит несколько последних результатов трансляции в аппаратной логике, называемой буфером просмотра трансляции, также известным как TLB.
Обычно TLB современных архитектур могут содержать от 500 до 2000 записей [6,7]. Записи индексируются аппаратно, поэтому ядро процессора может очень быстро найти перевод. Используя локальность ссылок на память, многие преобразования адресов могут выполняться без обхода таблицы страниц (это называется попаданием TLB).
Поскольку объем памяти для приложений, интенсивно использующих память, быстро растет, количество сопоставлений виртуальных и физических страниц для процесса также увеличивается. Однако из-за аппаратных ограничений количество записей TLB не может поспевать за быстрым ростом объема памяти приложения. Таким образом, увеличивается частота промахов TLB, вызывая узкие места в производительности приложений с интенсивным использованием памяти [8–11].
Чтобы преодолеть это ограничение, некоторые архитектуры поддерживают дополнительные размеры страниц, превышающие размер базовых страниц 4 КБ. Например, современные архитектуры Intel поддерживают размеры страниц 2 МБ и 1 ГБ [7]. При таком огромном размере страницы одно преобразование адресов может охватывать более широкий диапазон адресов, эффективно увеличивая охват, который TLB может обеспечить при том же количестве записей.
Например, система с 1024 записями TLB и размером базовой страницы 4 КБ может обеспечить покрытие TLB размером 4 МБ, тогда как такое же количество записей с огромными страницами размером 1 ГБ обеспечивает покрытие 1 ТБ. Linux использует огромную страницу в виде прозрачных огромных страниц. (ТЭЦ). Как следует из названия, Linux неявно предоставляет пользовательским процессам огромные страницы, когда это возможно.
ЕслиTHP не включен, Linux выделяет память процессам в блоке базовой страницы размером 4 КБ. Если включен THP, Linux пытается выделить огромную страницу (размером 2 МБ) вместо базовой страницы, что позволяет выполнять крупномасштабное сопоставление страниц. Такая высокая степень детализации обеспечивает эффективное совместное использование страниц между родительскими и дочерними процессами посредством разветвления. Если в данный момент большое выделение страниц невозможно, Linux возвращается к базовому распределению страниц. Linux периодически сканирует адресные пространства процессов, чтобы найти базовые страницы и объединить их в огромные страницы.

Были исследования, в которых пытались продвигать огромные страницы с целью повышения их производительности, одновременно маскируя их недостатки. Ингенс [12,13] предлагает асинхронно готовить огромные страницы вне критического пути.
Hawkeye [14] представляет детальную схему продвижения огромных страниц, основанную на шаблонах доступа к памяти, позволяющую максимизировать производительность при минимальном количестве огромных расширений страниц. Чжу и др. [15] обобщают процессы использования огромных страниц и оптимизируют жизненный цикл огромных страниц. Парт и др. [16] допускают дыры в огромных страницах, обеспечивая гибкость в управлении памятью для огромных страниц.
Однако огромный паж — это обоюдоострый меч. Из-за увеличения размера блока управления распределение страниц страдает от внутренней фрагментации. Если выделенный диапазон адресов меньше огромного размера страницы, остальная часть страницы не может быть использована и теряется. Это так называемое раздувание памяти может значительно снизить использование памяти в системах с огромными страницами [12–17].
Увеличение размера страницы также может отрицательно повлиять на производительность программы. Современные ОС широко используют схему копирования при записи для эффективного совместного использования памяти между процессами. Однако CoW обрабатывается только на уровне базовой страницы.
Таким образом, для обработки CoW на огромной странице огромная страница разбивается на базовые страницы и копируется только неисправная страница. Разрушение огромных страниц занимает значительное время, что приводит к периодической обработке ошибок длинных страниц. В этом смысле некоторые приложения, даже ресурсоемкие, не рекомендуют использовать огромные страницы для стабильной производительности и использования памяти [4,18].
В общем, в адресном пространстве процесса существуют диапазоны адресного пространства, где все страницы в диапазоне имеют одинаковые разрешения и характеристики. Для управления современные ОС обычно используют концепцию «области виртуальной памяти (VMA)» для представления таких диапазонов адресного пространства. Мы можем классифицировать страницы в адресном пространстве процесса по их происхождению.

Некоторые страницы могут быть загружены из резервного файла во вторичном хранилище, называемого «страницами с файловым сопровождением». Принимая во внимание, что некоторые страницы заполняются динамически без каких-либо вспомогательных данных. Страницы стека и кучи в данном случае являются так называемыми «анонимными страницами».
2.2. Форк и копирование при записи
Fork — это один из стандартных системных вызовов POSIX для создания нового процесса. Когда процесс вызывает системный вызов fork, новый процесс создается как дочерний процесс вызывающего процесса.
Под капотом ОС создает дочерний процесс, дублируя все адресное пространство вызывающего процесса. Это означает, что дочерний процесс должен начинаться с тех же данных, что и родительский процесс.
Чтобы эффективно справиться с дублированием адресного пространства, большинство современных ОС используют метод копирования при записи (CoW). Чтобы дублировать адресное пространство родителя, ОС не копирует каждую страницу. Вместо этого таблица страниц дочернего процесса создается путем копирования таблицы страниц родительского процесса.
Это эффективно создает общее сопоставление с адресным пространством родительского объекта. При создании общего сопоставления разрешение на запись для каждой страницы удаляется путем очистки бита разрешения в соответствующем PTE.
После копирования сопоставления и родитель, и дочерний элемент могут читать общие страницы как свои. Когда один из процессов осуществляет доступ на запись к странице, MMU из-за отсутствия разрешения на запись вызывает ошибку страницы. В обработчике ошибок страниц ОС выделяет новую страницу, копирует исходную страницу и обновляет соответствующее сопоставление страниц процесса, вызвавшего ошибку, с письменного разрешения.
На этом этапе родительский и дочерний элементы могут иметь разные данные по одному и тому же виртуальному адресу. Этот механизм копирования при записи широко используется в качестве основного ключевого механизма для реализации многих функций виртуальной памяти. В частности, чтение неинициализированных областей кучи обычно обрабатывается с помощью общего сопоставления с нулевой страницей, которая представляет собой специальную страницу, содержащую все нули.
Объединение одностраничных страниц ядра (KSM) — это метод дедупликации одних и тех же страниц в системе. ОС сканирует страницы в системе для выявления страниц с идентичными данными. Когда такие страницы найдены, ОС освобождает все страницы, кроме одной, и обновляет соответствующие таблицы страниц, чтобы совместно использовать оставшуюся страницу.
При обработке разрешение на запись отменяется, поэтому последующий доступ к странице на запись идентифицируется и копируется. Благодаря высокой эффективности копирования при записи создание процессов становится эффективным, и некоторые приложения, интенсивно использующие данные, используют это преимущество для создания копии данных. .
Redis, одна из популярных служб хранения значений ключей в памяти [4], является одним из таких случаев [19]. Redisis предназначен главным образом для хранения данных в памяти, чтобы обеспечить высокую пропускную способность и низкую задержку.
Однако некоторые приложения требуют постоянного хранения хранимых данных и повторно дополняют дизайн в памяти с помощью вилки. Redis применяет входящие запросы только к индексу и структурам данных в памяти и периодически вызывает системный вызов fork. Это фактически создает дочерний процесс с дублированным содержимым памяти исходного процесса Redis, а вызывающий процесс (т. е. исходный процесс) продолжает обработку входящих запросов.
Дочерний процесс прерывает свое выполнение; используя текущее содержимое памяти в качестве моментального снимка, он сериализует структуры данных в памяти в файлы, тем самым обеспечивая постоянство моментального снимка в памяти. После очистки снимка дочерний процесс завершается.
Исходный процесс может таким же образом создать еще один снимок, а в случае сбоя системы Redis можно восстановить, прочитав последний снимок. Хотя форк является бесценным системным вызовом, его накладные расходы подвергаются критике.

Бауманн и др. [20] проанализировали форк и обнаружили, что форк вызывает снижение производительности современных приложений. Например, поскольку современные приложения становятся все более сложными, ОС должна рассмотреть примерно 25 особых случаев, чтобы начать обработку системного вызова fork в соответствии со спецификацией POSIX. Они обобщили проблемы системного вызова fork и предложили функции, которыми должен обладать системный вызов fork для современного компьютера.
Они также предоставляют альтернативные способы замены вилки. Чжао и др. [19] отметили, что реализация ветвления в современных системах неэффективна, поскольку приложениям с большим объемом памяти требуется много времени для настройки таблицы страниц. В качестве решения они обобщили метод копирования при записи, так что таблица страниц копируется при записи так же, как и обычные страницы.
For more information:1950477648nn@gmail.com






