У сервисов это искусственное ограничение (пресеты битрейтов). К предмету обсуждения это прямого отношения не имеет.
А у цифрового сигнала subsampling не обойти никаким программным Super Resolution, поскольку в конечном итоге мы всё равно скейлим результат обратно и отправляем по кабелю в том же (нативном) разрешении и с тем же subsampling'ом.
…
/* Configure hibernation settings if we are supposed to hibernate */
if (SLEEP_OPERATION_IS_HIBERNATION(operation)) {
…
r = find_suitable_hibernation_device(&hibernation_device);
…
}
…
if (!action)
action = sleep_operation_to_string(operation);
…
… LOG_MESSAGE("Performing sleep operation '%s'...", sleep_operation_to_string(operation)) …
r = write_state(state_fd, sleep_config->states[operation]);
if (r < 0)
… LOG_MESSAGE("Failed to put system to sleep. System resumed again: %m") …
…
error = hibernate_preallocate_memory();
…
if (… !error)
error = create_image(platform_mode);
/*
* In the case that we call create_image() above, the control
* returns here (1) after the image has been created or the
* image creation has failed and (2) after a successful restore.
*/
/* We may need to release the preallocated image pages here. */
if (error || !in_suspend)
swsusp_free();
- аллоцировали память и сделали дамп (и вернёмся сюда второй раз после пробуждения);
Я вам показываю, как гибернация реализована. Разумеется, она производится постранично — так, как содержимым памяти оперирует сам MMU, т.е. нативно. Выделяется место постранично, а копируются данные, ясное дело, побайтово. Страница из байтов состоит, а где противоречие-то?
Ваша задача — пользоваться системой в меру её возможностей. Если вы хотите занимать больше, чем у вас RAM — будьте добры зарезервировать своп. Если нет — не занимайте.
of them, which corresponds to the maximum size of a hibernation image.
If image_size is set below the number following from the above formula, the preallocation of memory is continued until the total number of saveable pages in the system is below the requested image size or the minimum acceptable image size returned by minimum_image_size(), whichever is greater.
Функция даже предварительно освобождает память, покуда возможно:
/*
* Let the memory management subsystem know that we're going to need a
* large number of page frames to allocate and make it free some memory.
* NOTE: If this is not done, performance will be hurt badly in some
* test cases.
*/
shrink_all_memory(saveable - size);
Затем пробует аллоцировать всё меньше и меньше, пока не получится:
/*
* The number of saveable pages in memory was too high, so apply some
* pressure to decrease it. First, make room for the largest possible
* image and fail if that doesn't work. Next, try to decrease the size
* of the image as much as indicated by 'size' using allocations from
* highmem and non-highmem zones separately.
*/
pages_highmem = preallocate_image_highmem(highmem / 2);
pages = preallocate_image_memory(alloc, avail_normal);
Pinned repositories.
Пи́ны в профиле для вас — шутка?
Ровно в этой статье оно и есть.
Да, в кино мы даём мозгу «дорисовывать» контент. В рабочем использовании этому места нет.
У меня вот наоборот глаза начинают уставать от яркости ниже 100% на мониторе (ноутбуки/телефоны — другая история). Везде OLED, обычно без HDR.
При этом я чувствителен к ШИМу, но его точно нет на моём нынешнем G80SD — проверено глазами и приборами. Так что дело в чём-то ином.
У сервисов это искусственное ограничение (пресеты битрейтов). К предмету обсуждения это прямого отношения не имеет.
А у цифрового сигнала subsampling не обойти никаким программным Super Resolution, поскольку в конечном итоге мы всё равно скейлим результат обратно и отправляем по кабелю в том же (нативном) разрешении и с тем же subsampling'ом.
А-ля supersampling.
А ещё есть кастомная прошивка для его родного железа на ESP32!
P.S. Авторство моё.
Further reading: https://www.freedesktop.org/software/systemd/man/latest/systemd-oomd.service.html
Вы противоречите здравому смыслу. Нельзя оценить общее по частному.
OOM-киллер такое решение, и ограничения cgroups (в т.ч. нативно средствами
systemd
).Го!
Systemd v257.5 и Linux 6.14:
$ systemctl hibernate
(кликабельно, также тык, тык, тык, тык);shared/hibernate-util.c:
find_suitable_hibernation_device_full()
:- нашли своп-файл/раздел по размеру;
sleep/sleep.c:
execute()
— пишет в/sys/power/state
, запуская процесс гибернации в ядре:записали
disk
в/sys/power/state
;kernel/power/main.c:
state_store()
:запустили процесс гибернации;
kernel/power/hibernate.c:
hibernation_snapshot()
:- аллоцировали память и сделали дамп (и вернёмся сюда второй раз после пробуждения);
kernel/power/hibernate.c:
hibernate()
:пережали и записали образ на диск и, наконец, выключили систему.
Ну а
hibernate_preallocate_memory()
мы с вами уже разбирали :))Я вам показываю, как гибернация реализована. Разумеется, она производится постранично — так, как содержимым памяти оперирует сам MMU, т.е. нативно. Выделяется место постранично, а копируются данные, ясное дело, побайтово. Страница из байтов состоит, а где противоречие-то?
Безусловно, в коде фигурируют страницы. Повторюсь: в каком месте я говорил про байты?
Простите, что? Где я утверждал обратное, или вообще что-то про байты?
Ваша задача — пользоваться системой в меру её возможностей. Если вы хотите занимать больше, чем у вас RAM — будьте добры зарезервировать своп. Если нет — не занимайте.
Да как не является-то?
Смотрим kernel/power/snapshot.c:
Функция даже предварительно освобождает память, покуда возможно:
Затем пробует аллоцировать всё меньше и меньше, пока не получится:
могу продолжить разбор, надо?
Бритва Оккама. Где данные о том, что у большинства работает плохо? У кого хорошо, тот не идёт на форумы писать об этом.
Оно займёт его, только если вы сами запустите то, чем его занять. Боритесь не с симптомами, а с первопричиной.
Так вы не по адресу. Линукс — не винда. И не может быть ею, и рассматриваться как оная.