FreeBSD 15 на ARM64: Полный гид по оптимизации «под ключ»
Когда вы летите на Boeing 737, вы доверяете системам, которые работают предсказуемо. Этот конфиг сделает ваш сервер таким же надежным. Мы отказываемся от ZFS в пользу UFS, чтобы оставить 95% оперативной памяти вашему приложению и торговым скриптам.
1. Файловая система (UFS)
Отредактируйте /etc/fstab. Мы отключаем запись времени доступа (noatime), что критично для долголетия NVMe в облаке.
Plaintext
# /etc/fstab
/dev/gpt/rootfs / ufs rw,noatime,softdeps 1 1
2. Загрузчик: Ядро и Модули (/boot/loader.conf)
Эти настройки применяются до старта системы. Здесь мы «разгоняем» сеть и отключаем лишние проверки безопасности CPU для максимального FPS вашего кода.
Ini, TOML
# --- Интерфейс и загрузка ---
autoboot_delay="1"
boot_multicons="YES"
# --- Сетевой стек (BBR и Фильтры) ---
cc_bbr_load="YES" # Алгоритм TCP BBR для плавной работы из Таиланда/Дубая
accf_data_load="YES" # Фильтр данных для Caddy
accf_http_load="YES" # Фильтр HTTP для Caddy
# --- Оптимизация CPU ARM (Ampere Altra) ---
# Отключаем патчи безопасности, замедляющие ARM (на свой страх и риск)
hw.spec_store_bypass_disable="0"
# Настройка очередей VirtIO под 2 ядра CAX11
hw.vtnet.mq_disable="0"
hw.vtnet.mq_max_cpus="2"
# --- Ресурс диска ---
vfs.read_max=128
3. Системный тюнинг (/etc/sysctl.conf)
Это «Dashboard» вашего сервера. Настраиваем TCP-стек на высокую пропускную способность и тюним планировщик CPU.
Ini, TOML
# --- TCP Stack & BBR ---
net.inet.tcp.cc.algorithm=bbr
net.inet.tcp.fastopen.server_enable=1
kern.ipc.maxsockbuf=16777216
net.inet.tcp.sendbuf_max=16777216
net.inet.tcp.recvbuf_max=16777216
net.inet.tcp.sendbuf_inc=65536
net.inet.tcp.recvbuf_inc=65536
# --- Оптимизация планировщика CPU ---
kern.sched.preempt_thresh=224
kern.sched.topology_spec_type=0
kern.hz=500 # Снижаем частоту таймера (меньше накладных расходов)
# --- Лимиты файлов (для Go и Caddy) ---
kern.maxfiles=200000
kern.maxfilesperproc=180000
# --- Сетевые прерывания (Direct Dispatch) ---
net.isr.dispatch=direct
net.isr.bindthreads=1
# --- Скрытность (Security) ---
net.inet.tcp.blackhole=2
net.inet.udp.blackhole=1
kern.randompid=1
4. Контроль служб (/etc/rc.conf)
Выбрасываем «балласт» (Sendmail) и включаем режим максимальной производительности процессора.
Bash
# Сетевые настройки
hostname="pilot-cax11"
ifconfig_vtnet0="DHCP"
ifconfig_vtnet0_ipv6="inet6 accept_rtadv"
# Процессор: Режим High Performance
powerd_enable="YES"
powerd_flags="-a hiadaptive -b hiadaptive"
performance_cpu_freq="HIGH"
# Отключаем Sendmail (минус память и процессы)
sendmail_enable="NONE"
sendmail_submit_enable="NO"
sendmail_outbound_enable="NO"
sendmail_msp_queue_enable="NO"
# Полезные сервисы
sshd_enable="YES"
ntpd_enable="YES" # Важно для таймстампов сделок в Interactive Brokers
ntpd_sync_on_start="YES"
clear_tmp_enable="YES"
sshguard_enable="YES" # Защита от брутфорса
# Ваш стек
caddy_enable="YES"
5. Лимиты процессов (/etc/login.conf)
Чтобы Go-рантайм не упирался в системные лимиты при обработке тысяч HTMX-запросов.
В секции default: измените:
Plaintext
default:\
...
:openfiles=204800:\
:maxproc=10000:\
:stacksize=64M:\
:memorylocked=unlimited:\
...
Затем выполните: cap_mkdb /etc/login.conf
6. Конфигурация Caddy (Caddyfile)
Финальный аккорд. Проксирование на Go-приложение с использованием современного сжатия Zstd.
Фрагмент кода
your-domain.com {
# Сжатие Zstd идеально для ARM процессоров
encode zstd gzip
# Кэширование статики Tailwind
handle_path /static/* {
root * /usr/local/www/app/static
file_server
header Cache-Control "public, max-age=31536000"
}
# Реверс-прокси на ваш Go-бинарник
handle {
reverse_proxy localhost:8080
}
}
Итог
После перезагрузки (reboot) вы получите систему, которая:
- Потребляет менее 200 MB ОЗУ на старте.
- Использует BBR для минимизации лагов сети.
- Максимально эффективно распределяет задачи между двумя ядрами Ampere Altra.
Теперь ваш сервер готов к любым задачам — от торговли на бирже до обслуживания высоконагруженного веб-интерфейса.
Member discussion