Как стать автором
Обновить

Комментарии 40

люблю такие статьи ) вроде бы и так все это знал, но картинки красивые )
Главное думать ненужно все и знакомое, мозг не напрягается.
Если бы рассказывалось что то новое пришлось бы активно работать,
тратить ресурсы организма.
Поэтому все новое (значит незнакомое) отмечаем знаком «минус» и продолжаем смотреть
«научно технические комиксы».
Зачем создавать новые «нейронные сети в мозгу», а тут все понятно, можно считать себя умным и «глюкоза» не тратится — сплошной профит.
Думаю хабр умер — посмотрите 95% статей это блоги компаний (реклама) и редкие переводы.
Если появляются авторские статьи, никто не утруждается попытками понимания, просто ставят минус (вопросов по существу статьи меньше чем самих статей) (((
Одни эмоции, а значит попадание в цель.
Думаю, ненужно сильно «страдать», ну устроен так человеческий мозг.
Не любит он работать и постоянно старается подменить реальное познание на имитацию.
Главное обеспечить комфортное состояние личности с минимальными затратами, а вот «топить» людей которые пытаются думать искать новые идеи это «стремно».
Думаю когда первый предок человека спустился с дерева, оставшиеся «предки» еще долго «какашками » вслед кидались.
Поэтому руки мойте чаще — «предки» )))
Как мне кажется жесткий диск в этой цепочке совершенно лишний, так как то что с него кэшируется в ОЗУ это программный кэш, но само ОЗУ не является кэшем (хотя часть его и можно так использовать) и большинство информации из ОЗУ не имеет отражения на накопителе
В механизме виртуальной памяти ОЗУ таки можно рассматривать как кеш диска. Правда тут уже CPU не обойтись без помощи ОС.
Это слишком уж притянуто за уши. Изначально в компьютере диск вообще являлся опциональным элементом, и всё взаимодействие выполнялось лишь в рамках связки «процессор и локальная память (RAM+ROM)». И даже в механизме виртуальной памяти внешнее хранилище — всего лишь опциональный элемент, в зависимости от реализации.
И к слову, сам механизм кеширования, которому посвящена статья, тоже базируется на механизме виртуальной памяти, наверное, об этом тоже стоило бы написать.
Это зависит от реализации:
— (L1 хранит вирт.адрес + тэг(и) не устарела ли адресация
— L2 хранит физ-адрес (а значит нужна поддержка разадресации, вложенных каталогов адресов, TLB — вот это всё).

Т.е. это моменты хоть и очень важные — но технические.
И можно сказать, что более детальные, по сравнению с общей направленностью статьи.

Зависит от степени прозрачности кэширования для остальных частей информационной системы. Если программа умеет читать свои файлы и работать в памяти с объектами из них, то это ещё не кэш. А вот если программа при запросе файла с диска получит от операционки данные из памяти, сама того не зная, тогда это уже можно называть кэшем.
НЛО прилетело и опубликовало эту надпись здесь
Я понял что Вы имеете в виду, но Вы крайне некорректно это изложили.
Скорость распространения сигнала практически не зависит от частоты и составляет c/sqrt(Dk).
«Практически», потому что Dk зависит от частоты.
В целом грубое приближение — это 15см за 1нс (если взять Dk=4, то это (3*10ˆ8)/2 м/c).
Видимо Вы имели в виду что электрическая длина DQ может превышать полупериод DQS, что с уменьшением периода DQS уменьшает допустимое расстояние до слота.
На самом деле это просто вопрос с какой Latency контроллер может работать на захват данных. Если Вы, например имеете дело с FPGA — то с любой. Ничего не жмет захватывать данные на 1-2-3-*** клоков позже чем CL чипа памяти. А количество необходимых тактов высчитывается при тренинге.
А Latency в свою очередь дает Вам просадку производительности при работе с памятью малыми пакетами.
Кэш Вам в этом разрезе ну никак не помощник — ведь данные в него должны как-то попасть. Если Вы не можете захватить данные с определенной задержкой — то и в кэш они не попадут тоже.
И конвейер (начать вьіполнять следующую команду до того как закончилась предьідущая) здесь, увьі, не помощник.

Кстати, GPU архитектуры типа CUDA обходят латентность памяти тем, что во время выполнения запроса к памяти мультипроцессор переключается на другую группу потоков, данные для которой уже пришли.

Нет, динамическая память в принципе не может быть так же быстра, как статическая.
В ячейке SRAM (триггере) два устойчивых состояния (условно называемые 0 и 1): ток всегда течёт или через транзисторы 1 и 3 ИЛИ через транзисторы 2 и 4. Но он всегда течёт, даже если им никто не пользуется — это раз, а время записи равно времени переключения одного транзистора — это два. Всего в схеме триггера обычно 6 транзисторов (пятый и шестой работают для подключения-отключения к шине данных).
В динамической памяти данные хранятся в виде заряда конденсатора, а транзистор в ячейке всего 1 — для подключения/отключения к шине. А при покупке чипов мы грубо говоря платим за количество транзисторов.
А дальше «рыночек порешал», что в 6 (реально в 8) раз больше памяти за те же деньги намного предпочтительнее.
Дальше — хуже. Время заряда (записи) и разряда (чтения) конденсатора пропорционально U*R*С, где C — ёмкость конденсатора, R — сопротивление, U — рабочее напряжение. Проблема в том, что R*C линейно пропорционально зависит от нормы техпроцесса. Т.е. перешли от 100 нм к 10 нм — значит в таких же размеров чипе впихнули в 100 (=10²) раз больше ячеек. Но время их работы осталось тем же! Можно понизить напряжение. Во времена Спектрума было ТТЛ ~4.5 Вольта, к DDR3 плавно упали до ~1.5, в DDR4 ужались до ~1.1 (но это слишком мало для шины на материнской плате, из-за чего пришлось ставить повышающие усилители в процессор и память). Ну вот и всё ускорение. Если 80286 в 1985 работали с памятью на ~100 нс, то сейчас между 20 и 30 нс.

"ток всегда течёт или через транзисторы 1 и 3 ИЛИ через транзисторы 2 и 4. Но он всегда течёт, даже если им никто не пользуется"


В кмоп логике один из транзисторов всегда закрыт, ток не течет, только в момент переключения есть всплеск тока, поэтому и растет потребление с ростом частоты тактирования. В есл или смл логике да, ток течет всегда, но она сейчас если и есть, встречается только на внешних линиях.

Да при чем туи есл, погуглите про 6Т триггеры в современных чипах. С уменьшением техпроцесса также уменьшается сопротивление закрытого транзистора. Поэтому паразитный ток в покое увеличивается. Настолько, что потребление в покое уже составляет 40-50% от потребления при переключении. И это проблема для всяких гаджетов.
То есть ток утечки половина от тока при переключении? А ссылку можете скинуть? Не нашел с ходу…
Ну как же не нашли, тыц
Спасибки! Почитаю.
Вы еще не упомянули про то, что заряд в конденсаторе, в отличие от кмоп-ячейки в статической памяти, очень быстро теряется и память приходится подвергать циклам регенерации, на что конечно же тоже требуется время.
Как насчёт слотовых Pentium II и Celeron (например, 300a)
У второго кэш работал на полной частоте, в отличие от первого. Размер кэша был в два раза меньше, но при разгоне Celeron был значительно быстрее Pentium'а.
Первые целероны были вообще без кеша, из за чего были гораздо медленнее пентиумов.
А кеш изначально был заветным и желанным набором микросхем, который стоил как мать.
Эх было время)
Celeron 300a как раз содержал быстый кэш.
В 4 раза меньше — 128 кб против 512.
И да, самые первые целероны были без кэша L2, но этот этап мы быстро проскочили.
этот этап мы быстро проскочили

