CCoW: Оптимизиране на копиране при запис, като се има предвид пространствената локализация при работни натоварвания, част 2
Apr 02, 2024
Малкият размер на страницата може да бъде проблематичен, тъй като системите стават способни да обработват огромно количество физическа памет. С йерархичната организация на таблицата на страниците всяка транслация на виртуален адрес изисква множество достъпи до паметта, по един за всяко ниво на таблица на страници, което е неприемливо.
С напредването на възрастта паметта постепенно намалява. Физическата памет обаче не е един от факторите, които пряко засягат нашата памет. Паметта е свързана със силата на връзките между невроните в мозъка, със здравето на мозъка и с това колко често се използва паметта.
В нашия мозък невроните са свързани чрез синапси. Тези синапси ни насърчават да съхраняваме и извличаме информация. С напредването на възрастта обаче тези синаптични връзки намаляват, което води до влошаване на паметта ни. Това не е така, защото физическата ни памет е намалена, а защото мозъкът ни претърпява определени промени, които засягат нашите способности.
Използването на нашия мозък обаче може да ни помогне да запазим добри спомени. Мозъкът се нуждае от упражнения, точно както тялото, той се нуждае от свободно време и упражнения, за да бъде здрав. Развиването на добри мисловни навици ще помогне за здравето и ефективността на вашия мозък. Например, научаването на нови неща, използването на техники за памет, играта на логически пъзели и т.н. могат да подобрят качеството и ефективността на вашия мозък.
Следователно физическата памет е просто капацитетът за съхранение, достъпен за мозъка. Нашата памет е тясно свързана с границите на това, което мозъкът ни може да постигне. Като тренираме постоянно мозъка си, можем да направим паметта си по-трайна и да я поддържаме на високо ниво. За да подобрим паметта, трябва да се съсредоточим върху упражняването на мозъка, като същевременно поддържаме положително отношение и добри здравословни навици. Може да се види, че трябва да подобрим паметта и Cistanche deserticola може значително да подобри паметта, тъй като Cistanche deserticola има антиоксидантни, противовъзпалителни и анти-стареене ефекти, които могат да помогнат за намаляване на окисляването и възпалителните реакции в мозъка, като по този начин предпазват здраве на нервната система. В допълнение, Cistanche deserticola може също така да стимулира растежа и възстановяването на нервните клетки, като по този начин подобрява свързаността и функцията на невронните мрежи. Тези ефекти могат да помогнат за подобряване на паметта, ученето и скоростта на мислене и могат също така да предотвратят развитието на когнитивна дисфункция и невродегенеративни заболявания.

Щракнете върху познайте начините за подобряване на мозъчната функция
За да се смекчат високите разходи за преобразуване на виртуални във физически адреси, много съвременни архитектури включват кеш за преобразуване на адреси. TheMMU съхранява няколко скорошни резултата от превода в хардуерна логика, наречена буфер за превод, известен също като TLB.
Обикновено TLB на съвременните архитектури могат да съдържат около 500 до 2000 записа [6,7]. Записите се индексират от хардуера, така че процесорът да може да търси превода много бързо. Чрез използване на локалността на препратките към паметта, много преводи на адреси могат да бъдат извършени без преминаване през таблицата на страницата (наричано TLB попадение).
Тъй като отпечатъкът на паметта за приложения с интензивна памет нараства бързо, броят на съпоставянията на виртуални към физически страници за даден процес също се увеличава. Въпреки това, поради хардуерни ограничения, броят на TLB записите не може да се справи с бързото нарастване на отпечатъците на паметта на приложенията. По този начин процентът на пропуски на TLB се увеличава, което води до затруднения в производителността на приложения с интензивна памет [8–11].
За да се преодолее това ограничение, някои архитектури поддържат допълнителни размери на страници, по-големи от размера на 4 KB базови страници. Например съвременните архитектури на Intel поддържат размери на страници 2 MB и 1 GB [7]. С такъв огромен размер на страницата, един превод на адрес може да покрие по-широк диапазон от адреси, като ефективно увеличава покритието, което TLB може да осигури със същия брой записи.
Например, система с 1024 TLB записа и 4 KB основен размер на страницата може да осигури TLB покритие от 4 MB, докато същият брой записи с огромни страници от 1 GB осигурява покритие от 1 TB. Linux използва огромната страница под формата на прозрачни огромни страници (THPs). Както подсказва името, Linux имплицитно предоставя на потребителските процеси огромни страници, когато е възможно.
Ако THP не е активиран, Linux разпределя памет за процеси в 4 KB основна страница. Ако THP е активиран, Linux се опитва да разпредели огромна страница (с размер 2 MB) вместо основната страница, позволявайки грубо картографиране на страници. Тази голяма детайлност позволява ефективно споделяне на страници между родителски и дъщерни процеси чрез разклонението. В случай, че огромно разпределение на страници не е осъществимо в момента, Linux се връща към основното разпределение на страници. Linux периодично сканира адресните пространства на процесите, за да намери базови страници и да ги консолидира в огромни страници.

