Перейти в группу новостей: 
 
Тема Linux, C, malloc()
Написал Alexei <webmaster@microsoft.com>
Дата 26 января 2021 в 10:11:50
Группа новостей kraft.programming

Всем привет.
Есть ЭВМ типа Raspberry PI, в отношении которой есть сомнение в качестве
работы памяти SDRAM. Установлен linux. Хочу проверить её качество.
Была идея проверки такая: я занимаю всю доступную память из приложения
(да, охват памяти не 100%, но для начала сойдёт), заполняю память
псевдослучайными воспроизводимыми числами - например, генерируемыми
программно Linear-feedback shift register, а затем вычитываю обратно и
сравниваю с заново генерируемыми псевдослучайными числами. И так много раз.
Оно вроде и просто и должно работать, но.
При выделении памяти malloc() возвращает ненулевой, валидный указатель,
при том, что я знаю, что столько, сколько я запросил - столько памяти
нет. Однако хер с ним. Начинаю заполнять - потребление памяти растёт
(согласно top), затем срабатывает OOM-киллер и всё, приложение убито.
Как я понимаю, виновато спекулятивное выделение памяти со стороны Linux,
то, что называется overcommit memory. Её можно отключить глобально, но
некрасиво как-то. А для отдельного приложения отключить нельзя.
Короче, вопрос. Как из приложения выделить в куче наибольшее количество
памяти и запилить её записью/чтением ? Для решения изначальной задачи
memtest не годится, ЭВМ не x86. Нет BIOS, нет UEFI, есть только u-boot в
качестве загрузчика образа ядра linux.
Спасибо.
Все сообщения в этой теме
 
#  Linux, C, malloc() Alexei 26 января 2021 в 10:11:50