LINUX.ORG.RU

Нужно занять всё ОЗУ!

 , ,


2

1

Всем привет!

Нужно занять всю свободную память (на самом деле нет, всего лишь 90%), чтобы другие утилиты не могли аллоцировать ни чего. Нужно для проверки всяких там ватчдоков.

Но calloc\malloc я так понимаю аллоцируют только в куче? А как отжать физическую память?

★★★★

Ответ на: комментарий от anonymous

Хм, хорошая идея:


tmpfs                /run                 tmpfs      mode=0755,nodev,nosuid,stri                                                                                 ctatime 0  0
tmpfs                /var/volatile        tmpfs      defaults              0  0

Т.е. в /run можно кинуть?

AntonyRF ★★★★
() автор топика

Форк-бомбу уже предлагали?

entefeed ☆☆☆
()

Нужно занять всё ОЗУ!

си

Для этого есть более подходящие языки :D

Куча вообще-то тоже размещается в физической памяти. malloc вместе с memset - это собственно оно, но конечно система будет сопротивляться.

anonymous
()

Но calloc\malloc я так понимаю аллоцируют только в куче? А как отжать физическую память?

man 2 mlock

DESCRIPTION mlock(), mlock2(), and mlockall() lock part or all of the calling process's virtual address space into RAM, preventing that memory from being paged to the swap area.

anonymous
()

Вариант с tmpfs рабочий, мы так делали (swap был отключен). Только «чтобы другие утилиты не могли аллоцировать ни чего» - с нахрапа не получится. Независимо от количества свободной памяти, ядро с дефолтными настройками все равно даст аллоцировать новую память; а если ее не будет - будет прибивать другие процессы - см. OOM killer и overcommit_memory.

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

Ну в целом мне хватило tmpfs, всем спасибо. Всё оказалось рабочим, кроме ватчдогов, буду править =)

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

А cgroups под эти ваши embeded не завезли?

Там почти всё выпилили, так что маловероятно

AntonyRF ★★★★
() автор топика
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <assert.h>
#include <string.h>

int main(int argc, char *argv[])
{
     
    void * mem = (void*)malloc(sizeof(size_t)*(atoi(argv[2])));
    assert(mem);
    memset(mem,0,(sizeof(size_t)* atoi(argv[2])));
    for (int i = atoi(argv[1]); i > 0; --i)
    {
        sleep(1);
    };
    free(mem);
    return 0;
}
gcc mem.c;./a.out 10 900000000 
# 10 - время в секундах сколько будет занята память
# 900000000 - число size_t блоков памяти, тут занимет 7,2 Гигабайта, подбери значение для своего размера памяти или допиши для вычисления процентного значения сам.
Deleted
()
Ответ на: комментарий от anonymous

Тут непринципиально. А так да.

Deleted
()

Но calloc\malloc я так понимаю аллоцируют только в куче? А как отжать физическую память?

Запиши в то что вернул маллос мусора, выделятся физические страницы.

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

Сделай вдоль, маленький мамкин какер.

Соси аноним, с вероятностью в 99% по старше тебя буду.

AntonyRF ★★★★
() автор топика

Займись этим разрешаю

anonymous
()

для проверки «ватчдоков» проще сделать юзера, у которого лимит на память, и под ним запускать.

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

Ну я с этой проблемой раньше не сталкивался, а гуглиться только всяческая хреномуть. Учту в будущем, но пока /tmpfs вполне хватило.

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

Ты ошибся, но вопреки стандарту я бы его вообще везде писал при завершении инструкции/конструкции.

func(){};

func()
{
   ...
   {
      ...
   };
};

if()
{
   if()
   {

   };
   swith(...)
   {
      ...
   };
   for(...;...;...)
   {

   };
   
};


