Жазу буфері: Қабілеттілікті арттыру және кідірісті азайту жолдары
Write buffer
Жазу буфері – кэштен негізгі жадқа дерек жазуды жеделдетуге арналған, өнімділікті арттыратын және кешігуді азайтатын буфер. CPU архитектурасында қолданылады.
Ағылшыншамен салыстырыңыз: абзацты басыңыз — түпнұсқа терезеде ашылады. Абзац астындағы EN түймесі оны мәтін ішінде көрсетеді.
Кіріспе
Жазу буфері – кэштен негізгі жадқа немесе жад иерархиясындағы келесі кэшке деректерді жазу үшін қолданылатын дерек буферінің бір түрі. Ол өнімділікті арттыру және кідіріс уақытын азайтуға мүмкіндік береді. Intel x86 және AMD64 сияқты кейбір процессор кэш архитектураларында қолданылады. Көп ядролы жүйелерде жазу буферлері тізбекті сәйкестікті бұзады. C11 дерек жарысына қатысты қағидалар сияқты кейбір бағдарламалық тәсілдер жадтың тізбекті сәйкес келетін көрінісін қалпына келтіруге жеткілікті. Жазу арқылы кэштеудің бір түрі – буферленген жазу. Жазу буферін осылай пайдалану кэшке жазу кезінде оқу сұраныстарын өңдеуге мүмкіндік береді. Бұл әсіресе өте баяу негізгі жад үшін пайдалы, себебі келесі оқулар ұзақ негізгі жад кідірісін күтпей-ақ жалғаса алады. Жазу буфері толған кезде (яғни, барлық жазбалар орын алғанда), келесі жазбалар бос орын босағанша күтуі керек. Келесі оқулар жазу буферінен өңделуі мүмкін. Бұл тоқтауды одан әрі азайту үшін жазу буферін біріктіру деп аталатын оптимизация қолданылуы мүмкін. Жазу буферін біріктіру – бір-біріне тікелей жақын мекенжайларға жазылатын деректерді бір буферлік жазбаға біріктіреді. Әйтпесе, олар жеке жазбаларды алып, құбыр желісінің тоқтауына себеп болуы мүмкін. Жәбірленуші буфер – жазу кэшіндегі кір деректерді сақтайтын жазу буферінің бір түрі, осылайша олар негізгі жадқа жазылады. Құбыр желісінің тоқтауын азайтудан басқа, қарапайым жазу буфері сияқты кір деректерді жазуды күтпеу арқасында, жәбірленуші буфер кейінгі кэштік кірулерде локальділік көрсетілген кезде уақытша резервтік сақтау ретінде де қызмет ете алады, соңғы уақытта шығарылған деректерді сұрап, олар жәбірленуші буферде сақталады. Жазу буфері IBM компаниясы ACS жобасы аясында 1964-1968 жылдары ойлап табылған, бірақ ол алғаш рет 1990 жылдары коммерциялық өнімдерде қолданылған.
A write buffer is a type of data buffer that can be used to hold data being written from the cache to main memory or to the next cache in the memory hierarchy to improve performance and reduce latency. It is used in certain CPU cache architectures like Intel's x86 and AMD64. In multi core systems, write buffers destroy sequential consistency. Some software disciplines, like C11's data race freedom, are sufficient to regain a sequentially consistent view of memory. A variation of write through caching is called buffered write through. Use of a write buffer in this manner frees the cache to service read requests while the write is taking place. It is especially useful for very slow main memory in that subsequent reads are able to proceed without waiting for long main memory latency. When the write buffer is full (i. e. all buffer entries are occupied), subsequent writes still have to wait until slots are freed. Subsequent reads could be served from the write buffer. To further mitigate this stall, one optimization called write buffer merge may be implemented. Write buffer merge combines writes that have consecutive destination addresses into one buffer entry. Otherwise, they would occupy separate entries which increases the chance of pipeline stall. A victim buffer is a type of write buffer that stores dirty evicted lines in write back caches so that they get written back to main memory. Besides reducing pipeline stall by not waiting for dirty lines to write back as a simple write buffer does, a victim buffer may also serve as a temporary backup storage when subsequent cache accesses exhibit locality, requesting those recently evicted lines, which are still in the victim buffer. The store buffer was invented by IBM during Project ACS between 1964 and 1968, but it was first implemented in commercial products in the 1990s.