Вирівнювання зносу енергонезалежної основної пам’яті, кероване програмним забезпеченням читання та запису, частина 3
Aug 06, 2024
5.1.1 Вибірка розподілу тимчасового запису.
Щоб генерувати перехоплення після кожного Cwritesample і доступу до програми на запис, ми використовуємо внутрішній механізм підрахунку продуктивності ЦП. Подія BUS_ACCESS_ST в ARMv8 підраховує загальну кількість запитів на збереження на шині пам’яті, і таким чином записується кількість звернень програми до запису. Для процесорів Intel такої ж поведінки можна досягти за допомогою лічильника продуктивності для зворотного запису кешу останнього рівня.
Кеш-пам'ять і пам'ять - це два пов'язані, але не ідентичні поняття. Кеш — це термін у комп’ютерній галузі, який описує механізм, за допомогою якого комп’ютери зберігають і обробляють дані. Кеш може допомогти комп’ютерам отримати швидший доступ до даних і підвищити швидкість і ефективність обробки. Пам’ять, з іншого боку, відноситься до людської пам’яті, яка є здатністю мозку людини зберігати інформацію та мати можливість викликати її в будь-який момент.
Хоча кеш-пам'ять і пам'ять відрізняються за концепцією, між ними справді існує певний зв'язок. Людську пам'ять також можна розглядати як механізм кеша. Ми зберігаємо речі та інформацію, яку ми пережили, у своєму мозку, щоб ми могли згадати їх швидше, коли вони нам знадобляться. Це схоже на механізм зберігання кешу в комп’ютерах, який може зберігати тимчасові дані для підвищення ефективності обробки комп’ютера.
Крім того, кеш-пам’ять, особливо короткострокова, також може допомогти нам краще зрозуміти та запам’ятати нову інформацію. Якщо ми вивчаємо нові поняття або точки знань, ми можемо зберігати їх у кеш-пам’яті нашого мозку на короткий період, щоб допомогти нам краще їх запам’ятати. Якщо ми зможемо швидко перетворити нову інформацію в довгострокову пам’ять, то зможемо краще зрозуміти й оволодіти цими знаннями.
Загалом, кеш-пам'ять і пам'ять - це два тісно пов'язані поняття і два механізми, які сприяють один одному. Кеш може допомогти нам отримати доступ до даних та інформації швидше, а пам’ять може допомогти нам краще зрозуміти та запам’ятати цю інформацію. У навчанні та повсякденному житті всі ми можемо використовувати кеш-пам’ять і механізми пам’яті, щоб покращити нашу ефективність і пам’ять. Можна побачити, що нам потрібно покращити пам’ять, і Cistanche може значно покращити пам’ять, оскільки Cistanche також може регулювати баланс нейромедіаторів, наприклад, підвищувати рівень ацетилхоліну та факторів росту, які дуже важливі для пам’яті та навчання. Крім того, Cistanche також може покращити кровотік і сприяти доставці кисню, що може гарантувати, що мозок отримує достатню кількість живлення та енергії, тим самим покращуючи життєздатність і витривалість мозку.

