Re[30]: диалог с любителями потоков
От: zlonovich  
Дата: 20.07.09 20:57
Оценка:
Здравствуйте, yuriylsh, Вы писали:

Y>Здравствуйте, BulatZiganshin, Вы писали:


BZ>>Здравствуйте, Sinclair, Вы писали:


BZ>>>>синхронно — нет, есть кеш на RAM

S>>>Тем не менее именно из-за этого происходит деградация скорости записи. Сначала свободных страниц хватает; затем рано или поздно они кончаются, и запись каждой страницы ведёт к предварительному стиранию блока.

BZ>>это не *обязательно* делать синхронно


Y>В том-то и дело, что обязательно. Проблема в том, что диск понятия не имеет что какая-то страница была удалена. Операционка не посылает команды удаления (TRIM) диску ибо ее чего? — правильно, нету. Диск узнает что у него проблемы в тот момент, когда ему приходит команда на перезапись, и соответсвенно, решает ее (вот где тормоза) только в этот момент – тобишь, синхронно. Попробую обяснить.

Y>В SSD диске нет доступа к отдельной ячейке (байту). Ячейки организованы в страницу (4Кб). Страницы, в свою очередь, организованы в блок из 128 страниц – 512Кб. Давай представим, что мы записали файл размером в 32 страницы (128Кб) в блок. Затем еще один файл размером 64 страницы.
Диск — блоковое устройтво, и адресация у него идет ессно секторами по 512 байт. И пишем мы соответственно по некаторому LBA (да да именно он) некаторое количество секторов. Да и если посмотреть то запись одного файла это как минимум 2 записи по 2-м разным LBA разного кол-ва секторов, файловые системы никто не отменял.
Y> Дальше мы удалили первый файл – так как команды удаления для диска нету, то ОС помечает у себя что первые 32 страницы блока свободны
Собственно это удаление с точки зрения накопителя это тоже есть просто запись.
Y> Вот тут у SSD диска проблема – писать в свободные страницы он не умеет, только в чистые, тобишь, ему С + ЧЧ надо превратить в Ч+ЧЧ, тобишь, стиреть первые 32 страницы.
Значит нам нужно целых пол-мегабайта только для для того чтобы обновить кусок данных. Подобное можно предположить про SSD так как там есть буфер для того чтобы считать эти данные (если конечно забыть про прозводительность вообще) так как например некаторые флэш микрухи имеют время записи одного блока порядка полутора секунд. Собственно при таком подходе простые флэшки вообще не могут работать. Трудно прочитать в память содержимое блока если памяти под буфера всего 48К.

[остальное поскипнуто]

Думаю тут стоит избавится от парочки мифов которые возникали в этом типике:

1) Контроллеры для флэшек да и SSD имеют достаточно сложные прошивки которые умеют делать много чего: следить за равномерным износом блоков и перемещать данные из более изношенных блоков в менее изношенные, cледить за состоянием уровня заряда в яйчейках флэш-памяти так как он теряется во время чтения и переносить данные когда он становится низким (естественно это все смотрится по косвенным признакам), обрабатывать ошибки и восстанавливать данные в случае если произошел сбой питания(флӕш память не любит если изчезает питание во время записи) или ошибка записи.
2) Учитывая что есть возможность только записать(а точнее только переключать 1-ки в 0-ки) данные каждый раз пишутся в новое место (включая и контрольные структуры) 2 записи по одному и тому же LBA в общем случае физически после записи будут находится в разных местах на флэш памяти.
3) Давно не слышал про просто SLC и просто MLC память. Дорого это иметь отдельную микруху для каждого типа памяти. А про память которая может работать в SLC режиме и MLC режиме причэм для каждого блока можно выбирать в каком режиме он будет работать слышал.
4) Учитывая что данные перезаписать невозможно без стирания всего блока то последовательные длинные записи гораздо проще реализуются чем короткие рандомные. Cобственно в SSD буферная память и используется для того чтобы уменьшить влияние случайных записей и собственно попытаться уменьшить само кол-во записей. Возьмем предидущий пример: после прихода первого файла контроллер может решить вообще оставить его в памяти и ничего не писать, а когда придет второй кусок записать сразу весь второй файл в 96 страниц.
5) В принципе основные команды это чтение нескольких сектров и запись нескольких секторов. Про стирание слышал только в контексте SD карточек.

З.Ы. Пора заканчивать этот флуд про флэшки или выделять эту ветку в отдельную тему

З.З.Ы. На флэшки и на SSD-шкам(но в гораздо меньшей мере) смотреть со стороны фирмваря приходилось.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.