Накопители — завершение. Longread об актуальных аспектах кэширования в дисковой подсистеме

Disclaimer — в материале некоторые описания процессов и их логики приведены в адаптированном виде, тогда как в жизни все несколько сложнее, но в общем примерно так, как описано.

Часть1
Часть2

В прошлых материалах мы установили, что благодаря научно-техническому прогрессу сегодня в массовом сегменте SOHO хранения данных доступны, в основном, две технологии: электромеханические или традиционные накопители на жестких магнитных дисках (они же НЖМД, HDD, винчестеры, винты и прочие вариации с производными), а также инновационные безмеханические твердотельные накопители (они же SSD, твердотельники и т.п.).

I want to believe

Заметим, что накопители в текущем их понимании (как и вся современная компьютерная индустрия), а твердотельные накопители — так тем более, своим появлением и эволюцией обязаны развитию полупроводниковых технологий как таковых. Последние показали значительный прогресс, внезапно, в 1947 году. Аккурат после события, вошедшего в популярную культуру под названием Розуэльского инцидента. По мнению конспирологов тогда, 8 июля, недалеко от одноименного населенного пункта в небе заглох и натурально упал на Землю НЛО, который был отбуксирован эвакуатором в Зону 51, где крайне засекреченные ботаны, а в последствии и полумифический Боб Лазар в их числе, под подпиской о неразглашении путем восстановительной инженерии майнили внеземные технологии под прикрытием доблестной армии США. Якобы строго после этого вся полупроводниковая промышленность и пошла на взлет.

Longread об актуальных аспектах кэширования

Сюжет портят два нюанса: около 1920-х годов в последующем советский физик Олег Лосев уже закладывал первые дециметры бетона в фундамент этой темы, а на рубеже 1947–48 годов американские и немецкие физики во Франции независимо друг от друга «запилили» опытные образцы того, что потом станет транзисторами. Так что дело шло своим чередом и в меру воздействия внешних факторов, среди которых инопланетян к тому моменту не числилось.

Когда ботаны маршируют

В общем, развитие машинной обработки информации выдвигало серьёзные требования к вопросам упорядочивания этого процесса. Ручной ввод данных и фиксация результатов становился все более архаичным и реально тормозил процессы, которые вычислительная техника должна была ускорять. Известна история, что в ходе разработок первых экземпляров советского ядерного оружия, конкурирующие научные группы могли отказаться от машинного времени на тогдашних «компьютерах» в пользу включения в команду виртуозных математиков — с ними процесс сложных расчетов мог идти на практике быстрее, чем с использованием ЭВМ. Конечно, в точности расчетов и стабильности скорости их выполнения человек тягаться с машиной не мог уже тогда, но инфраструктура доступа к вычислительным мощностям была почти что в зародыше и поэтому живой математик в команде в отдельных случаях ценился выше.

Человеко-компьютерное взаимодействие

Поэтому вопросы ввода-вывода нужно было как-то не только автоматизировать, но и делать это интенсивным научным способом — ведь результат машинной обработки в одном процессе мог одновременно становиться исходными данными для следующего или быть запрошенным произвольно во времени в будущем. Уже здесь мы понимаем, что существуют некие данные, которые используются машиной чаще других, а иногда и вообще могут быть востребованным постоянно. Вводить же каждый раз одни и те же исходные данные руками с позиций дня сегодняшнего выглядит несколько диковато, но тогда иного пути не было. За словом «оператор» тогда стояла очень трудоемкая и кропотливая работа. Поэтому идея хранить наиболее популярную информацию, команды и т.п. на наиболее быстрых участках носителей была очевидной. Реализация этой идеи в будущем получит общеупотребительное название — кэширование, а сами области хранения с высокими скоростями обмена и малым временем доступа будут известны в широком смысле как кэш. Запомним — нам это знание сегодня понадобится.

Музеефикация

В таких условиях традиционные для начала компьютерной эры технологии становились уже очень не очень. Электростатические запоминающие трубки на 0,5 килобайта, перфолента, магнитные барабаны на целых 10 килобайт — все это когда-то решало поставленные задачи, но устаревало как морально, так и физически на фоне того, что все актуальней становилась задача не только надежного хранения предыдущих расчетов и прочих данных, но и удобного оперативного доступа к ним.

