Minimaler Kernel

raiding

Well-Known Member
Guten abend, die Herrschaften.

Ich bin grad dabei einen neuen Kernel für mein System zu bauen, bin aber nicht wirklich 100%ig sicher, wie weit ich diesen dabei straffen kann ..

Beispielsweise benutze ich ZFS auf geli ... kann ich dann jetzt im Kernel alle UFS-Klamotten rausschmeißen? NFS möchte ich auch loswerden. Aber ich werde bei google nicht wirklich fündig ... ich weiß jetzt zwar, was manche Optionen bewirken, jedoch habe ich keinen Schimmer, ob FBSD manche Optionen von 1992 noch wegen diver aktueller Abhängigkeiten noch benötigt und dann knartschig wird nachdem ich sie herausgenommen habe ...

Gibt es da FAQs/HOWTOS/sonstige Ankerpunkte? Oder muss ich alles via "trial and error" herausfinden?

LG raiding
 
Auf meinem Desktop benutze ich die aus sentimentalen Gründen noch, auf anderen Systemen nicht mehr. :) Man muss sich klar machen, dass man durch einen kleineren Kernel eigentlich nichts gewinnt, von ein paar Megabyte eingesparten RAM mal abgesehen. Technisch gesehen sind es immer Module, egal ob fest eingebaut oder in einer eigenen Datei. Bei Boot werden die Attach-Routinen aller vorhandenen Module aufgerufen, wenn die Routine greift, wird das Modul anschließend genutzt, ansonsten ist es halt toter Code... Thereotisch kann man zwar Module aktualisieren ohne das System neuzustarten, in der Praxis scheitert das aber fast immer daran, dass man entweder gleich ein volles Kernelupdate braucht, die Module nicht entladen bekommt ("Module is busy" oder so) oder sie sich so tief in den Kernel graben, dass nach dem Neuladen Dinge nicht mehr sauber funktionieren.

Dennoch, die Kernel-Config. Die DEFAULTS Datei muss leer sein, sonst klappt das nicht:
Code:
# Minimale Kernelkonfiguration fuer FreeBSD.
# Der gebaute Kernel enthaelt das absolute
# Minimum an Funktionalitaet, alles weitere
# muss per Modul geladen werden.

# ------------------------------------------ #

# 1. Allgemeine Dinge
# -------------------

# Der Kernelname. Taucht u.a. in der dmesg
# und in der Ausgabe von uname(1) auf.
ident  PINE

# Architektur.
machine  amd64

# CPU-Typ.
cpu  HAMMER

# Wir wollen einen SMP-Kernel bauen.
options  SMP

# Und natuerlich NUMA sprechen
options     DEVICE_NUMA

# Diese Konfiguration (ohne Kommentare)
# ins Kernel-Image einbinden.
options  INCLUDE_CONFIG_FILE

# ------------------------------------------ #

# 2. Fest in den Kernel gebaute Features
# --------------------------------------

# ULE als Scheduler.
options  SCHED_ULE

# Das System soll sich preemtiv verhalten.
options  PREEMPTION

# IPv4 Netzwerkstack.
options  INET

# IPv6 Netzwerkstack.
options  INET6

# SCTP Layer 4 Protokoll.
options  SCTP

# IPSEC Unterst?tzung.
options  IPSEC

# Unterst?tzung f?r IPSEC NAT Traversal.
options     IPSEC_NAT_T

# Stealth-Forwarding von IP-Paketen.
options     IPSTEALTH

# bpf(4) mit JIT-Compiler bauen. Kann
# alle darauf ausbauenden Anwendungen
# sehr beschleunigen.
options     BPF_JITTER

# TCP Offload Engine
options  TCP_OFFLOAD

# Das AUDIT-Framework, damit OpenBSM
# Audit-Events aus dem Kernel ziehen
# kann.
options  AUDIT

# Das MAC-Framework fuer Mandandory
# Access Controls.
options  MAC

# Resource Accounting. Notwendig fuer
# Resource Limits.
options  RACCT

# Unterstuetzung fuer Resource Limits.
options  RCTL

# kbd(4) soll fuer jedes Keyboard ein
# Device in /dev erstellen. Notwendig
# fuer X11.
options  KBD_INSTALL_CDEV

# Neuer PCI-Bus Code.
options  NEW_PCIB

# PCI Hotplug
options     PCI_HP

# PCI SRV-IO
options     PCI_IOV

# Erlaubt hwpmc(4) auch Kernelaufrufe
# zu tracen. De facto fuer sinnvolle
# Ergebnisse notwendig.
options  HWPMC_HOOKS

# Alle Kernel-Ausgaben puffern, damit
# sie sich nicht untereinander mischen.
options  PRINTF_BUFR_SIZE=256

# Capsicum Capabilities Framework.
options  CAPABILITY_MODE
options  CAPABILITIES

# vt-d / DMAR Unterstuertzung
options  ACPI_DMAR

# ------------------------------------------ #

# 3. Debug-Optionen
# -----------------

# Den Kernel mit Debug-Symbolen bauen. Die
# Symbole werden in einzelnen Dateien
# gespeichert und koennen bei Bedarf einfach
# geloescht werden.
makeoptions DEBUG=-g

