Низкий уровень ввода / вывода на Linux

Может ли программа уровня пользователя выполнять уровень страницы или блокировать уровень ввода-вывода на SSD?

Я смотрел на дисковые устройства, но я не уверен, что они предоставляют это, поскольку они работают, только если раздел имеет файловую систему.

ОБНОВЛЕНИЕ # 1

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

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

  • Как использовать SSD для кеширования, поэтому мои жесткие диски могут вращаться?
  • Установщик Fedora 25 не обнаружит SSD в UEFI. Клавиатура / трекпад не работает в LEGACY
  • Тип файловой системы и параметры монтирования для Archlinux на накопителе SSD NVMe
  • Установка брандмауэра pfSense на SSD
  • Минимизировать зарезервированное пространство на томе ext4 без больших файлов
  • Невозможно включить TRIM на SSD
  • Как установить Linux Mint 17 на SSD и иметь Home на HDD
  • Аварийное стекло SSD
  • 3 Solutions collect form web for “Низкий уровень ввода / вывода на Linux”

    Вы можете делать низкоуровневые дисковые операции ввода-вывода на любом типе хранилища с помощью блочного устройства , что-то вроде /dev/sda (для всего диска) или /dev/sda1 (для раздела) под Linux. Это полностью обходит файловую систему.

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

    Я не думаю, что оптимизация ввода-вывода на этом уровне может быть выполнена с помощью пользовательской программы (не говоря уже о механизме оптимизации, необходимой для этого). Поэтому мой подход состоял в том, чтобы оптимизировать процесс прямо в приложении, реализовав что-то вроде очереди, которая очищает свой контент до желаемого результата, как только он превысит установленный порог данных. Псевдокод может выглядеть так:

     MAX_OBJS=100 M[100]=new M[100] function saveObj(obj) { if (M.size > MAX_OBJS-1) { outputStream.appendArrayToBinary(M) M = new M[100] } M.add(obj) } while (true) { saveObj( new Obj ) } 

    Как вы можете видеть, у него будет буфер из 100 объектов. Как только 101-й объект будет сохранен , он записывает на диск другие 100 и очищает буфер, чтобы оставить место для еще 100 объектов. Конечно, вы можете реализовать более сложные методы, такие как выполнение записи в другом потоке и блокирование массива, чтобы другие объекты не добавлялись до тех пор, пока они не будут записывать объекты на диск и освобождать буфер. Или что-то типа того.

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

    Прежде чем вы начнете заниматься такими усилиями, необходимо уточнить несколько моментов:

    «Высокая производительность» – это не одноразовое свойство.

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

    Вы должны задать себе следующие вопросы:

    • Я оценил текущие основные реализации систем хранения ключевых ценностей? Если нет, почему бы и нет?
    • Если бы я сделал, почему они не подходят для моего случая использования? Я провел обширный бенчмаркинг и тестирование? Я проследил основное узкое место? Могу ли я исправить это в современных современных версиях? Если нет, то почему я могу исправить это в своей собственной реализации?
    • Каковы мои точные требования к производительности? Я определил «производительность» и нашел ли я способы ее измерения? Высокая производительность во время операций хранения? Высокая производительность во время операций поиска? Высокая производительность при высокой нагрузке из-за большого количества клиентских подключений?

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

    Ядро – последнее место, к которому вы хотите прикоснуться. Особенно, если у вас нет опыта разработки ядра. Большинство подсистем ядра сильно оптимизированы с помощью процессов, которые прошли годы тестирования и разработки высококвалифицированными инженерами.

    Моим советом было бы рассмотреть оптимизацию с помощью комбинации предварительного кодирования, интеллектуального кэширования и замедленной записи. Было бы неплохо ознакомиться с популярными алгоритмами кэширования, подходами балансировки нагрузки и посмотреть, как все работает под управлением современных файловых систем (например, readahead , Write policies , LRU ) – может быть, они напрямую не связаны с вашей проблемой , но это помогает узнать, как люди решали проблемы с производительностью в подобных областях. Разумеется, это не означает, что вы повторно используете эти функции в своем приложении, поскольку они уже лучше реализованы самой файловой системой – в большинстве случаев это может повредить производительности вашего приложения, а не улучшать его.

    Interesting Posts

    Проблема с завершением работы в TexMaker на элементарной ОС

    Как перенаправить stdout в файл и прочитать из того же файла одновременно с другой задачей?

    привязка ключа режима vi только в обычном режиме

    установка переменной среды как функции другой переменной env

    Восстановление усеченного файла

    Обработать функцию `zsh` с использованием, которая распознает только команды

    Перенаправление Bash не работает для команды SQLite

    Как добавить несколько строк с переменными в конец сценария bash?

    Можно ли установить среду рабочего стола linux из live cd?

    Установка Ubuntu / Debian на SD-карту на 16 ГБ

    Невозможно добавить пользователя в файл sudoers

    Awk / grep / sed получает разделенный запятыми список чисел из строк текста

    Звук Arch Sound отображается только в качестве наушников, а наушники не подключены

    Логротат не удаляет старые журналы

    Как я могу контролировать диск io?

    Linux и Unix - лучшая ОС в мире.