SSD-кэш в NAS: как он работает и почему часто не помогает
Быстрый накопитель поверх медленного массива звучит как способ получить скорость без затрат. На практике выигрыш появляется не всегда. Разбираем механику и условия, при которых кэш работает.
Идея выглядит безупречно. Механические диски дают ёмкость, но медленно реагируют. Твердотельные быстры, но дороги. Поставим небольшой быстрый накопитель поверх большого медленного массива — и получим скорость одного при стоимости другого.
Именно это и предлагает функция кэширования в сетевых хранилищах. Работает она честно, но выигрыш получают далеко не все, и понять заранее, попадёте ли вы в их число, вполне можно.
Что кэш делает
Механизм основан на наблюдении: обращения к данным распределены неравномерно. Из терабайтного архива в реальной работе используется небольшая часть, и используется постоянно. Всё остальное лежит нетронутым месяцами.
Система отслеживает, к каким блокам обращаются часто, и держит их копии на быстром накопителе. Следующее обращение обслуживается с него, не тревожа механические диски. Чем выше доля таких попаданий, тем заметнее выигрыш.
Ключевое слово здесь — «повторное». Кэш не ускоряет первое обращение к данным: чтобы положить блок в кэш, его сначала нужно прочитать с медленного диска. Файл, открытый однажды и больше не нужный, проходит мимо механизма целиком.
Почему на линейном копировании выигрыша нет
Самое частое разочарование выглядит так. Человек ставит кэш, копирует большую папку и видит ровно ту же скорость, что и раньше.
Объяснений два, и оба фундаментальные. Первое: копирование большого файла — это обращение к каждому блоку ровно один раз, то есть худший возможный сценарий для кэширования. Повторов нет, попаданий нет, выигрыша нет.
Второе: линейное чтение — это как раз то, что механические диски умеют хорошо. Массив из четырёх дисков выдаёт линейную скорость, которая и так превышает пропускную способность гигабитной сети в несколько раз. Ускорять здесь нечего — упирается провод.
| Сценарий | Помогает ли кэш |
|---|---|
| Копирование большого файла | Нет |
| Открытие одних и тех же документов | Да |
| Каталог фотографий с эскизами | Заметно |
| Просмотр фильма | Нет |
| База данных приложения | Сильно |
| Первичная заливка архива | Нет |
Кэш на чтение и кэш на запись
Это две разные функции с разными рисками, и различать их принципиально важно.
Кэш на чтение хранит копии данных, оригинал которых лежит на дисках. Отказ кэширующего накопителя не приводит к потере ничего: система просто перестаёт ускоряться и продолжает работать с массива. Такой кэш безопасен и на одном накопителе.
Кэш на запись устроен иначе. Данные сначала попадают на быстрый накопитель, отправитель получает подтверждение, и только потом система переносит их на массив. В промежутке между этими событиями единственная копия данных существует на кэширующем накопителе.
Где кэш выигрывает по-настоящему
Чтобы понять, зачем механизм вообще существует, полезно посмотреть на слабое место механического диска. Оно не в линейной скорости, а в перемещении головки.
Головка физически ездит над пластиной, и на переход к другому участку уходят миллисекунды. Звучит немного, но когда программа запрашивает тысячи мелких фрагментов вразнобой, эти миллисекунды складываются в минуты ожидания. Твердотельный накопитель не имеет движущихся частей и отдаёт любой фрагмент одинаково быстро.
Отсюда и профиль задач, где кэш даёт разы, а не проценты. База данных, которая читает разбросанные по тому записи. Файловый менеджер, строящий эскизы для папки с тысячами фотографий. Несколько человек, одновременно обращающихся к разным участкам тома: здесь головке приходится метаться между запросами, и производительность падает нелинейно.
Какой объём нужен
Логика подбора не «чем больше, тем лучше», а «сколько данных находится в активной работе». Эту величину называют рабочим набором, и она обычно составляет небольшую долю тома.
Практический подход: посмотрите, с каким объёмом данных вы работаете в течение недели. Для команды, которая ведёт три проекта одновременно, это суммарный размер этих трёх проектов. Кэш должен вмещать хотя бы их — иначе блоки будут постоянно вытеснять друг друга, и попаданий окажется мало.
Отсюда типичное соотношение: кэш порядка нескольких процентов от объёма тома для файловых задач и заметно больше для баз данных и виртуальных машин. Ставить кэш меньше рабочего набора почти бесполезно, больше — деньги на ветер.
Износ кэширующих накопителей
Накопитель в роли кэша работает в режиме, далёком от домашнего: постоянная запись, вытеснение, перезапись тех же ячеек круглые сутки.
Ячейки твердотельной памяти имеют конечный ресурс перезаписи, и в кэше он расходуется быстрее, чем в любом другом применении. Дешёвый потребительский накопитель, рассчитанный на десятки терабайт записи за весь срок службы, может исчерпать ресурс за год-полтора активной работы в этой роли.
Что из этого следует. Во-первых, для кэша берут накопители с заявленным ресурсом выше бытового — производители хранилищ публикуют списки. Во-вторых, показатель остаточного ресурса стоит держать в поле зрения наравне с состоянием дисков массива. В-третьих, кэш на чтение изнашивается заметно медленнее кэша на запись, и это ещё один довод в пользу первого.
Кэш ест память
Неочевидное следствие, которое портит планы владельцам младших моделей. Чтобы понимать, какой блок где лежит, системе нужна таблица соответствия — и держать её приходится в оперативной памяти.
Чем больше кэш, тем крупнее таблица. На хранилище с малым объёмом памяти включение большого кэша приводит к обратному результату: памяти не остаётся на файловый кэш самой системы, и работа замедляется. Производители прямо указывают минимальные требования, и игнорировать их не стоит.
Практический ориентир: если в аппарате четыре гигабайта памяти, кэш скорее навредит, чем поможет. Восемь — рабочий минимум для скромного кэша. Серьёзный кэш требует шестнадцати и больше.
Разогрев и почему сразу не работает
Свойство, которое смущает в первые дни: сразу после включения кэш пуст и никакого ускорения нет.
Наполняется он постепенно, по мере обращений. Первое чтение файла идёт с массива и попутно кладёт блоки в кэш; второе и последующие уже обслуживаются быстро. Выход на устойчивый режим занимает дни, а на большом томе и недели.
Практический вывод: оценивать пользу от кэша в первый день бессмысленно. Смотреть нужно на долю попаданий через неделю-другую работы, когда механизм разобрался, какие данные у вас горячие.
Второе следствие: перезагрузка хранилища часть кэша обнуляет. Аппарат, который часто перезагружают или усыпляют, просто не успевает выйти на режим — и кэш в такой конфигурации теряет смысл.
Ещё одна деталь про совместимость. Слоты под кэширующие накопители в разных аппаратах устроены по-разному: у одних это выделенные разъёмы, у других приходится занимать обычные отсеки для дисков. Второй вариант стоит просчитать заранее: два отсека из четырёх, отданные под кэш, оставляют для данных половину аппарата, и это почти всегда плохой размен. Кэш имеет смысл там, где он добавляется к массиву, а не отъедает от него. По той же причине компактные модели на четыре отсека без выделенных слотов под кэш обычно проще оставить без него вовсе: разница в отклике не окупит потерянную ёмкость и уменьшившуюся защиту массива, а вложить те же деньги в переход на сеть побыстрее почти всегда полезнее — там выигрыш получают все пользователи и во всех сценариях сразу, а не только в тех, где повторяются обращения к одним и тем же данным изо дня в день. Универсальное решение против узко точечного, и при ограниченном бюджете выбирать разумнее первое.
Альтернатива: отдельный быстрый том
Вместо кэширования поверх массива часто разумнее сделать проще: выделить твердотельные накопители в отдельный том и класть на него то, чему нужна скорость.
Преимущества такого подхода существенные. Вы точно знаете, что лежит быстро, а что медленно, и не зависите от алгоритма вытеснения. Память под таблицы не тратится. Отказ быстрого тома не влияет на медленный.
Недостаток один: разделение приходится делать руками. Приложения, базы, образы виртуальных машин и текущие проекты — на быстрый том. Архив, медиатека и резервные копии — на медленный. Для большинства сценариев это разделение очевидно и делается один раз.
Порядок проверки перед покупкой накопителей
Прежде чем тратить деньги на кэширующие накопители, имеет смысл убедиться, что упирается именно туда, куда предполагается.
- Измерьте скорость линейного копирования большого файла и сравните с потолком вашей сети.
- Если упирается в сеть — кэш не поможет ни в чём, вопрос закрыт.
- Измерьте работу с папкой мелких файлов: именно здесь виден отклик дисков.
- Посмотрите загрузку процессора во время медленных операций: если он занят полностью, дело не в дисках.
- Оцените, повторяются ли обращения к одним и тем же данным в вашей работе.
- И только при положительном ответе на последний пункт покупайте накопители под кэш.
Второй шаг отсекает большинство домашних случаев. На гигабитной сети хранилище отдаёт около ста мегабайт в секунду, и этот потолок берёт любой массив из двух-трёх механических дисков. Никакой кэш не поднимет цифру выше пропускной способности провода — деньги правильнее вложить в быструю сеть, и только потом, если останется нужда, в кэш.
Как это выглядит в цифрах
Полезно представлять порядок величин, чтобы понимать, о каком выигрыше вообще речь.
| Операция | Механический массив | С попаданием в кэш |
|---|---|---|
| Линейное чтение | Сотни МБ/с | Столько же |
| Случайное чтение мелких блоков | Единицы МБ/с | Сотни МБ/с |
| Отклик на запрос | Миллисекунды | Микросекунды |
| Одновременные обращения | Падает нелинейно | Держится ровно |
Первая строка объясняет разочарование большинства владельцев: именно линейное чтение они и проверяют, копируя большой файл. Вторая и третья объясняют восторг тех, кто держит на хранилище базу или виртуальные машины: там разница измеряется не процентами, а порядками.
Когда кэш действительно нужен
- Много людей работают с одними данными. Общая база, общий каталог, общий проект — повторных обращений много.
- Приложения на хранилище. Контейнеры и виртуальные машины постоянно читают одни и те же блоки.
- Каталоги с тысячами мелких файлов. Эскизы, индексы, служебные структуры выигрывают заметно.
- Массив из медленных экономичных дисков. Чем медленнее основа, тем заметнее разница.
И зеркальный список — когда не нужен. Домашнее хранилище с медиатекой и резервными копиями: данные читаются по одному разу, повторов почти нет. Хранилище на гигабитной сети: узкое место не в дисках. Аппарат с малым объёмом памяти: будет хуже. Видеоархив с камер: сплошная запись без повторных чтений.
Проверить свою ситуацию можно и опытным путём — системы показывают долю попаданий в кэш. Если после недели работы она держится низкой, механизм вам не подходит, и накопители разумнее переставить в отдельный быстрый том. Долю попаданий стоит смотреть не в первый день, а через пару недель устойчивой работы: значение ниже половины означает, что рабочий набор в кэш не помещается, и выбора два — либо увеличить объём кэша, либо признать, что механизм под вашу нагрузку не подходит. Второе решение принимают чаще, и ничего обидного в нём нет: кэш проектировался под серверные профили, а не под домашний архив фотографий.
Коротко о главном
- Кэш ускоряет повторные обращения к одним данным, а не копирование вообще.
- На домашнем хранилище выигрыш обычно близок к нулю.
- Кэш на запись из одного накопителя — прямой риск потери данных.
Частые вопросы
Ускорит ли кэш копирование файлов?
Нет. Копирование — это одно обращение к каждому блоку, худший сценарий для кэширования. К тому же линейное чтение и так упирается в сеть.
Чем отличается кэш на чтение от кэша на запись?
Первый хранит копии, и его отказ ничего не теряет. Второй держит единственный экземпляр данных до переноса на массив, поэтому собирается только зеркалом.
Какой объём кэша нужен?
Он должен вмещать рабочий набор — объём данных, с которым вы реально работаете в течение недели. Меньше почти бесполезно, больше — переплата.
Сколько памяти требует кэш?
Таблица соответствия блоков живёт в оперативной памяти. На аппарате с четырьмя гигабайтами кэш скорее навредит; рабочий минимум — восемь.
Что лучше: кэш или отдельный SSD-том?
Для большинства сценариев отдельный том проще и предсказуемее: вы сами решаете, что лежит быстро, и не тратите память на служебные таблицы.
Нужен ли кэш дома?
Обычно нет. Медиатека и резервные копии читаются по одному разу, повторных обращений мало, а на гигабитной сети узкое место всё равно не в дисках.