# CTF Data fuer DTrace
makeoptions WITH_CTF=1

# Kernel-Debugger Framework. Notwendig, um
# sinnvolle panic()-Ausgaben zu bekommen.
options  KDB

# Bei panic() einen Stack-Trace ausgeben.
options  KDB_TRACE
# STACK erlaubt es, auf den Kernelstack
# zuzugreifen. Notwendig fuer einige
# Debuging-Tools.
options  STACK

# Unterstuetzung fuer die ktrace(2) Syscalls.
options  KTRACE

# Kernel-DTrace Unterstuetzung.
options  KDTRACE_FRAME
options  KDTRACE_HOOKS

# Wenn Kernelmodule CTF enthalten, wird dies
# geladen. Andernfalls waere DTrace sinnlos.
options  DDB_CTF

# USB-Debugging ist notwendig, um Quirks
# setzen zu koennen. In der Praxis kaum zu
# vermeiden.
options     USB_DEBUG

# ------------------------------------------ #

# 4. Spezielle Optionen fuer UFS
# ------------------------------

# Softupdates aktivieren.
options  SOFTUPDATES

# Unterstuetzung fuer ACL.
options  UFS_ACL

# Dirhash-Code, beschleunigt die Sache sehr.
options  UFS_DIRHASH

# gjournal(8) Unterstuetzung.
options  UFS_GJOURNAL

# Extended Attributs Unterstuetzung.
# U.a. fuer ACL genutzt.
options  UFS_EXTATTR
options  UFS_EXTATTR_AUTOSTART

# Disk Quotas
options  QUOTA

# ------------------------------------------ #

# 5. Rueckkompatiblitaet
# ----------------------

# Syscalls und In-Kernel Structs aelterer
# FreeBSD-Versionen. Nicht jede Version
# aenderte das Interface!
options  COMPAT_FREEBSD4
options  COMPAT_FREEBSD5
options  COMPAT_FREEBSD6
options  COMPAT_FREEBSD7
options  COMPAT_FREEBSD9
options  COMPAT_FREEBSD10

# Unterstuetzung fuer 4.3BSD Interfaces.
# Auch fuer FreeBSD 1 bis 3 Binaries
# notwendig.
options     COMPAT_43

# Unterstuetzung fuer das alte 4.3BSD
# TTY-Interface. Wird (leider) noch immer
# haeufig genutzt.
options  COMPAT_43TTY

# Unterstuetzung fuer 32-Bit Binaries auf
# 64 Bit Hosts.
options  COMPAT_FREEBSD32

# SysV Interfaces
options  SYSVSHM
options  SYSVMSG
options  SYSVSEM

# POSIX Realtime Scheduling Interfaces.
options  _KPOSIX_PRIORITY_SCHEDULING

# ------------------------------------------ #

# 6. Devices
# ----------
# newcons Systemkonsolenrenderer
device     vt
device     vt_vga
device     vt_efifb

# Minimale Netzwerk-Unterstuetzung.
#  - ether(4): Ethernet Netzwerke
#  - loop(4):  Loopback-Devices
#  - bpf(4):  Berkeley Packet Filter
device  ether
device  loop
device  bpf

# Pseudo-TTYs
device  pty

# Klassisches AT und PS/2 Keyboard.
#  - atkbdc(4): Keyboard- und Mouse-Controller
#  - atkbd(4):  Keyboard-Treiber
#  - psm(4):  Mouse-Treiber
device  atkbdc
device  atkbd
device  psm

# System-Interfaces.
#  - isa(4):  ISA und LPC Unterstuetzung
#  - eisa(4): Extended ISA und LPC
#  - pci(4):  PCI und seine Abarten
#  - acpi(4): ACPI Unterstuetzung
device  isa
device  eisa
device  pci
device  acpi

# crypto(4) Framework, Abhaengigkeit zu IPSEC.
#  - crypto(4): Das Framework
#  - enc(4):  IPSEC Pseudo Device
device  crypto
device     enc
# altq(4) Unterstuetzung.
options  ALTQ
options  ALTQ_CBQ
options  ALTQ_RED
options  ALTQ_RIO
options  ALTQ_HFSC
options  ALTQ_CDNR
options  ALTQ_PRIQ

# Das Netmap-Subsystem
device     netmap

# Zufallszahlen
device     random

# ------------------------------------------ #
Wesentlich kleiner kommt nicht. Wenn wie bei mit 'device sc' fehlt, muss man den Nvidia-Treiber noch patchen. Ansonsten wird das Kernelmodul nicht laden:
Code:
--- ./src/nvidia/nvidia_os.c.orig   2017-03-13 07:53:40.018536000 +0100
+++ ./src/nvidia/nvidia_os.c   2017-03-13 07:54:10.443019000 +0100
@@ -740,6 +740,7 @@
  NvU16 *pFbPitch
 )
 {
+#if 0
  const sc_softc_t *sc = sc_get_softc(0, SC_KERNEL_CONSOLE);
  if (sc)
@@ -761,6 +762,7 @@
  }
  }
  }
+#endif
  *pPhysicalAddress = 0;
  *pFbWidth = *pFbHeight = *pFbDepth = *pFbPitch = 0;

Dazu kommt dann die passende loader.conf, wobei die geladenen Module von der Hardware abhängen:
Code:
# System
# ------

# Delay
autoboot_delay="3"

# Kein Strom fuer Geraete ohne Treiber
hw.pci.do_power_nodriver="3"

# Kein p4tcc
hint.p4tcc.0.disabled=1

# Kein legacy Pamps
kern.cam.ada.legacy_aliases="0"

# Sound Equalizer
hint.pcm.0.eq="1"
hint.pcm.4.eq="1"

# Soundkarte
# !!! DIES IST FUER AC3 UND NICHT FUER WAVE !!!
#hint.hdac.1.cad0.nid21.config="as=1 seq=4 device=Line-Out color=Grey"
#hint.hdac.1.cad0.nid23.config="as=1 seq=2 device=Line-Out color=Black"
#hint.hdac.1.cad0.nid27.config="as=1 seq=15 device=Headphones color=Green"

# ZFS
vfs.zfs.arc_max="4G"

# glabel ruhigstellen
kern.geom.label.disk_ident.enable="0"
kern.geom.label.gptid.enable="0"

# Filco Keyboard Quirk
hw.usb.quirk.0="0x04d9 0x1818 0x0000 0xffff UQ_UMS_IGNORE"

# Dualcores fuer Bhyve
hw.vmm.topology.cores_per_package=2

# Module
# --------

# Partitionstypen
geom_part_bsd_load="YES"
geom_part_mbr_load="YES"
geom_part_gpt_load="YES"

# glabel
geom_label_load="YES"

# Random
random_load="YES"

# ATA
ahci_load="YES"

# X11 Kram
mem_load="YES"
io_load="YES"

# SCSI
cam_load="YES"

# Netzwerk
miibus_load="YES"
if_em_load="YES"

# SMBus
smbus_load="YES"
ichsmb_load="YES"

# CPUFreq
cpufreq_load="YES"

# Sound
sound_load="YES"
snd_hda_load="YES"
snd_envy24ht_load="YES"

# CPU-Device
cpuctl_load="YES"

# USB
usb_load="YES"
xhci_load="YES"
ums_load="YES"
umass_load="YES"
ukbd_load="YES"
usb_quirk_load="YES"

# Linux
linux_load="YES"

# Keyboard
kbdmux_load="YES"

# Bruecke
if_bridge_load="YES"
bridge_stp_load="YES"

# Tap
if_tap_load="YES"

# Temperatursensoren
coretemp_load="YES"

# Tun
if_tun_load="YES"

# ProcFS
pseudofs_load="YES"
procfs_load="YES"
linprocfs_load="YES"

# UFS
ufs_load="YES"

# FAT
msdosfs_load="YES"

# AES-NI
aesni_load="YES"
cryptodev_load="YES"

# CUSE
cuse4bsd_load="YES"

# FUSE
fuse_load="YES"

# Nvidia
nvidia_load="YES"
nvidia-modeset_load="YES"

# ZFS
zfs_load="YES"

# Bhyve
vmm_load="YES"

# NMDM
nmdm_load="YES"

# COM-Port
uart_load="YES"

# Hardware-RNG
rdrand_rng_load="YES"

# Filemon
filemon_load="YES"
Einige der oberen Optionen sind ab 11.0 nicht mehr notwendig. p4tcc ist nun z.B. als Standardeinstellung aus. Aber sie schaden auch nicht und bisher war ich zu faul sie durchzugehen. ;)

Zum Schluss noch die dmesg:
Code:
Copyright (c) 1992-2016 The FreeBSD Project.
Copyright (c) 1979, 1980, 1983, 1986, 1988, 1989, 1991, 1992, 1993, 1994
   The Regents of the University of California. All rights reserved.
FreeBSD is a registered trademark of The FreeBSD Foundation.
FreeBSD 11.0-RELEASE-p8 #0 r314302M: Sun Feb 26 17:23:52 CET 2017
  root@pine.home.yamagi.org:/usr/obj/usr/sources/11.0-RELEASE/sys/PINE amd64
FreeBSD clang version 3.8.0 (tags/RELEASE_380/final 262564) (based on LLVM 3.8.0)
VT(efifb): resolution 1600x1200
CPU: Intel(R) Core(TM) i7-6700K CPU @ 4.00GHz (4008.14-MHz K8-class CPU)
  Origin="GenuineIntel"  Id=0x506e3  Family=0x6  Model=0x5e  Stepping=3
  Features=0xbfebfbff<FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,CMOV,PAT,PSE36,CLFLUSH,DTS,ACPI,MMX,FXSR,SSE,SSE2,SS,HTT,TM,PBE>
  Features2=0x7ffafbbf<SSE3,PCLMULQDQ,DTES64,MON,DS_CPL,VMX,EST,TM2,SSSE3,SDBG,FMA,CX16,xTPR,PDCM,PCID,SSE4.1,SSE4.2,x2APIC,MOVBE,POPCNT,TSCDLT,AESNI,XSAVE,OSXSAVE,AVX,F16C,RDRAND>
  AMD Features=0x2c100800<SYSCALL,NX,Page1GB,RDTSCP,LM>
  AMD Features2=0x121<LAHF,ABM,Prefetch>
  Structured Extended Features=0x29c6fbf<FSGSBASE,TSCADJ,SGX,BMI1,HLE,AVX2,SMEP,BMI2,ERMS,INVPCID,RTM,NFPUSG,MPX,RDSEED,ADX,SMAP,CLFLUSHOPT,PROCTRACE>
  XSAVE Features=0xf<XSAVEOPT,XSAVEC,XINUSE,XSAVES>
  VT-x: PAT,HLT,MTF,PAUSE,EPT,UG,VPID
  TSC: P-state invariant, performance statistics
