Включить огромные страницы в Windows 10

Обновлено: 03.07.2024

Monero – это многообещающая криптовалюта, которая в значительной степени ориентирована на анонимность и конфиденциальность. Цена Monero недавно взлетела (в конце августа 2017 г.), достигнув 150 долларов США, что примерно в 3 раза превышает предыдущий исторический максимум Monero.

Monero был подходящим кандидатом для майнинга, но приведенные выше факты делают его еще более подходящим вариантом, особенно для майнинга на процессорах. Монеро можно добывать как на CPU, так и на GPU. Но это одна из немногих монет, которые не дают большого преимущества GPU. Другими словами, с современным шестиядерным или даже четырехъядерным процессором вы можете достичь хешрейта, сравнимого с такими картами, как GTX970, GTX1060, RX480. Я добавлю еще одну статью о своем опыте работы с хэшрейтом monero на различных GPU и процессорах, в этой статье я объясню, как повысить хэшрейт майнинга monero на процессоре с помощью огромных страниц.

Я обнаружил, что хешрейт приличного процессора i7 5820K @ 4,2 ГГц (шесть ядер) можно увеличить на 20 % при использовании огромных страниц.

На приведенном ниже графике показано, что при работе с огромными страницами скорость хэширования увеличилась примерно с 312 H/s до 375 H/s.


Вот инструкции о том, как добиться аналогичного хешрейта с i7 5820K (или просто улучшить хешрейт процессора) в Windows 10 (аналогичные инструкции должны применяться и к другим операционным системам Windows)

*1. Чтобы включить поддержку огромных страниц

В меню "Пуск" откройте "Локальная политика безопасности" (в разделе "Администрирование").
В разделе «Локальные политики\Назначение прав пользователя» дважды щелкните параметр «Блокировать страницы в памяти».
Нажмите «Добавить пользователя или группу» и введите свое имя пользователя Windows.
Перезагрузите компьютер (также может помочь выход из системы и включение)

Обратите внимание, что я видел это улучшение только с майнером xmrig. Я также использовал wolf-xmr-miner, но я не видел прироста производительности огромных страниц с этим майнером. Несмотря на то, что в гитхабе упоминают, что майнер потенциально может выиграть от включения гиганпейджей. У xmrig комиссия за разработку составляет 5%, но из-за огромного увеличения количества страниц это все еще лучший вариант, по крайней мере, для моей установки.

Пожалуйста, поддержите меня как Steem Witness, проголосовав за меня внизу страницы Witness; или просто нажмите на кнопку "за", если я в топ-50:

ЦП имеет пространство виртуальной памяти, отделенное от фактической физической памяти блоками, называемыми страницами. Обычно они имеют размер 4 КБ (4096 байт), поэтому для рендеринга больших изображений используется много страниц.

Поскольку процесс IFS приводит к очень непоследовательным шаблонам доступа к памяти, кэш ЦП для сопоставлений страниц (TLB) может сильно перегружаться. При использовании больших страниц, размер которых обычно составляет 2 МБ, эти промахи кэша происходят намного реже, что приводит к значительному повышению производительности. Общее увеличение скорости рендеринга на процессоре i7 на 10–20 % является обычным явлением, и ускорение увеличивается при более высоком разрешении.

Вот пример из кадра анимации 4K (3840 x 2160) AA 2, показывающий ускорение на 12 %:



Без больших страниц.



С большими страницами.

Как включить поддержку больших страниц в Windows

Программам можно дать разрешение на блокировку страниц в памяти в настройках локальной политики безопасности; Домашняя или начальная версии Windows не включают интерфейс для этого, однако для этого также есть руководства.

В этом разделе предполагается, что вы используете Windows Professional, Enterprise, Ultimate или Server:

  1. В меню "Пуск" откройте "Локальная политика безопасности" (в разделе "Администрирование").
  2. В разделе «Локальные политики\Назначение прав пользователя» дважды щелкните параметр «Блокировать страницы в памяти».
  3. Нажмите «Добавить пользователя или группу» и введите свое имя пользователя Windows.
  4. Либо выйдите из системы, а затем войдите снова, либо перезагрузите компьютер — к сожалению, без этого шага он не будет работать.

Редактирование ярлыка для запуска от имени администратора

Кроме того, программы необходимо запускать с правами администратора, чтобы использовать большие выделенные страницы. Чтобы не каждый раз щелкать правой кнопкой мыши и выбирать «Запуск от имени администратора», вы можете отредактировать ярлык, чтобы он делал это автоматически, в разделе «Совместимость»:


Устранение неполадок

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

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

Введение в большие страницы

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

Большие страницы, а иногда и огромные страницы – это способ уменьшить нагрузку на кэши TLB процессора. Эти кэши используются для ускорения преобразования виртуальных адресов в адреса физической памяти. Большинство архитектур поддерживают несколько размеров страниц, часто с базовым размером страницы 4 КБ. Для приложений, использующих много памяти, например большие кучи Java, имеет смысл отображать память с большей степенью детализации страниц, чтобы увеличить вероятность попадания в TLB. На платформе x86-64 для этой цели можно использовать страницы размером 2 МБ и 1 ГБ, а для рабочих нагрузок, интенсивно использующих память, это может иметь большое значение.