Има проучвания, които се опитват да популяризират огромни страници за производителност, като същевременно маскират допълнително недостатъците им. Ingens [12,13] предлага да се подготвят огромни страници асинхронно извън критичния път.
Hawkeye [14] представя фина схема за промоция на огромни страници, базирана на модели за достъп до паметта, за да увеличи максимално производителността с минимален брой промоции на огромни страници. Zhu и др. [15] обобщават процесите на използване на огромни страници и оптимизират жизнения цикъл на огромни страници. Част и др. [16] позволяват дупки в огромни страници, осигурявайки гъвкавост в управлението на паметта с огромни страници.
Огромната страница обаче е меч с двойно острие. Поради увеличения размер на единицата за управление, разпределението на страници страда от вътрешна фрагментация. Ако определен диапазон от адреси е по-малък от огромния размер на страницата, останалата част от страницата не може да бъде използвана и се губи. Това така наречено раздуване на паметта може значително да намали използването на паметта в системи с огромни страници [12–17].
Увеличеният размер на страницата също може да повлияе негативно на производителността на програмата. Съвременните операционни системи възприемат широко схемата за копиране при запис за ефективно споделяне на памет между процеси. CoW обаче се обработва само при детайлността на основната страница.
По този начин, за да се справи с CoW на огромна страница, огромната страница се разделя на основни страници и се копира само дефектната страница. Прекъсването на огромни страници отнема значително време, което води до периодично обработване на грешки при дълги страници. В този смисъл някои приложения, дори тези, които изискват интензивна памет, не препоръчват използването на огромни страници за стабилна производителност и използване на паметта [4,18].
Като цяло има диапазони от адресно пространство в адресното пространство на процеса, където всички страници в диапазона имат едни и същи разрешения и характеристики. За управление модерните операционни системи обикновено приемат концепцията за „област на виртуална памет (VMA)“, за да представят такива диапазони от адресно пространство. Можем да класифицираме страниците в адресното пространство на процеса според техния произход.

Някои страници могат да бъдат заредени от резервен файл във вторичното хранилище, наричан „страници, поддържани от файл“. Докато някои страници се попълват динамично без никакви резервни данни. Страниците за стека и купчината в този случай са така наречените „анонимни страници“.
2.2. Fork и Copy-on-Write
Fork е един от стандартните системни извиквания на POSIX за създаване на нов процес. Когато процес извика системното повикване fork, се създава нов процес като дете на извикващия процес.
Под капака ОС създава дъщерния процес чрез дублиране на цялото адресно пространство на извикващия процес. Това означава, че дъщерният процес трябва да започне със същите данни като родителския процес.
За да се справят ефективно с дублирането на адресното пространство, повечето модерни ОС използват техниката копиране при запис (CoW). За да дублира адресното пространство на родителя, ОС не копира всяка страница. Вместо това таблицата на страниците на дъщерния процес се конструира чрез копиране на таблицата на страниците на родителския процес.
Това на практика прави споделено картографиране към адресното пространство на родителя. Докато правите споделеното картографиране, разрешението за запис за всяка страница се премахва чрез изчистване на бита за разрешение в съответния PTE.
След копиране на картографирането и родителят, и детето могат да четат споделените страници като свои страници. Когато един от процесите направи достъп за запис на страница, MMU, поради липсата на разрешение за запис, задейства грешка на страницата. В манипулатора на грешка на страницата ОС разпределя нова страница, копира оригиналната страница и актуализира съответното картографиране на страницата на процеса, причиняващ грешка, с писмено разрешение.
В този момент родителят и детето могат да имат различни данни на един и същ виртуален адрес. Този механизъм за копиране при запис се използва широко като основен ключов механизъм за реализиране на много функции на виртуалната памет. По-конкретно, четенията на неинициализирани heapregions обикновено се обработват със споделено картографиране към нулева страница, която е специална страница, съдържаща всички нули.
Сливането на една и съща страница на ядрото (KSM) е техниката за премахване на дублирането на едни и същи страници в системата. ОС сканира страниците в системата, за да идентифицира страници с идентични данни. Когато бъдат открити такива страници, ОС възстановява всички страници освен една и актуализира съответните таблици на страници, за да сподели останалата страница.
При обработката разрешението за запис отпада, така че последващият достъп за запис до страницата се идентифицира и копира. С високата ефективност на копиране при запис създаването на процес става ефективно и някои приложения с интензивно използване на данни използват това предимство, за да създадат копие на данни .
Redis, една от популярните услуги за съхраняване на ключ-стойност в паметта [4], е един такъв случай [19]. Redisis е проектиран основно да съхранява данните в паметта, за да осигури висока производителност и ниска латентност.
Въпреки това, някои приложения изискват устойчивостта на съхранените данни и допълват отново дизайна в паметта с разклонение. Redis прилага входящи заявки само към индекса в паметта и структурите от данни и периодично извиква системното извикване на fork. Това на практика създава дъщерен процес с дублирано съдържание на паметта на оригиналния Redisprocess и извикващият процес (т.е. оригиналният процес) продължава да обработва входящи заявки.
Детският процес отклонява своето изпълнение; използвайки текущото съдържание на паметта като моментна снимка, той сериализира структурите от данни в паметта във файлове, като по този начин гарантира устойчивостта на моментната снимка в паметта. След изчистване на моментната снимка дъщерният процес се прекратява.
Първоначалният процес може да направи друга моментна снимка по същия начин и при системен срив Redis може да бъде възстановен чрез прочитане на последната моментна снимка. Въпреки че разклонението е безценно системно извикване, неговите допълнителни разходи са критикувани.

Бауман и др. [20] анализира разклонението и установи, че разклонението причинява влошаване на производителността в съвременните приложения. Например, тъй като съвременните приложения стават по-сложни, операционната система трябва да вземе предвид приблизително 25 специални случая, за да започне обработката на системното извикване на fork, за да отговаря на спецификацията на POSIX. Те обобщиха проблемите на forksystem call и предложиха характеристиките, които fork system call трябва да има за съвременния компютър.
Те също така предоставят алтернативни начини за подмяна на вилицата. Джао и др. [19] посочи, че внедряването на fork в настоящите системи е неефективно, тъй като приложенията с голям отпечатък на паметта изискват много време, за да настроят таблицата на страниците. Като решение те обобщиха техниката копиране при запис, така че таблицата на страниците да се копира при писане, както и обикновените страници.
For more information:1950477648nn@gmail.com