Точка запятой явно указывает на завершение инструкции/конструкции. Является не обязательным в ряде случаев, но необязательность это не нарушение или ненужность,а возможность. Так то можно и структуры по сути писать без семиколона, но нельзя. Семиколон явность, ставить его или нет вопрос удобства/необходимости , а не чего либо ещё.

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

Нужно занять всю свободную память (на самом деле нет, всего лишь 90%), чтобы другие утилиты не могли аллоцировать ни чего.

Зачем забивать всю память, просто установи лимиты памяти для нужны процессов например с помощью cgroups.

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

Точка запятой явно указывает на завершение инструкции/конструкции

точка с запятой это лишний такт процессора который впустую потратиться(дада не надо тут про копиляторы оптимиирующие, и что Си уже по факту джаваскрипт обрезанный, без стандартов)

всеже это попрежнему актуально в 2018 если пишешь даже под 1ггц армы, или другие архитектуры где компилятор еще соблюдает стандарты

ощутимо будет наличие ; после блока {} и ее отсутствие

missxu
()

Но calloc\malloc я так понимаю аллоцируют только в куче? А как отжать физическую память?

Выделить и записать туда что-нибудь, например, нули. Только это плохой совет!

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

Соси аноним, с вероятностью в 99% по старше тебя буду.

Не смешно даже.

anonymous
()
Ответ на: комментарий от Iron_Bug

для проверки «ватчдоков» проще сделать юзера, у которого лимит на память, и под ним запускать.

это не просто проще, это самое правильное..ограничения по ресурсам ставятся лимитами.

и это должно было быть предложено в первых двух постах (куда катиться этот сраный мир/лор..)

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

PS/ кстати про виртуалки :-) если нужны стресс-тесты - то можно (да пожалуй и нужно) обрезать на их уровне. Тут уж ядро ну никак не выкрутится из общих лимитов.

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

просто сейчас мало кто тестирует приложения на лимиты. считается, что память бесконечна, как и карманы юзера, который может купить и проц помощнее :)

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

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

я бы предложил написать прогу на java, которая имитирует саму себя и пишет хелло-ворлды. Вот тогда не 90, а все 190% озу будут заняты

p0f1g1st112
()
Ответ на: комментарий от Wizard_

А чёрт его знает,чел спросил я сразу написал и всё, меня уже и анон поправил.

Deleted
()

Нужно занять всю свободную память
Нужно для проверки всяррких там ватчдоков

не нужно, вачтдог (сторожевой таймер) нужен для аппаратного сброса, это средство защиты от совсем другого рода ошибок. Лечить утечки памяти в системе ватчдогом - полный идиотизм. Если у тебя аппаратный ватчдог - в системе дожен быть процесс в юзерспейс который сбрасывает таймер, чтобы проверить - прибей его kill -9.

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

вачтдог

Ну это для понятности описал, а так да. Термин не тот. Что-то не хотелось расписывать. Кода много, что-то всегда течёт система не реального времени, от перезагрузки ничего плохого не будет. Как временное решение почему бы не запилить такой функционал?!

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

Достаточно gcc -S.

если пишешь даже под 1ггц армы, или другие архитектуры где компилятор еще соблюдает стандарты

missxu
()
Ответ на: комментарий от Deleted

Какие стандарты, сказано же:

ссылки на исходники ядра линукса кидать?

На вопрос про gcc -S см. пункт про компилятор который соблюдает стандарты.

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

Ядро линукса не соблюдает стандарты, на куда ты собираешься кидать ссылки? Но ты всё равно кидай, конечно.

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

А что, стандарт требует добавить такт на точку с запятой?

anonymous
()

Было много советов про tmpfs, требующих отключить swap. Могу посоветовать ramfs, который не свопится и для которого не придётся отключать swap. Более того, для ramfs не требуется указывать размер, и она будет занимать память по мере заполнения её файлами.

gentoo_root ★★★★★
()

mmap() анонимуса и в каждую страничку по байтику пишешь, оно будет физически таки ее выделять, ну и про ключи не забудь.

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