Кто как… Celeron 266 (который без L2 кэша) приобретался как затычка для материнки. Типа подкопим денег и потом как ух!
Потом был август-98, когда доллар стал 24 вместо 6. А потом интел перестал выпускать слотовые процессоры.
А потом появился интернет, и оказалось, что именно эти селероны без кэша неплохо гонятся. У меня заработал на 433 МГц и в принципе заводился на 533.
В итоге этот комп (с добавочной памятью и дисками) доработал чуть ли не до 2010 года в качестве пишущей машинки.
А потом интел перестал выпускать слотовые процессоры.

А могли бы купить переходник Socket 370-Slot 1, поставить на него третий пень с ядром Tualatin, и печатали бы и сейчас ;)
Справедливости ради, те селероны, что с кэшем, тоже гнались хорошо в массе своей. Мой 300A спокойно работал на 112 шине. (504 МГц)
ALU и регистровые файлы расположены слева и обведены зелёной рамкой.
Это SIMD ALU/RF. Целочисленные правее и не обведены.
twitter.com/trav_downs/status/1257035169019637760
(картинка отражена зеркально)

Вы можете задаться вопросом: почему эти блоки SRAM настолько малы? Почему они не имеют размер в мегабайт?

The PA-8500 has a 512 KB instruction cache and a 1 MB data cache.
(единственный уровень кэша)

Но основная причина их размера в несколько килобайт заключается в том, что при увеличении ёмкости памяти повышается время, необходимое для поиска и получения данных.

