Могу ли я эмулировать TRIM, записывая все нули?

перед сектором SSD1 когда-либо было написано, похоже, что все заполнено нулями.

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

вопрос в следующем: flash / SSD контроллер на самом деле реализовать это или что-нибудь подобное?

Он выглядит еще более применимым к флэш-памяти, подключенной через интерфейсы, которые не имеют команды TRIM, например USB.

в ответах, опубликованных до сих пор, несколько человек изложили возможные проблемы с шоу-пробкой. Тем не менее, все они оказались без проблем. Если нет доказательств, что это действительно серьезные проблемы, пожалуйста, не авторитетно утверждают, что они, а честно сказать, что вы только предполагаю это.


1логический сектор, т. е. то, что хозяин видит.

5
задан ivan_pozdeev
31.12.2022 22:17 Количество просмотров материала 2673
Распечатать страницу

3 ответа

фактически, стертый сектор SSD заполнен единицами, а не нулями. Вы путаете сектора SSD (фактические физические сектора на SSD, которые мы хотим обрезать) с секторами диска (логические сектора, которые SSD представляет файловой системе после того, как это будет сделано с помощью магии управления). Заполнение логических секторов нулем было бы неприменимо, так как это заставило бы SSD выделять стертые физические сектора SSD и заполнять их нулями.

когда логический сектор обрезается, SSD физические сектора сопоставлены с этим логическим сектором. Когда он получает шанс, он стирает их, что заполняет их 1. После удаления они добавляются в пул удаленных физических секторов. Целью обрезки является увеличение пула стираемых физических секторов.

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

See здесь для более подробной информации.

1
отвечен David Schwartz 2023-01-02 06:05

могу ли я эмулировать TRIM, записывая все нули?

нет.

Акт записи требует стертого сектора, а затем происходит фактическая операция записи.

Операция записи является показателем SSD, что этот сектор используется (противоположное условие, которое вы хотите с реальной командой TRIM).

до того, как сектор SSD был когда-либо записан, он выглядит так, как будто все заполнено нулями.

неправильные, и, видимо, ваш вопрос основан на неправильной предпосылке.

Стертый сектор заполняется байтами 0xFF (все единицы).

формат традиционно записывает все нули в каждый сектор.

Итак, если я запишу все нули в сектор, то для функциональности он будет выглядеть как свободный.

нет, не будет.

Помните, что на уровне файловой системы есть" свободные "сектора, а на SSD - "свободные" сектора уровень. Теоретически они должны быть одинаковыми, но поскольку SSD должен быть явно информирован файловой системой о том, что сектор "свободен" (с TRIM comand), есть расхождения.

дополнительное соглашение

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

вопрос в том: действительно ли какой-либо контроллер flash/SSD реализует это или что-то подобное?

нет, потому что это приведет к потери данных.

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

итог, предложенная вами схема (использование содержимого данных) не работает.

Если вы хотите назначить сектор свободным или неиспользуемым, то есть команда TRIM.

Нет никакой замены операции записи.

1
отвечен sawdust 2023-01-02 08:22

могу ли я эмулировать TRIM, записывая все нули?

нет.

вот как работает flash:

  • неписаная вспышка все 1, и записывает потяните вниз 1 к 0.

  • Flash записывается в количестве байт, известном как страница, 2048 байт, например размер страницы. (Существует также небольшое количество данных-64 байта или около того, что также является частью этой страницы, где информация ECC может храниться)

  • Что делать, если вы хотите изменить 0 обратно на 1. Ты не сможешь, пока не сотрешь страницу.

  • когда вы стираете flash-который переворачивает все биты обратно к 1, Если страница не повреждена, количество байтов, которые вы можете стереть (eraseblock размер заимствовать из терминологии Linux), как правило, больше, чем размер страницы. 128К быть пример размер eraseblock.

  • удаление занимает много больше времени, чем просто писать на страницу.

Так, так:

  • SSD делают вид, что это стандартные жесткие диски для хоста. Стандартные жесткие диски работают на 512-байтовых секторах (называемых LBA и пронумерованных 0 до емкости диска, деленной на 512), а не 2048 или любого другого размера;

  • и прошивка SSD должна делать много подделок в фоновом режиме, так как на самом деле нет 512 байтовых мест для хранения данных, как при вращении жесткий диск;

  • и запись на страницу, которую не нужно стирать, быстрее, чем ее стирание, а затем запись на нее.

SSD поддерживают то, что называется таблицей LBA to PBA. Операционная система, например, говорит SSD для записи в LBA 20, но это действительно может пойти в что-то вроде "Flash chip 2 page 56". Это сохраняется в таблице LBA к PBA.

прошивка SSD попытается направить запись на новые страницы и избежать стирание при необходимости. Если нет неписаных страниц, ему придется перетасовать вещи и сделать чтение/, возможно, написать где-то еще/eraseblock/написать кучу вещей назад.

Так LBA к таблице PBA может быть совершенно случайным.

TRIM говорит SSD, что он может удалить записи из этой таблицы (или пометить как "LBA еще не записан") и фактически стереть некоторую вспышку и иметь ее доступной для быстрой записи в будущем.

Так вот почему пишу все 0x00 или 0xFF не эквивалентны. Только TRIM говорит прошивке, что все в порядке, чтобы не отслеживать вещи в этой таблице и не считать flash неиспользуемым - и стереть его при подготовке к новым записям.

запись всех результатов 0x00 или 0xFF в полную таблицу LBA-to-PBA, которая отслеживает данные, которые, по ее мнению, вы используете, и все будет оставаться медленным из-за необходимости перетасовки и чтения/стирания/перезаписи.

1
отвечен LawrenceC 2023-01-02 10:39

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх