Я уже настроил следующие параметры:
Код: Выделить всё
echo advise >/sys/kernel/mm/transparent_hugepage/shmem_enabled
echo never >/sys/kernel/mm/transparent_hugepage/enabled
Вот мой код:
Код: Выделить всё
#include
#include
#include
#include
#include
#include
#include
#include
int main(int argc, char *argv[]) {
if (argc != 2) {
fprintf(stderr, "Usage: %s \n", argv[0]);
exit(EXIT_FAILURE);
}
const char *file_path = argv[1];
int fd = shm_open(file_path, O_RDONLY, 0666);
if (fd == -1) {
perror("shm_open");
exit(EXIT_FAILURE);
}
struct stat sb;
if (fstat(fd, &sb) == -1) {
perror("fstat");
close(fd);
exit(EXIT_FAILURE);
}
size_t huge_page_size = sysconf(_SC_HUGEPAGESIZE);
if (huge_page_size == -1) {
perror("sysconf");
close(fd);
exit(EXIT_FAILURE);
}
void *addr = mmap(NULL, sb.st_size, PROT_READ, MAP_PRIVATE, fd, 0);
if (addr == MAP_FAILED) {
perror("mmap");
close(fd);
exit(EXIT_FAILURE);
}
// TODO: do something for test
if (madvise(addr, sb.st_size, MADV_HUGEPAGE) == -1) {
perror("madvise");
munmap(addr, sb.st_size);
close(fd);
exit(EXIT_FAILURE);
}
if (sb.st_size > 0) {
char first_byte = *(char *)addr;
printf("Bytes: %02X\n", first_byte);
}
munmap(addr, sb.st_size);
close(fd);
return 0;
}
Создайте файл в /dev/shm произвольного размера.
Запустите предоставленный код, используя путь к файлу в качестве аргумента.
Проверьте /proc/meminfo, чтобы убедиться, что значение ShmemHugePages больше 0.
Ожидаемое поведение :
Процесс для отображаемого файла следует использовать прозрачные огромные страницы, а ShmemHugePages в /proc/meminfo должно отражать использование.
Фактическое поведение:
Процесс не использует прозрачные огромные страницы, и ShmemHugePages остается 0.
Информация о системе:
Версия ядра Linux: 5.4
ЦП Архитектура: x86_64
Дополнительная информация:
Размер файла не обязательно кратен 2 МБ.
Файл открыт в режиме только для чтения.
Система настроена на использование THP для shmem с политикой рекомендаций.
Вопрос:
Какие дополнительные шаги или настройки необходимы, чтобы гарантировать, что ядро использует прозрачный Огромные страницы для сопоставленного файла в /dev/shm?
Подробнее здесь: https://stackoverflow.com/questions/792 ... ly-file-in