Кохерентност на кеша: определение, проблеми и решения при многопроцесори

Научете кохерентността на кеша: дефиниция, чести проблеми в многопроцесорни системи и практични решения за синхронизация, целост и производителност на паметта.

Автор: Leandro Alegsa

Кешът ускорява достъпа до данни, като съхранява копия на чести използвани блокове памет близо до процесора. Когато има няколко кеша, които съхраняват копия на един и същи ресурс (например кешовете на няколко ядра в процесор), това може да доведе до несъответствия между копията. Кохерентност на кеша се отнася до механизми и правила, които гарантират, че всички кешове за един и същ ресурс съдържат съгласуващи се данни (наричана още целостност на данните). Кохерентността на кеша е частен случай на по-широкото понятие кохерентност на паметта.

Проблемите с кохерентността възникват, когато един кеш е актуализиран, но друг(и) все още имат остарели копия. Често срещан пример е кешът на процесорите в многопроцесорна система: ако едно ядро прочете блок памет и го съхрани в своя кеш, а друго ядро след това промени същия блок в паметта, първото ядро може да остане с невалидно (остаряло) копие, без да е уведомено. Целта на кохерентността е да управлява такива конфликти и да поддържа съгласуваност между кешовете и главната памет.

Основни причини и симптоми

  • Независими кешове в множество ядра или процесори, които държат копия на едни и същи блокове.
  • Промени в данните от едно място, които не са известни на другите кешове (стари данни или несъвпадение).
  • Външни устройства (DMA), които променят паметта без участие на кешовете.
  • Логически проблеми като false sharing — когато различни процеси четат/пишат различни променливи, но те попадат в една и съща кеш линия.

Типични подходи за поддържане на кохерентност

Има два основни вида политики за разпространение на промени при писане:

  • Write-invalidate — при запис всеки друг кеш с копие на блока получава инвалидация (маркира се като невалиден). Следващото четене от другите процесори кара зареждане от паметта или от кеша на процесора, който направи промяната.
  • Write-update (write-broadcast) — при запис новата стойност се разпраща към всички кешове, за да актуализира техните копия. Подходящ за случаи с чести последователни четения от много участници, но струва повече трафик.

За реализиране на тези политики се използват два основни архитектурни подхода:

  • Snooping (шпиониране по шината) — всички кеш контролери наблюдават шина/интерконект за транзакции и реагират на инвалидации/актуализации. Подходящ при относително малък брой процесорни ядра и централизирана шина.
  • Directory-based — централен или разпределен указател (директория) поддържа информация кои кешове имат копие на даден блок и управлява инвалидации/пристъпи. По-скалируем при голям брой ядра и при разпределени системи.

Чести протоколи и състояния

Едни от най-разпространените протоколи за управление на състоянието на кеш линиите са MESI, MOESI, MSI и техни варианти. Например MESI има четири състояния:

  • Modified (M) — блокът е променен и е само в този кеш; главната памет не е актуална.
  • Exclusive (E) — блокът е само в този кеш и съвпада с паметта (не е променян).
  • Shared (S) — блокът може да бъде копиран в няколко кеша и съвпада с паметта.
  • Invalid (I) — блокът е невалиден (требва да се презареди при достъп).

Специфични проблеми и примери

  • False sharing — две нишки пишат различни променливи, но те споделят една кеш линия; това води до чести инвалидации и сериозно влошаване на производителността. Решения: padding, преразпределяне на обекти в паметта, използване на по-груби синхронизации.
  • Non-coherent DMA — периферни устройства пишат памет без информиране на кеш контролерите; изисква явни кеш операции (flush/invalidate) или използване на coherent DMA механизми.
  • Скалируемост — snooping методите са ефективни при малък брой ядра, но при стотици/хиляди ядра directory-базирани решения и по-сложни интерконекти са по-подходящи.

Кохерентност vs. консистентност на паметта

Важно е да се различава кохерентността на кеша (локалната съгласуваност на блоковете) от моделите на консистентност на паметта, които дефинират видимия за програмите ред на операциите за четене и писане. Кохерентният кеш гарантира, че за един адрес системата е съгласувана, но моделът на паметта (например sequential consistency, weak ordering) определя гаранциите за множество адреси и реда на операции.

Практически решения и добри практики

  • Използвайте подходяща кохерентна архитектура (snooping за малки системи, directory за големи).
  • Дизайн на софтуера: минимизирайте споделянето на често променяни данни между нишки; избягвайте false sharing чрез подравняване и padding.
  • Използвайте атомарни операции и бариери/синхронизации, когато е необходимо да се гарантира ред на достъпите.
  • При DMA и периферия — използвайте ioctl/инструкции за изчистване/инвалидация на кеша или coherent DMA механизми, за да избегнете несъответствия.
  • Мониторинг и профилиране: открийте „горещите“ линии и честите инвалидации и оптимизирайте критичните участъци.

Кохерентността на кеша е критична за правилната работа и производителността на многопроцесорните системи. Правилният избор на протокол, хардуерна поддръжка и съобразен софтуерен дизайн намалява конфликтите и осигурява ефективна и коректна работа на паралелните приложения.

