Какие алгоритмы замены страниц используются в ядре Linux для кеширования файлов ОС?

Live patching доступен только на SLE12+ Продается как расширение SLE12, поэтому вам нужен действительный ключ и регистрация, чтобы получить Live-патчи.

SUSE предлагает 60-дневную пробную версию на странице покупки Live patching

Live patching контролируется инструментом kgr:

# kgr 
Error: no command provided

Usage: /usr/bin/kgr [-h][-v] COMMAND
Query and manipulate kGraft patching status.

Commands:
    status:    display the overall status of kGraft patching
    patches:   display the list of loaded patches
    blocking:  list processes that are preventing kGraft patching
           from finishing
    poke:      move forward with the kGraft patching by sending
           STOP and CONT signal to the pending processes

Options:
    -h     print this help
    -v     more detailed output

Report bugs at https://bugzilla.suse.com/.

и проверка примененных патчей:

 # kgr -v patches
 kgraft_patch_2_2_1
     active: 1
     RPM: kgraft-patch-3_12_62-60_64_8-default-2-2.1.x86_64
     CVE: CVE-2016-8666 CVE-2016-6480
     bug fixes and enhancements: (none)

Для собственной проверки исправленной ошибки вы можете попробовать воспроизвести ошибку, если она существует. (не рекомендуется, SUSE's QA-Maintenace очень тщательно тестирует эти патчи перед выпуском для своих клиентов)

8
09.05.2016, 11:44
1 ответ

Управление памятью ("MM") в Linux кажется немного заумным и сложным для отслеживания.

В литературе по Linux часто упоминается LRU (Least Recently Used), в контексте управления памятью. Я не заметил упоминания других терминов.

Я нашел интересное введение (первые четыре параграфа) в этой статье на несравненном LWN.net. В ней объясняется, как базовый LRU может быть реализован на практике для виртуальной памяти. Читайте.

Настоящая замена LFU (Least Frequently Used) не считается практичной для виртуальной памяти. Ядро не может считать каждое чтение страницы, когда mmap() используется для доступа к страницам файлового кэша - например, так загружается большинство программ в память. Накладные расходы на производительность были бы слишком велики.


Чтобы выйти за рамки этой простой концепции, есть набросок дизайна Linux версии 2.6.28-32 здесь:

http://linux-mm.org/PageReplacementDesign

Там предлагается использовать Clock-PRO для файловых страниц. Имеется оригинальная статья по этому поводу. Есть старое описание Clock-PRO на LWN.net, опять же включая некоторые практические детали реализации. Судя по всему, Clock-PRO "пытается выйти за рамки подхода LRU", вариант которого "используется в большинстве систем". Похоже, что он придает большее значение частоте.

Linux-mm имеет другой проектный документ для реализации Clock-PRO в Linux. В этом документе не говорится о том, что он будет объединен; он был написан за несколько месяцев до появления статьи в LWN об этом. http://linux-mm.org/ClockProApproximation

Более поздние описания гласят, что Linux просто "использует некоторые идеи" из Clock-PRO, и на самом деле является "мешаниной из ряда различных алгоритмов с рядом модификаций для отлова угловых случаев и various optimisations".

На приведенную выше цитату ответил вопросом Адриан МакМенамин. МакМенамин продолжил работу над магистерским проектом в 2011 году, тестируя модификации замены страниц Linux, основанные на "модели рабочего набора". Он включает краткое описание замены страниц в Linux. Вариант LRU" назван "подходом 2Q [two-queue] для управления базами данных", приводится ряд ссылок, есть диаграмма, иллюстрирующая перемещение между двумя очередями и другие переходы состояний. Он также описывает Linux как использующий частичную реализацию CLOCK-PRO.

Я полагаю, что концепция LRU, в отличие от других возможностей, о которых вы упоминаете, была заложена с самого начала. А самым значительным изменением стало внедрение функций на основе Clock-PRO, т.е. придание большего веса частоте.

В 2013 году в Linux появился "размер файлового кэша на основе обнаружения трэша". Это, вероятно, также относится к вопросу.

12
27.01.2020, 20:11

Теги

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