real memory  = 34359738368 (32768 MB)
avail memory = 33190838272 (31653 MB)
Event timer "LAPIC" quality 600
ACPI APIC Table: <ALASKA A M I>
FreeBSD/SMP: Multiprocessor System Detected: 8 CPUs
FreeBSD/SMP: 1 package(s) x 4 core(s) x 2 hardware threads
random: unblocking device.
ioapic0 <Version 2.0> irqs 0-119 on motherboard
random: entropy device external interface
netmap: loaded module
kbd1 at kbdmux0
random: registering fast source Intel Secure Key RNG
random: fast provider: "Intel Secure Key RNG"
nvidia-modeset: Loading NVIDIA Kernel Mode Setting Driver for UNIX platforms  375.26  Thu Dec  8 18:25:08 PST 2016
aesni0: <AES-CBC,AES-XTS,AES-GCM,AES-ICM> on motherboard
cryptosoft0: <software crypto> on motherboard
acpi0: <ALASKA A M I> on motherboard
acpi0: Power Button (fixed)
cpu0: <ACPI CPU> on acpi0
cpu1: <ACPI CPU> on acpi0
cpu2: <ACPI CPU> on acpi0
cpu3: <ACPI CPU> on acpi0
cpu4: <ACPI CPU> on acpi0
cpu5: <ACPI CPU> on acpi0
cpu6: <ACPI CPU> on acpi0
cpu7: <ACPI CPU> on acpi0
hpet0: <High Precision Event Timer> iomem 0xfed00000-0xfed003ff on acpi0
Timecounter "HPET" frequency 24000000 Hz quality 950
Event timer "HPET" frequency 24000000 Hz quality 550
atrtc0: <AT realtime clock> port 0x70-0x77 irq 8 on acpi0
atrtc0: Warning: Couldn't map I/O.
Event timer "RTC" frequency 32768 Hz quality 0
attimer0: <AT timer> port 0x40-0x43,0x50-0x53 irq 0 on acpi0
Timecounter "i8254" frequency 1193182 Hz quality 0
Event timer "i8254" frequency 1193182 Hz quality 100
Timecounter "ACPI-fast" frequency 3579545 Hz quality 900
acpi_timer0: <24-bit timer at 3.579545MHz> port 0x1808-0x180b on acpi0
pcib0: <ACPI Host-PCI bridge> port 0xcf8-0xcff on acpi0
pcib0: _OSC returned error 0x4
pci0: <ACPI PCI bus> on pcib0
pcib1: <ACPI PCI-PCI bridge> at device 1.0 on pci0
pci1: <ACPI PCI bus> on pcib1
vgapci0: <VGA-compatible display> port 0xe000-0xe07f mem 0xde000000-0xdeffffff,0xc0000000-0xcfffffff,0xd0000000-0xd1ffffff irq 16 at device 0.0 on pci1
nvidia0: <GeForce GTX 750 Ti> on vgapci0
vgapci0: child nvidia0 requested pci_enable_io
vgapci0: child nvidia0 requested pci_enable_io
vgapci0: Boot video device
hdac0: <NVIDIA (0x0fbc) HDA Controller> mem 0xdf080000-0xdf083fff irq 17 at device 0.1 on pci1
xhci0: <Intel Sunrise Point USB 3.0 controller> mem 0xdf330000-0xdf33ffff irq 16 at device 20.0 on pci0
xhci0: 32 bytes context size, 64-bit DMA
usbus0: waiting for BIOS to give up control
usbus0 on xhci0
pci0: <simple comms> at device 22.0 (no driver attached)
ahci0: <Intel Sunrise Point AHCI SATA controller> port 0xf050-0xf057,0xf040-0xf043,0xf020-0xf03f mem 0xdf348000-0xdf349fff,0xdf34c000-0xdf34c0ff,0xdf34b000-0xdf34b7ff irq 16 at device 23.0 on pci0
ahci0: AHCI v1.31 with 6 6Gbps ports, Port Multiplier not supported
ahcich0: <AHCI channel> at channel 0 on ahci0
ahcich1: <AHCI channel> at channel 1 on ahci0
ahcich2: <AHCI channel> at channel 2 on ahci0
ahcich3: <AHCI channel> at channel 3 on ahci0
ahcich4: <AHCI channel> at channel 4 on ahci0
ahcich5: <AHCI channel> at channel 5 on ahci0
ahciem0: <AHCI enclosure management bridge> on ahci0
pcib2: <ACPI PCI-PCI bridge> irq 16 at device 27.0 on pci0
pci2: <ACPI PCI bus> on pcib2
pcib3: <ACPI PCI-PCI bridge> at device 27.2 on pci0
pci3: <ACPI PCI bus> on pcib3
pcib4: <ACPI PCI-PCI bridge> irq 18 at device 0.0 on pci3
pci4: <ACPI PCI bus> on pcib4
pcm0: <Envy24HT audio (AudioTrak Prodigy HD2)> port 0xd080-0xd09f,0xd000-0xd07f irq 19 at device 1.0 on pci4
pcm0: system configuration
  SubVendorID: 0x3137, SubDeviceID: 0x4154
  XIN2 Clock Source: 49.152MHz(192kHz*256)
  MPU-401 UART(s) #: 1
  ADC #: 1 and SPDIF receiver connected
  DAC #: 1
  Multi-track converter type: I2S(192KHz support, 24bit resolution, ID#0x0)
  S/PDIF(IN/OUT): 1/1 ID# 0x00
  GPIO(mask/dir/state): 0xfff8ff/0xdfffff/0x200700
pcib5: <ACPI PCI-PCI bridge> irq 16 at device 28.0 on pci0
pci5: <ACPI PCI bus> on pcib5
xhci1: <XHCI (generic) USB 3.0 controller> mem 0xdf200000-0xdf207fff irq 16 at device 0.0 on pci5
xhci1: 32 bytes context size, 64-bit DMA
xhci1: Unable to map MSI-X table
usbus1 on xhci1
pcib6: <ACPI PCI-PCI bridge> irq 16 at device 28.4 on pci0
pci6: <ACPI PCI bus> on pcib6
pcib7: <ACPI PCI-PCI bridge> irq 16 at device 29.0 on pci0
pci7: <ACPI PCI bus> on pcib7
ahci1: <AHCI SATA controller> mem 0xdf100000-0xdf101fff irq 16 at device 0.0 on pci7
ahci1: AHCI v1.30 with 1 6Gbps ports, Port Multiplier not supported
ahcich6: <AHCI channel> at channel 0 on ahci1
pcib8: <ACPI PCI-PCI bridge> irq 16 at device 29.4 on pci0
pci8: <ACPI PCI bus> on pcib8
isab0: <PCI-ISA bridge> at device 31.0 on pci0
isa0: <ISA bus> on isab0
pci0: <memory> at device 31.2 (no driver attached)
hdac1: <Intel Sunrise Point HDA Controller> mem 0xdf340000-0xdf343fff,0xdf320000-0xdf32ffff irq 16 at device 31.3 on pci0
ichsmb0: <Intel Sunrise Point-H SMBus controller> port 0xf000-0xf01f mem 0xdf34a000-0xdf34a0ff irq 16 at device 31.4 on pci0
smbus0: <System Management Bus> on ichsmb0
em0: <Intel(R) PRO/1000 Network Connection 7.6.1-k> mem 0xdf300000-0xdf31ffff irq 16 at device 31.6 on pci0
em0: Using an MSI interrupt
em0: Ethernet address: 40:8d:5c:1d:67:27
em0: netmap queues/slots: TX 1/1024, RX 1/1024
acpi_button0: <Sleep Button> on acpi0
acpi_button1: <Power Button> on acpi0
acpi_tz0: <Thermal Zone> on acpi0
acpi_tz1: <Thermal Zone> on acpi0
uart0: <16550 or compatible> port 0x3f8-0x3ff irq 4 flags 0x10 on acpi0
atkbdc0: <Keyboard controller (i8042)> at port 0x60,0x64 on isa0
atkbd0: <AT Keyboard> irq 1 on atkbdc0
kbd0 at atkbd0
atkbd0: [GIANT-LOCKED]
coretemp0: <CPU On-Die Thermal Sensors> on cpu0
est0: <Enhanced SpeedStep Frequency Control> on cpu0
coretemp1: <CPU On-Die Thermal Sensors> on cpu1
est1: <Enhanced SpeedStep Frequency Control> on cpu1
coretemp2: <CPU On-Die Thermal Sensors> on cpu2
est2: <Enhanced SpeedStep Frequency Control> on cpu2
coretemp3: <CPU On-Die Thermal Sensors> on cpu3
est3: <Enhanced SpeedStep Frequency Control> on cpu3
coretemp4: <CPU On-Die Thermal Sensors> on cpu4
est4: <Enhanced SpeedStep Frequency Control> on cpu4
coretemp5: <CPU On-Die Thermal Sensors> on cpu5
est5: <Enhanced SpeedStep Frequency Control> on cpu5
coretemp6: <CPU On-Die Thermal Sensors> on cpu6
est6: <Enhanced SpeedStep Frequency Control> on cpu6
coretemp7: <CPU On-Die Thermal Sensors> on cpu7
est7: <Enhanced SpeedStep Frequency Control> on cpu7
fuse-freebsd: version 0.4.4, FUSE ABI 7.8
ZFS filesystem version: 5
ZFS storage pool version: features support (5000)
Timecounters tick every 1.000 msec
hdacc0: <NVIDIA (0x0060) HDA CODEC> at cad 0 on hdac0
hdaa0: <NVIDIA (0x0060) Audio Function Group> at nid 1 on hdacc0
pcm1: <NVIDIA (0x0060) (HDMI/DP 8ch)> at nid 4 on hdaa0
pcm2: <NVIDIA (0x0060) (HDMI/DP 8ch)> at nid 5 on hdaa0
pcm3: <NVIDIA (0x0060) (HDMI/DP 8ch)> at nid 7 on hdaa0
hdacc1: <Realtek (0x0900) HDA CODEC> at cad 0 on hdac1
hdaa1: <Realtek (0x0900) Audio Function Group> at nid 1 on hdacc1
pcm4: <Realtek (0x0900) (Rear Analog 7.1/2.0)> at nid 20,22,21,23 and 24,26 on hdaa1
pcm5: <Realtek (0x0900) (Front Analog)> at nid 27 and 25 on hdaa1
pcm6: <Realtek (0x0900) (Onboard Digital)> at nid 17 on hdaa1
usbus0: 5.0Gbps Super Speed USB v3.0
usbus1: 5.0Gbps Super Speed USB v3.0
ugen0.1: <0x8086> at usbus0
uhub0: <0x8086 XHCI root HUB, class 9/0, rev 3.00/1.00, addr 1> on usbus0
ugen1.1: <0x1b21> at usbus1
uhub1: <0x1b21 XHCI root HUB, class 9/0, rev 3.00/1.00, addr 1> on usbus1
ada0 at ahcich0 bus 0 scbus0 target 0 lun 0
ada0: <INTEL SSDSC2BB480G6 G2010140> ACS-2 ATA SATA 3.x device
cd0 at ahcich3 bus 0 scbus3 target 0 lun 0
cd0: <HL-DT-ST DVDRAM GH22NS50 TN02> Removable CD-ROM SCSI device
cd1 at ahcich4 bus 0 scbus4 target 0 lun 0
cd1: <TSSTcorp DVDWBD SH-B123L SB04> Removable CD-ROM SCSI device
cd0: Serial Number K1V9AR62256
cd0: 150.000MB/s transfers (SATA 1.x, UDMA5, ATAPI 12bytes, PIO 8192bytes)
cd0: Attempt to query device size failed: NOT READY, Medium not present - tray closed
cd1: Serial Number R8606GEB909038
cd1: 150.000MB/s transfers (SATA 1.x, UDMA5, ATAPI 12bytes, PIO 8192bytes)
cd1: Attempt to query device size failed: NOT READY, Medium not present - tray closed
ada0: Serial Number BTWA544502S6480FGN
ada0: 600.000MB/s transfers (SATA 3.x, UDMA6, PIO 512bytes)
ada0: Command Queueing enabled
ada0: 457862MB (937703088 512 byte sectors)
ada1 at ahcich1 bus 0 scbus1 target 0 lun 0
ada1: <HGST HDN724040ALE640 MJAOA5E0> ATA8-ACS SATA 3.x device
ada1: Serial Number PK2334PCG6Z09B
ada1: 600.000MB/s transfers (SATA 3.x, UDMA6, PIO 8192bytes)
ada1: Command Queueing enabled
ada1: 3815447MB (7814037168 512 byte sectors)
ada2 at ahcich2 bus 0 scbus2 target 0 lun 0
ada2: <HGST HDN724040ALE640 MJAOA5E0> ATA8-ACS SATA 3.x device
ada2: Serial Number PK2334PCG52WSB
ada2: 600.000MB/s transfers (SATA 3.x, UDMA6, PIO 8192bytes)
ada2: Command Queueing enabled
ada2: 3815447MB (7814037168 512 byte sectors)
ada3 at ahcich6 bus 0 scbus7 target 0 lun 0
ada3: <SAMSUNG MZHPV256HDGL-00000 BXW2500Q> ACS-2 ATA SATA 3.x device
ada3: Serial Number S1X2NYAG505214
ada3: 600.000MB/s transfers (SATA 3.x, UDMA6, PIO 512bytes)
ada3: Command Queueing enabled
ada3: 244198MB (500118192 512 byte sectors)
uhub1: 4 ports with 4 removable, self powered
ses0 at ahciem0 bus 0 scbus6 target 0 lun 0
ses0: <AHCI SGPIO Enclosure 1.00 0001> SEMB S-E-S 2.00 device
ses0: SEMB SES Device
SMP: AP CPU #1 Launched!
SMP: AP CPU #2 Launched!
SMP: AP CPU #6 Launched!
SMP: AP CPU #5 Launched!
SMP: AP CPU #7 Launched!
SMP: AP CPU #4 Launched!
SMP: AP CPU #3 Launched!
Timecounter "TSC-low" frequency 2004072436 Hz quality 1000
Trying to mount root from zfs:system/ROOT/11.0-RELEASE []...
 
Also auf Systemen, die genug RAM für ZFS haben, macht es keinen Sinn sein GENERIC abzuspecken um RAM zu sparen. Der Arbeitsaufwand steht in keinen sinnvollen Verhältnis zum Nutzen. Allerdings hatte ich ne Weile den if_iwn in ein Modul ausgelagert um die Karte reinitialisieren zu können, wenn die Firmware abgeschmiert war.
 
Wow nice!

Erstmal vielen Dank für die schnelle und ausführliche Hilfe!! Die Kommentare im Kernel sind äusserst lehrreich :)

