Кіріспе

Кэштік үйлесімділік протоколы, MSI протоколының кеңейтілуі ретінде Эксклюзивтік күйін қамтиды. MESI протоколы – деректерді жарамсыз етуге негізделген кэштік үйлесімділік протоколы және кері жазу кэштерін қолдайтын ең көп таралған протоколдардың бірі. Ол сондай-ақ Иллинойс протоколы деп аталады, себебі ол Иллинойс университетінің Урбана-Шампейн қаласындағы бөлімшесінде әзірленген. Кері жазу кэштері, тікелей жазу кэштерінде босқа кететін маңызды өткізу қабілетін үнемдеуге мүмкіндік береді. Кері жазу кэштерінде деректер негізгі жадтан өзгеше екенін көрсететін, әрқашан «ластанған» күйі болады. Иллинойс протоколы, егер блок басқа кэште болса, кэштен кэшке деректерді ауыстыруды талап етеді. Бұл протокол MSI протоколымен салыстырғанда негізгі жадқа жасалатын транзакциялар санын азайтады. Бұл өнімділіктің айтарлықтай жақсаруын көрсетеді.

Меншікті дайын

Меншікті оқу (RFO) – кэш сәйкестігі протоколдарындағы оқу және жарамсыз ету хабарламасын біріктіретін операция. Бұл операцияны MESI протоколының ортақ (S) немесе жарамсыз (I) күйіндегі кэш жолына жазуға тырысатын процессор іске қосады. Операция қалған барлық кэштерді осы жолдың күйін I күйіне өзгертуге мәжбүр етеді. Меншікке оқу транзакциясы – бұл жад адресіне жазу мақсатымен жасалатын оқу операциясы. Сондықтан бұл операция эксклюзивті болып табылады. Ол деректерді кэшке әкеледі және осы жад жолын сақтайтын басқа процессорлардың кэштерін жарамсыз етеді. Жоғарыдағы кестелерде бұл "BusRdX" деп белгіленген.

Есте сақтау кедергілері

MESI протоколының қарапайым, тікелей іске асырылуы екі ерекше өнімділік мәселесін көрсетеді. Біріншіден, жарамсыз кэш жолына жазу кезінде, осы жол басқа процессорлардан алынып келгенше ұзақ кешігу пайда болады. Екіншіден, кэш жолдарын жарамсыз күйге көшіру көп уақытты қажет етеді. Бұл кешігулерді азайту үшін процессорлар сақтау буферлерін және жарамсыздық кезектерін қолданады.

Сақтау буфері

Жарамсыз кэш жолына жазу кезінде сақтау буфері пайдаланылады. Жазу әдетте осылай орындалатындықтан, процессор оқуға қатысты жарамсыздық туралы хабарлама жібереді (сол кезде аталған кэш жолы және сол жад адресін сақтайтын басқа процессорлардың барлық кэш жолдары жарамсыз деп белгіленеді), содан кейін жазу сақтау буферіне жіберіледі, ол кэш жолы кэшке келгенде орындалады. Сақтау буферінің тікелей салдары – процессор жазуды қабылдағанда, ол дереу кэшке жазылмайды. Сондықтан, процессорға кэш жолын оқу қажет болғанда, ол алдымен өз сақтау буферін сол жолдың бар-жоғын тексеру үшін қарастырады, себебі бұл жол сол процессормен бұрын жазылған, бірақ әлі кэшке жазылмаған болуы мүмкін (алдыңғы жазу әлі де сақтау буферінде күтіп тұр). Процессор өзінің бұрынғы жазуларын өз буферінен оқи алады, бірақ басқа процессорлар осы жазуларды кэшке жіберілгенге дейін көре алмайды. Процессор басқа процессорлардың сақтау буферін қарастыра алмайды.

Кезекті жарамсыз ету

Асылу хабарламаларына қатысты, процессорлар жарамсыздық кезегін қолданады, осы арқылы келіп түсетін жарамсыздық сұраныстары дереу расталады, бірақ бірден орындалмайды. Оның орнына, жарамсыздық хабарламалары жай ғана жарамсыздық кезегіне енгізіледі және олардың өңделуі мүмкіндігінше жылдам (бірақ міндетті түрде бірден емес) жүзеге асырылады. Соның салдарынан, процессор өзінің кэшіндегі кэш жолының жарамсыз екендігін білмей қалуы мүмкін, себебі жарамсыздық кезегінде қабылданған, бірақ әлі қолданылмаған жарамсыздықтар болады. Естеріңізге сала кетейік, сақтау буферінен өзгеше, процессор жарамсыздық кезегін қарап шыға алмайды, өйткені процессор мен жарамсыздық кезегі физикалық тұрғыдан кэштің қарама-қарсы жақтарында орналасқан. Осының нәтижесінде, жад кедергілері қажет болады. Сақтау кедергісі сақтау буферін тазартады, барлық жазбалар осы процессордың кэшіне қолданылғанын қамтамасыз етеді. Оқу кедергісі жарамсыздық кезегін тазартады, осылайша басқа процессорлардың барлық жазбалары кедергі жасап отырған процессорға көрінеді. Бұдан бөлек, жад басқару бірліктері сақтау буферін қарап шығармайды, бұл осыған ұқсас мәселелерге әкеп соғады. Бұл эффект тіпті бір ядролы процессорларда да байқалады.

МЭСИ-нің МСИ-ге қарағанда артықшылықтары

MESI мен MSI арасындағы ең басты айырмашылық – MESI протоколындағы қосымша "ексклюзивті" күй. Бұл қосымша күй көптеген артықшылықтары болғандықтан енгізілді. Процессор басқа процессорларда жоқ блокты оқып, содан кейін оған жазу қажет болғанда, MSI протоколында екі шина транзакциясы орындалады. Біріншіден, блокты оқу үшін BusRdX сұранысы жіберіледі, содан кейін блокқа жазу алдында BusUpgr сұранысы жіберіледі. Бұл жағдайда BusRdX сұранысы тиімсіз, себебі басқа кэштерде осы блок жоқ, бірақ бір кэштің мұны білуге мүмкіндігі жоқ. Сондықтан MESI протоколы осы шектеуді "Эксклюзивті" күйін қосу арқылы жояды, бұл шина сұранысын үнемдеуге мүмкіндік береді. Бұл тізбектей жұмыс істейтін бағдарламаларда үлкен маңызға ие. Тек бір процессор деректермен жұмыс істейтін болғандықтан, барлық сұраныстар эксклюзивті болады. MSI бұл жағдайда қосымша шина хабарламаларының салдарынан нашар жұмыс істейді. Тіпті деректерді аздап бөлісетін, жоғары параллельді бағдарламаларда да MESI протоколы әлдеқайда жылдам. "Эксклюзивті" күйін қосу да қосымша шығыс тудырмайды, өйткені 3 және 4 күйлерді де 2 битпен көрсетуге болады.

MESI-дің кемшілігі

Егер белгілі бір блокқа әртүрлі кэштер үздіксіз оқу және жазу операцияларын жүргізсе, деректер әрқашан шинаға жіберуі керек. Осылайша, негізгі жад әрбір жіберуде оны тазалап, таза күйде қалады. Бірақ бұл міндетті талап емес, тек MESI протоколын пайдаланудан туындайтын қосымша жүктеме. Бұл мәселені MOESI протоколы шешіп берді. S (Ортақ күй) жағдайында бірнеше бақылаушылар бірдей деректермен FlushOpt жауабын қайтара алады (жоғарыдағы мысалға қараңыз). MESIF протоколындағы F күйі осы қайталануды жояды.