Як працює стиск в об'єктно-орієнтованій архітектурі пам'яті
Команда інженерів із MIT розробила об'єктно-орієнтовану ієрархію пам'яті для більш ефективної роботи з даними. У статті розуміємо, як вона влаштована.
/ PxТут / PD
Як відомо, зростання продуктивності сучасних CPU не супроводжується відповідним зниженням затримки при зверненні до пам'яті. Різниця у зміні показників від року до року може сягати 10 раз (PDF, стор.3). Як результат — виникає пляшкова шийка, яка не дає повною мірою користуватися наявними ресурсами та уповільнює обробку даних.
Збитки продуктивності завдає так звана декомпресійна затримка. У деяких випадках на підготовчу декомпресію даних може йти до 64 процесорних циклів.
Для порівняння: додавання та множення чисел з плаваючою точкою займають не більше десяти циклів. Проблема в тому, що пам'ять працює з блоками даних фіксованого розміру, а програми оперують об'єктами, які можуть містити різні типи даних і відрізнятися один від одного за розміром. Щоб вирішити проблему, інженери MIT розробили об'єктно-орієнтовану ієрархію пам'яті, яка оптимізує обробку даних.
Як влаштовано технологію
В основі рішення лежать три технології: Hotpads, Zippads та алгоритм стиснення COCO.
Hotpads - це програмно-керована ієрархія надоперативної регістрової пам'яті (скретчпад). Ці регістри називаються педами (pads) та їх три штуки – від L1 до L3. Вони зберігаються об'єкти різних розмірів, метадані і масиви покажчиків.
По суті, архітектура є системою кешів, але заточену для роботи з об'єктами. Рівень педа, де знаходиться об'єкт, залежить від того, як часто його використовують. Якщо один із рівнів «переповнюється», система запускає механізм, аналогічний «складальникам сміття» у мовах Java або Go. Він аналізує, які об'єкти використовується рідше за інших і автоматично переміщує їх між рівнями.
Zippads працює на основі Hotpads – архівує та розархівує дані, які надходять або залишають два останні рівні ієрархії – пед L3 та основну пам'ять. У першому та другому педах дані зберігаються в незмінному вигляді.
Zippads стискає об'єкти, обсяг яких не перевищує 128 байт. Більші об'єкти діляться на частини, які потім розміщуються у різних ділянках пам'яті. Як пишуть розробники, такий підхід підвищує коефіцієнт пам'яті, що ефективно використовується.
Для стиснення об'єктів застосовується алгоритм COCO (Cross-Object COmpression), про який ми розповімо далі, хоча система здатна працювати Base-Delta-Immediate або FPC. Алгоритм COCO є різновидом різницевого стиснення (differential compression). Він порівнює об'єкти з «базовими» і видаляє біти, що повторюються - див. схему нижче:
За словами інженерів з MIT, їх об'єктно-орієнтована ієрархія пам'яті на 17% продуктивніша за класичні підходи. Вона набагато ближче за своїм пристроєм до архітектури сучасних додатків, тому новий метод має потенціал.
Очікується, що в першу чергу, технологію можуть почати використовувати компанії, які працюють з великими даними та алгоритмами машинного навчання. Ще один потенційний напрямок – хмарні платформи. IaaS-провайдери матимуть можливість ефективніше працювати з віртуалізацією, системами зберігання даних та обчислювальними ресурсами.