Ich hab keine Bedenken bezüglich meines Speicherverbrauchs. Mit 32GB sollte ich (hoffentlich) für ein paar Jahre gut gerüstet sein :)

Mehr Code bedeutet allerdings immer ein mehr an potentiellen Sicherheitslücken und das möchte ich natürlich so gut es eben geht vermeiden ... würde am liebsten sogar nur das kompakte OpenBSD nutzen, was wiederrum vorraussetzen würde, dass ich ZFS und SMP-Performance entbähren könnte ..

Allerdings frage ich mich: Brauche ich wirklich IPv6 und SCTP fest im Kernel implementiert, obwohl ich diese Protokolle nicht nutze? Und selbst wenn das System/der Kernel zum Booten/während des Kompilierens UFS braucht .. kann ich dann nicht wenigstens Quotas, Softupdates und das andere Gedöns rausschmeißen, wenn ich ja eh ZFS nutze?
 
Mehr Code bedeutet allerdings immer ein mehr an potentiellen Sicherheitslücken
Aber vergleich mal, wieviel Code vom Kernel kommt und wieviel von allem anderen, was du vielleicht auch noch nutzen möchtest.
Man braucht dazu nicht direkt Code zu lesen, man kann die Auslastung des Speichers heranziehen. Beim Kernel reden wir von MB, bei weitergehenden Anwendungen von GB, um mal etwas plakativ zu werden. Und dabei dürfte der Code im Kernel noch relativ gut überwacht und sicher sein, was bei vielen weitergehenden Anwendungen durchaus nicht immer so sein wird.
Nä, ist ein Hobby, den Kernel klein zu halten, aber auf normalen Desktop-Systemen absolut nicht notwendig und kaum sinnvoll.
 
