CCoW: Оптимізація копіювання під час запису з урахуванням просторової локальності в робочих навантаженнях, частина 2

Apr 02, 2024

Невеликий розмір сторінки може бути проблематичним, оскільки системи стають здатними обробляти величезний обсяг фізичної пам’яті. З ієрархічною організацією таблиці сторінок кожна трансляція віртуальної адреси потребує кількох звернень до пам’яті, по одному для кожного рівня таблиці сторінок, що є неприйнятним.

З віком пам’ять поступово погіршується. Однак фізична пам'ять не є одним із факторів, які безпосередньо впливають на нашу пам'ять. Пам’ять пов’язана із міцністю зв’язків між нейронами в мозку, здоров’ям мозку та частотою використання пам’яті.

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

Однак використання нашого мозку може допомогти нам зберегти гарні спогади. Мозок потребує фізичних вправ, так само як і тіло, йому потрібні дозвілля та фізичні вправи, щоб залишатися здоровим. Розвиток хороших звичок мислення допоможе здоров’ю та ефективності вашого мозку. Наприклад, вивчення нових речей, використання методів пам’яті, розгадування логічних головоломок тощо можуть покращити якість і ефективність вашого мозку.

Тому фізична пам'ять - це просто обсяг пам'яті, доступний мозку. Наша пам'ять тісно пов'язана з межами можливостей нашого мозку. Постійно тренуючи наш мозок, ми можемо зробити свою пам’ять міцнішою та підтримувати її на високому рівні. Щоб покращити пам’ять, ми повинні зосередитися на тренуванні мозку, зберігаючи при цьому позитивний настрій і здорові звички. Можна побачити, що нам потрібно покращити пам’ять, і Cistanche deserticola може значно покращити пам’ять, оскільки Cistanche deserticola має антиоксидантну, протизапальну та антистарільну дію, що може допомогти зменшити окислення та запальні реакції в мозку, тим самим захищаючи здоров'я нервової системи. Крім того, Cistanche deserticola також може сприяти росту та відновленню нервових клітин, таким чином покращуючи зв’язок і роботу нейронних мереж. Ці ефекти можуть допомогти покращити пам’ять, навчання та швидкість мислення, а також можуть запобігти розвитку когнітивної дисфункції та нейродегенеративних захворювань.

increase brain power

Клацніть «Знай, як покращити роботу мозку».

Щоб зменшити високі накладні витрати на перетворення віртуальних адрес у фізичні, багато сучасних архітектур включають кеш для перетворення адрес. 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 використовує величезну сторінку у формі прозорих величезних сторінок (THPs). Як випливає з назви, Linux неявно надає процесам користувача величезні сторінки, коли це можливо.

Якщо THP не ввімкнуто, Linux виділяє пам’ять для процесів у базовій сторінці розміром 4 КБ. Якщо THP увімкнено, Linux намагається виділити величезну сторінку (розміром 2 МБ) замість базової сторінки, дозволяючи грубе відображення сторінок. Ця велика деталізація дозволяє ефективно обмінюватися сторінками між батьківськими та дочірніми процесами через форк. Якщо на даний момент неможливо розподілити величезну сторінку, Linux повертається до базового розподілу сторінок. Linux періодично сканує адресні простори процесів, щоб знайти базові сторінки та об’єднати їх у величезні сторінки.

improve your memory

Були дослідження, які намагалися підвищити продуктивність величезних сторінок, маскуючи при цьому їхні недоліки. Інгенс [12,13] пропонує готувати величезні сторінки асинхронно поза критичним шляхом.

Hawkeye [14] представляє детальну схему просування величезної сторінки, засновану на шаблонах доступу до пам’яті, щоб максимізувати продуктивність з мінімальною кількістю просування величезних сторінок. Чжу та ін. [15] узагальнюють процеси використання величезних сторінок і оптимізують життєвий цикл величезних сторінок. Частина та ін. [16] допускає отвори у величезних сторінках, забезпечуючи гнучкість керування пам’яттю з величезними сторінками.

Однак величезна сторінка — це дволезовий меч. Через збільшення розміру блоку керування розподіл сторінок страждає від внутрішньої фрагментації. Якщо виділений діапазон адрес менший за величезний розмір сторінки, решта сторінки не може бути використана та витрачається. Це так зване збільшення пам’яті може значно зменшити використання пам’яті в системах із величезними сторінками [12–17].

Збільшений розмір сторінки також може негативно вплинути на продуктивність програми. Сучасні ОС широко застосовують схему копіювання під час запису для ефективного спільного використання пам’яті між процесами. Однак CoW обробляється лише на рівні базової сторінки.

Таким чином, для обробки CoW на величезній сторінці, величезна сторінка розбивається на базові сторінки, і копіюється лише несправна сторінка. Розбиття великих сторінок займає значну кількість часу, що призводить до періодичної обробки помилок довгих сторінок. У цьому сенсі деякі програми, навіть ті, що потребують інтенсивної пам’яті, не рекомендують використовувати величезні сторінки для стабільної продуктивності та використання пам’яті [4,18].

