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, багато функцій віртуальної пам'яті в сучасних ОС засновані на механізмі копіювання при записі. Таким чином, накладні витрати можуть легко переважити переваги оптимізованого копіювання під час запису, якщо загальна реалізація недостатньо ефективна.
Щоб передбачити майбутнє сторінки, ми спочатку збираємо історію розгалужень для процесів користувача. Зокрема, ОС відстежує кількість розгалужень, які викликає кожен процес. Низька кількість для процесу означає, що існує мало можливостей для використання процесу, і ОС не потрібно повністю відстежувати помилки сторінки запису для цього процесу.
Навпаки, коли процес викликає системний виклик fork, що перевищує порогове значення, система може очікувати оптимізації. Це відбувається з 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






