Организация секторов физического диска перед записью на диск

Bakcground:
Я разрабатываю по новой SparkleDB База данных NoSQL, база данных ACID и имеет свой собственный менеджер дискового пространства (DSM) для доступа к хранилищу файлов базы данных. DSM допускает одновременные операции ввода-вывода с несколькими потоками для одного и того же физического файла, т.е. Асинхронный ввод-вывод или перекрывающийся ввод-вывод. Мы отключаем кеширование диска, поэтому пишем страницы прямо на диск, так как это требуется для баз данных ACID.

Мой вопрос:
Есть ли прирост производительности за счет организации непрерывной дисковой страницы из множества потоковых записей перед отправкой запроса ввода-вывода в базовую дисковую подсистему ввода-вывода ОС (таким образом, объединение данных, которые будут записаны, если они непрерывны), или ввод-вывод подсистема делает это для вас? Мой вопрос относится к UNIX, Linux и Windows.

Пример (все происходит в пределах 100 мс):

  1. Тема # 1: записать 4k в физический адрес файла 4096
  2. Тема # 2: запись 4k в физический адрес файла 0
  3. Поток № 3: запись 4k в физический адрес файла 8192
  4. Поток № 4: запись 4k в физический адрес файла 409600
  5. Тема # 5: запись 4k в физический адрес файла 413696
  6. Используя эту информацию, DSM организует одну операцию записи 12 КБ по физическому адресу файла 0 и одну операцию 8 КБ записи по физическому адресу файла 409600.

Обновить:
DSM выполняет позиционирование всех адресов доступа к физическим файлам в Windows, предоставляя OVERLAPPED состав, io_prep_pwrite в Linux AIO и aiocb«s aio_offset на POSIX AIO.

1

Решение

Самый эффективный способ использовать жесткий диск — это записывать как можно больше данных, пока пластины еще вращаются. Это включает в себя уменьшение количества записей и увеличение объема данных на запись. Если это может произойти, то наличие области диска с непрерывными секторами поможет.

Для каждой записи операционная система должна преобразовывать запись в ваш файл в логические или физические координаты на диске. Это может включать чтение каталога, поиск вашего файла и поиск соответствия вашего файла в каталоге.

После того как ОС определяет местоположение, она отправляет данные через интерфейс на жесткий диск. Ваши данные могут кэшироваться по пути много раз, пока они не будут размещены на пластинах. Эффективная запись будет использовать размеры блоков кэшей и интерфейсов данных.

Теперь вопросы: 1) Сколько времени это экономит? и 2) Значительная ли экономия времени. Например, если вся эта работа сэкономит вам 1 секунду, эта одна секунда может быть потеряна при ожидании ответа от пользователя.

Многие программы, ОС и драйверы переносят запись на жесткий диск на некритические или непиковые периоды. Например, пока вы ожидаете ввода пользователя, вы можете записывать на жесткий диск. Эта публикация записей может потребовать меньше усилий, чем оптимизация записи на диск, и оказать более существенное влияние на ваше приложение.

Кстати, это не имеет ничего общего с C ++.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]