Загалом існують діапазони адресного простору в адресному просторі процесу, де всі сторінки в діапазоні мають однакові дозволи та характеристики. Для керування сучасні ОС зазвичай використовують концепцію «області віртуальної пам’яті (VMA)» для представлення таких діапазонів адресного простору. Ми можемо класифікувати сторінки в адресному просторі процесу відповідно до їх походження.

improving brain function

Деякі сторінки можна завантажувати з резервного файлу у вторинному сховищі, що називається «сторінками з резервним файлом». У той час як деякі сторінки заповнюються динамічно без будь-яких резервних даних. У цьому випадку сторінки для стека та купи є так званими «анонімними сторінками».

2.2. Fork і Copy-on-Write

Fork — це один із стандартних системних викликів POSIX для створення нового процесу. Коли процес викликає системний виклик fork, створюється новий процес як дочірній процес викликаючого процесу.

Під капотом ОС створює дочірній процес, дублюючи весь адресний простір процесу виклику. Це означає, що дочірній процес повинен починатися з тих самих даних, що й батьківський процес.

Для ефективної обробки дублювання адресного простору більшість сучасних ОС використовують техніку копіювання під час запису (CoW). Щоб дублювати адресний простір батьківського, ОС не копіює кожну сторінку. Замість цього таблиця сторінок дочірнього процесу створюється шляхом копіювання таблиці сторінок батьківського процесу.

Це фактично робить спільне відображення адресного простору батьківського. Під час створення спільного відображення дозвіл на запис для кожної сторінки скидається шляхом очищення біта дозволу у відповідному PTE.

Після копіювання відображення і батько, і дитина можуть читати спільні сторінки як свої сторінки. Коли один із процесів здійснює доступ для запису до сторінки, MMU через відсутність дозволу на запис ініціює помилку сторінки. У обробнику помилок сторінки ОС виділяє нову сторінку, копіює оригінальну сторінку та оновлює відповідне відображення сторінки процесу, що викликає помилку, з письмового дозволу.

На цьому етапі батьківський і дочірній елементи можуть мати різні дані на одній віртуальній адресі. Цей механізм копіювання при записі широко використовується як фундаментальний ключовий механізм для реалізації багатьох функцій віртуальної пам’яті. Зокрема, читання неініціалізованих ділянок heapregion зазвичай обробляється за допомогою спільного відображення на нульову сторінку, яка є спеціальною сторінкою, що містить усі нулі.

Злиття однієї сторінки ядра (KSM) — це техніка дедуплікації однакових сторінок у системі. ОС сканує сторінки в системі, щоб ідентифікувати сторінки з ідентичними даними. Коли такі сторінки знайдені, ОС відновлює всі сторінки, крім однієї, і оновлює відповідні таблиці сторінок, щоб надати спільний доступ до решти сторінки.

Під час обробки дозвіл на запис скидається, щоб наступний доступ до сторінки був ідентифікований і скопійований. Завдяки високій ефективності копіювання під час запису процес створення стає ефективним, і деякі програми, що потребують великих даних, використовують цю перевагу для створення копії даних .

Redis, одна з популярних служб зберігання ключів і значень у пам’яті [4], є одним із таких випадків [19]. Redisis призначений для збереження даних у пам’яті, щоб забезпечити високу пропускну здатність і низьку затримку.

Однак деякі програми вимагають збереження збережених даних і повторно доповнюють дизайн у пам’яті за допомогою форка. Redis застосовує вхідні запити лише до індексу в пам’яті та структур даних і періодично викликає системний виклик fork. Це фактично створює дочірній процес із дубльованим вмістом пам’яті оригінального Redisprocess, а викликаючий процес (тобто вихідний процес) продовжує обробку вхідних запитів.

Дочірній процес відволікає своє виконання; використовуючи поточний вміст пам’яті як знімок, він серіалізує структури даних у пам’яті у файли, таким чином забезпечуючи збереження знімка в пам’яті. Після очищення знімка дочірній процес завершується.

Початковий процес може зробити інший знімок таким же чином, і після збою системи Redis можна відновити, прочитавши останній знімок. Хоча fork є неоціненним системним викликом, його накладні витрати піддаються критиці.

supplements to boost memory

Бауман та ін. [20] проаналізували fork і виявили, що fork спричиняє погіршення продуктивності в сучасних програмах. Наприклад, оскільки сучасні програми стають більш складними, ОС повинна розглянути приблизно 25 особливих випадків, щоб розпочати обробку системного виклику fork для відповідності специфікації POSIX. Вони узагальнили проблеми системного виклику fork і запропонували особливості, які повинен мати системний виклик fork для сучасного комп’ютера.

Вони також пропонують альтернативні способи заміни вилки. Чжао та ін. [19] зазначив, що реалізація форка в поточних системах є неефективною, оскільки програми з великим обсягом пам’яті потребують багато часу для налаштування таблиці сторінок. Як рішення вони узагальнили техніку копіювання під час запису, щоб таблиця сторінок копіювалася під час запису, а також звичайні сторінки.


For more information:1950477648nn@gmail.com

Вам також може сподобатися