extra-optimizations.rst 37 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593
  1. .. ARU (c) 2018 - 2024, Pavel Priluckiy, Vasiliy Stelmachenok and contributors
  2. ARU is licensed under a
  3. Creative Commons Attribution-ShareAlike 4.0 International License.
  4. You should have received a copy of the license along with this
  5. work. If not, see <https://creativecommons.org/licenses/by-sa/4.0/>.
  6. .. _extra-optimizations:
  7. ********************
  8. Экстра оптимизации
  9. ********************
  10. .. index:: cpu, governor, cpupower, scaling
  11. .. _cpu_governor:
  12. ============================
  13. Масштабирование частоты CPU
  14. ============================
  15. В Linux существует специальные модули ядра, так называемые драйверы
  16. масштабирования CPU. Они корректируют частоту вашего процессора в
  17. режиме реального времени в зависимости от используемой политики
  18. (``governor``) масштабирования частот процессора. Для x86 архитектуры
  19. стандартным таким драйвером в ядре Linux принято считать
  20. ``acpi-cpufreq``, который, как понятно из названия, осуществляет
  21. регулировку путем специальных вызовов APCI, которые устанавливают так
  22. называемый P-state (Peformance state) уровень для вашего процессора.
  23. Уровни P-State вашего процессора можно сравнить с коробкой передач у
  24. автомобиля: он может лететь на всей скорости, ехать с обычной
  25. автомобиля: он может лететь на всей скорости, ехать с обычной
  26. скоростью, и стоять на месте в ожидании того, когда надо будет
  27. сдвинуться с места. Собственно, по этой аналогии ``acpi-cpufreq`` и
  28. переключается между 3-х стандартных P-State уровней в зависимости от
  29. используемой политики масштабирования.
  30. .. _governors:
  31. ---------------------------------
  32. Политики масштабирования частоты
  33. ---------------------------------
  34. Вернемся к политикам масштабирования частоты. Их можно сравнить с
  35. планами электропитания в настройках Windows, только в отличии от них
  36. политик масштабирования в Linux довольно много: ``performance``,
  37. ``powersave``, ``userspace``, ``ondemand``,
  38. ``conservative``, ``schedutil``.
  39. Рассмотрим каждую из них подробнее:
  40. ``performance`` - как понятно из названия, данная политика
  41. используется для достижения максимальной производительности, так как
  42. она сильно снижает порог нагрузки, переходя через который процессор
  43. начинает работать на полную мощность. Хорошо подходит для настольных
  44. ПК, но не слишком желательно для использования на ноутбуках, где важна
  45. автономность. Обратите внимание, что поведение данной политики зависит
  46. от используемого драйвера масштабирования, об этом подробнее читайте
  47. далее в разделе :ref:`pstate-drivers`.
  48. ``powersave`` - полная противоположность ``performance``, минимизирует
  49. потребление энергии через занижение частот процессора до минимума.
  50. Может быть очень полезно для ноутбуков при работе от батареи. Обратите
  51. внимание, что поведение данной политики зависит от используемого
  52. драйвера масштабирования, об этом подробнее читайте далее в разделе
  53. :ref:`pstate-drivers`.
  54. ``ondemand`` - политика, которая регулирует частоту процессора на
  55. основе общей нагрузки на процессор, то есть частота прямо
  56. пропорциональна нагрузке: Чем выше нагрузка, тем больше частота, и
  57. наоборот, чем ниже, тем ниже и частота. Конечно, скорость возрастания
  58. частоты и нагрузки не всегда коррелируют между собой, ибо для принятия
  59. решения о том, когда нужно повышать частоту до максимальных значений,
  60. драйвер руководствуется значением параметра ``up_threshold`` (по
  61. умолчанию 80%), которое устанавливает порог максимальной нагрузки в
  62. процентах, которое должно достичь хотя бы одно из ядер вашего
  63. процессора. К примеру, если у вас есть два ядра, и в текущий момент
  64. времени драйвер масштабирования зафиксировал на одном ядре процессора
  65. нагрузку в 70%, а на другом в 81%, то он станет повышать их частоты в
  66. соответствии со значением ``up_threshold`` по умолчанию. Обратное
  67. решение - понижение частоты CPU, драйвер принимает в соответствии со
  68. значением другого параметра - ``down_threshold``, которое также
  69. устанавливает порог ниже которого должно пройти хотя бы одно ядро
  70. процессора, тогда частота будет понижена. Во всех остальных случаях
  71. частота будет регулироваться как обычно, то есть пропорционально общей
  72. нагрузке.
  73. Довольно хороший выбор для большинства конфигураций и задач.
  74. Рекомендуется к использованию.
  75. ``conservative`` - должно быть вы замечали, как запуская игру или
  76. "тяжёлое" приложение ваш компьютер или ноутбук начинает гудеть как
  77. самолет, так как происходит резкое повышение частот процессора и
  78. следовательно растет его температура. ``conservative`` очень похож на
  79. политику ``ondemand``, но он делает процесс увеличения частоты CPU
  80. более "гладким" и поступательным даже при значительном повышении
  81. нагрузки. Это может быть очень полезным, когда вы не хотите чтобы ваш
  82. ноутбук резко повышал свою температуру или уходил в так называемый
  83. "турбобуст".
  84. ``schedutil`` - регулирует частоту процессора на основе метрик
  85. планировщика CPU, например таких как количество активных процессов на
  86. ядро процессора. Не слишком рекомендуется в силу того, что
  87. использование данной политики часто приводит к резким скачкам частоты
  88. без необходимости. Несмотря на это, данная политика используется по
  89. умолчанию в стандартном ядре Arch Linux.
  90. ``userspace`` - данная политика является заглушкой, которая позволяет
  91. передать полномочия управления частотой с драйвера масштабирования на
  92. программу, запущенную с правами root, в пространстве пользователя,
  93. которая и будет осуществлять процесс регулировки частоты в
  94. соответствии с собственной логикой. В большинстве случаев вам никогда
  95. не понадобиться эта политика.
  96. .. index:: amd-pstate, intel-pstate, cpufreq
  97. .. _pstate-drivers:
  98. ------------------------------------------
  99. Альтернативные драйверы масштабирования
  100. ------------------------------------------
  101. Современные процессоры Intel и AMD могут самостоятельно осуществлять
  102. масштабирование своей частоты на основе информации получаемой через
  103. механизм *CPPC* (Collaborative Processor Performance Control), с
  104. которым процессор получает от драйвера масштабирования "подсказку", о
  105. том какой уровень производительности следует выдавать в данный момент.
  106. Специально для работы с этим механизмом были созданы драйверы
  107. amd-pstate (поддерживается процессорами Zen 2 и выше) и intel-pstate
  108. (поддерживается Sandy Bridge и выше) для процессоров AMD и Intel
  109. соответственно.
  110. .. note:: Для процессоров Intel термин CPPC обычно не используется,
  111. так как их технология для автономного управления частотой
  112. процессора называется HWP (Hardware P-states), но суть остается той
  113. же, что и в случае с CPPC.
  114. У драйверов P-state существует несколько режимов работы. Как для
  115. intel-pstate, так и для amd-pstate есть ``active`` и ``passive``
  116. режим, но для amd-pstate есть также ``guided`` режим.
  117. В режиме ``active``, который используется по умолчанию во всех P-state
  118. драйверах, управление частотой выполняется полностью автономно самим
  119. процессором, но он получает от драйвера масштабирования "подсказку" -
  120. так называемый уровень ``energy_performance_preference`` (далее EPP),
  121. на основе которого процессор понимает с каким уклоном ему регулировать
  122. собственную частоту. Таких уровней всего пять: ``power``,
  123. ``balance_power``, ``default``, ``balance_performance``,
  124. ``performance``. Как понятно из названия, эти уровни указывают
  125. процессору предпочтение к тому, чтобы он работал на максимальную
  126. мощность (при использовании уровней ``balance_performance`` и
  127. ``performance``) или наоборот экономил энергию и чаще принимал решение
  128. о понижении своей частоты или уходе в состояние сна. По умолчанию
  129. используется ``default``, что представляет собой баланс между
  130. максимальной производительностью и энергосбережением.
  131. Важно отметить, что классические политики для управления частоты,
  132. которые мы описывали ранее, отходят на второй план, и более того, в
  133. режиме ``active`` вы сможете выбрать всего две "фиктивные" политики
  134. масштабирования, это ``powersave`` и ``performance``. Обе из них не
  135. оказывают того влияния на частоту процессора, которое мы приписывали
  136. им ранее, так как в режиме ``active`` драйвер не может самостоятельно
  137. устанавливать частоту процессора и теперь это зависит только от
  138. используемого значения EPP. Поэтому при выборе ``performance``
  139. политики вы на самом деле просто измените текущий уровень EPP на
  140. ``performance``, значение которого P-state драйвер передаст процессору
  141. через специальный регистр. Но при переключении политики на
  142. ``powersave`` уровень EPP не измениться и вы должны будете установить
  143. его самостоятельно (об этом читайте далее).
  144. При использовании режима ``passive`` P-State драйвер может напрямую
  145. устанавливать желаемый уровень производительности, в связи с чем в нем
  146. доступен полный набор политик масштабирования, о которых мы говорили
  147. ранее. При этом установить уровень EPP становится невозможно, так как
  148. процессор уже не управляет частотой полностью самостоятельно, а
  149. ожидает переключения уровня P-State со стороны драйвера
  150. масштабирования. Данный режим отличается от использования
  151. классического драйвера ``acpi-cpufreq`` тем, что драйвер переключается
  152. не между 3-мя уровнями P-State, которые определены стандартом ACPI, а
  153. между сразу всеми доступными диапазонами частоты для вашего
  154. процессора, что гораздо эффективнее.
  155. Для драйвера ``amd-pstate`` существует также третий режим работы -
  156. ``guided``. Он работает аналогично режиму ``active``, позволяя
  157. процессору самому управлять частотой, но при этом драйвер может
  158. устанавливать процессору пороги минимальной и максимальной частоты,
  159. что позволяет использовать классические политики масштабирования как в
  160. случае с ``passive`` режимом.
  161. Переключение между всеми тремя режимами может быть осуществлено как
  162. при помощи соответствующих параметров ядра ``amd_pstate`` (например,
  163. ``amd_pstate=guided``) или ``intel_pstate`` в зависимости от
  164. используемого драйвера масштабирования, так и прямо во время работы
  165. системы при помощи файла ``status`` на псевдофайловой системе sysfs:
  166. .. tab-set::
  167. .. tab-item:: AMD
  168. ::
  169. echo "passive" | sudo tee /sys/devices/system/cpu/amd_pstate/status
  170. .. tab-item:: Intel
  171. ::
  172. echo "passive" | sudo tee /sys/devices/system/cpu/intel_pstate/status
  173. .. index:: cpupower, cpufreq
  174. .. _cpufreq_tuning:
  175. -------------------------------------
  176. Настройка параметров масштабирования
  177. -------------------------------------
  178. Перейдем от теории к практике. Чтобы изменить текущую политику
  179. масштабирования частоты можно воспользоваться множеством различных
  180. способов, начиная от способа "руками" при помощи sysfs, заканчивая
  181. специализированными утилитами как ``cpupower`` и
  182. ``power-profiles-daemon``, которые мы и будем использовать для
  183. удобства. Для начала установим программу ``cpupower``::
  184. sudo pacman -S cpupower
  185. С её помощью мы можем быстро увидеть информацию о текущей политике
  186. масштабирования, используемом драйвере, а также текущую частоту::
  187. cpupower frequency-info
  188. Установить желаемую политику масштабирования можно через команду
  189. ``frequency-set``. К примеру, установим политику ``performance``::
  190. sudo cpupower frequency-set -g performance
  191. .. note:: Если команда ``cpupower frequency-info`` указывает на то,
  192. что используется P-State драйвер в автономном режиме, то не следует
  193. пытаться применять классические политики масштабирования при помощи
  194. ``cpupower``, вместо этого нужно указывать значение параметра
  195. ``energy_performance_preference`` (EPP) при помощи sysfs,
  196. например::
  197. echo "balance_performance" | sudo tee /sys/devices/system/cpu/cpu*/cpufreq/energy_performance_preference
  198. Узнать доступные значения параметра EPP можно через::
  199. cat /sys/devices/system/cpu/cpu0/cpufreq/energy_performance_available_preferences
  200. Это значение будет той самой подсказкой для процессора, о которой
  201. мы говорили выше, в соответствии с которой он будет осуществлять
  202. самостоятельный контроль своей частоты.
  203. Если вы хотите ограничить максимальную частоту процессора, то вы
  204. можете использовать ключ ``-u``::
  205. # Ограничит максимальную частоту в 3 ГГц
  206. sudo cpupower frequency-set -u 3.0Ghz
  207. Все проделанные изменения выше работают только до перезагрузки
  208. системы, чтобы их сохранить нам понадобиться одноименный демон
  209. ``cpupower.service``::
  210. sudo systemctl enable --now cpupower
  211. А также изменить конфигурацию ``/etc/default/cpupower``, которая
  212. содержит все применяемые при запуске системы настройки. К примеру,
  213. если вам нужно изменить политику масштабирования на постоянной основе,
  214. то нужно указать значение параметра ``governor`` внутри
  215. ``/etc/default/cpupower``:
  216. .. code-block:: shell
  217. :caption: ``sudo nano /etc/default/cpupower``
  218. governor='conservative'
  219. .. note:: По умолчанию все строки в файле закоментированы. Чтобы
  220. раскоментировать нужные параметры уберите знак ``#`` в начале
  221. строки.
  222. ==========================================
  223. Отключение спящего режима и гибернации
  224. ==========================================
  225. У некоторых моделей материнских плат (в особенности китайских) может
  226. некорректно или полностью не работать выход из состояния сна или
  227. гибернации. В этом случае может быть полезным полностью отключить
  228. переход в них при помощи ``polkit`` - графического менеджера по
  229. передаче привелегий root пользователя, с помощью которого также можно
  230. ограничивать доступ к определенным ресурсам. Установить его можно из
  231. официальных репозиториев::
  232. sudo pacman -S polkit
  233. После установки необходимо создать файл с правилами, которые
  234. ограничивают переход в состояния сна или гибернации:
  235. .. code-block:: shell
  236. :caption: ``sudo nano /etc/polkit-1/rules.d/10-disable-suspend.rules``
  237. polkit.addRule(function(action, subject) {
  238. if (action.id == "org.freedesktop.login1.suspend" ||
  239. action.id == "org.freedesktop.login1.suspend-multiple-sessions" ||
  240. action.id == "org.freedesktop.login1.hibernate" ||
  241. action.id == "org.freedesktop.login1.hibernate-multiple-sessions")
  242. {
  243. return polkit.Result.NO;
  244. }
  245. });
  246. .. index:: swap, swapfile
  247. .. _disabling-swap:
  248. ===========================
  249. Отключение файла подкачки
  250. ===========================
  251. Для лучшей игровой производительности следует использовать файловую систему
  252. Btrfs и не задействовать файл подкачки (вместо него стоит использовать выше
  253. упомянутый zram-generator, конечно при условии что у вас не слишком слабый процессор
  254. и оперативной памяти больше чем 4 ГБ), а также без страха отключать фиксы
  255. уязвимостей, которые сильно урезают производительность процессора (о них
  256. написано в следующем разделе).
  257. ::
  258. sudo swapoff /dev/sdxy # Вместо xy ваше название (Например sdb1).
  259. sudo swapoff -a # Отключает все swap-разделы/файлы
  260. sudo rm -f /swapfile # Удалить файл подкачки с диска
  261. sudo nano /etc/fstab # Уберите самую нижнюю строчку полностью.
  262. .. index:: makepkg, clang, native-compilation, flags
  263. .. _force-clang-usage:
  264. ======================================================
  265. Форсирование использования Clang при сборке пакетов
  266. ======================================================
  267. В системах на базе ядра Linux различают две основных группы
  268. компиляторов, это LLVM и GCC. И те, и другие хорошо справляются с
  269. возложенными на них задачами, но LLVM имеет чуть большее преимущество
  270. с точки зрения производительности при меньших потерях в качестве
  271. конечного кода. Поэтому в целом применение компиляторов LLVM для
  272. сборки различных пакетов при задании флага -O3 (максимальная
  273. производительность) является совершенно оправданным, и может дать
  274. реальный прирост при работе программ.
  275. Компилятором для языков C/C++ в составе LLVM является Clang и Clang++
  276. соответственно. Его использование при сборке пакетов мы и будем
  277. форсировать через makepkg.conf
  278. Для начала выполним их установку::
  279. sudo pacman -Syu llvm clang lld mold openmp
  280. Теперь клонируем уже готовый конфигурационный файл ``/etc/makepkg.conf``
  281. под новыми именем в домашнюю директорию ``~/.makepkg-clang.conf``::
  282. cp /etc/makepkg.conf ~/.makepkg-clang.conf
  283. Это поможет нам в случае чего откатиться к использованию компиляторов
  284. GCC если возникнут проблемы со сборкой пакетов через LLVM/Clang.
  285. Теперь откроем выше скопированный файл и добавим туда после строки
  286. ``CHOST="x86_64-pc-linux-gnu"`` следующее::
  287. export CC=clang
  288. export CXX=clang++
  289. export LD=ld.lld
  290. export CC_LD=mold
  291. export CXX_LD=mold
  292. export AR=llvm-ar
  293. export NM=llvm-nm
  294. export STRIP=llvm-strip
  295. export OBJCOPY=llvm-objcopy
  296. export OBJDUMP=llvm-objdump
  297. export READELF=llvm-readelf
  298. export RANLIB=llvm-ranlib
  299. export HOSTCC=clang
  300. export HOSTCXX=clang++
  301. export HOSTAR=llvm-ar
  302. export HOSTLD=ld.lld
  303. export CXXFLAGS="${CFLAGS}"
  304. export LLVM=1
  305. export LLVM_IAS=1
  306. export CCLDFLAGS="$LDFLAGS"
  307. export CXXLDFLAGS="$LDFLAGS"
  308. При использовании Clang из пакета `llvm-git` (установка описана ниже)
  309. стоит включить использование LLVM OpenMP и компоновщика mold, а также
  310. другие флаги при сборке пакетов: ::
  311. CFLAGS="-march=native -mtune=native -O3 -fexceptions -fopenmp \
  312. -falign-functions=32 -fno-math-errno -fno-trapping-math \
  313. -fcf-protection=none -mharden-sls=none -Wp,-D_FORTIFY_SOURCE=2 \
  314. -Wformat -Werror=format-security -fstack-clash-protection"
  315. CXXFLAGS="$CFLAGS -Wp,-D_GLIBCXX_ASSERTIONS"
  316. export CFLAGS_KERNEL="$CFLAGS"
  317. export CXXFLAGS_KERNEL="$CXXFLAGS"
  318. export CFLAGS_MODULE="$CFLAGS"
  319. export CXXFLAGS_MODULE="$CXXFLAGS"
  320. export KBUILD_CFLAGS="$CFLAGS"
  321. export KCFLAGS="-O3"
  322. export KCPPFLAGS="$KCFLAGS"
  323. LDFLAGS="-Wl,-O3,--sort-common,--as-needed,-lgomp,-z,pack-relative-relocs,-z,relro,-z,now"
  324. LTOFLAGS="-flto=auto"
  325. RUSTFLAGS="-C opt-level=3 -C target-cpu=native -C link-arg=-z -C link-arg=pack-relative-relocs"
  326. #-- Make Flags: change this for DistCC/SMP systems
  327. MAKEFLAGS="-j$(nproc)"
  328. NINJAFLAGS="-j$(nproc)"
  329. OPTIONS=(strip docs !libtool !staticlibs emptydirs zipman purge !debug lto)
  330. .. warning:: Здесь мы используем некоторые флаги которые не
  331. рекомендуется использовать с точки зрения безопасности конечного
  332. кода для того чтобы увеличить производительность, как например
  333. ``-fcf-protection=none`` и ``-mharden-sls=none``, но если для вас
  334. безопасность такой же важный аспект как и производительность, то
  335. замените их на соответствующие флаги на
  336. ``-fstack-clash-protection`` и ``-fcf-protection`` (флаг
  337. -mharden-sls можно просто опустить).
  338. Отлично, теперь вы можете собрать нужные вам пакеты (программы) через
  339. LLVM/Clang просто добавив к уже известной команде makepkg следующие
  340. параметры::
  341. makepkg --config ~/.makepkg-clang.conf -sric --skippgpcheck --skipchecksums
  342. .. attention:: Далеко не все пакеты так уж гладко собираются через
  343. Clang, в частности не пытайтесь собирать им Wine/DXVK, т.к. это
  344. официально не поддерживается и с 98% вероятностью приведет к ошибке
  345. сборки. Но в случае неудачи вы всегда можете использовать
  346. компиляторы GCC, которые у вас заданы в настройках makepkg.conf по
  347. умолчанию, т.е. просто уберите опцию ``--config
  348. ~/.makepkg-clang.conf`` из команды ``makepkg``.
  349. Мы рекомендуем вам пересобрать наиболее важные пакеты. Например такие
  350. как драйвера (то есть `mesa
  351. <https://archlinux.org/packages/extra/x86_64/mesa/>`_, `lib32-mesa
  352. <https://archlinux.org/packages/multilib/x86_64/lib32-mesa/>`_, если у
  353. вас Intel/AMD), `Xorg сервер
  354. <https://archlinux.org/packages/extra/x86_64/xorg-server/>`_, а также
  355. связанные с ним компоненты, или `Wayland
  356. <https://archlinux.org/packages/extra/x86_64/wayland/>`_, критически
  357. важные пакеты вашего DE/WM, например: `gnome-shell
  358. <https://aur.archlinux.org/packages/gnome-shell-performance>`_,
  359. `plasma-desktop
  360. <https://archlinux.org/packages/extra/x86_64/plasma-desktop/>`_. А
  361. также композиторы `kwin
  362. <https://archlinux.org/packages/extra/x86_64/kwin/>`_, `mutter
  363. <https://aur.archlinux.org/packages/mutter-performance>`_, picom и
  364. т.д. в зависимости от того, чем именно вы пользуетесь.
  365. Больше подробностей по теме вы можете найти в данной статье:
  366. https://habr.com/ru/company/ruvds/blog/561286/
  367. .. index:: installation, x86_64_v2, x86_64_v3, alhp, repository, packages
  368. .. _alhp_repository:
  369. ====================================
  370. Установка оптимизированных пакетов
  371. ====================================
  372. Нативная компиляция - это конечно хорошо, но не у каждого
  373. человека есть время заниматься подобными вещами, да и всю систему
  374. пересобирать с нативными флагами тоже никто не будет (иначе вам сюда:
  375. https://gentoo.org). Возникает вопрос: как сделать все с наименьшим
  376. количеством напряга?
  377. Для начала сделаем небольшое отступление. У архитектуры *x86_64*
  378. различают несколько поколений или "уровней". Это *x86_64*,
  379. *x86_64_v2*, *x86_64_v3* и *x86_64_v4* (новейшие процессоры). Различия
  380. между этими "поколениями" состоят в применяемом наборе инструкций и
  381. возможностей процессора. Например, если вы собираете программу для
  382. x86_64_v2, то вы автоматически задействуете инструкции SSE3, SSE4_1 и
  383. т.д. При этом такая программа не будет работать на предыдущих
  384. поколениях, то есть на процессорах которые не поддерживают набор
  385. инструкций *x86_64_v2*. При этом к *x86_64_v2* и другим уровням
  386. относятся различные процессоры, как AMD, так и Intel. При этом
  387. логично, что чем выше поколение x86_64 поддерживает ваш процессор, тем
  388. больше будет производительность за счет использования многих
  389. оптимизаций и доп. инструкций. Подробнее об этих уровнях или же
  390. поколениях можете прочитать `здесь (англ.)
  391. <https://en.wikipedia.org/wiki/X86-64#Microarchitecture_levels>`__.
  392. Смысл в том, что существует сторонний репозиторий Arch Linux - `ALHP
  393. <https://git.harting.dev/ALHP/ALHP.GO>`__, который содержит **все
  394. пакеты** из официальных репозиториев, но собранных для процессоров
  395. x86_64_v2 или x86_64_v3. То есть это те же самые, уже готовые пакеты
  396. из официальных репозиториев, но собранные с различными оптимизациями
  397. для определенной группы процессоров (поколений x86_64).
  398. .. danger:: Прежде чем мы подключим данный репозиторий, нужно
  399. **обязательно** понять к какому поколению относиться ваш процессор,
  400. иначе, если вы установите пакеты собранные для x86_64_v3, но *ваш
  401. процессор при этом не будет относиться к поколению x86_64_v3*, то
  402. *ваша система станет полностью не работоспособной*, хотя её и все
  403. ещё можно будет восстановить через LiveCD окружение при помощи
  404. pacstrap.
  405. .. danger:: Оптимизированные пакеты для процессоров Intel поддерживают
  406. только полные процессоры серий Core 2 и i3/i5/i7. Многие процессоры
  407. Pentium/Celeron не имеют полного набора инструкций, необходимого
  408. для использования оптимизированных пакетов. Пользователям этих
  409. процессоров следует установить универсальные пакеты или пакеты
  410. оптимизированные ниже на один уровень (то есть если у вас
  411. поддерживается v3, то подключайте репозиторий с v2 и т.д.), даже
  412. если GCC возвращает значение, соответствующее полному набору флагов
  413. Core i3/i5/i7, например, Haswell.
  414. Проверить поколение вашего процессора можно следующей командой::
  415. /lib/ld-linux-x86-64.so.2 --help | grep -B 3 -E "x86-64-v2"
  416. После каждого поколения будет написано, поддерживается оно вашим
  417. процессором или нет. Например::
  418. Subdirectories of glibc-hwcaps directories, in priority order:
  419. x86-64-v4
  420. x86-64-v3
  421. x86-64-v2 (supported, searched)
  422. Если у вас поддерживается хотя бы x86_64_v2, то вы так же сможете
  423. использовать данный репозиторий, ибо он предоставляет пакеты как для
  424. x86_64_v2, так и для x86_64_v3. **Главное не перепутаете, какое именно у
  425. вас поколение**.
  426. Чтобы подключить репозиторий установим ключи для проверки подписей пакетов::
  427. # Ключи для пакетов
  428. git clone https://aur.archlinux.org/alhp-keyring.git
  429. cd alhp-keyring
  430. makepkg -sric --skippgpcheck
  431. А также список зеркал::
  432. git clone https://aur.archlinux.org/alhp-mirrorlist.git
  433. cd alhp-mirrorlist
  434. makepkg -sric
  435. После этого нужно отредактировать конфиг pacman добавив репозиторий
  436. для нужной архитектуры (``sudo nano /etc/pacman.conf``).
  437. Итак, **если ваш процессор поддерживает только x86_64_v2** (как
  438. допустим у автора), то пишем следующее::
  439. [core-x86-64-v2]
  440. Include = /etc/pacman.d/alhp-mirrorlist
  441. [extra-x86-64-v2]
  442. Include = /etc/pacman.d/alhp-mirrorlist
  443. [multilib-x86-64-v2]
  444. Include = /etc/pacman.d/alhp-mirrorlist
  445. [core]
  446. Include = /etc/pacman.d/mirrorlist
  447. [extra]
  448. Include = /etc/pacman.d/mirrorlist
  449. [multilib]
  450. Include = /etc/pacman.d/mirrorlist
  451. **Если же у вас процессор поддерживает x86_64_v3**, то пишем следующее::
  452. [core-x86-64-v3]
  453. Include = /etc/pacman.d/alhp-mirrorlist
  454. [extra-x86-64-v3]
  455. Include = /etc/pacman.d/alhp-mirrorlist
  456. [multilib-x86-64-v3]
  457. Include = /etc/pacman.d/alhp-mirrorlist
  458. [core]
  459. Include = /etc/pacman.d/mirrorlist
  460. [extra]
  461. Include = /etc/pacman.d/mirrorlist
  462. [multilib]
  463. Include = /etc/pacman.d/mirrorlist
  464. После этого выполняем полное обновление системы::
  465. sudo pacman -Syyuu
  466. Перезагружаемся и наслаждаемся результатом (если вы все сделали
  467. правильно).
  468. .. vim:set textwidth=70: