Преветствую всех!

Давно хотел выразить благодарность сообществу, но как у Джадда Вайнета у меня не получится, ибо в программной сфере я дуб-дубом. Ну хоть что-то полезное, хотя бы советом по оптимизации. И тут как раз подворачивается такой случай — глупо упускать :)

Преамбула

Начну с того, что я ярый противник подкачки. Мне винда несколько дисков поломала своей подкачкой, пока я не понял в чём дело, и не вырубил её ещё в винде. Переходя на Linux я само-собой намеренно не создавал раздел swap (и тем более, когда HDD заменил на SSD). В принципе, если в игры не играть и хромом не пользоваться, то моих 4GiB памяти (больше в материнку не вставить) вполне достаточно. Но иногда, например во время компиляции из AUR чего-то большого, возникают-таки проблемы из-за нехватки памяти.

Суть

И тут вдруг на днях в мою хабраленту прилетает статья про один из модулей ядра — zram. Не хочется коряво пересказывать тут статью, но в двух словах опишу, как я понял её суть: создаётся некое устройство и размещается в памяти, данные попадающие в это устройство сжимаются, причём сжимаются многократно (в смысле по объёму, а не по количеству циклов сжатия :), какие данные в него попадают — зависит от того, в качестве чего используется это устройство. Я ещё читая статью понял, что для меня было бы самым разумным использовать его для подкачки. Но из статьи лично я не понял, как же настраивать всё это.

Поиски

Мне нужна была дополнительная информация, за которой я полез на нашу arch-wiki. Но конкретно про модуль zram и его настройку ничего не нашёл. Зато в статье Maximizing Performance обнаружился пункт Compcache/Zram, который интересен не столько информацией про zram, сколько про утилиту zramswap. Статья на русский недопереведена, и этого пункта в русском варианте нет. Поэтому позволю себе вольный его перевод.

Zram (ранее называемый Compcache) — модуль ядра, который создаёт в оперативной памяти устройство и сжимает его. Если использовать его для подкачки, то часть оперативной памяти может хранить гораздо большее количество информации, но при этом используется несколько больше ресурсов процессора. Тем не менее, такая подкачка намного быстрее, чем обмен данными с жестким диском. Если система часто уходит в swap, это может улучшить отклик.
Zram находится в активной разработке, поэтому он ещё не стабилен, используйте его с осторожностью!

Пакет zramswap из AUR предоставляет автоматизированный скрипт для создания таких устройств подкачки с оптимальными настройками для вашей системы (такими, как объём оперативной памяти и количество ядер процессора). Скрипт создаёт одно zram-устройство на каждое ядро ​​процессора с общим объёмом, эквивалентным размеру оперативной памяти.

Чтобы это делалось автоматически при каждой загрузке нужно включить zramswap.service через systemctl.

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

Совет: Использование zram также является хорошим способом уменьшения циклов чтения/записи диска при использовании swap на SSD.

Бинго!

Это же ровно то, что мне было нужно: устройства по количеству ядер, общий объём соответствующий оперативке, использование для подкачки.
И никакие маны дополнительно курить не нужно!

Всё, что я сделал, это:
  1. установил утилиту
    yaourt -S zramswap
  2. включил сервис в автозагрузку (или как это правильнее назвать)
    sudo systemctl enable zramswap.service
  3. ну и естественно перезагрузился.

Тесты

После рестарта я увидел следующее:

До этого третий столбец был тёмно-серый с надписью (ЕМНИП) „Подкачка недоступна‟. Теперь же она появилась, при том, что (как я говорил ранее) на диске раздела swap нет.
Но пустой виртуальный swap не сильно забавляет — нужно его потестировать. Для теста решил поставить игру Champions of Regnum из Steam. Я запустил всё, что только мог — браузеры, в том числе хромого, офис, графические редакторы, rss-читалку, и прочее, что хоть как-то ощутимо кушало память, хоть по 100 метров. Упёрся почти в потолок физической памяти. Вот тут-то и понадобилась игра (запущенная с максимальными настройками), которая по идее должна была выпихнуть из обычной памяти данные в swap. Что и случилось :) — после выключения игры (во время игры полноэкранный режим не давал посмотреть на состояние памяти) я увидел такую картину:

То есть игра выпихнула менее актуальные на тот момент данные в виртуальный swap, который их сжал попутно. Далее при закрытии игра ушла из памяти, освободив в ней место. После этого я долго пользовался системой в обычном режиме. Физическая память потихоньку заполнялась и при закрытии программ — освобождалась. А вот состояние swap почти не менялось. Из чего я сделал вывод, что данные в него утрамбовались, и далее считывались оттуда налету. А они должны были считываться, ведь программы я старался не закрывать, и использовал их. Затем я ещё раз запустил игру. После её выключения состояние памяти было примерно таким же, только объём занятого swap вырос с 18% до 23%, а физическая память чуть больше освободилась. То бишь ещё больше данных утрамбовалось.

Итоги

Итак, что мы имеем?
  • Без апгрейда железа, без подкачки на диск, и с минимумом настроек руками, мы имеем быстрый дополнительный „карман‟ для оперативных данных. Причём очень экономичный карман, утрамбовывающий данные в 2–3 раза, а если верить опыту автора статьи на хабре, то и до 10 раз!
  • Хоть в wiki и говорится о том, что при использовании модуля будет тратится несколько больше ресурсов процессора, на деле же я вообще не нашёл процесса, отъедающего ресурсы на эти нужды — в топе всегда были лишь мной запущенные программы, и пара-тройка системных, отъедающих по одному проценту.
  • Использование модуля будет полезным для машин любого уровня мощности: от нетбуков, до мощных десктопов. Где памяти мало, данное решение позволит ощутимо увеличить её. Где её много, позволит не используя swap на диске иметь подстраховку на случай, если всё же память забьётся, чтобы не доводить до ошибок, крахов и прочих неприятностей.

P.S. В след за wiki повторю, что модуль ещё не допилен до состояния стабильности, и его следует использовать с осторожностью. Хотя мне видится единственная возможная проблема с его нестабильностью — при падении или чего-то ещё могут потеряться не сохранённые изменения ваших файлов. Поэтому, как и без активации этого модуля, — просто чаще сохраняйтесь ;)

P.P.S. Буду благодарен за конструктивную критику и за поправки от знатоков и экспертов, в том числе по переводу.
Я не красноглазик, я фаерфоксик ^_^
Dganic
А как найти настройки firefox-oxygen-kde? Все доплнения поставил, а вкладки в заголовок окна не вписываются, висят отдельно.
В почти любом месте в панелях лисы тыкаете правой кнопкой мыши, и в выпадающей менюшке выберите "Панель заголовка":

Открывается новое окно с подробной инструкцией.
Адрес инструкции chrome://oxygenkdeoptions/content/page/exceptionsguide.html

Она на инглише - что не поймёте, пишите.

P.S. Ну а настройки аддона - следующий пункт)
Я не красноглазик, я фаерфоксик ^_^
maisvendoo
А что выдает # hwinfo --framebuffer ?

Вот буржуи что-то обсуждают по поводу GT 430 в плане разрешения в консоли

То есть из коробки должно работать 1280х800

Как я понимаю, консоль на самом деле отображается в графическом режиме. Так значит если карточка держит 1920х1080 то и в этой самой консоли оно должно высталятся, проблема только в драйверах.

Во freebsd я решал это пересборкой ядра. Может и тут можно пересобрать ядро с некими опциями и включить поддержку фреймбуфера без костылей типа v86d?

Видимо найденное решение не отличается универсальностью, мне повезло допустим, а кому-то нет

Может оно и есть 1280х800, я этой уродине под юбку не заглядывал.
Ну да, NVidia такая, одна карта может одно, другая другое.
Да и я уже забил на это всё - 5мин/месяц нахождения в консоли (редкие случаи, когда надо зайти под рутом, но не охото юзать su) не стоит того времени, что тратится на настройку это консоли.
А насущные задачи консольные я нормально решаю в Yakuake.

А метод вообще-то хорош. Меньше 5 минут все настройки.
Я не красноглазик, я фаерфоксик ^_^
Всё как у вас, за исключением второй строчки в /etc/default/grub (0 ибо не нуждаюсь в разглядывании меню граба), и всё равно 1024х768 растянутые в безобразие.
Видимо у меня просто видюха никчёмная =(
Я не красноглазик, я фаерфоксик ^_^
А в /etc/mkinitcpio.conf в строку
MODULES=""
нужно добавить nouveau?
Я не красноглазик, я фаерфоксик ^_^
Хмм... спасибо, что наводите на правильные мысли.
Я вспомнил, что ковырялся раньше с этим конфигом (/etc/default/grub). Но теперь уже не понимаю, что может мешать новому варианту борьбы с консолью.
Может вы какую неправильность заметите:
GRUB_DEFAULT=0
GRUB_TIMEOUT=0
GRUB_DISTRIBUTOR="Arch"
GRUB_CMDLINE_LINUX_DEFAULT="quiet"
GRUB_CMDLINE_LINUX="auto"
# Preload both GPT and MBR modules so that they are not missed
GRUB_PRELOAD_MODULES="part_gpt part_msdos"
# Uncomment to enable Hidden Menu, and optionally hide the timeout count
#GRUB_HIDDEN_TIMEOUT=5
#GRUB_HIDDEN_TIMEOUT_QUIET=true
# Uncomment to use basic console
GRUB_TERMINAL_INPUT=console
# Uncomment to disable graphical terminal
#GRUB_TERMINAL_OUTPUT=console
# The resolution used on graphical terminal
# note that you can use only modes which your graphic card supports via VBE
# you can see them in real GRUB with the command `vbeinfo'
GRUB_GFXMODE=auto
# Uncomment to allow the kernel use the same resolution used by grub
#GRUB_GFXPAYLOAD_LINUX=keep
# Uncomment if you want GRUB to pass to the Linux kernel the old parameter
# format "root=/dev/xxx" instead of "root=/dev/disk/by-uuid/xxx"
#GRUB_DISABLE_LINUX_UUID=true
# Uncomment to disable generation of recovery mode menu entries
GRUB_DISABLE_RECOVERY=true
# Uncomment and set to the desired menu colors.  Used by normal and wallpaper
# modes only.  Entries specified as foreground/background.
#GRUB_COLOR_NORMAL="light-blue/black"
#GRUB_COLOR_HIGHLIGHT="light-cyan/blue"
# Uncomment one of them for the gfx desired, a image background or a gfxtheme
#GRUB_BACKGROUND="/path/to/wallpaper"
#GRUB_THEME="/path/to/gfxtheme"
# Uncomment to get a beep at GRUB start
#GRUB_INIT_TUNE="480 440 1"
#GRUB_SAVEDEFAULT="true"
Я не красноглазик, я фаерфоксик ^_^
Почему-то не помогло.
Делал всё пошагово, буква в букву.
Карта GeForce GT 430.
Ядро не паникует, но и в консоли те же долбаные 1024х768 :(
Я не красноглазик, я фаерфоксик ^_^
Это значит принудительно:
$ pacman -S --help
использование:  pacman {-S --sync} [параметры] [пакет(ы)]
параметры:
...
  -f, --force          принудительная установка, перезаписывать конфликтующие файлы
...
То бишь тебе надо ключ -f добавить:
$ sudo pacman -Sf  lib32-qt4
Я не красноглазик, я фаерфоксик ^_^
Спасибо!
Удалил пятый куть, и всё срослось. Еле вспомнил зачем его ставил.

Но один момент мне всё-таки крышу сносит.
Стоит четвёртый куть, стоит fontmatrix, который надо пересобрать, и которому нужен qtwebkit из состава четвёртого кутя. Всё есть, собирайся и вставай на своё место обновленным. Ан-нет! Увидел тот же qtwebkit из пятого кутя, упёрся в него рогом - мол не буду это есть!

Может оно всё так и должно быть, и я просто ничего не понимаю в этих гентушных бзиках флагах и зависимостях, но с колокольни простого пользователя - это какой-то бред %)

И всё с той же колокольни вопрос озвучить хочется.
Вот переделали qt с qt4 на qt5, переписали зависимости от qt на зависимости от qt4, а от самого qt (в качестве которого теперь qt5) пока толком ничего не зависит, кроме пары тройки пакетов в AUR`е. А что же тогда начнётся когда нужные многим пакеты начнут зависеть от пятого, и будут тянуть его, при этом остальные ещё от четвертого продолжат зависеть? Это вот с каждым таким пакетом с "устаревшими" зависимостями такие траблы начнутся - типа "снесите пятый куть, обновите пакеты, установите пятый куть обратно"?
Только вот снести не получится, ибо его другие пакеты (в большом количестве) уже будут требовать. Боже, как эту всю байду мейнтейнеры разруливают? %(
Я не красноглазик, я фаерфоксик ^_^
Natrio
А что, новая версия пакета из AUR не собирается?
https://aur.archlinux.org/packages/fontmatrix/
Именно новая, именно из AUR, именно не собирается. При обновлении.
Вот полный вывод, если тот не информативен:
$ yaourt -Syua
:: Синхронизируются базы данных пакетов...
 core не устарел
 extra не устарел
 community не устарел
 archlinuxfr не устарел
 faelementary-icon-theme : Orphan
 Foreign packages: \ 67 / 67
==> Package upgrade only (new release):
aur/fontmatrix 0.6.0-3 3 -> 4
==> Continue upgrade ? [Y/n]
==> [V]iew package detail   [M]anually select packages
==> --------------------------------------------------
==>
==> Downloading fontmatrix PKGBUILD from AUR...
x PKGBUILD
Comment by vesath  (2012-10-31 18:41)
michalm: Please address the last five comments (which go back to January), or I will consider you inactive and orphan this package in a week.
Comment by Markus00000  (2012-12-21 20:02)
The website seems to be http://fontmatrix.be.
Comment by giniu  (2013-03-01 11:08)
Please update for Qt5 and Qt=Qt4 rename.
Comment by vesath  (2013-03-03 05:48)
jorge_barroso: Thanks for adopting this package but the PKGBUILD is still horrible: For the package to compile properly, qtwebkit must be a dependency and cmake a make-dependency. The arch array must not be 'any' as the resulting binaries are architecture-dependent. The CMAKE_INSTALL_PREFIX is plain wrong. The "|| return 1" have been obsolete for the past two years, etc.
Please update to this cleaned-up version: http://arch.vesath.org/all/fontmatrix-0.6.0-4.src.tar.gz
Comment by jorge_barroso  (2013-03-03 11:36)
You're welcome vesath. I know it stills horrible, I adopted it at night and made a few changes (I don't know if I even did so, I was adopting some packages and a couple of them aren't even checkedyet). Sorry by "|| return 1" the other day I read the packaging guidelines in spanish, and the one who has translated that wikipage into spanish (before I finished it) included that, so It's my fault. I'll check the PKGBUILD
fontmatrix 0.6.0-4  (Пн янв 21 23:01:35 MSK 2008)
( Unsupported package: Potentially dangerous ! )
==> Edit PKGBUILD ? [Y/n] ("A" to abort)
==> ------------------------------------
==> n
==> fontmatrix dependencies:
 - qtwebkit (already installed)
 - mesa (already installed)
 - cmake (already installed)
==> Continue building fontmatrix ? [Y/n]
==> ------------------------------------
==>
==> Building and installing package
==> Сборка пакета: fontmatrix 0.6.0-4 (Пн мар  4 09:26:47 MSK 2013)
==> Проверяю необходимые для запуска зависимости...
==> Проверяю необходимые для сборки зависимости...
==> Получение исходных файлов...
  -> Загрузка fontmatrix-0.6.0-Source.tar.gz...
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 2432k  100 2432k    0     0   628k      0  0:00:03  0:00:03 --:--:--  628k
==> Проверка исходных файлов с помощью sha512sums...
    fontmatrix-0.6.0-Source.tar.gz ... Готово
==> Распаковка исходных файлов...
  -> Извлечение fontmatrix-0.6.0-Source.tar.gz с помощью bsdtar
==> Запускается build()...
-- The C compiler identification is GNU 4.7.2
-- The CXX compiler identification is GNU 4.7.2
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Building Fontmatrix 0.6.0
-- Fontmatrix will be installed under /usr
-- Looking for Q_WS_X11
-- Looking for Q_WS_X11 - not found
-- Looking for Q_WS_WIN
-- Looking for Q_WS_WIN - not found
-- Looking for Q_WS_QWS
-- Looking for Q_WS_QWS - not found
-- Looking for Q_WS_MAC
-- Looking for Q_WS_MAC - not found
CMake Error at /usr/share/cmake-2.8/Modules/FindQt4.cmake:1216 (message):
  Found unsuitable Qt version "5.0.1" from /usr/bin/qmake, this code requires
  Qt 4.x
Call Stack (most recent call first):
  CMakeLists.txt:111 (FIND_PACKAGE)
-- Configuring incomplete, errors occurred!
==> ОШИБКА: Произошел сбой в build().
    Преждевременный выход...
==> ERROR: Makepkg was unable to build fontmatrix.
==> Restart building fontmatrix ? [y/N]
Причём, если с недавними траблами обновы пакетов из AUR я как-то справлялся тупой правкой qt на qt4 или наоборот в строчке depends=() в PKGBUILD, то сейчас моих познаний скудных не хватает с затыком справиться.
Я не красноглазик, я фаерфоксик ^_^