LP Enabled

На приведенной выше диаграмме мы видим разницу при работе с большими страницами и без них для нескольких тестов SPECjbb® 1. Единственная разница в конфигурации заключается в том, что в высокопроизводительных JVM включены большие страницы. Результаты впечатляют, и для многих рабочих нагрузок Java использование больших страниц является большим выигрышем.

Включение больших страниц

Общий переключатель для включения больших страниц для Java — это -XX:+UseLargePages , но для использования больших страниц также необходимо правильно настроить ОС. Давайте посмотрим, как это делается для Linux и Windows.

Линукс

В Linux существует два основных способа использования JVM больших страниц: прозрачные огромные страницы и страницы HugeTLB. Они отличаются по способу настройки, а также немного по своим характеристикам производительности.

Огромные прозрачные страницы

Прозрачные огромные страницы, или сокращенно THP, — это способ упростить использование и включение больших страниц в Linux. Когда эта функция включена, ядро ​​Linux будет пытаться использовать большие страницы для достаточно больших резервирований, подходящих для использования THP. Поддержка THP может быть настроена на трех разных уровнях:

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

madvise — прозрачные огромные страницы используются только в том случае, если приложение использует madvise() с флагом MADV_HUGEPAGE, чтобы отметить, что определенные сегменты памяти должны поддерживаться большими страницами.

никогда — прозрачные огромные страницы никогда не используются.

Конфигурация хранится в /sys/kernel/mm/transparent_hugepage/enabled и может быть легко изменена следующим образом 2 :

JVM поддерживает использование THP при настройке в режиме madvise, но его необходимо включить с помощью -XX:+UseTransparentHugePages . Когда это будет сделано, куча Java, а также другие внутренние структуры данных JVM будут поддерживаться прозрачными огромными страницами.

Чтобы ядро ​​могло удовлетворить запросы на использование прозрачных огромных страниц, должно быть достаточно доступной непрерывной физической памяти. Если ядра нет, оно попытается дефрагментировать память, чтобы удовлетворить запрос. Дефрагментацию можно настроить несколькими способами, а текущая политика хранится в /sys/kernel/mm/transparent_hugepage/defrag. Дополнительные сведения об этой и других конфигурациях см. в документации по ядру.

Огромные страницы TLB

Этот тип больших страниц предварительно выделяется ОС и потребляет физическую память, используемую для их резервного копирования. Приложение может резервировать страницы из этого пула, используя mmap() с флагом MAP_HUGETLB. Это способ по умолчанию использовать большие страницы для JVM в Linux, и его можно включить либо с помощью параметра -XX:+UseLargePages, либо с помощью специального флага -XX:+UseHugeTLBFS .

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

Чтобы настроить этот тип больших страниц, сначала проверьте доступные размеры страниц:

Затем настройте количество страниц, которые вам нравятся для заданного размера, например 2 :

Это пытается выделить 2500 страниц по 2 МБ. Всегда следует читать значение, фактически хранящееся в nr_hugepages, чтобы убедиться, что ядро ​​может выделить запрошенную сумму.

По умолчанию JVM будет использовать большой размер страницы по умолчанию для среды при попытке зарезервировать большие страницы, чтобы увидеть запуск большого размера страницы по умолчанию для вашей системы:

Если вы хотите использовать другой большой размер страницы, это можно сделать, установив флаг JVM LargePageSizeInBytes .Например, чтобы использовать страницы размером 1 ГБ, запустите параметр -XX:LargePageSizeInBytes=1g .

Дополнительную информацию о страницах HugeTLB также можно найти в документации ядра.

Какой использовать

У обоих подходов есть свои плюсы и минусы, и какой из них выбрать, зависит от нескольких аспектов. THP проще в настройке и использовании, но у вас больше контроля при использовании страниц HugeTLB. Если вас больше всего беспокоит задержка, вам, вероятно, следует использовать страницы HugeTLB, поскольку вы никогда не будете останавливаться в ожидании, пока ОС освободит достаточно непрерывной памяти. В качестве альтернативы вы можете настроить параметр дефрагментации THP, чтобы он не останавливался, если нет доступных больших страниц, но вместо этого это может привести к снижению пропускной способности. Если вас беспокоит объем памяти, THP — лучший выбор, чтобы избежать предварительной фиксации всей кучи Java.

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

Окна

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

  1. Запустите gpedit.msc
  2. Найдите «Назначение прав пользователя» в разделе «Конфигурация компьютера» > «Параметры Windows» > «Параметры безопасности» > «Локальные политики».
  3. Найдите «Блокировать страницы в памяти» и дважды щелкните по нему.
  4. Нажмите «Добавить пользователя или группу» и добавьте нужного пользователя.
  5. Выйдите из системы или перезапустите ее, чтобы изменения вступили в силу.

После предоставления этого разрешения JVM сможет использовать большие страницы при запуске с параметром -XX:+UseLargePages . Реализация больших страниц JVM в Windows работает очень похоже на страницы HugeTLB в Linux. Все резервирование, поддерживаемое большими страницами, фиксируется заранее, чтобы гарантировать отсутствие сбоев в дальнейшем.

