Асинхронный диск IO влияет на использование подкачки?

.. [118189] Кажется, я столкнулся с той же проблемой. Мой ноутбук Lenovo X230 не загружался в режиме UEFI, когда я использовал установочные медиа Archlinux или Manjaro (я вижу черный экран, когда изображение начало загружаться). Я погуглил и обнаружил, что это произошло из-за того, что Arch использует загрузчик gummiboot.[12305]Эту проблему можно решить следующими шагами:[12306]Сделайте загрузочную флешку из установочного ISO;[12307]С другого любого ПК с Linux установите GRUB2 на флешку:[12308]grub-install --boot-directory=/mnt/sdc1/boot --efi-directory=/mnt/sdc1 --target=x86_64-efi --reemovable [12309]Я использовал следующий конфиг для GRUB2 (/mnt/sdc1/boot/grub/grub.cfg, пример для Manjaro linux):[12310]set timeout=5 меню "MJRO_089" { linux /manjaro/boot/x86_64/manjaroiso root=LABEL=MJRO_089 rw initrd /manjaro/boot/x86_64/manjaro.img } [12311] Эта инструкция также полезна для Archlinux. [118196]
1
07.06.2014, 10:57
1 ответ
  1. Асинхронный ввод-вывод во FreeBSD не совсем лучше, чем в Linux. Я думаю, ваш исходный текст означает, что семейство вызовов AIO (aio_read и т.д.) реализовано непосредственно в ядре FreeBSD, но преобразует его запросы во внутренние IOCPs там, где это возможно (сокеты, трубы, доступ к плоским дискам и т.д.) и создает потоки ядра только для ввода/вывода файловой системы. В отличие от этого, Linux использует пользовательские потоки для семейства вызовов AIO, которые более явны, но демонстрируют свою работу и требуют большего контекста потоков. Все остальные аспекты связаны с общей архитектурой и производительностью ядра, которая зависит от многих процентов, включая навыки настройки сисадминов.
  2. Существуют подходы, когда потоки явно нужны для AIO - основной случай, когда файл отображается в памяти и читается как область памяти, а реальное чтение обрабатывается как ошибка страницы. Так как повреждение страницы прерывает определенный поток управления (т.е. поток), то для этого требуется отдельная независимая работа с потоком. Похоже, что это очень близко к предполагаемому механизму, но только если вы правильно управляете использованием оперативной памяти; это означает, что как минимум массовые madvise вызовы для указания, какие регионы нужны, а какие нет. Иногда прямые *read()/*write() проще, так как они не требуют сохранения уже обработанных сегментов в оперативной памяти.
  3. AIO сама по себе никак не коррелирует со свопом. Использование любого способа ввода-вывода требует ввода и вывода с наилучшей скоростью. Но проблема в том, что если вы будете хранить огромные объемы данных в памяти процесса, то они будут свопированы и вложены. Если ваш "рабочий набор" (набор страниц, который должен находиться в оперативной памяти для работы без явного снижения производительности процесса) больше, чем помещается в оперативную память (включая затраты на данные ядра, дисковый кэш и т.д.), то вы попадёте в режим постоянной подкачки. В этом случае алгоритмы должны быть адаптированы таким образом, чтобы рабочий набор был достаточно мал, это единственное решение.
  4. В частности, для Linux, пожалуйста, имейте в виду выпуск 12309. Сообщается как исправленный, но билет пропускает импортированную часть истории и последствий, поэтому проблема с поздней очисткой дискового кэша и последующей массовой заменой может вернуться. Важным отличием FreeBSD является то, что в системах BSD такой проблемы никогда не возникало.
4
27.01.2020, 23:21

Теги

Похожие вопросы