Клацніть знати добавки для покращення пам'яті
Якщо такий лічильник продуктивності відсутній у певній системі, можна розглянути будь-яке наближення (наприклад, лічильник циклів або таймер). Механізм підрахунку продуктивності дозволяє генерувати пастку, коли лічильник продуктивності переповнюється (тобто перевищує значення Cmax=232 −1).
Щоб установити перехоплення для кожного Cwritesample доступу для запису, лічильник продуктивності встановлюється на Cmax −Cwritesample під час обробки перехоплення переповнення. Під час вибору зразка перезапису слід враховувати введені накладні витрати для обробки перехоплень.
5.1.2 Перехоплення доступу до запису.
Оскільки остання записана адреса пам’яті не може бути визначена під час обробки перехоплення переповнення лічильника продуктивності, реалізовано другий метод для відстеження цільової адреси наступного запису в пам’ять.
Під час обробки пастки переповнення для дозволу на доступ до пам’яті для відстежуваної області пам’яті встановлено значення READ_ONLY. Зауважте, що архітектура ARMv8 надає ієрархічні дозволи на доступ до пам’яті, дозволяючи налаштовувати області пам’яті розміром 1- ГБ на ЧИТАННЯ ЛИШЕ_ шляхом лише зміни односторінкового запису таблиці.
Завдяки дозволу READ_ONLY наступний доступ до запису викликає пастку порушення дозволу, яка обробляється як синхронне переривання. Адреса, що викликає порушення, доступна для обробника перехоплень у спеціальному регістрі, який потім використовується для збільшення відповідного лічильника в наближенні розподілу запису.1
Під час обробки перехоплення права доступу знову встановлюються на READ_WRITE.2 Зауважте, що для цього механізму строго не потрібен MMU; це також можна реалізувати за допомогою дуже легкого MPU на мікроконтролері.
Однак, якщо присутній MMU, перехоплення доступу до запису може бути обмежено певною підмножиною сторінок пам’яті. Якщо, наприклад, якась програма, критична щодо часу, покладається на швидкий доступ до пам’яті, перехоплення доступу до запису можна вимкнути для цієї програми ціною поганого рівня зносу.
5.2 Вибірка доступу для читання
Щоб записати статистичне наближення доступу до читання, ми виконуємо ті самі два кроки, що описані раніше. По-перше, ми встановили лічильник продуктивності архітектури, який підраховує доступи для читання на шині пам’яті.
Встановлюючи значення C лічильника продуктивності вручну на його максимальне значення Cmax =232 − 1 мінус настроювана частота дискретизації Creadsample щоразу, коли лічильник переповнюється, для кожного доступу до читання Creadsample створюється перехоплення переповнення.
Під час обробки переповнення ми встановили для дозволів пам’яті всіх спостережуваних сторінок пам’яті значення NO_ACCESS, що призводить до пастки permissionviolation під час доступу до читання та запису. Ця пастка порушення використовується для запису цілі наступного доступу для читання.
Під час обробки перехоплення права доступу до пам’яті відновлюються, щоб можна було продовжити виконання. Як наслідок, цей механізм веде до вибірки поточної адреси читання кожного доступу читання Creadsample.

У нашій тестовій системі апроксимація читання використовується разом із наближенням запису. Отже, обидва методи заважають один одному, оскільки вони обидва використовують систему дозволів пам’яті для перехоплення наступного доступу до пам’яті. Апроксимація запису використовує лише дозвіл READ_ONLY, тому доступ до читання продовжується, а апроксимація читання не порушується.
Апроксимація читання, навпаки, використовує дозвіл NO_ACCESS, і, таким чином, також наступний доступ до запису спричиняє перехоплення порушення дозволу, навіть якщо наразі не потрібно записувати вибірку для апроксимації запису.
Це вимагає тісної співпраці між обома апроксиматорами, щоб ігнорувати ці пастки запису. Однак, якщо апроксиматор читання має на меті записати зразок читання, але наступний доступ до пам’яті є доступом запису, доступ запису має бути завершено, щоб продовжити виконання та остаточно досягти запиту читання. Щоб завершити доступ запису, дозволи пам’яті мають бути розслаблено, щоб знову дозволити доступ до запису.
Щоб усе одно перехопити наступний доступ для читання, ми використовуємо механізм налагодження, який повертає права доступу до пам’яті на NO_ACCESS після завершення доступу для запису. Тому ми замінюємо інструкцію після інструкції write на інструкцію точки зупину.3
Поки інструкції запису не можуть маніпулювати програмним лічильником4, наступна інструкція гарантовано буде виконана. Потім обробник точки зупину замінює точку зупину оригінальною інструкцією, скидає дозвіл пам’яті на NO_ACCESS і продовжує виконання.
5.2.1 Вибірка виконання інструкцій.
Коли доступи для читання до основної пам’яті є наближеними, вибірка інструкцій до скомпільованого вихідного коду також повинна бути відібрана, оскільки вони також є доступами для читання з пам’яті.
Однак використання попереднього механізму призведе до захоплення лише вибірки інструкцій, оскільки перше, що робить ЦП після повернення від обробника перехоплення, який змінив права доступу до пам’яті, це отримання наступної інструкції.
Таким чином, лише доступ до текстового сегмента буде зафіксовано в апроксимації читання. Щоб подолати це, ми не спостерігаємо сторінки текстових розділів для апроксимації читання, тому не змінюємо дозволи для цих сторінок.
Замість цього ми беремо окрему вибірку програмного лічильника при кожному переповненні лічильника продуктивності (Creadsample), що призводить до окремої та незалежної апроксимації текстового сегмента.