Hallo @pit234a

ich habe gerade ähnlich gedacht, allerdings ist so etwas auch eine didaktische Maßnahme, bei der man ziemlich gut Basics zum System kennen lernt. Ist doch auch so bei manuellem Setup von root-on-zfs. :)

Viele Grüße,
Holger
 
@pit234a

Da gebe ich dir selbstverständlich im vollen Umfang Recht.

Ich versuche mein System allerdings insgesamt so klein wie möglich zu halten. Ursprünglich komme ich aus der Linux-Welt und habe immer nur hin und wieder Kontakt mit Free-/OpenBSD gehabt. Nun wollte ich allerdings auf FreeBSD umsteigen, damit einen möglichst schlanken Virtualisierungsserver mit Bhyve erstellen und somit über Netzwerk bzw. (VNC, X11 klappt ja leider mit Bhyve noch nicht) auf meinen Maschinen(BSD, Linux, Win) zu arbeiten.

Mir hat an FreeBSD immer sehr gefallen, dass man sogar im offiziellen Handbuch schon vor langer Zeit dazu animiert wurde, seinen eigenen Kernel zu kompilieren und das gesamte System aus dem Quellcode zu übersetzen. Obwohl der Performancegewinn der dadurch entsteht, dass das System maßgeschneidert auf dem eigenen Prozessor übersetzt wird(ich verwende u.a. CPUTYPE?=native in der make.conf) heutzutage wahrscheinlich kaum der Rede wert sein wird, gefällt mir diese Grundidee sehr. Dazu kommen jetzt halt die Vorzüge von ZFS und Bhyve im Basissystem -> "alles aus einem Guss".

