ФлеймФорумСофт

Откуда запредельно высокая запись на ssd? (7 стр)

Страницы: 13 4 5 6 7 8 Следующая »
#90
22:16, 21 ноя 2024

1 frag / 2 deaths
> Или не отказывает, а останавливает процесс, запрашивающий аллокацию, пока память не освободится кем-то ещё. Если не освободилась, то уже убивает.
Нет, не или.

У виндоуз есть глобальный лимит на все аллокации в системе — рам+своп, и все системные аллокации — VirtualAlloc, HeapAlloc, LocalAlloc и прочие — берут ресурс из этого лимита.

Когда твоя программа делает сисколл в ядро с просьбой дать больше памяти — система пытается назначить часть пока ещё "ничейного" ресурса в твою пользу. Есть ресурса хватает — система забивает его за твоим процессом и возвращает указатель в твоём локальном адресном пространстве. Если не хватает — то сисколл сообщает об ошибке, в стандартной для винды форме — функция возвращает нулл, а в GetLastError оказывается код с описанием.

Если ты в своей программе готов подождать, когда память освободит кто-то другой — твоя программа должна сделать это сама, например:

void* ::operator new(size_t num) {
    return my_velociped_allocator.alloc(num);
}

void* FMyVelocipedAllocator::impl_alloc_from_system(size_t num) {
    for (int tries = 0; tries < 10; ++tries) {
        if (void* ptr = VirtualAlloc(
            0, num, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE
        )) {
            return ptr;
        }
        Sleep(1000);
    }
    throw std::bad_alloc{};
}

А если ты имел в виду "хотелось бы, чтобы не отказывало, а останавливало" — так ты же сам же сказал, что это только продлит ненужные мучения.

Хотя вот интересная идея, что когда ресурс памяти заканчивается или подходит к концу — ОС показывает пользователю специальное диалоговое окошко, в котором сообщает — у тебя в системе кончилась рам, вот список программ в порядке объёма отжирания, вот помеченные красненьким — прямо сейчас приостановлены внутри "malloc" в ожидании освобождения ресурсов. Так что, дорогой пользователь — закройте самые ненужные приложения крестиком, либо освободите как-нибудь память в самих приложениях, либо выберите процесс из списка и нажмите "завершить", ну или либо — вот отдельная кнопочка "временно увеличить своп на пару гигабайт для текущей сессии" (недоступна, если места на диске больше нет). Причём кнопка "увеличить своп" — нажимается автоматически, если в течение эн секунд компьютер стоит без ввода — как раз на случай сценария, когда запустили компилятор/нейрообучатель/светосчитатель и ушли афк на 4 часа.

А, ну и ещё кнопка — "больше не давать памяти конкретно вот этой наглой рыжей морде", тогда аллоки начнут фейлить конкретно в этом процессе.

#91
22:20, 21 ноя 2024

Имбирная Ведьмочка
> ОС показывает пользователю специальное диалоговое окошко, в котором сообщает — у тебя в системе кончилась рам, вот список программ в порядке объёма отжирания
ну эта часть в винде есть.

#92
22:24, 21 ноя 2024

Имбирная Ведьмочка
> Нет, не или.
Я про то, что в Линуксе видел

Имбирная Ведьмочка
> конкретно вот этой наглой рыжей морде
А ты догадливый

#93
23:36, 21 ноя 2024

1 frag / 2 deaths
> Я про то, что в Линуксе видел
А, так это васянское поделие, оно тупо грохает процессы как ему вздумается. У Линуса работает.

#94
0:00, 22 ноя 2024

Имбирная Ведьмочка
А я Вася не может сделать как в Линуксе? Звучит-то логично

#95
0:10, 22 ноя 2024

1 frag / 2 deaths
> А я Вася не может сделать как в Линуксе? Звучит-то логично
Не, Линукс — это и есть васянское поделие.

#96
0:15, 22 ноя 2024

Имбирная Ведьмочка
Дык у Линукса логично работает. По крайней мере с теми настройками, что у меня были

#97
0:28, 22 ноя 2024

Имбирная Ведьмочка

> у него есть свой кэш, из более "крепкой" памяти, чем нанд, порядка сотен мегабайт — и записи сначала идут туда
Чего за память такая? То, что ты описываешь очень похоже на способ wear leveling, только это совсем не кеш.

#98
0:54, 22 ноя 2024

Ghost2
> Чего за память такая?
DRAM, например — выше написали.

#99
8:35, 22 ноя 2024

Имбирная Ведьмочка

> DRAM, например — выше написали.
Там херь какую-то написали. Во первых не съезжай со слова «крепкая». Ты там сравнивал по крепости волатильную память с неволатильной? Потом, зачем нужна DRAM на диске, если ее в системе полно. Чтобы сделать его дешевле и надежнее? Ну может есть какая-то, чтобы кешировать TLP, но там и ончип SRAM памяти контроллера для этого должно хватать, какие сотни мегабайт.

#100
9:10, 22 ноя 2024

А мне в связи с SSD вот какой вопрос интересен - есть ли какие-то механизмы, которые понимают "допись в блок"?

Практически у всех файлов есть последний кластер/блок, который используется не полностью. На хардах это практически никакого значения не имеет, блок записывается полностью (потому что по-другому диск просто не работает), и в случае дописи в файл так же полностью переписывается (в том же физическом месте или в другом, без разницы).

Но вот в случае с SSD частичная запись в блок и допись в частично записанный блок могли бы иметь значение, т.к. "незаписанная" часть блока могла бы оставаться в инициализированном состоянии, позволяющем дописать новое содержимое без перемаппинга на чистые физические блоки.

#101
9:31, 22 ноя 2024

Dmitry_Milk

Блоки разбиваются на страницы, контроллер управляет чипом постранично.

#102
9:59, 22 ноя 2024

Имбирная Ведьмочка
> А, так это васянское поделие, оно тупо грохает процессы как ему вздумается. У Линуса работает.
  Мне иногда кажется, что андроид просто по криколу в случайные моменты грохает все фоновые процессы. Решил проверить потребление памяти и установил монитор RAM. Он показывает что даже когда кроме него больше ничего не запущено, то свободно всего 2 ГБ памяти из восьми. Точно не ту систему называют прожорливой.

#103
11:48, 22 ноя 2024

Zefick
> свободно всего 2 ГБ памяти из восьми
сервисами засрал, и как ты определил что ничего больше не запущенно? :)

#104
13:29, 22 ноя 2024

Ghost2
> Блоки разбиваются на страницы

Так страницы все равно не размером в 1 байт, а скорее всего не меньше пары килобайт. Дописал пару байт в файл и закрыл его - получи запись пары килобайт (в страницу на новом физическом месте, хотя дописать можно было и на старом физическом месте, если остаток страницы оставался в инициализированном состоянии).

Страницы: 13 4 5 6 7 8 Следующая »
ФлеймФорумСофт