Кой протокол за кохерентност на кеша използват Intel и AMD?

За моята бакалавърска теза трябва да анализирам ефектите от False Sharing върху многоядрени системи. Търсейки различните типове протоколи за съгласуваност на кеша, срещнах в Уикипедия, че Intel е разработила протокола за съгласуваност на кеша MESIF, но няма информация, че Intel също използва това.

Гледайки ръководството Ръководство за разработчици на архитектури Intel® 64 и IA-32: том. 3A Не можах да намеря нищо за MESIF освен за MESI-протокола. Така че въпросът е дали Intel не използва свой собствен протокол за кохерентност на кеша. Или го търся в грешен документ.


person mbed_dev    schedule 07.08.2015    source източник
comment
Какъв е вашият въпрос? Къде са документите? Ако мета въпрос. Каква информация се опитвате да намерите? Това, което можете да намерите на MESIF с Google, вероятно е всичко, което е публично.   -  person Jeff Hammond    schedule 07.08.2015


Отговори (2)


Intel използва MESIF протокол (http://www.realworldtech.com/common-system-interface/5/, https://en.wikipedia.org/wiki/MESIF_protocol ) в QuickPath и AMD използва MOESI протокол (https://en.wikipedia.org/wiki/MOESI_protocol, http://www.m5sim.org/MOESI_hammer) със или без Probe Filter в HyperTransport. Но тези протоколи са за комуникация между чипове (булдозерният гнездо на AMD има 2 чипа в MCM). Доколкото знам, и в двата процесора вътрешночиповата кохерентност се прави в L3 кеш.

Инструмент, който можете да използвате, за да проверите за проблеми с производителността на NUMA, е numagrind: http://dx.doi.org/10.1109/IPDPS.2011.100

person Bruno Coutinho    schedule 16.09.2015
comment
Има ли някакви сравнителни показатели за MESIF срещу MOESI по отношение на латентност и честотна лента на приложения от реалния свят? - person Tamas Ionut; 25.03.2016
comment
Зависи какво наричате приложение от реалния свят. В тази дисертация авторът използва Splash 2, който е съставен предимно от hpc и програми за компютърна графика. - person Bruno Coutinho; 17.04.2016

Този отговор се отнася за процесорите на Intel, които имат включен L3 кеш и пръстеновидна шина в стил Sandy Bridge (т.е. не Nehalem/Westmere EX), което е всички сървърни процесори след Sandy Bridge до сървър Skylake.

Широко се говори, че Intel използва MESIF, но AFAICT, състоянието F не съществува в ядрото. Редовете на ядрото (*) ще бъдат в състояния на MESI, тъй като с включен L3 кеш, данните се четат директно от L3, ако присъстват в повече от 1 ядро. Не е необходимо специално F състояние. Той обаче съществува в ядрата на skylake сървър, който има невключващ L3.

Ядрата изпращат IDI пакети към L3 кеш среза Cbo (контролер), който обработва този обхват от адреси (той е подреден въз основа на хеш функция на горната част на битовете за избор на набор от кеша на адреса модулно броя на CBos). DRd пакет се изпраща от ядрото, когато поиска линия, която не е собственост на ядрото и го получава или в състояние S, ако присъства в други ядра, или E, ако не присъства в други ядра. Срезът на L3 кеша Cbo използва филтъра за наблюдение за линията, за да реши дали да го върне в състояние E (в никое друго ядро, освен в L3/не в L3), или S състояние (в L3 и присъства в друго ядро; изпратете понижаване към това ядро ​​E-›S). Поставянето на първата заявка на ред по подразбиране в състояние E, ако не е собственост на други ядра, а не в състояние S, е оптимизация, тъй като ядрото не трябва да изпълнява RFO, при лекия дефект на L3 кеша, който има за изпращане на по-ниски версии до ядра (което е просто допълнителен трафик във фонов режим в сравнение с действителното забавяне, което би причинило изпълнението на RFO).

RFO пакет се изпраща до LLC секция Cbo, когато линията изобщо не е притежавана, тъй като предстои да бъде извършено записване към нея от ядрото, в този случай CBO трябва да изпрати невалидни, ако е притежавана в повече от едно ядро ​​или snoop се анулира, ако се притежава само в едно ядро, защото CBO не знае дали това е модифицирано или не, както и snooping на домашния агент, който притежава адресния крос-сокет, и връща линията към ядро, както и надграждането му. Когато линията е притежавана в състояние S, тя изпраща невалиден запис WiL към L3 среза CBo, който след това ще направи невалидни други ядра и ще надстрои заявителя до състояние E. Това води до промяна на състояние S в E и обезсилване на други ядра. Вероятно има флаг, който да показва, че е в състояние S в пакета, за да се елиминира ненужното натоварване.

Състоянието F е само за L3 кеша (кеширащ агент) в контекста на проследяване на множество гнезда между други кеширащи агенти и домашния агент в началния възел, тъй като домашният агент HitME кеш не включва L3 на нито един сокет. В режим на наблюдение на източника без директория, само един кеширащ агент (колективен набор от CBos в NUMA възел) ще отговори на излъчване на наблюдение, ако има състояние F, вместо да води до множество отговори. В режим на домашно наблюдение с кеш на директория + директория, битовете на директорията кеш + директория означават, че където е възможно, така или иначе ще бъде изпратена само една заявка, но когато не е кеширана и е изпратено излъчване, състоянието F помага, тъй като там не са множество отговори. Тъй като кешът може едностранно да отхвърли (невалидира) ред в състояния S или F, е възможно нито един кеш да няма копие в състояние F, въпреки че съществуват копия в състояние S. В този случай заявка за реда е удовлетворена (по-малко ефективно, но все пак правилно) от основната памет (тъй като нито един кеширащ агент няма да отговори, когато е в състояние S).

„Домашният агент на домашния възел“ е домашният агент, към който се вплита SAD декодираният кохерентен DRAM адрес (т.е. домашният агент, който притежава този адрес).

IDI кодовете за операции (които се използват за core‹-›uncore комуникация) в ръководство за наблюдение на производителността от 2014 г. за Xeon E5 v2s не показват никакви F състояния (само QPI opcodes показват, които говорят за кеширащи агенти и домашни агенти и са за uncore‹ -›uncore комуникация), но ръководство за наблюдение на производителността от 2017 г. показва IDI кодове за операции, които се занимават и с F състояния, т.е. WbEFtoE и WbEFtoI ​​и говорят за „ядра“. Търсенето в документа за skylake показва резултат за skylake сървър, който съдържа невключващ L3, което казва всичко.

Тъй като L2 не е включен в последните настолни процесори на Intel, това може да означава, че L1i и L1d прилагат свои собствени F състояния, които могат да бъдат вътрешно използвани от L2 между 2-та кеша, които поддържа (L1i, L1d които се споделят от двете хипернишки в ядрото) за пропуски в кеша, въпреки че това не е необходимо, ако L1d и L1i кешовете могат да се запитват/невалидират взаимно вътрешно, което изглежда по-бързо от преминаването към L2 и след това L2 да трябва да запитва кеша заявката не произхожда от и има само един друг кеш за запитване, въпреки че всъщност не мисля, че L1i и L1d са кохерентни, с изключение на каквото и да съществува SMC изпълнение (самомодифициран код), за което не знам подробностите на. L2 кешът със сигурност обаче не се нуждае от F състояния.

person Lewis Kelsey    schedule 10.05.2020