Ich habe auch meine src.conf bearbeitet, um Dinge einfach aus dem Basissystem zu entfernen, die meiner Meinung nach für meine Zwecke unnötig sind:

WITHOUT_AMD=YES
WITHOUT_APM=YES
WITHOUT_ATM=YES
WITH_BINUTILS=YES
WITH_BINUTILS_BOOTSTRAP=YES
WITHOUT_BLUETOOTH=YES
WITHOUT_BOOTPARAMD=YES
WITHOUT_BOOTPD=YES
#WITH_CCACHE_BUILD=YES
WITH_CLANG=YES
WITH_CLANG_BOOTSTRAP=YES
WITH_CLANG_FULL=YES
WITH_CLANG_IS_CC=YES
WITHOUT_CTM=YES
#WITHOUT_DEBUG_FILES=YES
WITHOUT_FLOPPY=YES
#WITHOUT_FTP=YES
WITHOUT_GCC=YES
WITHOUT_GCC_BOOTSTRAP=YES
WITHOUT_GNUCXX=YES
WITHOUT_GPIO=YES
WITHOUT_HAST=YES
WITHOUT_HYPERV=YES
#WITHOUT_INET6=YES
WITHOUT_INETD=YES
WITHOUT_IPFILTER=YES
WITHOUT_IPFW=YES
WITHOUT_KVM=YES
#WITH_LIB32=YES
WITH_LIBRESSL=YES
WITH_LLD=YES
WITH_LLDB=YES
WITHOUT_LLVM_LIBUNBIND=YES
WITHOUT_LPR=YES
WITHOUT_NDIS=YES
WITHOUT_NTP=YES
WITHOUT_OPENSSH=YES
WITHOUT_RBOOTD=YES
WITHOUT_RCMDS=YES
WITH_SAFESTACK=YES
WITHOUT_SENDMAIL=YES
WITH_SVN=YES
WITHOUT_TCP_WRAPPERS=YES
WITHOUT_TELNET=YES
WITHOUT_TFTP=YES
WITHOUT_TIMED=YES
WITHOUT_UNBOUND=YES