С магнетизмом на то время все было несколько более понятно, нежели с неведомыми еще транзисторами, и в 50-е появились прообразы жестких дисков, концептуально родственные современным. Совсем, правда, не похожие внешне на то, о чем вы читали в предыдущих обзорах, но тем не менее. Приведем пару классических картинок от JEDEC для ориентации в пространстве и времени. Слева накопитель IBM на 5 мегабайт, а справа — уже на целых 250 мегабайт. Прогресс за 20 лет в 50 раз. Правда, тележка все еще нужна.

Longread об актуальных аспектах кэширования

Идея оказалась жизнеспособной, как мы можем констатировать с высоты 2019-то года, и в прямом смысле завертелось… Естественно, что такая радость на начальных этапах никак не могла стоить дешево и быть доступной даже каждому второму НИИ, не было единых подходов к использованию вне рамок конкретных вычислительных машин и т.п., но главное — концепция в материале стартовала и желающие уже могли сами определить насколько финансово и управленчески будет востребован их продукт, чтобы позволить себе такие технологии, ну или просить под них бюджетные средства. Правда, был еще имидж, когда сам факт обладания новейшими технологиями делал из держащего в руках, например, дорогущий фотоаппарат — фотографа в глазах окружающих.

Уголок состоятельных кротов

Чисто для справки можно свериться с информацией на Jcmit.net. Там указано, что стоимость 1 (одного) мегабайта в накопителе машины IBM 305 была равна 9200 USD. «Охренеть!» — заявит читатель и будет несколько не прав. Дело в том, что вечнозеленый американский доллар тоже подвержен инфляции, которая с 56-го года для него составляет где-то 824%. Т.е. в финансовых понятиях дня сегодняшнего (или статистически — на конец 2018 года), те 9200 долларов по покупательной способности соответствуют сегодняшним примерно 86 000 USD. Таким образом, весь 5-мегабайтник в 1956 стоил сегодняшних 320 000 долларов — вот теперь можно оценить стоимость инноваций тогда и сегодня. Интересующиеся могут посмотреть уровень инфляции за определенный промежуток времени.

Longread об актуальных аспектах кэширования

Ну и полирнем информацию о динозавре тем, что его аренда компаниям обходилась в 3200 USD в месяц, т.е. примерно 30000 сегодняшним. Да — чуждая нам практика лизинга или аренды (хоть это немного разные вещи, но тем не мене похожие) там позволяла пользоваться дорогущими изделиями «здесь и сейчас», а не копить на них годами, выпрашивая кредиты у банкиров с консервативным, в плане инноваций, мировоззрением. Сделали таковых около 1000 штук, что намекает.

ОЗУ

Аналогом более-менее оперативной, в нашем понимании, памяти были магнитные барабаны на 3200 знаков, а совсем уж оперативная память описывалась 100 знаками по 6 бит — такой себе транзитный буфер. Барабаны крутились на 6000 оборотах в минуту — почти дизельпанк. При этом самой IBM понятие RAM — Random Access Memory — тогда виделось иначе, и RAM представлялся как сам вышеописанный жесткий диск.

Longread об актуальных аспектах кэширования

К слову, формально все верно — доступ, в отличие от перфокарт, таки рандомный, т.е. случайный, но сегодня под RAM обычно понимают таки память оперативную. Однако с позиций сегодняшнего мы можем констатировать, что такое название было в некотором смысле пророческим, и мы к этому еще вернёмся. Кстати сам IBM 305 назывался RAMAC — Random Access Method of Accounting and Control. Инструкция по ссылке.

Термодинамика данных

Очевидно, что для архивного хранения данных все это явно не подходило как минимум по цене (дешевле было реально итоги записывать ручкой), а использовалось в основном для оперативной работы с относительно актуальной информацией преимущественно внутри машины. Но, тем не менее, что-то надо было сохранять на будущее с менее частым использованием. Забегая вперед заметим, что таковое вытеснялось впоследствии на магнитную ленту, которая, кстати, как носитель информации подъехала существенно позже, хотя технологически была известна с 30-х годов.