5.2.2 Масштабування апроксимації.
Як зазначалося раніше, апроксимації читання та запису використовуються для оцінки віку областей пам’яті та передаються на грубозернистий алгоритм вирівнювання зносу.
Щоб підтримувати якість алгоритму вирівнювання зносу з урахуванням старіння, важливо масштабувати наближення читання відповідно до наближення запису. Наближення читання може працювати з іншою частотою дискретизації Creadsample, ніж наближення запису Cwritesample з міркувань продуктивності.
Однак алгоритм вирівнювання зносу отримує лише передбачуваний вік комірки як вхідні дані, що є наближенням запису для NVM, що не руйнує читання, і наближенням читання та наближенням запису для NVM, що руйнує читання. Таким чином, апроксимація читання і запису повинна мати однакову вагу.
Масштабована апроксимація зчитування може бути розрахована таким чином: необхідний коефіцієнт масштабування x, який потрібно помножити на зчитувану апроксимацію перед тим, як її передати в алгоритм вирівнювання зносу, обчислюється відповідно до рівняння (1).
X=CreadsampleCwritesample(1)
5.3 Крупнозернистий алгоритм вирівнювання зносу
Наближення розподілу доступу дає змогу використовувати довільні алгоритми вирівнювання зносу з урахуванням старіння. Алгоритму не потрібно знати, чи працює він на NVM, що руйнує читання, чи ні, оскільки доступи для читання мають такий самий руйнівний вплив, як і доступи для запису.
Таким чином, алгоритм може приймати вік як вхідні дані, які обчислюються на основі суми доступів для читання та запису. Ми підживлюємо алгоритм індикатором із наближення доступу, який оцінює вік кожної сторінки. Зверніть увагу, що система апроксимації працює лише з віртуальною пам’яттю і не враховує відображення сторінок фізичної пам’яті. Це підтримується самим алгоритмом вирівнювання зносу.
Алгоритм вирівнювання зносу вирішує, які сторінки віртуальної пам’яті переміщуються на інші сторінки фізичної пам’яті, і тому підтримує загальний вік фізичної пам’яті. Однак інтерфейс між системою наближення та алгоритмом вирівнювання зносу має бути чітко визначеним. Ми додатково поєднуємо наш алгоритм вирівнювання зносу з реалізацією наближення, щоб зменшити надлишкові дані, що зберігаються.
Наш алгоритм вирівнювання зносу використовує червоно-чорне дерево для підтримки всіх керованих сторінок фізичної пам’яті разом із їхнім розрахунковим віком [10]. Оскільки розрахунковий вік уже присутній у вузлах дерева, немає потреби також зберігати ці значення в реалізації наближення.
Дерево показано в розділі 5.3.1. Кожна сторінка зберігається в дереві приблизно приблизного віку, тому ефективний пошук і вилучення наймолодшої сторінки.
Система апроксимації підтримує тимчасовий лічильник читання та запису для сторінки віртуальної пам’яті та сповіщає алгоритм вирівнювання зносу за допомогою дії збільшення віку, якщо один із цих лічильників перевищує певний поріг. Як наслідок, алгоритм вирівнювання зносу мінімально збільшує значення внутрішнього віку та переміщує вміст фізичної пам’яті на іншу сторінку.
5.3.1 Керування сторінками пам'яті.
Кожного разу, коли сторінку віртуальної пам’яті потрібно перемістити на іншу сторінку фізичної пам’яті, поточний мінімум (тобто сторінка фізичної пам’яті з найменшим передбачуваним віком) витягується з дерева як цільова фізична сторінка, і приблизний вік відповідно коригується.
Вибір наймолодшої сторінки як жертви вирівнювання зносу призводить до поступового вирівнювання зносу, де кожна сторінка стає наймолодшою сторінкою через певний проміжок часу.
Що стосується накладних витрат, алгоритм вирівнювання зносу викликається в цьому налаштуванні лише тоді, коли потрібно перемістити сторінку пам’яті. Щодо політики вибору рішень щодо рівня зносу, орієнтовний вік усіх фізичних сторінок рівномірно збалансований у часі, оскільки кожна сторінка буде поточною мінімальною сторінкою в певний час.
Це встановлює поступове вирівнювання зношення без збереження стану, і передбачається, що пам’ять у будь-який час буде вирівнювати зношеність і зберігається на рівні зношення. Таким чином, системі не потрібно зберігати віки для циклів живлення.
Структури даних апроксимації доступу та сам алгоритм вирівнювання зносу мають бути спрямовані на сам вирівнювання зносу, що вимагає спеціальної реалізації.
Однак ці технічні деталі виходять за межі цієї роботи. Зрештою, така інтеграція алгоритму вирівнювання зносу та системи апроксимації призводить до додаткового параметра конфігурації, окрім часової та просторової деталізації апроксимації кількості записів, тобто порогового релікту, після чого має бути виконано розраховане число записів або читань.

Цей параметр конфігурації забезпечує компроміс між накладними витратами на переміщення сторінки та частотою та, відповідно, кінцевою якістю дій вирівнювання зносу, не впливаючи на якість наближення доступу.
For more information:1950477648nn@gmail.com






