В образовательных целях я выяснял, сколько виртуальной памяти я могу выделить в Linux. На x86_64 получается выделить 128ТБ виртуальной памяти как указано в документации. А вот на арм64 мне удается выделить всего 170Тб виртуальной памяти, хотя в документации указано 256Тб. Хочу понять, что мне мешает выделить 256ТБ виртуальной памяти.
Поэтому я написал программу
Код: Выделить всё
#define _GNU_SOURCE
#include
#include
#include
int main() {
char *chars;
size_t nbytes;
while(chars != MAP_FAILED) {
nbytes += 0x10000000000; // 1TB
chars = mmap(
NULL,
nbytes,
PROT_READ | PROT_WRITE,
MAP_SHARED | MAP_ANONYMOUS,
-1,
0
);
munmap(chars, nbytes);
}
printf("Allocated %ld total TB\n", nbytes/1024/1024/1024/1024);
exit(EXIT_FAILURE);
}
Код: Выделить всё
echo 1 > /proc/sys/vm/overcommit_memory
Код: Выделить всё
Allocated 171 total TB
Код: Выделить всё
sysctl -w vm.max_map_count=655300000
ulimit -l unlimited
My kernel params:
Код: Выделить всё
# grep CONFIG_ARM64_VA_BITS /boot/config-$(uname -r)
# CONFIG_ARM64_VA_BITS_39 is not set
CONFIG_ARM64_VA_BITS_48=y
CONFIG_ARM64_VA_BITS=48
# grep CONFIG_ARM64_PA_BITS /boot/config-$(uname -r)
CONFIG_ARM64_PA_BITS_48=y
CONFIG_ARM64_PA_BITS=48
Код: Выделить всё
ARM Cortex A53 (ARMv8) - 1GB RAM
5.15.0-1034-raspi #37-Ubuntu SMP PREEMPT
Код: Выделить всё
# free -m
total used free shared buff/cache available
Mem: 905 198 346 3 360 616
Источник: https://stackoverflow.com/questions/781 ... -3-model-b
Мобильная версия