Таким образом, мы подходим к мысли о разной степени востребованности и актуальности данных. Но мы также понимаем, что чем оперативнее можно работать с носителем, тем такой носитель в общем случае дороже. Как правило, чем быстрее — тем меньше объемом и дороже. И наоборот. Соответственно распределение данных имеет смысл осуществлять на типы носителей сообразно степени востребованности информации.

Конечно в идеальном, сферическивакуумном случае иметь бы возможность процессору работать с накопителем напрямую, как и проистекало из определения RAM тогда и трактовки этого понятия сегодня. Но скорости современных накопителей еще не достигли нужных высот при больших объёмах и при реализации такого подхода процессор, простаивая, будет «ждать» накопитель. Поэтому при вычислениях и работе с информацией мы до сих пор имеем посредников — ведь, как правило, в единицу времени весь массив архивной информации нам не нужен, да и процессоры не в состоянии все и разом переварить. Поэтому работа идет порционно, транзитом из менее быстрых видов памяти в более быстрые.

Соответственно по частоте востребованности в работе и частоте изменений данные условно делят на холодные/теплые/горячие. Картинку позаимствуем у господина К.Савелли.

Longread об актуальных аспектах кэширования

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

Иерархическая система компьютерной памяти

Но дело в том, что действительно быстрые типы памяти стоят дорого и сегодня. Масштабы, конечно, несколько иные, но суть — та же. Рассмотрим картинку.

Longread об актуальных аспектах кэширования

Все самое быстрое и самое дорогое, что сегодня производится по части памяти, собрано в самом процессоре. Это его внутренняя память. Не вдаваясь в суть деления внутрипроцессорных типов памяти, для удобства понимания дальнейшего материала, обращаем внимание на то, что она чаще называется кэшем и содержит служебную информацию. Это словарная калька с функционала, поскольку эта быстрейшая память используется в основном как раз таки для хранения часто требуемых данных, команд и т.п. В общем случае, чем ее больше — тем лучше. Внтурипроцессорная память — это своего рода посредник между медленной относительно него ОЗУ и ядрами.

Далее у нас идет основной посредник между быстрым процессором и тормозным хранилищем — оперативная память, оно же RAM в сегодняшней терминологии. Это быстрая, но энергозависимая память произвольного доступа. Пока энергозависимая, т.к. Intel все грозится напугать общественность энергонезависимой ОЗУ и даже объявила в этом году некие продукты. Как оно будет в жизни — посмотрим. А пока ОЗУ — это основной посредник. Организация работы с ним во времени претерпевала изменения, а поколения меняются достаточно часто. Но для наших целей последнее имеет второстепенное значение. Куда важнее, что в обычный десктоп уже можно проинсталлировать 128 гигабайт нашей прелести, хотя редкие игры используют сегодня больше 16 гигабайт. Об этом мы еще поговорим и это крайне важно. Причем важно безотносительно поколений памяти, скоростей, типов чипов, планок и т.д. Она просто очень быстрая по сравнению со всем последующим, но медленнее процессорной памяти.

Ниже по пирамиде у нас группа энергонезависимых накопителей, проранжированных по скорости. Обобщённо назовем их SSD, HDD и ленты. Существуют и иные подключаемые и роботизированные способы хранения, но в рамках этой публикации мы их выносим за скобки.

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

Зачем мы это рассмотрели?

Причины две:

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

Итак, в общем случае некие данные будут считаны с накопителя, обработаны процессором в единстве с ОЗУ и его внутренней памятью, и возвращены для дальнейших действий, где обратная запись будет далеко не типичным событием. Т.е. оперативная память это, в некотором смысле, кэш тормозного накопителя.

Появление жестких дисков сильно способствовало ускорению этих процедур до тех пор, пока физические скорости самих жестких дисков не стали узким местом в работе с данными. Помимо скоростей важно еще понимать, что существуют задержки, обусловленные временем доступа к данным перед началом работы с ними. Т.е. для выноса килограммового ящика из хранилища стратегического запаса его там надо еще найти по карте или инструкции и физически добраться до него. Казалось бы — килограмм унести не проблема и можно быстро, но на практике есть время/задержка доступа.

Но о каких же скоростях сегодня идет речь на практике?

