Генерируйте главные отсутствия страницы

Иногда fsck показывает, что файловая система не имеет никаких ошибок, но в действительности это имеет. У меня была подобная проблема однажды, и если Вы хотите проверить, что файловая система, необходимо применить силу. Я не уверен, какую файловую систему Вы используете, но давайте предположим, что это - ext4:

Emergency help:
 -p                   Automatic repair (no questions)
 -n                   Make no changes to the filesystem
 -y                   Assume "yes" to all questions
 -c                   Check for bad blocks and add them to the badblock list
 -f                   Force checking even if filesystem is marked clean
 -v                   Be verbose
 -b superblock        Use alternative superblock
 -B blocksize         Force blocksize when looking for superblock
 -j external_journal  Set location of the external journal
 -l bad_blocks_file   Add to badblocks list
 -L bad_blocks_file   Set badblocks list

Так, строка, в которой Вы нуждаетесь:

# fsck.ext4 -pvf /dev/sda1
2
04.03.2015, 18:51
2 ответа

Для создания основных неисправностей страницы необходимо заставить читать с диска. Следующий код отображает файл, приведенный в командной строке, сообщив ядру, это не нужно; Если файл достаточно велик (выберите большой файл в / usr / bin ), вы всегда получите большие неисправности страницы:

#include <fcntl.h>
#include <stdio.h>
#include <sys/mman.h>
#include <sys/stat.h>

int main(int argc, char ** argv) {
  int fd = open(argv[1], O_RDONLY);
  struct stat stats;
  fstat(fd, &stats);
  posix_fadvise(fd, 0, stats.st_size, POSIX_FADV_DONTNEED);
  char * map = (char *) mmap(NULL, stats.st_size, PROT_READ, MAP_SHARED, fd, 0);
  if (map == MAP_FAILED) {
    perror("Failed to mmap");
    return 1;
  }
  int result = 0;
  int i;
  for (i = 0; i < stats.st_size; i++) {
    result += map[i];
  }
  munmap(map, stats.st_size);
  return result;
}

на пути работы по ошибкам, это просто чтобы продемонстрировать идею. В моей системе

gcc majorfault.c -o majorfault && /usr/bin/time -v ./majorfault /usr/bin/git-annex

всегда производит 154 неисправности главных страниц.

2
27.01.2020, 22:00

Эта программа на языке C приводит к тому, что график давления памяти на моем Mac увеличивает PDQ:

#include <stdlib.h>

int main(void)
{
    while (1) {
        char* p = malloc(1 * 1024 * 1024 * 1024);
        for (int i = 0; i < 1024; ++i) {
            p[i * 1024 * 1024] = 0;     /* touch the pages */
        }
    }
    return 0;
}

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

2
27.01.2020, 22:00

Теги

Похожие вопросы