Множество кешове на споделен ресурсZoom
Множество кешове на споделен ресурс

Определение

Кохерентността определя поведението на четенето и записването на едно и също място в паметта. Кешовете са кохерентни, ако са изпълнени всички изброени по-долу условия:

  1. Когато процесор P чете местоположение X, след като е записал в това местоположение, P трябва да получи стойността, която е записал, ако никой друг процесор не е записал друга стойност в това местоположение. Това е вярно и за монопроцесорните системи, то означава, че паметта е в състояние да запази записаната стойност.
  2. Да предположим, че има два процесора, P1 и P2, и P1 е записал стойност X1, а след това P е 2записал стойност X2, ако P 1прочете стойността, той трябва да получи стойността, записана от P2, X2, а не стойността, която той е записал, X1, ако няма други записи между двамата. Това означава, че изгледът на паметта е кохерентен. Ако процесорите могат да прочетат същата стара стойност след записа, извършен от P2, паметта няма да е кохерентна.
  3. В даден момент може да има само един запис на определено място в паметта. Ако има няколко записа, те трябва да се извършват един след друг. С други думи, ако местоположението X получи две различни стойности A и B в този ред, от които и да е два процесора, процесорите никога не могат да прочетат местоположението X като B и след това да го прочетат като A. Местоположението X трябва да бъде видяно със стойности A и B в този ред.

Тези условия са дефинирани, като се предполага, че операциите за четене и запис се извършват незабавно. Това обаче не се случва в компютърния хардуер поради закъснението на паметта и други аспекти на архитектурата. Запис от процесор X може да не бъде видян от четене от процесор Y, ако четенето се извършва в рамките на много малко време след извършването на записа. Моделът за съгласуваност на паметта определя кога записаната стойност трябва да бъде видяна от следващата инструкция за четене, направена от други процесори.

Механизми за кохерентност на кеша

  • Базираните на директория механизми за съгласуваност поддържат централна директория на кешираните блокове.
  • Проследяването е процес, при който всеки кеш следи адресните линии за достъп до места в паметта, които са в неговия кеш. Когато се наблюдава операция за запис към място, на което кешът има копие, контролерът на кеша обезсилва собственото си копие на следеното място в паметта.
  • При Snarfing контролерът на кеш паметта наблюдава както адреса, така и данните, като се опитва да актуализира собственото си копие на местоположението в паметта, когато втори главен контролер модифицира местоположението в основната памет.

Разпределените системи със споделена памет имитират тези механизми, за да могат да поддържат съгласуваност между блоковете памет в слабо свързани системи.

Двата най-разпространени типа съгласуваност, които обикновено се изучават, са Snooping и Directory-based. Всеки от тях има своите предимства и недостатъци. Протоколите Snooping обикновено са по-бързи, ако има достатъчно широка честотна лента, тъй като всички транзакции са заявка/отговор, които се виждат от всички процесори. Недостатъкът е, че не може да се мащабира. Всяка заявка трябва да бъде излъчена до всички възли в системата. С увеличаването на системата размерът на (логическата или физическата) шина и предоставяната от нея широчина на честотната лента трябва да нарастват. От друга страна, директориите обикновено имат по-дълги закъснения (при заявка/предаване/отговор с 3 скока), но използват много по-малко честотна лента, тъй като съобщенията са от точка до точка, а не се излъчват. Поради тази причина много от по-големите системи (>64 процесора) използват този тип кохерентност на кеша.

Въпроси и отговори

Въпрос: Какво представлява кохерентността на кеша?


О: Кохерентността на кеша се отнася до гарантирането, че всички кешове на даден ресурс имат едни и същи данни и че данните в кешовете са последователни (цялостност на данните).

В: Каква е целта на кохерентността на кеша?


О: Целта на кохерентността на кеша е да управлява конфликтите между няколко кеша на общ ресурс на паметта и да поддържа съгласуваност между кеша и паметта.

В: Какви могат да бъдат последствията от липсата на кохерентност на кеша?


О: Без кохерентност на кеша данните в кеша може да загубят смисъл или един кеш може да не разполага със същите данни като останалите, което може да доведе до непоследователност и грешки.

В: Кой е често срещаният случай, при който възникват проблеми с кохерентността на кеша?


О: Често срещан случай, при който възникват проблеми с кохерентността на кеша, е кешът на процесорите в многопроцесорна система.

В: Как работи кохерентността на кеша?


О: Кохерентността на кеша работи, като гарантира, че всички кешове на даден ресурс имат едни и същи данни и че данните в кешовете са последователни чрез различни методи.

В: Какво означава съгласуваност на паметта?


О: Кохерентността на паметта се отнася до последователността на данните в споделения ресурс на паметта.

Въпрос: Как кохерентността на кеша може да подобри производителността?


О: Кохерентността на кеша може да подобри производителността, като позволи по-бърз и по-ефективен достъп до даден ресурс.


обискирам
AlegsaOnline.com - 2020 / 2025 - License CC3