Начнем с самого быстрого – внутрипроцессорной памяти, она же процессорный кэш. Ввиду расположения наиболее близко к ядру/ядрам здесь имеем минимальные задержки и максимальные скорости. Внутрипроцессорный табель о рангах памяти состоит из регистров и того, что отражается в спецификациях как кэш. Последний, в зависимости от приближенности к «императору», т.е. ядру, бывает трех уровней: L1 — самый крутой, самый быстрый, но маленький, L2 — менее крутой и быстрый, но побольше, L3 — помедленней и побольше, но все равно радикально быстрее ОЗУ. В многоядерных процессорах кэш может быть как закреплённым за ядрами в конкретном объёме, так и динамически распределяемым. Ввиду размеров хранятся там всякие инструкции, служебные данные и тому подобное.

Вот тут сайт уже показывает, как модно говорить, мейнстримовые цифры Intel Core i9-9900K по этому поводу.

Longread об актуальных аспектах кэширования

Это конечно не лабораторный замер и до конца непонятно как именно AIDA получает эти цифры, которые в реальности расчетно должны быть поменьше, но порядки и динамику развития технологий они в целом отражают. L1-память в данном случае, если верить тесту, способна читаться со скоростью 2,34 терабайта (!) в секунду. Т.е. если изготовить типовой накопитель в 250 ГБ из такой «нереальной» памяти, то прочитать его целиком за секунду можно будет около 10 раз без учета задержек на вынос коробки из склада, т.е. задержек доступа. Это примерно тот идеал, о котором мы и IBM писали выше, но он пока недостижим в промышленных объемах по вменяемым ценам (да и в реальности скорости лучших L1-кэшей с учетом задержек будут раза в 3–4 меньше указанных) и поэтому есть нижеописанные костыли.

Далее у нас идет оперативная память (ОЗУ, RAM). Она прошла долгий путь не в одно поколение, работает на разных частотах с различными таймингами. Конкретные изделия помогут выбрать на Overclockers.ua, мы же обратим внимание, что, согласно спецификации, примерный сегодняшний мейнстрим в виде DDR4-3200 в теории способен пропустить 25 гигабайт в секунду.

Далее следуют приснопамятные SSD, где особняком стоит Optane (о нем — отдельно). Лучшие SSD способны прочитать 3500 мегабайт в секунду последовательно и 50–60 мегабайт в секунду случайных данных. Говоря предметно, все эти тысячи последовательного чтения-записи на практике востребованы мало. Единственным действительно важным показателем твердотельных дисков является истинная скорость работы со случайными данными и малыми глубинами запросов.

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

Благодаря скоростям случайной работы с мелкими файлами SSD уверенно сидит на троне системного накопителя сегодня. С особенностями, но сидит. Отзывчивость системы даже при весьма среднем процессоре прямо зависит именно от скорости системного диска при работе со случайными мелкими данными при малой очереди запросов.

Цены на SSD падают, что существенно способствует их распространению, и сегодня типичный системный SSD перешагивает 250 гигабайтные модели. Более емкие позволить могут себе не все. Даже 250 гигабайтные по-хорошему не все могут позволить, но тенденция в целом очевидна и 250 гигабайт это прошлое мейнстрима (закончим с этим модным словом).

Трон SSD отобрал у HDD — т.е. у традиционных жестких дисков, которые в быту на случайных операциях были на порядки (т.е. в 10, 100 и даже 1000 раз) медленнее SSD.

Следующие далее ленточные и прочие накопители в рамках данного материала мы не относим к классу архивных и в рамках данного материала не рассматриваем по причине отсутствия актуальности.

Средняя температура по больнице в части задержек приведена ниже с данными для сравнения. Спасибо Jonas Bonér за цифры.

Longread об актуальных аспектах кэширования

Таким образом, наиболее близкая к процессорным ядрам память способна гонять терабайты в секунду. С удалением от ядер показатели падают, но все равно внутри процессора — внушительны. Практической значимости в этих цифрах не так много, как хотелось бы, хотя бы по причине того, что объемы этой сверхбыстрой памяти — мизерны. Как мы упоминали — умей человечество изготавливать накопители таких скоростей, то и никакого деления на процессорный кэш, ОЗУ, SSD, HDD и т.п. не было бы нужно. Но не умеем. Пока, во всяком случае.

Оверклокинг. Только слепой не увидит различий!