Kernel Solaris on Intel: Installation and Optimization GuideThis guide covers installing and optimizing the Solaris kernel on Intel-based systems. It’s intended for system administrators and engineers familiar with Unix-like systems. Sections include requirements, installation steps, kernel configuration, performance tuning, troubleshooting, and security hardening.
Overview
Solaris (now commonly used as OpenSolaris derivatives like illumos and Oracle Solaris for x86) supports Intel x86/x86_64 hardware. The kernel manages hardware resources, scheduling, memory management, device drivers, and system calls. Proper installation and optimization of the Solaris kernel on Intel systems can yield stable, high-performance servers for database, virtualization, and network services.
Prerequisites and hardware compatibility
- Supported architectures: x86 (32-bit) and x86_64 (64-bit). For modern servers, use x86_64.
- CPU: Intel Xeon or Core-series processors with virtualization extensions (VT-x/VT-d) if using virtualization.
- Memory: Minimum 2 GB for minimal installs; 8+ GB recommended for production workloads.
- Storage: Enterprise-class SSDs or HDDs; consider RAID or ZFS mirror configurations.
- Firmware: UEFI is recommended but Solaris also supports legacy BIOS on many platforms.
- Network: Intel NICs are well-supported; verify driver availability for specific models.
- Kernel build tools (if compiling): gcc/clang, make, autoconf, binutils, and source tree for the Solaris kernel (illumos/Oracle source).
Choosing the right Solaris distribution
- Oracle Solaris (commercial): ready for enterprise deployments, binary packages, and commercial support.
- illumos-based distros (OpenIndiana, SmartOS, OmniOS): community-driven, frequently used on Intel servers.
- Choose a distribution with current x86_64 kernel support and active maintenance.
Installation — preparing the system
- Backup important data from the target machine.
- Verify hardware compatibility and firmware settings:
- Enable VT-x/VT-d in BIOS if needed.
- Set SATA mode to AHCI for better compatibility/performance.
- Configure boot order and disable secure boot if it blocks the installer.
- Create bootable installation media (USB/DVD) using the distro ISO.
- Prepare disk layout:
- If using ZFS (recommended), leave space for a ZFS pool.
- For UFS, create partitions for root, swap, and /var as appropriate.
- Network configuration: plan for static IPs for servers; ensure DNS and NTP availability.
Installation — step-by-step (generic for illumos/Oracle Solaris)
- Boot the installer from USB/DVD and select the appropriate architecture (x86_64).
- Select language and keyboard layout.
- Disk selection:
- Create a ZFS pool (zpool) or UFS partitions. For ZFS, consider separate vdevs for performance and redundancy.
- Allocate swap (generally equal to RAM for hibernation; otherwise 1–2 GB minimum).
- Package selection: choose minimal or full server profile depending on role.
- Network setup: configure hostname, IP, gateway, DNS.
- User setup: create administrative (root) account and at least one non-root sudo-enabled user.
- Finalize installation and reboot into the Solaris kernel.
Post-installation kernel checks
- Confirm kernel version:
uname -a
Look for x86_64 and the kernel build string.
- Verify loaded modules and drivers:
modinfo | grep -i e1000 # example for Intel NICs dmesg | less
Kernel configuration and tuning basics
Solaris kernel tuning is done via:
- /etc/system (legacy kernel parameters)
- kstat, ndd, and mdb for runtime inspection
- svccfg and svcadm for service management
- ZFS tunables via /etc/zfs and zpool/zfs commands
Important tunables (examples — test before applying to production):
- Process and thread limits:
- maxuprc, maxuprc (per-user processes)
- Virtual memory:
- segmap settings, pageout_daemon tunables
- Scheduler:
- rprs (real-time priorities), nthreads
- Network:
- tcp_conn_req_max_q, tcp_ip_abort_interval_default, rwind_max
Use /etc/system entries to set persistent kernel parameters. Example: /etc/system
set rlim_fd_max = 65536 set maxusers = 1024
After editing /etc/system, reboot to apply.
ZFS-related kernel considerations
- ZFS is often the recommended filesystem on Solaris. Key settings:
- vfs.zfs.arc_max — limit ARC cache size to prevent memory exhaustion on memory-constrained systems.
- zfs_recordsize — tune per-workload (e.g., 16K–128K for databases vs. 128K for file servers).
- Use dedicated logs (SLOG) and L2ARC devices when appropriate.
- Monitor with:
zpool status zpool iostat -v 2 zfs list echo $(( $(cat /proc/meminfo |grep MemTotal) )) # Solaris uses different commands; use kstat/meminfo equivalents
CPU and scheduler optimizations
- Enable and verify CPU features: check CPUID flags for AES, AVX, etc. Use prtdiag and cpuid tools where available.
- Adjust scheduling policies if running latency-sensitive workloads:
- Use real-time classes (RT) sparingly; reserve for critical processes.
- Set CPU affinity for heavy processes using pbind/psrset.
- For multi-socket systems, pin I/O and compute to local CPUs (NUMA-awareness) where possible.
Memory tuning
- Monitor swap usage and page faults with vmstat, kstat, and prstat.
- Adjust vm parameters only with testing:
- tune v_minfree to keep adequate free memory.
- Set appropriate rlim_fd_max for file descriptors if high concurrent connections are expected.
- For large-memory systems, ensure ARC is sized so userland has enough memory:
- set vfs.zfs.arc_max in /etc/system or via mdb on illumos.
Networking performance
- Use Intel drivers (e1000/e1000e/igb/ixgbe) optimized for your NIC model.
- Offloading features (checksum, LRO, TSO) can improve throughput; test with your workload.
- Increase TCP backlog and buffers for high-throughput servers:
- tcp_ip_abort_interval_default, tcp_conn_req_max_q, tcp_rexmit_interval_initial.
- Tune network interrupt coalescing at the NIC level and tune interrupt distribution (RSS).
- For high packet-per-second loads, consider DTrace to profile and reduce kernel/user transitions.
Kernel module management and custom drivers
- Load/unload modules with modload/modunload (or drvconfig on some systems).
- Building custom kernel modules:
- Install kernel headers and build tools.
- Use the illumos/Oracle build system; compile against the running kernel ABI.
- Sign and test modules in a non-production environment first.
Virtualization considerations
- For zones (containers) and branded zones, allocate appropriate CPU and memory caps.
- For KVM/LDOMs (on x86 use bhyve or Oracle VM), enable virtualization extensions in BIOS.
- Configure paravirtualized drivers (vtnet/vblk) for guests to improve I/O performance.
Monitoring and profiling
- Use prstat, iostat, vmstat, netstat, kstat, and mpstat for resource monitoring.
- DTrace is invaluable for tracing kernel and application behavior with minimal overhead.
- Collect and review kstat and /var/adm/messages regularly for warnings.
Troubleshooting common kernel issues
- Boot failures:
- Use the install media to boot rescue environment. Import/export zpool if needed.
- Use log messages (dmesg, /var/adm/messages) to pinpoint hardware driver failures.
- High CPU usage:
- Use prstat -mL and DTrace to find hot threads; check kernel traps with mdb.
- Memory leaks:
- Monitor kernel memory via kstat; search for growing caches or modules.
- Network instability:
- Verify NIC firmware/drivers, check duplex/mtu mismatches, and monitor drops/errors via netstat -i.
Security hardening for the kernel
- Keep kernels and drivers up to date with vendor patches.
- Enable secure boot features where supported by distro/firmware.
- Use least-privilege principles: run services in non-global zones or containers.
- Restrict kernel parameter changes to administrators; protect /etc/system and bootloader configs.
- Monitor for unusual kernel module loads and verify module signatures if available.
Example configuration snippets
-
Limit ARC to 32GB (set appropriately for your system) in /etc/system:
set vfs.zfs.arc_max = 34359738368
-
Increase file descriptors and maxusers:
set rlim_fd_max = 65536 set maxusers = 2048
Final checklist before production deployment
- Confirm kernel compatibility with all hardware drivers.
- Apply and test tuning changes in a staging environment.
- Monitor CPU, memory, disk, and network under expected load.
- Ensure regular patching strategy and backups for ZFS pools.
- Document kernel parameters and rollback plan.
If you want, I can tailor this guide to a specific Solaris distribution (Oracle Solaris, OpenIndiana, OmniOS) or produce step-by-step commands for a particular Intel server model.
Leave a Reply