LINUX.ORG.RU
ФорумTalks

Linux Ate My RAM

 greta plumberg,


1

4

В соседнем треде один товарищ высказал следующую мысль:

Линукс здесь при том, что если компы подорожают (ещё раза в три-четыре), то линукс отыграет ещё пару процентов пользователей на десктопе. Ибо, в отличие от винды, его можно на всяких Raspberry Pi запускать, а они дёшевы.

И вот я что хочу по этому поводу сказать. Я скопировал из официального туториала GTK hello world с пустым окном:

$ cat example-1.c 
#include <gtk/gtk.h>

static void
activate (GtkApplication *app, gpointer user_data)
{
  GtkWidget *window;

  window = gtk_application_window_new (app);
  gtk_window_set_title (GTK_WINDOW (window), "My Window");
  gtk_window_set_default_size (GTK_WINDOW (window), 200, 200);
  gtk_widget_show (window);
}

int
main (int argc, char **argv)
{
  GtkApplication *app;
  int status;

  app = gtk_application_new ("org.gtk.example", G_APPLICATION_FLAGS_NONE);
  g_signal_connect (app, "activate", G_CALLBACK (activate), NULL);
  status = g_application_run (G_APPLICATION (app), argc, argv);
  g_object_unref (app);

  return status;
}

Поскольку код одинаковый для GTK 3 и 4, я скомпилировал его для обоих библиотек:

$ gcc $( pkg-config --cflags gtk4 ) -o example-1_gtk4 example-1.c $( pkg-config --libs gtk4 )

$ gcc $( pkg-config --cflags gtk+-3.0 ) -o example-1_gtk3 example-1.c $( pkg-config --libs gtk+-3.0 )

И запустил оба файла:

GTK3: запускается почти мгновенно, RAM – 36Mb (что тоже не мало).

GTK4: запускается у меня около 1.5 секунды, RAM – 147Mb.

Нет, это не ошибка, не 47, а именно 147Mb. Пустое окно. Вы можете проверить это сами. Я бы даже смирился с таким потреблением памяти, если бы оно запускалось мгновенно. Это не говоря уже о том, что GTK3 считается тормозным раможором по сравнению с GTK2.

Где там, говорите, вам Линукс запускается? На каком-каком железе?

UPD: Для GTK2

$ cat simple.c
#include <gtk/gtk.h>

int
main (int argc, char *argv[])
{

  GtkWidget *window;

  gtk_init (&argc, &argv);

  window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
  gtk_widget_show (window);

  g_signal_connect (window, "destroy", G_CALLBACK (gtk_main_quit), NULL);

  gtk_main ();

  return 0;
}

$ gcc -o simple simple.c $(pkg-config --libs --cflags gtk+-2.0)

GTK2: запускается мгновенно, RAM – 14Mb.

★★★★★

Последнее исправление: Im_not_a_robot (всего исправлений: 1)

А если просто под голые иксы скомпилить?

praseodim ★★★★★
()
Ответ на: комментарий от lenin386

Строка есть? Есть. Командует? Командует. Че еще нада?

untitl3d
()
Ответ на: комментарий от gag

GTK 4.4.1

RES в top?

В htop.

Gnome Monitor показывает 64Mb, но это не RES, он вычитает SHR.

Если что:

$ pkg-config --cflags gtk4
-I/usr/include/gtk-4.0 -I/usr/include/pango-1.0 -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -I/usr/include/sysprof-4 -I/usr/include/harfbuzz -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/libmount -I/usr/include/blkid -I/usr/include/fribidi -I/usr/include/libxml2 -I/usr/include/cairo -I/usr/include/pixman-1 -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/graphene-1.0 -I/usr/lib64/graphene-1.0/include -mfpmath=sse -msse -msse2 -I/usr/include/gio-unix-2.0 -pthread

$ pkg-config --libs gtk4
-lgtk-4 -lpangocairo-1.0 -lpango-1.0 -lharfbuzz -lgdk_pixbuf-2.0 -lcairo-gobject -lcairo -lgraphene-1.0 -lgio-2.0 -lgobject-2.0 -lglib-2.0
Im_not_a_robot ★★★★★
() автор топика
Последнее исправление: Im_not_a_robot (всего исправлений: 1)
Ответ на: комментарий от TheAnonymous

Мне линукс там не нужен. Я чисто ради интереса его туда поставил. Ну и чтоб без гемора посмотреть vendorId/deviceId. Этот девайс планируется превратить в ретрокомп для старых игорей.

cocucka ★★★★☆
()
Ответ на: комментарий от lenin386

В общем случае, не обязательно даже баш. init = cli, hlt. Тожэ сойдёт.

удобно с винды писать? ничего не жмет?

crypt ★★★★★
()
Ответ на: комментарий от Im_not_a_robot

Может кто у себя проверит лол? Я же все что необходимо показал. Ну в систему еще нужно установить gtk4-devel gtk4-devel-tools (в Федоре, не знаю как в других системах их обозвали).

Im_not_a_robot ★★★★★
() автор топика
Последнее исправление: Im_not_a_robot (всего исправлений: 1)
Ответ на: комментарий от lenin386