Wie gesagt: Ich will nur Bhyve starten können und gut. OpenBSD soll als interner Router mit Vollzugriff auf meine Netzwerkhardware via PCI-Durchreiche und virtueller Switche genutzt werden, falls ich mal Updates ziehen will. Ansonsten arbeite ich nur mit den virtuellen Machinen, so die Grundidee.

Wenn ihr mir ggf. Denkanstöße, Kritik oder Erfahrungswerte mit auf den Weg geben könnt, wäre ich jedem von euch sehr dankbar, da das mein erstes Projekt dieser Art ist und die meisten von euch wahrscheinlich viele Jahre mehr Erfahrungen mit *BSD gesammelt haben, als ich selbst.

Gruß
 
Also auf SSH und NTP würde ich auf keinen Fall verzichten wollen. Ich glaube auch, dass du wenigstens einen Compiler mit an Bord behalten möchtest, sonst ist nach dem ersten Build und einem make delete-old kein weiterer Build möglich.

Rob
 
Obwohl der Performancegewinn der dadurch entsteht, dass das System maßgeschneidert auf dem eigenen Prozessor übersetzt wird(ich verwende u.a. CPUTYPE?=native in der make.conf) heutzutage wahrscheinlich kaum der Rede wert sein wird
Auf meinem kleinen ASUS 1000HE hatte ich mit FreeBSD ein 32Bit-System aus den Quellen gebaut (und auf zahlreichen anderen Systemen früher auch, nur das hat bis heute überlebt und kann als Vergleich dienen). Die Performance war deutlich besser, als mit einer Standard OpenBSD Installation zu dieser Zeit. Wohlgemerkt: nicht nur den Kernel, auch alle Ports wurden für den PC eigens gebaut.
Zu Beginn hatte ich auf dem PC ein einfaches GNU/Linux und das hatte sich in allen Belangen als performanter gezeigt und konnte verschiedene Zusatzfunktionen out of the box.
Heute habe ich da eine Standard 32Bit FreeBSD 11er Installation und alle zusätzliche SW aus den Paketen installiert und bin wenigstens so zufrieden, wie ich es seinerzeit mit der GNU/Linux Installation mal war (wobei ich diverse Suspend und Kram noch nicht mal getestet habe, die SSD bootet schneller, als ein Aufwachen aus dem Suspend dauert).

Was ich sagen will: die Entwicklung geht einfach weiter. Manchmal sage ich: Leider. Denn unausweichlich werden alle Anwendungen immer schwerer und größer, schon alleine wegen der immer aufgeblaseneren Grafik. Damit verschieben sich die Relationen. Zusätzlich ist die HW halt immer besser und schneller und schon bei meinem alten PC taktet die CPU die meiste Zeit leer vor sich hin.
Ich verstehe gut, dass man ein schmales System haben will. Wenn ich ein Ubuntu installiere, ärgere ich mich meist so lange darüber, bis ich es irgendwann deutlich kastriert und alle in meinen Augen nicht notwendigen Dienste abgeschaltet habe. Manchmal bin ich da stur und lernresitent, denn nicht alles ist tatsächlich so schlimm und schlecht, wie ich auf Anhieb empfinde.
Bei FreeBSD ist das deutlich besser und ich ärgere mich kaum jemals.
Doch die Standard-Installation, der GENERIC und seine binären Updates sowie die zusätzliche SW als Paket, das hat eindeutig Vorteile in der Geschwindigkeit bei der Installation und Wartung des Systems. Da wiegt für mich die Unterschiede in der Performance beim Betrieb deutlich auf.

Du verfolgst aber ein anders Projekt, wie du beschreibst.
Das ist vollkommen verschieden. Ich habe eher für einen fertigen Desktop-PC argumentiert.
Sieht also so aus, als seien wir da ziemlich einig ;)
 
Ich verstehe gut, dass man ein schmales System haben will. Wenn ich ein Ubuntu installiere, ärgere ich mich meist so lange darüber, bis ich es irgendwann deutlich kastriert und alle in meinen Augen nicht notwendigen Dienste abgeschaltet habe. ;)

Ubuntu ist natürlich DAS Paradebeispiel .. Aber der Trend scheint allgemein in Richtung Bloatware zu gehen (s. systemd).

Der Lerneffekt ist dabei natürlich auch nicht zu verachten ... Ich informiere euch über die Fortschritte ;)

@KobRheTilla OpenSSH wollte ich wahrscheinlich über die Ports installieren, wenn überhaupt. Warum NTP? Ich kann meine Zeit doch lokal einstellen :)
Ausserdem arbeite ich z.Zt. leider hinter einem Proxy mit Username/Passwort Auth. Da kommen gut 95% aller Programme nicht durch :/
 
Zurück
Oben