@koshelevatamila4741

Скоростной кэш в SSD будет работать на всём объёме?

Читал про кэш, но всё равно не понятно, это временное скоростное хранилище в которое загружаются файлы, а потом контроллер даёт команду и данные из кэша копируются в (другую память?), например у samsung 970 evo (500gb)
Dynamic SLC cache = 18 GB, есть ещё Static SLC cache = 4 GB (в чём отличие?), это получается при копировании файла весом больше 18 GB скорость упадёт после перекачивания этих 18 ГБ? а если копировать два файла по 10 ГБ с разницей в 10 минут? они будут копироваться с максимальной скоростью? или кэш заполнится и скорость в дальнейшем будет ниже всегда?
  • Вопрос задан
  • 267 просмотров
Пригласить эксперта
Ответы на вопрос 2
@rPman
Алгоритмы у контроллера каждого производителя разные, и все закрытые, так что четкого ответа наврят ли ты тут получишь.

Про static и dinamic написано немного тут
но совершенно непонятно
Types of SLC Cache

There are two types of SLC cache: static and dynamic. Whether an SSD uses static or dynamic cache depends on the firmware algorithm.

Static Cache. As its name implies, the size of the assigned area is fixed. The main advantage is that there is a guaranteed area allocated for SLC cache. This space is disabled only when the rest of the TLC is fully utilized. However, since only a specific area is assigned for SLC cache, such area will sustain more intensive reads and writes, resulting in higher P/E cycles, which could in turn affect the drive’s endurance.
Dynamic Cache. In contrast, dynamic cache refers to an area that is not fixed. The key advantage is that wear leveling is much more uniform across the entire drive. The disadvantage is that, due to its size flexibility, the cache size is not guaranteed.


Кеш это значит записи и чтение идут сначала через эту память, и по какому-то внутреннему алгоритму данные в этом кеше перемещаются на диск при записи и для чтения помещаются в кеш или минуют его.

Простой пример, кеш у тебя 10 гигабайт а ты решил записать 12гб, пусть к примеру запись в кеш 1 гигабайта тебе будет стоить 1 секунду, а запись на флеш в 10 раз медленней, отсюда первые 10 секунд ты будешь записывать на диск первые 10 гигабайт, но как только кеш, работающий буфером записи заполнится, скорость у тебя упадет и следующие 2 гигабайта ты будешь писать еще 20 секунд (диск будет тормозить запись, чтобы дождаться, когда очередной кусок данных из кеша запишется на флеш, освободит место для новых данных и тогда позволит тебе разместить там новые данные, те. тормозить будет не из-за записи новых данных, а из-за старых, кстати не факт, существуют иные, не FIFO стратегии работы с кешем).

Если же ты пишешь 10 гигабайт при не занятом диске, то кеш моментально заполнится за 10 секунд, т.е. запись будет моментальной. затем, чтобы иметь возможность записать на максимальной скорости новые 10 гигабайт, тебе понадобится ничего не писать секунд 100 (этого времени достаточно в этом примере чтобы полностью сбросить кеш-буфер на флеш). Само собой, если ты подождешь всего 10 секунд, это тебе даст возможность на максимальной скорости записать только 1 гигабайт.

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

Лучший ответ тебе дадут собственные тесты под твой тип нагрузки. Почти наверняка современные контроллеры флеш дисков умеют подстраивать свою стратегию инвалидации данных в кеше под текущую нагрузку... как минимум все они отлично умеют работать с популярными бенчмарками ;)
Ответ написан
saboteur_kiev
@saboteur_kiev
software engineer
Нет, так ты ничего не заметишь.
Кеш это вообще не для копирования больших файлов, ибо чтение и запись больших файлов - это линейная скорость чтения, а кеши хороши для рандомного доступа.

Предположим, у тебя выполняется компиляция продукта. тысячи маленьких файликов считаны, обработаны. Для каждого создан небольшой obj файлик (от десятков байт до пары мегабайт) и записан. Затем линкер по ним всем пробегает и собирает уже в основной исполняемый файл.
То есть выполняется несколько тысяч операций прочитаь/записать пару килобайт.

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

Динамический и статический - это просто что туда класть. Статический нарезан под готовые кусочки, динамический позволяет сохранить и килобайт и 100 килобайт и гигабайт отдельно нарезанным кусочком под каждую операцию, но будет чуть медленнее.
P.S. В конечном счете, все будет упираться скорее всего в размер кластера дисковой системы.
Почитай детали, если надо https://www.atpinc.com/blog/what-is-SLC-cache-diff...

Но. На линейное копирование крупных файлов, кеш обычно практически не влияет
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы