Архив рубрики: FreeBSD

[openzfs] Ускоряем resilver/scrub/destroy

Если значения по умолчанию вам не очень подходят:

int zfs_top_maxinflight = 32;           /* maximum I/Os per top-level */
int zfs_resilver_delay = 2;             /* number of ticks to delay resilver */
int zfs_scrub_delay = 4;                /* number of ticks to delay scrub */
int zfs_scan_idle = 50;                 /* idle window in clock ticks */
int zfs_scan_min_time_ms = 1000;        /* min millisecs to scrub per txg */
int zfs_free_min_time_ms = 1000;        /* min millisecs to free per txg */
int zfs_resilver_min_time_ms = 3000;    /* min millisecs to resilver per txg */
int zfs_no_scrub_io = B_FALSE;          /* set to disable scrub i/o */
int zfs_no_scrub_prefetch = B_FALSE;    /* set to disable srub prefetching */

Читать далее

[FreeBSD] Добавить патч на постоянной основе

EXTRA_PATCHES в /etc/make.conf

.if ${.CURDIR:M*/emulators/open-vm-tools}
EXTRA_PATCHES=/path/to/vmware-guestd.in.patch
.endif

Если патчей много на разные порты, то можно недавно придуманный
EXTRA_PATCH_TREE использовать.

ПС. Совет не мой, увидел в рассылке

[FreeBSD] Установка нового ядра, если не хватает места

Предположим, вам достался старый сервер, у которого на корневом разделе доступного места всего 500 мб и 300 из них заняты. Нужно обновить ОС или пересобрать ядро? Ниже покажу как и где можно сэкономить место.

Читать далее

Гарантированный запуск единичной копии скрипта

Принцип ее работы прост: для каждого процесса она создает файл и вешает на него lock. Как только процесс завершается, лок пропадает. Лок также пропадает в случае внезапной смерти процесса, и нет необходимости проверять pid на существование или делать другие телодвижения. Если процесс запускается повторно, а лок-файл еще не освободился, работа скрипта прерывается и выдается сообщение в STDERR. Читать далее

[ZFS] Замена сбойного диска сбойным

Не знаю, проявляется ли это на новых версиях ZFS, но достаточно интересный хак. И так, ситуация следующая: при замене диска в пуле, в процесс перестройки, выпал заменяемый диск. Тогда пул навсегда замирает в состоянии DEGRADED. Как быть? Вот здесь подсмотрел хак. Приведу цитатой:

echo zfs_no_scrub_io/W0t1 | mdb -kw

После этого надо дать resilver закончиться (он пройдёт достаточно быстро), и «zpool offline» сбойное устройство.

Потом поменять параметр назад:

echo zfs_no_scrub_io/W0t0 | mdb -kw

и «zpool replace» его работающим диском.

Принцип работы хака: в треде, где идёт resilver, мы пропускаем собственно часть, которая пишет данные; resilver заканчивается (естественно, на битый диск мы ничего не пишем, так что ошибок на нём не будет, но и данных тоже).

 

NOTE TO PEOPLE WHO THINK THAT FreeBSD 11.x IS SLOW

FreeBSD 11.x has many debugging features turned on, in both the kernel and userland. These features attempt to detect incorrect use of system primitives, and encourage loud failure through extra sanity checking and fail stop semantics. They also substantially impact system performance. If you want to do performance measurement, benchmarking, and optimization, you’ll want to turn them off. This includes various WITNESS- related kernel options, INVARIANTS, malloc debugging flags in userland, and various verbose features in the kernel. Many developers choose to disable these features on build machines to maximize performance. (To completely disable malloc debugging, define MALLOC_PRODUCTION in /etc/make.conf, or to merely disable the most expensive debugging functionality run «ln -s ‘abort:false,junk:false’ /etc/malloc.conf».)