What can make Linux so unresponsive?
Перераспределение доступной оперативной памяти, которое приводит к большому объему подкачки, определенно может привести к этому. Помните, что ввод-вывод с произвольным доступом на вашем механическом жестком диске требует перемещения головки чтения/записи,который может выполнять только около 100 поисков в секунду.
Linux обычно полностью уходит на обед, если вы выделяете ОЗУ «слишком много». У меня также есть вращающийся диск и 8 ГБ оперативной памяти. У меня были проблемы с парой программ с утечкой памяти. т.е. их использование памяти со временем растет и никогда не уменьшается, поэтому единственным способом контролировать это было бы остановить программное обеспечение, а затем перезапустить его. Основываясь на опыте, который у меня был во время этого, я не очень удивлен, узнав о задержках более десяти минут, если вы генерируете 3 ГБ+ подкачки.
Вы не обязательно увидите это во всех случаях, когда у вас более 3 ГБ подкачки. Теория говорит, что ключевым понятием является взбучка . С другой стороны, если вы пытаетесь переключиться между двумя разными рабочими наборами, и для этого требуется подкачка 3 ГБ входящих и исходящих данных, при скорости 100 МБ/с это займет не менее 60 секунд, даже если шаблон ввода-вывода можно идеально оптимизировать. На практике схема ввода/вывода будет далека от оптимальной.
После трудностей, которые у меня были с этим, я переформатировал свое пространство подкачки до 2 ГБ (в несколько раз меньше, чем раньше ), чтобы система не могла выполнять подкачку так глубоко. Вы можете сделать это, даже не изменяя размер раздела, потому что
mkswap
принимает необязательный параметр размера.Приблизительный баланс между нехваткой памяти и уничтожением процессов и зависанием системы так долго, что вы все равно сдаетесь и перезагружаетесь. Я не знаю, не слишком ли велик раздел подкачки размером 4 ГБ; это может зависеть от того, что вы делаете. Важно следить за тем, когда диск начинает взбалтывать, проверять использование памяти и реагировать соответствующим образом.
Проверка использования памяти многопроцессорными приложениями -затруднена. Чтобы увидеть использование памяти на -процесс без двойного подсчета -общей памяти, вы можете использовать
sudo atop -R
, нажать M и m и посмотреть в столбце PSIZE. Вы также можете использоватьsmem
.smem -t -P firefox
покажет PSS всех ваших процессов Firefox, а затем строку с общим PSS. Это правильный подход к измерению общего использования памяти в браузерах на основе Firefox или Chrome. (Хотя существуют также специальные функции браузера -для отображения использования памяти, которые будут отображать отдельные вкладки ).
Предполагая, что версия вашего ядра 5.12 или выше, вы, очевидно, просматриваете файл в пакете исходного кода ядра Linux с путем <kernel source root>/drivers/net/wireless/mediatek/mt76/mt7921/Kconfig
. Это файл, предоставляющий информацию процессу, который создает фактический файл конфигурации ядра. Изменение этого файла фактически не изменит конфигурацию ядра.
Текст «Чтобы скомпилировать этот драйвер как модуль, выберите M здесь» является справочным текстом для соответствующей опции меню конфигурации ядра :вы можете увидеть меню конфигурации ядра, запустив, например,. make menuconfig
в папке <kernel source root>
. Команда make menuconfig
обработает все файлы Kconfig
в различных частях дерева исходных каталогов ядра и использует данные для построения меню конфигурации ядра, которое она вам представит.
Файл конфигурации ядра находится по адресу <kernel source root>/.config
соответственно.
Чтобы скомпилировать этот драйвер как модуль, вы должны найти строку в <kernel source root>/.config
, которая говорит либо:
# CONFIG_MT7921E is not set
или:
CONFIG_MT7921E=y
и измените эту строку на:
CONFIG_MT7921E=m
Если строки CONFIG_MT7921E
нет в файле .config
, вы можете просто добавить ее.
Но я не понимаю, что вы имеете в виду под «при использовании Cmake файл.ko не создается». Обычно вы должны запускать make modules
, make all
или один из других целевых файлов Makefile, пока cd
находится в вашем каталоге <kernel source root>
.
(Существует команда с именем cmake
, но это совершенно другой инструмент сборки, который не используется в процессе сборки ядра Linux. Обычно cmake
— это просто «процессор до -», который создает настоящий Makefile, поэтому при создании приложения, использующего cmake
, вы обычно сначала запускаете cmake
, затем make
, затем make install
. Но это не относится к ядру Linux.)