При должном усилии я могу и убунту с системдэ там завести, но зачем? Чтобы неосиливший труп в мавзолее утёрся?

cocucka ★★★★☆
()
Ответ на: комментарий от crypt

если выйдет CVE, они скорее всего смогут применить чужой патч

не в защиту Alpine, но вот команда безопасности Debian зачастую даже этого не может, по скольку недель там необновлённый firefox висит?

TheAnonymous ★★★★★
()
Ответ на: комментарий от cocucka

ретрокомп для старых игорей

Как игрушку - одобряю.
Но сейчас комп без браузера не комп. (Ретро)игрушка или микроконтроллер на стероидах - это да.
А для браузера и обработки им современного веба нужны совершенно другие ресурсы, и сколько там жрёт ядро и DE, не так важно

TheAnonymous ★★★★★
()

Кстати, а как ты занятую RAM определял?

Вот запустил я твой пример с GTK3

$ ./example-1_gtk3 & echo $_
[1] 2581

# cat /proc/2581/status | grep -i VMSIZE 
VmSize:	  204116 kB

Выходит у меня уже 200 Мб для Gtk3 варианта, Gtk4 не установлен.

Есть подозрение, что это не совсем настоящая занятая память.

praseodim ★★★★★
()
Последнее исправление: praseodim (всего исправлений: 2)
Ответ на: комментарий от lenin386

У меня только сомнения, что нужно убивать время пересобирая focal под i386 в debootstrap’е всего лишь для того чтобы послать тебя в жопу, запостив сообщение с древнего компа.

cocucka ★★★★☆
()

посмотрел, у меня похожие цифры:

USER        VSZ     RSS   COMMAND
crypt     77212   28664   ./ex3
crypt    241332  150952   ./ex4

gtk4.4.1

crypt ★★★★★
()
Последнее исправление: crypt (всего исправлений: 1)
Ответ на: комментарий от Im_not_a_robot

На Debian testing и мобильном core i5-2xxx:

htop RES gtk3 (3.24.31-1):   20832
htop RES gtk4 (4.4.1+ds1-3): 53416

А у тебя что за видеокарточка?

gag ★★★★★
()
Ответ на: комментарий от Im_not_a_robot

Запустил htop и смотрю столбец RES.

Тогда у меня вообще для gtk3 21424 - не K и не M, то есть, 20 с небольшим килобайт, никаких мегабайт.

praseodim ★★★★★
()
Ответ на: комментарий от praseodim

Нет, это 21Mb, htop пишет в килобайтах, а не байтах.

Im_not_a_robot ★★★★★
() автор топика
Ответ на: комментарий от Im_not_a_robot

Может кто у себя проверит лол?

На Windows 10 запускаются одинаково по времени.

По потреблению памяти:

GTK3 - 14.5 мегабайт

GTK4 - 72 мегабайта.

fsb4000 ★★★★★
()
Ответ на: комментарий от fsb4000

Если ты смотрел в столбец Memory дефолтного системного монитора, то эти цифры далеки от реальности. Так же как гномовский системный монитор он не учитывает SHR память.

Im_not_a_robot ★★★★★
() автор топика
Ответ на: комментарий от Im_not_a_robot

Я не так смотрел. Я выводил столбец «Выделенная память». Этот столбец всё учитывает, в отличие от дефолтного «Активный рабочий набор»

https://imgur.com/a/LETVV4G

fsb4000 ★★★★★
()
Ответ на: комментарий от crypt

Могу попробовать потом на другой машине, там 11-й Дебиан, а то на этом что-то не хочет ставиться.

YAR ★★★★★
()

Ну и причем тут Linux?

anc ★★★★★
()
Ответ на: комментарий от fsb4000

Qt 6.2.2 с пустым окном Qt Widgets заняло 6 884k,

Это в каком линуксе оно столько заняло? Я никогда не видел чтобы MainWindow вместе с рантаймом Qt, QtEventLoop, QtCore, QtWidgets занимали меньше 15мб памяти. https://i.imgur.com/k8HoDie.png это qt5 на fedora35 на чисто gnome виртуалке без каких-либо qt процессов в фоне. ЦП 3%, это я мышкой в окне повозил, проверить не растет ли потребление озу.

bhfq ★★★★★
()
Последнее исправление: bhfq (всего исправлений: 1)

Хотелось бы узнать результаты вот такого теста. (Не знаю нужно ли добавлять для этого «теста» кнопку в окно). Запусти GTK4/3/2 окно по центру стола и дергай его быстро за каждый угол окна секунд 5, растет ли потребление ОЗУ?

Не знаю, как посмотреть в консоли, но в KDE KSysGuard показывает какая библиотека сколько заняла озу, вот под gtk4 они яростно читают или я хз что делают с /dev/nvidiactl на драйверах nvidia.

bhfq ★★★★★
()
Последнее исправление: bhfq (всего исправлений: 2)

GTK4 https://i.imgur.com/soNcMHw.png запускается заметно долго, секунду, полторы. 27.5мб.