До недавнего времени существовала ошибка, не позволявшая G1, сборщику мусора по умолчанию, использовать большие страницы для куч размером более 4 ГБ в Windows. Теперь это исправлено, и в дальнейшем запуск больших серверов Minecraft с G1 должен иметь хороший прирост за счет включения больших страниц.

Проверка JVM

После правильной настройки среды и включения Java для работы с большими страницами полезно убедиться, что JVM действительно использует большие страницы. Конечно, вы можете использовать свой любимый инструмент ОС, чтобы проверить это, но у JVM также есть несколько опций ведения журнала, которые помогут в этом. Чтобы увидеть некоторые базовые настройки GC, вы можете запустить с -Xlog:gc+init . С G1 вы получите следующий вывод:

Это выполняется в Linux, и мы видим, что Поддержка больших страниц включена. Он говорит Explicit, что означает, что используются страницы HugeTLB. При запуске с параметром -XX:+UseTransparentHugePages строка журнала будет выглядеть так:

Приведенное выше показывает только, включены ли большие страницы или нет. Если вам нужна более подробная информация о том, какие части JVM, использующие большие страницы, вы можете включить -Xlog:pagesize и получить такой вывод:

Это довольно подробная информация, но это хороший способ проверить, какие части JVM поддерживаются большими страницами. Выходные данные выше созданы с использованием JDK 16, и в нем есть ошибка, из-за которой размеры страниц CodeHeap неверны, они также поддерживаются большими страницами.

Чтобы это работало, вам необходимо иметь разрешение на запись в рассматриваемые файлы. ↩ ↩ 2

Это не относится к куче ZGC, которая вместо этого обрабатывает ошибки фиксации, ограничивая размер кучи. ↩

Какую команду я могу использовать для этого? Большие страницы уже включены в локальной политике безопасности.

заранее спасибо, Эрик

Текст был успешно обновлен, но возникли следующие ошибки:

ari2asem прокомментировал 5 ноября 2019 г.

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

прокомментировал mechanator 6 ноября 2019 г.

исходный файл xmr-stak config.txt:
/*

  • ПОДДЕРЖКА БОЛЬШИХ СТРАНИЦ
  • Для больших страниц требуется правильно настроенная ОС. Это может быть сложно, если вы не привыкли к системному администрированию,
  • Но производительность того стоит — вы получите прирост примерно на 20 %. Режим медленной памяти
  • имеется в виду в качестве резервной копии, вы не получите там блестящих результатов. Если у вас возникли проблемы, особенно
  • для Windows ознакомьтесь с распространенными проблемами в файле README.
  • По умолчанию мы пытаемся выделить большие страницы. Это означает, что вам нужно "Запустить от имени администратора" в Windows.
  • Вам необходимо изменить групповые политики вашей системы, чтобы разрешить блокировку больших страниц. Вот шаги из MSDN
    1. В меню "Пуск" нажмите "Выполнить". В поле "Открыть" введите gpedit.msc.
    1. В консоли редактора локальной групповой политики разверните узел Конфигурация компьютера, а затем разверните Параметры Windows.
    1. Разверните Параметры безопасности, а затем разверните Локальные политики.
    1. Выберите папку «Назначение прав пользователя».
    1. Политики будут отображаться в области сведений.
    1. На панели дважды щелкните Заблокировать страницы в памяти.
    1. В диалоговом окне «Локальные параметры безопасности — блокировка страниц в памяти» нажмите «Добавить пользователя или группу».
    1. В диалоговом окне "Выбор пользователей, учетных записей служб или групп" добавьте учетную запись, для которой вы будете запускать майнер.
    1. Перезагрузите компьютер, чтобы изменения вступили в силу.
  • Кроме того, Windows часто фрагментирует память. Если вы работаете в системе с 4–8 ГБ ОЗУ, вам может понадобиться
  • чтобы отключить все автоматически запускаемые приложения и перезагрузиться, чтобы иметь достаточно большой кусок непрерывной памяти.
  • В Linux вам нужно будет настроить поддержку больших страниц "sudo sysctl -w vm.nr_hugepages=128" и увеличить ваш
  • улимит -l. Для этого вам нужно добавить следующие строки в /etc/security/limits.conf - "* soft memlock 262144"
  • и "* hard memlock 262144". Вы также можете сделать это в стиле Windows и просто запустить от имени пользователя root, но это НЕ
  • рекомендуется из соображений безопасности.
  • Блокировка памяти означает, что ядро ​​не может выгрузить страницу на диск, что маловероятно.
  • система командной строки, не испытывающая недостатка памяти. Я не заметил никакой разницы в системе CLI Linux между
  • заблокированная и разблокированная память. Если это ваша установка, см. опцию «no_mlck».
    */

ari2asem прокомментировал 6 ноября 2019 г. •

@механатор . Спасибо за ваши старания. все, что вы упоминаете, я знал это. все в вашем тексте для меня ничего нового,

Читайте также: