Under Windows, huge pages (1GB) are not supported — yet!
To use large pages (2-4MB) pages you specifically need to give your user the «lock pages in memory» privilege using Local Security Policy.
Note: at this time, Windows Home, Starter versions do not suppport changing privileges thus this feature cannot be enabled through «official means». We cannot advise you of «alternative means».
For Windows Professional, Enterprise, Ultimate or Server:
Please see this article on how large pages and TLBs affect memory latency and memory bandwidth:
COOL RASPBERRY PI PROJECTS WITH NODE.JS SOCKET.IO APPS
Search form is empty!
Xmr stak by default will try to allocate large pages. This means you need to «Run As Administrator» on Windows and you need to edit your system’s group policies to enable locking large pages.
Unfortunately, Windows 10 Home doesn’t have gpedit.msc to enable the Lock Pages in Memory Option.
The solution is to download and install Windows Server 2003 Resource Kit Tools from microsoft website. The Microsoft Windows Server 2003 Resource Kit Tools are a set of tools to help administrators streamline management tasks such as troubleshooting operating system issues, managing Active Directory, configuring networking and security features, and automating application deployment.
Open and run the command prompt as an admin (right click and select from the menu)
In the command line write
you must replace mywindowsaccountemaillogin with your current windows username or email.
2. Click on «Task Manager.»
3. In the new menu, select the «Users» tab. Your username will be listed here.
As result if everything is going well, the system will answer with this message:
ОБЛАСТЬ ПРИМЕНЕНИЯ: SQL Server База данных SQL Azure Azure Synapse Analytics (хранилище данных SQL) Parallel Data Warehouse APPLIES TO: SQL Server Azure SQL Database Azure Synapse Analytics (SQL DW) Parallel Data Warehouse
Эта политика Windows определяет, какие учетные записи могут использовать процесс для сохранения данных в физической памяти, чтобы система не отправляла страницы данных в виртуальную память на диске. This Windows policy determines which accounts can use a process to keep data in physical memory, preventing the system from paging the data to virtual memory on disk.
Блокировка страниц в памяти может повысить производительность, если требуется подкачка памяти на диск. Locking pages in memory may boost performance when paging memory to disk is expected.
- Включение параметра «Блокировка страниц в памяти» To enable the lock pages in memory option
- Huge Pages в PostgreSQL
- Поддержка больших страниц памяти и ее влияние на майнинг
- Зачем нужно включать поддержку huge pages в Ubuntu?
- Проверка ОС Ubuntu на предмет включения huge pages
- Включение поддержки адресации huge pages в Ubuntu
- Как подсчитать количество huge pages для выдления ядром системы Ubuntu?
- Блокировка страниц в памяти Lock pages in memory
- Справочные материалы Reference
- Возможные значения Possible values
- Рекомендации Best practices
- Location Location
- Значения по умолчанию Default values
- Управление политикой Policy management
- Групповая политика Group Policy
- Вопросы безопасности Security considerations
- Уязвимость Vulnerability
- Противодействие Countermeasure
- Возможное влияние Potential impact
- Преимущества и недостатки HugePages
- Часть 1: проверяем, что hugepages включены в Linux (оригинал здесь)
- Как изменить значение по умолчанию
- Часть 2: Преимущества и недостатки HugePages
- Виртуальная память
- Что такое страницы?
- Буфер ассоциативной трансляции (TLB)
- Hugepages приходят на помощь
- Подмена Hugepages
- Аллокация в памяти
- Выборочное применение hugepages
- 💥 Видео
Включение параметра «Блокировка страниц в памяти» To enable the lock pages in memory option
В меню Пуск выберите команду Выполнить. On the Start menu, click Run. В окне Открыть введите gpedit.msc. In the Open box, type gpedit.msc.
В консоли Редактор локальных групповых политик разверните узел Конфигурация компьютера, затем узел Конфигурация Windows. On the Local Group Policy Editor console, expand Computer Configuration, and then expand Windows Settings.
Разверните узлы Настройки безопасностии Локальные политики. Expand Security Settings, and then expand Local Policies.
Политики будут показаны на панели подробностей. The policies will be displayed in the details pane.
На этой панели дважды щелкните параметр Блокировка страниц в памяти. In the pane, double-click Lock pages in memory.
В диалоговом окне Параметр локальной безопасности — блокировка страниц в памяти щелкните Добавить пользователя или группу. In the Local Security Setting — Lock pages in memory dialog box, click Add User or Group.
В диалоговом окне Выбор пользователей, учетных записей служб или групп выберите учетную запись службы SQL Server. In the Select Users, Service Accounts, or Groups dialog box, select the SQL Server Service account.
Чтобы этот параметр вступил в силу, перезапустите службу SQL Server. Restart the SQL Server Service for this setting to take effect.
Видео:How To Activate Huge-Pages on WindowsСкачать
Huge Pages в PostgreSQL
В PostgreSQL начиная с версии 9.4 появилась поддержка больших страниц. Это очень хорошая новость, с большими страницами я познакомился когда работал с виртуализацией. Коротко о чем же речь. В ОС Linux работа с памятью основывается на обращении к страницам размер которых равен 4kB (на самом деле зависит от платформы, проверить можно через getconf PAGE_SIZE), так вот когда объем памяти переваливает за несколько десятков, а то и сотни гигабайт управлять ею становится сложнее, увеличиваются накладные расходы на адресацию памяти и поддержание страничных таблиц. Для облегчения жизни и были придуманы большие страницы, размер которых может быть 2MB а то и 1GB. За счет использования больших страниц можно получить ощутимый прирост скорости работы и увеличение отзывчивости в приложениях которые активно работают с памятью. Как я уже отметил, впервые я столкнулся с большими страницами при работе с виртуализацией, в частности с KVM. Проведенные в свое время тесты показали что прирост производительности виртуальных машин составил от 7 до 10% (измерялось все это дело синтетическими тестами различных сервисов типа redis/memcache/postgres/etc внутри виртуальных машин). Теперь это появилось в PostgreSQL.
Итак вернемся к теме статьи, к поддержке больших страниц в PostgreSQL. Если честно, я давно этого ждал. Вобще запустить PostgreSQL с поддержкой больших страниц можно было и раньше, с помощью libhugetlbfs. Однако теперь есть встроенная поддержка. Итак ниже описание процесса как настроить и запустить PostgreSQL с поддержкой больших страниц.
Для начала следует убедиться что ядро поддерживает большие страницы. Проверяем конфиг ядра на предмет наличия опций CONFIG_HUGETLBFS и CONFIG_HUGETLB_PAGE.
В случае отсутствия этих опций, ничего не заработает и ядро следует пересобрать (актуально для Gentoo например).
Очевидно что нам понадобится PostgreSQL версии 9.4. Установку пакетов и инициализацию кластера оставляю за кадром, т.к. в зависимости от дистрибутива способ будет отличаться. Переходим сразу к файлу конфигурации postgresql.conf. За поддержку больших страниц отвечает параметр huge_page который может принимать три значения, off — не использовать большие страницы, on — использовать большие страницы, try — попытаться использовать большие страницы и в случае недоступности откатиться на использование обычных страниц. Значение try используется по-умолчанию и является безопасным вариантом. В случае on, сервис не запустится если большие страницы не определены в системе (или их недостаточно). В случае запуска можно получить такую ошибку:
FATAL: could not map anonymous shared memory: Cannot allocate memory
HINT: This error usually means that PostgreSQL’s request for a shared memory segment exceeded available memory, swap space or huge pages. To reduce the request size (currently 148324352 bytes), reduce PostgreSQL’s shared memory usage, perhaps by reducing shared_buffers or max_connections.
Итак, правим postgresql.conf (мой postgresql.conf располагается в месте стандартном для RHEL-based дистрибутивов):
Теперь включаем поддержку больших страниц в системе, по-умолчанию они не задействованы. Расчет страниц приблизительный и здесь следует опираться на то сколько памяти вы готовы выделить под нужды СУБД. Отмечу что значение измеряется в страницах размером 2Mb, если вы хотите выделить 16GB, то это будет 8000 страниц.
Официальная документация предлагает опираться на значение VmPeak из status файла который размещен в /proc/PID/ директории который соответствует номеру процесса postmaster. VmPeak как следует из названия это пиковое значение использования виртуальной памяти. Этот вариант позволяет определить минимальную планку от которой следует отталкиваться, но на мой вгляд такой способ определения тоже носит случайный характер.
Переходим к запуску PostgreSQL. В зависимости от системы инициализации способ запуска может отличаться, у меня модный-молодежный systemd.
Утилизацию больших страниц можно посмотреть здесь.
На этом собственно все, можно переходить к бенчмаркам вашими конкретными workloads. Спасибо за внимание!
Видео:fix huge page unavailable in xmrig windows 10Скачать
Поддержка больших страниц памяти и ее влияние на майнинг
При майнинге криптовалюты Monero и ряда других монет на процессорах можно добиться серьезного увеличения хешрейта при включении поддержки адресации больших страниц памяти (huge pages в Linux или large pages в Windows).
Опция закрепления страниц в памяти отдает приоритет хранению данных приложения в быстродействующей оперативной физической памяти. Благодаря этому сокращается количество операций постраничного разбиения данных и количество операций запись/чтение в виртуальной памяти (более медленной) на диске (в файл подкачки).
На алгоритме RandomX при майнинге Monero (XMR) закрепление страниц в памяти (huge/large pages) дает увеличение хешрейта порядка 30%, а в некоторых случаях и больше (50-60%).
Скриншот майнера xmrig с работающей адресацией huge pages в OS Windows:
Нужно понимать, что назначение всей свободной физической памяти одному или нескольким процессам может отобрать большую часть доступного ОЗУ в ущерб другим процессам.
В случае одновременного использования рига для майнинга на CPU и GPU это может спровоцировать замедление майнинга на видеокартах, отказы/зависания.
Для предотвращения проблем нужно верно расходовать ресурсы: не злоупотреблять большим количеством потоков майнинга на CPU (использовать один поток на каждые 2 Мб кеша L2), оставлять ресурсы для работы ОС и майнеров на GPU, периодически отслеживать производительность компьютера (например, в диспетчере задач).
.
В операционной системе Windows включение закрепления страниц в памяти делается довольно просто с помощью политики безопасности «Блокировка страниц в памяти».
В ОС типа Ubuntu для включения этой полезной опции нужно проделать ряд дополнительных телодвижений.
Видео:Оптимизация xmrig для монеты monero. Копаем monero на полную!Скачать
Зачем нужно включать поддержку huge pages в Ubuntu?
ОС Ubuntu заточена на экономное расходование ресурсов, а «пожирание» памяти майнером не является таковым. Поэтому для выделения майнеру ресурсов нужно «немного поработать напильником». Но это стоит затраченных усилий и времени.
Например, на древнем (2008 год) процессоре Xeon X3330 (2,6 ГГц), не умеющем вычислять по инструкциям AES, при майнинге Монеро на Random X хешрейт без huge pages равен 200-210 h/s (на двух потоках). При их включении скорость вычислений возрастает до порядка 270 h/s (выигрыш на 25-30%).
На более современных процессорах разница может быть еще более существенной.
Скриншот майнера xmrig, работающего без включения huge pages:
Рассмотрим подробнее, как проверить включена ли поддержка huge pages в Linux-подобных системах и как их задействовать для майнинга (на примере XUBUNTU 16.04).
Видео:ENABLE HUGE PAGE PERMITION for windowsСкачать
Проверка ОС Ubuntu на предмет включения huge pages
Прежде всего, нужно проверить, имеется ли поддержка hugepages на уровне железа. Это делается с помощью команды:
При наличии поддержки huge pages на аппаратном уровне нужно проверить, задействованы ли они и сколько страниц памяти зарезервировано. Для этого в терминале Ubuntu вводят команду:
Эта команда показывает число страниц памяти, которые ядро системы (kernel) выделяет (резервирует) на нужды пользователя.
Скриншот терминала, отображающего информацию о включении и числе выделенных hugepages:
Для включения, а также изменения количества выделенной физической памяти на постоянной основе используется изменение параметров ядра Ubuntu через файл конфигурации sysctl.conf.
Видео:ПРОЗРАЧНАЯ ПАНЕЛЬ ЗАДАЧ ЗА 15 СЕК НА WINDOWS 10 БЕЗ ЛИШНИХ ПРОГРАММ!!!!!!Скачать
Включение поддержки адресации huge pages в Ubuntu
В версии xmrig 5.2.0 и выше есть возможность включения поддержки huge pages на лету, но это требует рут-привилегий для программы-майнера.
Эту же операции для текущей сессии (до перезагрузки системы) можно сделать (с привилегиями root) командой:
Более разумно обеспечить работоспособность больших страниц памяти на этапе загрузки ядра с помощью конфигурационного файла sysctl.conf.
Это делается командой:
где 1280 – это число зарезервированных страниц памяти.
Можно сделать аналогичную операцию с помощью утилиты nano и команды:
В появившемся окне терминала нужно пролистать sysctl.conf до конца и вписать в него:
Затем нужно сохранить изменения (клавиши ctrl+O), нажать Enter, Ctrl+x и перезагрузить компьютер (sudo reboot).
Видео:Некоторые улучшения производительности: Huge Pages / PostgreSQL Meetup / Илья Космодемьянский и др.Скачать
Как подсчитать количество huge pages для выдления ядром системы Ubuntu?
Если зарезервировать слишком мало страниц, то майнер не будет работать в полную силу. Например, при резервировании 128 страниц xmrig показывает, что имеется всего 11% от необходимых 1168 страниц:
Исходя из информации в майнере, для его работы нужно 1168 страниц больших страниц памяти:
Майнер xmrig на RandomX с 1168 страницами памяти показывает вроде бы достаточное количество страниц, но все равно не использует их:
По рекомендациям разработчиков xmrig, для майнинга на алгоритмах типа RandomX нужно 1280 страниц на одну ноду NUMA и 128 страниц – для других алгоритмов.
Это совпадает с практикой, что видно на скрине майнера компьютера с выделенными 1280 hugepages:
Использование 1280 зарезервированных страниц означает, что в системе станет меньше на не менее 1280х2=2560 Мб доступной памяти (при стандартном размере страницы памяти в 2MB ).
Поэтому при ограниченном ОЗУ использование huge pages может привести к обратному эффекту – снижению хешрейта из-за нехватки физической памяти для нужд системы.
Видео:Как вернуть Системный Трей на Windows 10 Tray icon missingСкачать
Блокировка страниц в памяти Lock pages in memory
Область применения Applies to
В этой статье описываются лучшие методики, расположение, значения, **** управление политиками и вопросы безопасности для страниц блокировки в параметре политики безопасности памяти. Describes the best practices, location, values, policy management, and security considerations for the Lock pages in memory security policy setting.
Видео:Как показать секунды в часах на панели задач Windows 10 / How to Show Seconds in Windows 10 TaskbarСкачать
Справочные материалы Reference
Этот параметр политики определяет, какие учетные записи могут использовать процесс хранения данных в физической памяти, что не позволяет компьютеру разгона данных в виртуальную память на диске. This policy setting determines which accounts can use a process to keep data in physical memory, which prevents the computer from paging the data to virtual memory on a disk.
Как правило, приложение, запущенные в Windows, может согласовывать объем физической памяти, а в ответ на запрос приложение начинает перемещать данные из ОЗУ (например, кэша данных) на диск. Normally, an application running on Windows can negotiate for more physical memory, and in response to the request, the application begins to move the data from RAM (such as the data cache) to a disk. При перемещении на диск памяти, доступной для страниц, операционная система не будет использовать больше ОЗУ. When the pageable memory is moved to a disk, more RAM is free for the operating system to use.
Включение этого параметра политики для определенной учетной записи (учетной записи пользователя или учетной записи процесса для приложения) предотвращает разбавку данных. Enabling this policy setting for a specific account (a user account or a process account for an application) prevents paging of the data. Таким образом, объем памяти, который Windows может освободить под нагрузкой, ограничен. Thereby, the amount of memory that Windows can reclaim under pressure is limited. Это может привести к снижению производительности. This could lead to performance degradation.
Примечание. При настройке этого параметра политики производительность операционной системы Windows будет отличаться в зависимости от того, работают ли приложения в 32- или 64-битных системах и являются ли они виртуализированными образами. Note: By configuring this policy setting, the performance of the Windows operating system will differ depending on if applications are running on 32-bit or 64-bit systems, and if they are virtualized images. Производительность также будет отличаться в более ранних и более поздних версиях операционной системы Windows. Performance will also differ between earlier and later versions of the Windows operating system.
Константа: SeLockMemoryPrivilege Constant: SeLockMemoryPrivilege
Возможные значения Possible values
Рекомендации Best practices
Лучшие методики зависят от архитектуры платформы и приложений, работающих на этих платформах. Best practices are dependent on the platform architecture and the applications running on those platforms.
Location Location
Computer ConfigurationWindows SettingsSecurity SettingsLocal PoliciesUser Rights Assignment Computer ConfigurationWindows SettingsSecurity SettingsLocal PoliciesUser Rights Assignment
Значения по умолчанию Default values
В следующей таблице перечислены фактические и эффективные значения политики по умолчанию для последних поддерживаемых версий Windows. The following table lists the actual and effective default policy values for the most recent supported versions of Windows. Значения по умолчанию также можно найти на странице свойств политики. Default values are also listed on the policy’s property page.
Тип сервера или объект групповой политики Server type or GPO | Значение по умолчанию Default value |
---|---|
Default Domain Policy Default Domain Policy | Не определено Not defined |
Политика контроллера домена по умолчанию Default Domain Controller Policy | Не определено Not defined |
Параметры по умолчанию для автономного сервера Stand-Alone Server Default Settings | Не определено Not defined |
Действующие параметры по умолчанию для контроллера домена Domain Controller Effective Default Settings | Не определено Not defined |
Действующие параметры по умолчанию для рядового сервера Member Server Effective Default Settings | Не определено Not defined |
Действующие параметры по умолчанию для клиентского компьютера Client Computer Effective Default Settings | Не определено Not defined |
Видео:Как отобразить секунды в часах на панели задач в Windows 10, 11 ⌚Скачать
Управление политикой Policy management
В этом разделе описаны компоненты, средства и рекомендации, которые помогут в управлении этой политикой. This section describes features, tools, and guidance to help you manage this policy.
Для активации этого параметра политики не требуется перезагрузка компьютера. A restart of the computer is not required for this policy setting to be effective.
Изменения прав пользователя вступают в силу при его следующем входе в учетную запись. Any change to the user rights assignment for an account becomes effective the next time the owner of the account logs on.
Групповая политика Group Policy
Параметры применяются в следующем порядке с помощью объекта групповой политики (GPO), который будет перезаписывать параметры на локальном компьютере при следующем обновлении групповой политики: Settings are applied in the following order through a Group Policy Object (GPO), which will overwrite settings on the local computer at the next Group Policy update:
Если локальный параметр затеняется, это означает, что в настоящее время этот параметр контролируется GPO. When a local setting is greyed out, it indicates that a GPO currently controls that setting.
Видео:Вам понадобится приложение, чтобы открыть эту ссылку ms-gamingoverlay в Windows 10/11 (Как убрать)Скачать
Вопросы безопасности Security considerations
В этом разделе описывается, каким образом злоумышленник может использовать компонент или его конфигурацию, как реализовать меры противодействия, а также рассматриваются возможные отрицательные последствия их реализации. This section describes how an attacker might exploit a feature or its configuration, how to implement the countermeasure, and the possible negative consequences of countermeasure implementation.
Уязвимость Vulnerability
Пользователи со **** страницами блокировки в правой части памяти могут назначать физическую память нескольким процессам, что может привести к потере ОЗУ для других процессов или к отказу в обслуживании. Users with the Lock pages in memory user right could assign physical memory to several processes, which could leave little or no RAM for other processes and result in a denial-of-service condition.
Противодействие Countermeasure
Не назначать страницы блокировки в памяти пользователям каких-либо учетных записей. Do not assign the Lock pages in memory user right to any accounts.
Возможное влияние Potential impact
Нет. None. Конфигурация по умолчанию не определена. Not defined is the default configuration.
Видео:Видео #21. Настройка индексирования в Windows 10Скачать
Преимущества и недостатки HugePages
Перевод статьи подготовлен для студентов курса «Администратор Linux».
Ранее я рассказал о том, как проверить и включить использование Hugepages в Linux.
Эта статья будет полезна, только если у вас действительно есть, где использовать Hugepages. Я встречал множество людей, которые обманываются перспективой того, что Hugepages волшебным образом повысят производительность. Тем не менее hugepaging является сложной темой, и при неправильном использовании он способен понизить производительность.
Видео:Прозрачность интерфейса Windows 10. Как включить или отключить прозрачность Панели задач и меню ПускСкачать
Часть 1: проверяем, что hugepages включены в Linux (оригинал здесь)
Проблема:
Необходимо проверить, включены ли HugePages в вашей системе.
Решение:
Оно довольно простое:
Вы получите что-то вроде этого:
Вы увидите список доступных опций (always, madvise, never), при этом текущая активная опция будет заключена в скобки (по умолчанию madvise).
madvise означает, что transparent hugepages включены только для областей памяти, которые явно запрашивают hugepages с помощью madvise(2).
always означает, что transparent hugepages включены всегда и для всех процессов. Обычно это повышает производительность, но если у вас есть вариант использования, где множество процессов потребляет небольшое количество памяти, то общая нагрузка на память может резко возрасти.
never означает, что transparent hugepages не будут включаться даже при запросе с помощью madvise. Чтобы узнать больше, обратитесь к документации ядра Linux.
Как изменить значение по умолчанию
Вариант 1: Напрямую изменить sysfs (после перезагрузки параметр вернется к значению по умолчанию):
Вариант 2: Измените системное значение по умолчанию, перекомпилировав ядро с измененной конфигурацией (этот вариант рекомендуется только если вы используете собственное ядро):
Видео:МАЙНИНГ НА ПРОЦЕССОРЕ - Новый тренд | КАК НАСТРОИТЬСкачать
Часть 2: Преимущества и недостатки HugePages
Мы попытаемся выборочно объяснить преимущества, недостатки и возможные ошибки при использовании Hugepages. Поскольку технологически сложная и педантичная статья, вероятно, будет тяжелой для понимания людям, которые обманываются считая Hugepages панацеей, я пожертвую точностью в угоду простоты. Просто стоит иметь ввиду, что множество тем действительно сложны и поэтому сильно упрощены.
Обратите внимание, что мы говорим о 64-х разрядных x86 системах, работающих на Linux, и что я просто предполагаю, что система поддерживает transparent hugepages (так как не является недостатком то, что hugepages не подменяются), как это случается практически в любой современной среде Linux.
В ссылках ниже я прикреплю больше технического описания.
Виртуальная память
Если вы программист C++, вы знаете, что у объектов в памяти есть конкретные адреса (значения указателя).
Однако эти адреса необязательно отражают физические адреса в памяти (адреса в ОЗУ). Они представляют собой адреса в виртуальной памяти. Процессор имеет специальный модуль MMU (memory management unit), который помогает ядру сопоставлять виртуальную память с физическим местоположением.
Такой подход имеет множество преимуществ, но самые основные из них:
Что такое страницы?
Виртуальная память поделена на страницы. Каждая отдельная страница указывает на определенную физическую память, она может указывать на область в оперативной памяти, а может на адрес, назначенный физическому устройству, например видеокарте.
Большинство страниц, с которыми вы имеете дело, указывают либо на ОЗУ, либо подменяются (swap), то есть хранятся на жестком диске или SSD. Ядро управляет физическим расположением каждой страницы. Если осуществляется доступ к подмененной странице, ядро останавливает поток, который пытается получить доступ к памяти, считывает страницу с жесткого диска/SSD в оперативную память, а затем продолжает выполнение потока.
Этот процесс прозрачен для потока, то есть он не обязательно читает напрямую с жесткого диска/SSD. Размер нормальных страниц – 4096 байт. Размер Hugepages – 2 мегабайта.
Буфер ассоциативной трансляции (TLB)
Когда программа обращается к некоторой странице памяти, центральный процессор должен знать, с какой физической страницы считывать данные (то есть иметь виртуальную карту адресов).
В ядре есть структура данных (таблица страниц), которая содержит всю информацию об используемых страницах. С помощью этой структуры данных можно сопоставить виртуальный адрес с физическим адресом.
Однако таблица страниц довольно сложна и работает медленно, поэтому мы просто не можем каждый раз анализировать всю структуру данных, когда какой-либо процесс обращается к памяти.
К счастью в нашем процессоре есть TLB, который кэширует сопоставление виртуальных и физических адресов. Это значит, что несмотря на то, что нам нужно проанализировать таблицу страниц при первой попытке получить доступ, все последующие обращения к странице могут обрабатываться в TLB, что обеспечивает быструю работу.
Поскольку он реализован в качестве физического устройства (что делает его в первую очередь быстрым), его емкость ограничена. Поэтому, если вы захотите получить доступ к большему количеству страниц, TLB не сможет хранить сопоставление для всех них, вследствие чего ваша программа будет работать намного медленнее.
Hugepages приходят на помощь
Итак, что мы можем сделать, чтобы избежать переполнения TLB? (Мы предполагаем, что программе все еще нужен тот же объем памяти).
Вот тут-то и появляются Hugepages. Вместо 4096 байт, требующих всего одну запись в TLB, одна запись в TLB теперь может указывать на колоссальные 2 мегабайта. Будем предполагать, что TLB имеет 512 записей, здесь без Hugepages мы можем сопоставить:
Тогда как с ними мы можем сопоставить:
Именно поэтому Hugepages – это круто. Они могут повысить производительность без значительного приложения усилий. Но здесь есть существенные оговорки.
Подмена Hugepages
Ядро автоматически отслеживает частоту использования каждой страницы памяти. Если физической памяти (ОЗУ) недостаточно, ядро переместит менее важные (реже используемые) страницы на жесткий диск, чтобы освободить часть ОЗУ для более важных страниц.
В принципе, то же самое касается и Hugepages. Однако ядро может менять местами только целые страницы, а не отдельные байты.
Предположим, у нас есть такая программа:
В этом случае ядру нужно будет подменить (прочитать) целых 2 мегабайта информации с жесткого диска/SSD только для того чтобы вы прочитали один байт. Что касается обычных страниц, с жесткого диска/SSD надо прочитать всего 4096 байт.
Поэтому, если hugepage подменяется, ее чтение происходит быстрее, только если вам нужно получить доступ ко всей странице. Это значит, что если вы пытаетесь получить доступ случайным образом к различным частям памяти и просто считываете пару килобайт, вам следует использовать обычные страницы и больше ни о чем не беспокоиться.
С другой стороны, если вам нужно получать доступ к большой части памяти последовательно, hugepages увеличат вашу производительность. Тем не менее, вам нужно проверить это самостоятельно (а не на примере абстрактного ПО) и посмотреть, что будет работать быстрее.
Аллокация в памяти
Программисту может показаться, что вы “запрашиваете” 30 байт памяти из операционной системы и возвращаете указатель на некоторую виртуальную память. Но на самом деле malloc () — это просто функция C, которая вызывает изнутри функции brk и sbrk для запроса или освобождения памяти из операционной системы.
При этом для вас все происходит незаметно, так почему это должно вас волновать? А потому, что вызов free() не означает, что память обязательно возвращается сразу же операционной системе.
Обратите внимание, что фрагментация памяти является невероятно сложной темой, и даже незначительные изменения в программе могут значительно повлиять на нее. В большинстве случаев программы не вызывают значительной фрагментации памяти, но вы должны иметь ввиду, что если с фрагментацией в некоторой области кучи возникла проблема, hugepages могут только усугубить ситуацию.
Выборочное применение hugepages
После прочтения статьи, вы определили, какие части вашей программы могут извлечь выгоду из применения hugepages, а какие – нет. Так следует ли вообще включать hugepages?
Для начала, проверьте, что hugepages работают в режиме madvise(), с помощью инструкции в начале статьи.
Обратите внимание, что этот метод — просто рекомендации ядру по управлению памятью. Это не означает, что ядро будет автоматически использовать hugepages для заданной памяти.
Что почитать?
Есть вопрос? Напишите в комментариях!
💥 Видео
Как сделать прозрачную панель задач в любой Windows?Скачать
Не удается найти gpedit.msc в Windows 10Скачать
МАЙНИМ ZEPHYR НА КРИПТЕКС || НАСТРОЙКА HIVE OS WINDOWS || CPU RYZEN 9 5900X 5950X INTEL I7 8700KСкачать
Как включить отображение всех значков в области уведомлений windows 10Скачать
Huge Pages in Operating SystemСкачать
Переменные среды Windows 11 и Windows 10 — где находятся, как создать и настроитьСкачать
Быстрая окупаемость на процессорах. Майнинг и разгон Zephyr protocol | WINDOWS | HIVE OS | RAVE OSСкачать