Взял пример с траницы https://www.gtk.org/docs/getting-started/hello-world

GTK3 https://i.imgur.com/CAnkudF.png запускается мгновенно. 6мб.

Fedora 35 внутри VirtualBox, драйвер какой-то естественно VMSVGA.

bhfq ★★★★★
()
Последнее исправление: bhfq (всего исправлений: 2)
Ответ на: комментарий от bhfq

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

Qt5: 92.4
GTK3: 32.7
GTK4: 105.4

Im_not_a_robot ★★★★★
() автор топика
Ответ на: комментарий от Vsevolod-linuxoid

но до сих пор 3.16 ядро и glibc 2.14

Если ставить на старое железо — не пофиг ли? Лишь бы патчи безопасности бекпортировали.

hateWin ★☆
()

Но важна динамика роста памяти при добавлении виджетов.

Может при 20 виджeтах gtk3 будет жрать 200М, а gt4 150M

futurama ★★★★★
()
Последнее исправление: futurama (всего исправлений: 1)
Ответ на: комментарий от hateWin

В том-то и дело, что из-за этого нет актуальных браузеров с исправлениями безопасности. А на оффлайн комп можно хоть Windows 2000 SP0 ставить.

Vsevolod-linuxoid ★★★★★
()
Ответ на: комментарий от fsb4000

На KDE системах грузятся еще лишние kde библиотеки https://i.imgur.com/4qxVkga.png в общей памяти заблудился даже Qt5Qml и Wayland либы, хотя я на чисто xorg сессии.

bhfq ★★★★★
()
Последнее исправление: bhfq (всего исправлений: 2)

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

За цену RPi4 на 4гб (13 штук в ДНСе, «viva путин и слабый рубль») сейчас можно собрать БУ системник на компанентах 5-7 летней давности типа Skylake (и новее) на авито или еще где, главное чтобы на материнке был hdmi выход для видео с процессора. И люди будут продолжать устанавливать на них венду десяточку ради своей «работы в браузере» (на удаленке, в школе и т.д.).

bhfq ★★★★★
()

Нет, это не ошибка, не 47, а именно 147Mb. Пустое окно.

На win10 ничего подобного. w10 - лучшая десктопная ос.

hakavlad ★★★
()
Ответ на: комментарий от Im_not_a_robot

Так надо смотреть Резидентную память

Наоборот, резидентная ни о чем не говорит. Надо смотреть анонмную. Сколько анонимки использует пустое окно в гтк3 и гтк4?

hakavlad ★★★
()
Ответ на: комментарий от Im_not_a_robot

правой кнопкой нажимаешь по процессу в ksysguard -> detailed memory information

bhfq ★★★★★
()
Ответ на: комментарий от hakavlad

Что еще за анонимная? Вот что показывает KSysGuard на процесс KCalc: Private: https://pastebin.com/raw/MGhsfBeW Shared: https://pastebin.com/raw/Cf9B5RJN

Хочешь заявить что в оперативке не лежат 72 KB от библиотеки libaom.so.3.2.0? И на самом деле не существует никаких 216 KB шаренных на всю систему данных кода от libaom.so.3.2.0?

KDE/Qt/QML жырное потому что на каждый рантайм Qt процесса им нужны большинство этих библиотек, в основном из-за зависимостей у Qt плагинов (QtWidgets грузят QtImageFormats), которые даже и не используются в работе, они грузятся на каждый «HelloWorld».

GTK2 было ультро-легковесное потому что оно нифига не могло, тупо тулкит.

Знаешь сколько кушает QML/Kirigami plasma-discover приложение на установке 1 flatpak? 580мб! Освобождает она эти 580мб heap? Нет.

Gtk3 opensuse kde: https://i.imgur.com/x706JIi.png
Gtk4 opensuse kde: https://i.imgur.com/e8rk0J5.png
старый скриншот voidlinux gtk3 https://i.imgur.com/s7xDlCa.png
старый скриншот voidlinux gtk4 https://i.imgur.com/I7tBagg.png
Qt5 opensuse kde: https://i.imgur.com/ZtBng9A.png
Qt5 QML: https://i.imgur.com/UxGbH3d.png

Кажется что с gtk4 все нормально? Там очевидно есть баги и утечки, потому что первый раз я запустив gtk4 «hello world» я увидел под 80мб heap.

bhfq ★★★★★
()
Последнее исправление: bhfq (всего исправлений: 1)
Ответ на: комментарий от lenin386

либо ты своп на SSD забубенил, что не честный эксперимент

На дворе 2022, вылазь из криокамеры. Сейчас всё на SSD.
Даже мой самый старый комп, которому больше десяти лет.

aidaho ★★★★★
()
Ответ на: комментарий от bhfq

Знаешь сколько кушает QML/Kirigami plasma-discover приложение на установке 1 flatpak? 580мб! Освобождает она эти 580мб heap? Нет.

Ну давай, расскажи сколько использует plasma-discover :) Как ты можешь догадаться, это он тоже не освобождает. Если случайно запустил Gnome Software, то сам дурак лол!

Im_not_a_robot ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.