SandForce (2)

avatar
, 18 Июль 2010 в 21:53
Рубрика: SSD

А работает этот SandForce, скорее всего, так: у него внутри неонка и N мегабайт буфера, в котором лежат последние N мегабайт приехавших в накопитель данных.

В следующий момент в накопитель приходит блок данных некоторого размера, который велено положить по LBA-адресу X. Этот блок сравнивается с содержимым буфера, внезапно обнаруживается, что там уже есть такой же блок, ранее положенный по LBA-адресу Y в реальный флэшовый адрес Z (обозначим это как «Y→Z») — после чего новые данные просто выбрасываются, а в lookup-таблицу пишется «X→Z». То есть, запись нового блока происходит практически мгновенно.

Выяснить здесь остаётся две вещи: размер блока данных и размер буфера сравнения. Первый, подозреваю, равен LBA’шному сектору (чисто потому что возни с последующим пересчётом «кто где лежал» меньше), а второй завтра узнаем.

P.S. При этом понятно, что ту же память можно одновременно использовать и как обычный буфер чтения-записи.

  1. avatar
    MASTAN
    18 Июль 2010 в 22:26 | #1

    Не лучше ли хранить и сравнивать хеши?
    Часть памяти под хеши, часть под буфер чтения/записи.

    Thumb up 0 Thumb down 0

    • Смотря что накладнее, держать больше памяти или считать хеши.

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

      Thumb up 0 Thumb down 0

  2. avatar
    TheJudge
    18 Июль 2010 в 22:53 | #3

    Такой алгоритм череповат тем, что при наличии двух записей на один физический блок, может возникнуть ситуация, когда одну из записей надо будет модифицировать. Впринципе никто не мешает откопировать его и переписать индекс, но всё же...

    Я тут смотрел презенташки по SF, и обнаружил интересный слайд, с примером, что при установке Win7 + Office, логически записывается 25 Гб, а физически только 11 Гб. Т.е. как бы износ памяти уменьшается. Ну так вот, возможен альтернативный вариант. Контроллер каким-то образом индексирует логически пустое место диска, ведь данные не затираются наглухо в ноль при удалении, и при обнаружении уже готового блока, скажем полностью забитого нулями, присваивает ему индекс, не записывая в память ничего. Смущает только, что вроде как размер блока у флэш памяти что-то около 128 Кб, и вероятность таких совпадений крайне мала.

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

    Thumb up 0 Thumb down 0

    • Впринципе никто не мешает откопировать его и переписать индекс, но всё же...

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

      Thumb up 0 Thumb down 0

  3. интересно кто кого забодает по патентам, сан или сэндфорс zfs_dedup

    Thumb up 0 Thumb down 0

Вы должны войти, чтобы написать комментарий.