И да и нет. Зависит от многих факторов, например от размера страницы.
Оптимальный размер L1D (VIPT) — размер страницы * ассоциативность.
Skylake: 4096 * ассоциативность 8 = 32К, 4-5 тактов.
Tiger Lake: 4096 * ассоциативность 12 = 48К, 5 тактов.
Apple A12: 16384 * ассоциативность 8 = 128K, 4 такта.
PA-RISC архитектура фирмы HP, хотя уже давно мертва, но представляет некоторый интерес для любителей сравнивать архитектуры процессоров. Действительно, PA-RISCи имели до самых последних моделей (PA-8800 и PA-8900) только L1 уровень кэша. В поздних вариантах модели PA-8700 L1 инструкций был 3/4 мегабайта, а L1 данных аж 3/2 мегабайта. И всё на одном кристалле, который визуально на 80% состоял из кэша. Это к тому что L1 кэш не обязан быть маленьким. Но это достигается ценой виртуально адресуемого кэша, а такой кэш требует поддержки операционной системы. Для HP это не было большой проблемой, так как официально на этих машинах работал только HP-UX вариант UNIX, и полуофициально Linux. Насколько я знаю, Linux на этой архитектуре до сих пор страдает нестабильностью из-за виртуально адресуемого кэша — HP уже более 10 лет как не производит системы на PA-RISCах, но техническую документацию открывать отказывается.
Еще бывает L4-кэш.
Некоторые толстые процессоры (например POWER8, Xeon-E7) не имеют Direct Attach интерфейса к памяти. Вместо этого используется набор SerDes, которые подключаются к специализированной микросхеме, разворачивающей их в DDR на своей стороне. Как правило у нее внутри тоже есть кэш.
Ещё eDRAM. У Intel и L4, и видеопамять.
Вместо этого используется набор SerDes, которые подключаются к специализированной микросхеме, разворачивающей их в DDR на своей стороне.

т.е. это что-то типа северного моста чипсета материнки с урезанным функционалом?
Нет.
Северный мост — это северный мост. Задача его сопрягать системную шину процессора с памятью. Он где был внутри процессора — там и остался.
А задача буфера памяти — это сереализация-десериализация. То есть конверсия одного интерфейса в другой.
>>«8-way» означает, что один блок может быть связан с 8 строками кэша в сете. Чем выше уровень ассоциативности (т.е. чем больше «way»), тем больше шансов на кэш-попадание во время поиска процессором данных

Хм. Всю жизнь думал, что «8-way» означает возможность одновременно читать из одного блока памяти на 8 разных шин и по 8 разным адресам…
В то же время, вращающемуся жёсткому диску требуются тысячи наносекунд только для нахождения данных на дисках, не говоря уже об их передаче, а твердотельным накопителям — десятки или сотни наносекунд.

Продайте мне партию таких носителей. Тысяча наносекунд — одна микросекунда, миллион наносекунд — одна миллисекунда. Для тех накопителей, которые есть на рынке показатели сильно отличаются от процитированного.
Типичное время поиска 15krpm диска 4 мс, 7200rpm — 7-9 мс. Последовательная запись быстрее 1мс на диск тоже на грани достижимости. Передача данных, кстати, на этом фоне просто мгновенная. Это про "нормальные" диски, без всякого черепичного безумия.
Типичное время доступа (на чтение) у SSD — порядка 100 мкс. На запись — "всё сложно", может быть и 50 мкс (редко) и 2 мс (высокая внутренняя фрагментация, работа на пределе производительности). У Optane более стабильные и шустрые показатели, но ни одного обзора, где бы показали выше 20 мкс не видел, пусть будет 20-50 мкс.
Это всё про блоки 4-64 кб.


Т.е. не "тысячи наносекунд только для нахождения данных на дисках", а "от 5 до 10 миллионов наносекунд". Для SSD не "десятки и сотни наносекунд", а "десятки и сотни тысяч наносекунд"

Хорошая статья.

Но есть ряд вопросов:

1. У вас на картинке есть L0_instruction_cache. Это что?

2. ЕМНИП в статье What any programmer should know about memory было утверждение, что время поиска данных в кэше пропорционально размеру кэша (в кэш-лайнах или в бакэтах, не помню).

Как современные L1 кэши делают поиск быстрее?
Может кто знает.
Кеш — это SRAM память, как и флешки, SSD.
Только почему по соотношению объем (ГБ) / размер (см2) кеш уступает на порядки?

Флешки и SSD — это flash память, не SRAM. Кратко — flash сравнительно медленная, энергонезависимая, более простая по устройству, чем статическая память. Подробнее — на википедии.

ru.wikipedia.org/wiki/SRAM_(память)
И память кешей и flash — это SRAM, то есть энергонезависимая.
И память кешей и flash — это SRAM, то есть энергонезависимая.

flash — это SRAM
SRAM, то есть энергонезависимая.

С чего вы это взяли?? Эти 2 утверждения ложны.


Сравните:
SRAM
flash

И память кешей и flash — это SRAM, то есть энергонезависимая.

SRAM — это статическая память, а не энергонезависимая. Это ОЗУ, которое не нуждается в регенерации, и ячейки которого построены на триггерах. Flash-память — это энергонезависимое ПЗУ, ячейки которого построены на транзисторах с плавающим затвором, и архитектурно она куда ближе к динамическому ОЗУ, чем к SRAM.
Да, вы правы.
Меня сбило утверждение:
позволяющей поддерживать состояние без регенерации, необходимой в динамической памяти (DRAM)

А дальше я уже не читал:
Тем не менее сохранять данные без перезаписи SRAM может, только пока есть питание, то есть SRAM остается энергозависимым типом памяти.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий