การปรับแต่งประสิทธิภาพ FreeBSD: พารามิเตอร์ Sysctl, loader.conf, เคอร์เนล


127

ฉันต้องการแบ่งปันความรู้เกี่ยวกับการปรับ FreeBSD ผ่านsysctl.conf/ loader.conf / KENCONF/ ฯลฯ มันเริ่มต้นจากการนำเสนอของ Igor Sysoev (ผู้เขียนของ nginx) เกี่ยวกับ FreeBSD ที่ปรับได้ถึง 100,000-200,000 การเชื่อมต่อที่ใช้งานอยู่ FreeBSD เวอร์ชันใหม่กว่าสามารถรองรับได้มากขึ้น

การรับสัญญาณสำหรับ FreeBSD7 - FreeBSD-CURRENT ตั้งแต่ 7.2 amd64 บางคนปรับได้ดีตามค่าเริ่มต้น ก่อนหน้า 7.0 บางคนเป็นบูตเท่านั้น (ตั้งค่าผ่าน /boot/loader.conf) หรือไม่มีอยู่เลย

sysctl.conf:

# No zero mapping feature
# May break wine
# (There are also reports about broken samba3)
#security.bsd.map_at_zero=0

# Servers with threading software apache2 / Pound may want to rise following sysctl
#kern.threads.max_threads_per_proc=4096

# Max backlog size
# Note Application can still limit it by passing second argument to listen(2) syscall
# Note: Listen queue be monitored via `netstat -Lan`
kern.ipc.somaxconn=4096

# Shared memory
# Note: Only FreeBSD 7.2+ can use shared memory > 2Gb
#kern.ipc.shmmax=2147483648

# Sockets
kern.ipc.maxsockets=204800

# Mbuf 2k clusters (on amd64 7.2+ 25600 is default)
# Note: defaults for other variables depend on this variable, for example `tcpreass`
# Note: FreeBSD-7 and older: For such high value vm.kmem_size must be increased to 3G
kern.ipc.nmbclusters=262144

# Jumbo pagesize(_SC_PAGESIZE)/9k/16k clusters
# Used as general packet storage for jumbo frames on some network cards
# Can be monitored via `netstat -m`
#kern.ipc.nmbjumbop=262144
#kern.ipc.nmbjumbo9=65536
#kern.ipc.nmbjumbo16=32768

# For lower latency you can decrease schedulers maximum time slice
# default: stathz/10 (~ 13)
kern.sched.slice=1

# Increase max command-line length showed in `ps` (e.g for Tomcat/Java)
# Default is PAGE_SIZE / 16 or 256 on x86
# This avoids commands to be presented as [executable] in `ps`
# For more info see: http://www.freebsd.org/cgi/query-pr.cgi?pr=120749
kern.ps_arg_cache_limit=4096

# Every socket is a file, so increase them
kern.maxfiles=204800
kern.maxfilesperproc=200000
kern.maxvnodes=200000

# On some systems HPET is almost 2 times faster than default ACPI-fast
# Useful on systems with lots of clock_gettime / gettimeofday calls
# See http://old.nabble.com/ACPI-fast-default-timecounter,-but-HPET-83--faster-td23248172.html
# After revision 222222 HPET became default: http://svnweb.freebsd.org/base?view=revision&revision=222222
#kern.timecounter.hardware=HPET


# Small receive space, only usable on http-server
# Note: fileservers should increase it to 65535 or even more
#net.inet.tcp.recvspace=8192

# This is useful on Fat-Long-Pipes
#kern.ipc.maxsockbuf=10485760
#net.inet.tcp.recvbuf_max=10485760
#net.inet.tcp.recvbuf_inc=65535

# Small send space is useful for http servers that serve small files 
# Note: Autotuned since 7.x
#net.inet.tcp.sendspace=16384

# This is useful on Fat-Long-Pipes
#net.inet.tcp.sendbuf_max=10485760
#net.inet.tcp.sendbuf_inc=65535

# Turn off send/receive autotuning if think you know better.
#net.inet.tcp.recvbuf_auto=0
#net.inet.tcp.sendbuf_auto=0

# This should be enabled if you going to use big spaces (>64k)
# Also timestamp field is useful when using syncookies
net.inet.tcp.rfc1323=1
# Turn this off on high-speed, lossless connections (LAN 1Gbit+)
#net.inet.tcp.delayed_ack=0

# This feature is useful if you are serving data over modems, Gigabit Ethernet, 
# or even high speed WAN links (or any other link with a high bandwidth delay product), 
# especially if you are also using window scaling or have configured a large send window.
# Automatically disables on small RTT ( http://www.freebsd.org/cgi/cvsweb.cgi/src/sys/netinet/tcp_subr.c?#rev1.237 )
# This sysctl was removed in 10-CURRENT:
# See: http://www.mail-archive.com/svn-src-head@freebsd.org/msg06178.html
#net.inet.tcp.inflight.enable=0

# TCP slowstart algorithm tunings
# Here we are assuming VERY uncongested network
# Note: Only takes effect if net.inet.tcp.rfc3390 is set to 0,
#       otherwise formula taken from http://tools.ietf.org/html/rfc3390
#net.inet.tcp.slowstart_flightsize=10
#net.inet.tcp.local_slowstart_flightsize=100

# Disable randomizing of ports to avoid false RST
# Before use check SA here www.bsdcan.org/2006/papers/ImprovingTCPIP.pdf
# Note: Port randomization autodisables at high connection rates
#net.inet.ip.portrange.randomized=0

# Increase portrange
# For outgoing connections only. Good for seed-boxes and ftp servers.
net.inet.ip.portrange.first=1024
net.inet.ip.portrange.last=65535

# Dtops route cache degradation during a DDoS.
# http://www.freebsd.org/doc/en/books/handbook/securing-freebsd.html
#net.inet.ip.rtexpire=2
net.inet.ip.rtminexpire=2
net.inet.ip.rtmaxcache=1024

# Security
net.inet.ip.redirect=0
net.inet.ip.sourceroute=0
net.inet.ip.accept_sourceroute=0
net.inet.icmp.maskrepl=0
net.inet.icmp.log_redirect=0
net.inet.icmp.drop_redirect=1
net.inet.tcp.drop_synfin=1
# 
# There is also good example of sysctl.conf with comments:
# http://www.thern.org/projects/sysctl.conf
#
# icmp may NOT rst, helpful for those pesky spoofed 
# icmp/udp floods that end up taking up your outgoing
# bandwidth/ifqueue due to all that outgoing RST traffic.
#
#net.inet.tcp.icmp_may_rst=0

# Security
# Do not send responses on attempts to connect to the closed ports
#net.inet.udp.blackhole=1
#net.inet.tcp.blackhole=2

# IPv6 Security
# For more info see http://www.fosslc.org/drupal/content/security-implications-ipv6
# Disable Node info replies
# To see this vulnerability in action run `ping6 -a sglAac ::1` or `ping6 -w ::1` on unprotected node
net.inet6.icmp6.nodeinfo=0
# Turn on IPv6 privacy extensions
# For more info see proposal http://unix.derkeiler.com/Mailing-Lists/FreeBSD/net/2008-06/msg00103.html
net.inet6.ip6.use_tempaddr=1
net.inet6.ip6.prefer_tempaddr=1
# Disable ICMP redirect
net.inet6.icmp6.rediraccept=0
# Disable acceptation of RA and auto link-local generation if you don't use them
#net.inet6.ip6.accept_rtadv=0
#net.inet6.ip6.auto_linklocal=0

# Increases default TTL
# Default is 64
#net.inet.ip.ttl=128

# Lessen max segment life to conserve resources
# ACK waiting time in milliseconds
# (default: 30000. RFC from 1979 recommends 120000)
net.inet.tcp.msl=5000

# Max number of time-wait sockets
net.inet.tcp.maxtcptw=200000
# Don't use tw on local connections
# As of 15 Apr 2009. Igor Sysoev says that nolocaltimewait has some buggy implementaion.
# So disable it or now till get fixed
#net.inet.tcp.nolocaltimewait=1

# FIN_WAIT_2 state fast recycle
net.inet.tcp.fast_finwait2_recycle=1

# Time before tcp keepalive probe is sent
# default is 2 hours (7200000)
#net.inet.tcp.keepidle=60000

# Use HTCP congestion control (don't forget to load cc_htcp kernel module)
net.inet.tcp.cc.algorithm=htcp

# Should be increased until net.inet.ip.intr_queue_drops is zero
net.inet.ip.intr_queue_maxlen=4096

# Protocol decoding in interrupt thread.
# If you have NIC that automatically sets flow_id then it's better to not
# use direct_force, and use advantages of multithreaded netisr(9)
# If you have Yandex drives you better off with `net.isr.direct_force=1` and
# `net.inet.tcp.read_locking=0` otherwise you may run into some TCP related
# problems.
# Note: If you have old NIC that don't set flow_ids you may need to
# patch `ip_input` to manually set FLOW_ID via `nh_m2flow`.
#
# FreeBSD 8+
#net.isr.direct=1
#net.isr.direct_force=1
# In FreeBSD 9+ it was renamed to
#net.isr.dispatch=direct

# This is for routers only
#net.inet.ip.forwarding=1
#net.inet.ip.fastforwarding=1

# This speed ups dummynet when channel isn't saturated
net.inet.ip.dummynet.io_fast=1
# Increase dummynet(4) hash
#net.inet.ip.dummynet.hash_size=65535
#net.inet.ip.dummynet.max_chain_len=8

# Should be increased when you have A LOT of files on server 
# (Increase until vfs.ufs.dirhash_mem becomes lower)
vfs.ufs.dirhash_maxmem=67108864

# Note from commit http://svn.freebsd.org/base/head@211031 :
# For systems with RAID volumes and/or virtualization environments, where
# read performance is very important, increasing this sysctl tunable to 32
# or even more will demonstratively yield additional performance benefits.
vfs.read_max=32

# Explicit Congestion Notification
# (See http://en.wikipedia.org/wiki/Explicit_Congestion_Notification)
net.inet.tcp.ecn.enable=1

# Flowtable - flow caching mechanism
# Useful for routers
#net.inet.flowtable.enable=1
#net.inet.flowtable.nmbflows=65535

# IPFW dynamic rules and timeouts tuning
# Increase dyn_buckets till net.inet.ip.fw.curr_dyn_buckets is lower
net.inet.ip.fw.dyn_buckets=65536
net.inet.ip.fw.dyn_max=65536
net.inet.ip.fw.dyn_ack_lifetime=120
net.inet.ip.fw.dyn_syn_lifetime=10
net.inet.ip.fw.dyn_fin_lifetime=2
net.inet.ip.fw.dyn_short_lifetime=10
# Make packets pass firewall only once when using dummynet
# i.e. packets going thru pipe are passing out from firewall with accept
#net.inet.ip.fw.one_pass=1

# shm_use_phys Wires all shared pages, making them unswappable
# Use this to lessen Virtual Memory Manager's work when using Shared Mem.
# Useful for databases
#kern.ipc.shm_use_phys=1

# ZFS
# Enable prefetch. Useful for sequential load type i.e fileserver.
# FreeBSD sets vfs.zfs.prefetch_disable to 1 on any i386 systems and 
# on any amd64 systems with less than 4GB of available memory
# See: http://old.nabble.com/Samba-read-speed-performance-tuning-td27964534.html
#vfs.zfs.prefetch_disable=0

# On highload servers you may notice following message in dmesg:
# "Approaching the limit on PV entries, consider increasing either the
# vm.pmap.shpgperproc or the vm.pmap.pv_entry_max tunable"   
vm.pmap.shpgperproc=2048

loader.conf:

# Accept filters for data, http and DNS requests
# Useful when your software creates process/thread on each request (i.e. apache)
# Note: DNS accf available on 8.0+
# Note: In case of badly written software this can increase performance, 
# but I still would recommend against using accept filters in production because of
# their opacity - they really break abstractions. Also it's not trivial to debug/monitor
# their state.
#accf_data_load="YES" 
#accf_http_load="YES"
#accf_dns_load="YES"

# Async IO system calls
aio_load="YES"

# Linux specific devices in /dev
# As for 8.1 it only /dev/full 
#lindev_load="YES"

# Adds NCQ support in FreeBSD
# WARNING! all ad[0-9]+ devices will be renamed to ada[0-9]+
# 8.0+ only
#ahci_load="YES"
#siis_load="YES"

# FreeBSD 9+
# New Congestion Control for FreeBSD
cc_htcp_load="YES"
#cc_cubic_load="YES"

# Increase kernel memory size to 3G. 
#
# Use ONLY if you have KVA_PAGES in kernel configuration, and you have more than 3G RAM 
# Otherwise panic will happen on next reboot!
#
# It's required for high buffer sizes: kern.ipc.nmbjumbop, kern.ipc.nmbclusters, etc
# Useful on highload stateful firewalls, proxies or ZFS fileservers
# (FreeBSD 7.2+ amd64 users: Check that current value is lower!)
#vm.kmem_size="3G"

# If you have really busy forking webserver (i.e. apache13) you may run out of processes
#kern.maxproc=10000

# If your server has lots of swap (>4Gb) you should increase following value
# according to http://lists.freebsd.org/pipermail/freebsd-hackers/2009-October/029616.html
# Otherwise you'll be getting errors
# "kernel: swap zone exhausted, increase kern.maxswzone"
#kern.maxswzone="256M" 

# Older versions of FreeBSD can't tune maxfiles on the fly
#kern.maxfiles="200000"

# Useful for databases 
# Sets maximum data size to 1G
# (FreeBSD 7.2+ amd64 users: Check that current value is lower!)
#kern.maxdsiz="1G"

# Maximum buffer size(vfs.maxbufspace)
# You can check current one via vfs.bufspace
# Should be lowered/upped depending on server's load-type
# Usually decreased to preserve kmem
# (default is 10% of mem)
#kern.maxbcache="512M"

# Sendfile buffers
# Note: i386 only
#kern.ipc.nsfbufs=10240

# syncache tuning
net.inet.tcp.syncache.hashsize=32768
net.inet.tcp.syncache.bucketlimit=32
net.inet.tcp.syncache.cachelimit=1048576

# Send RST on listen queue overflow / memory shortage. 
# Hosts behind Load-Balancer should set it to 1 to fail fast.
# Hosts facing clients should set it to 0 for client to retry connection.
#net.inet.tcp.syncache.rst_on_sock_fail=0

# Increased hostcache
# Later host cache can be viewed via net.inet.tcp.hostcache.list hidden sysctl
# Very useful for it's RTT RTTVAR
# Must be power of two
net.inet.tcp.hostcache.hashsize=65536
# hashsize * bucketlimit (which is 30 by default)
# It allocates 255Mb (1966080*136) of RAM
net.inet.tcp.hostcache.cachelimit=1966080

# TCP control-block Hash table tuning
# See: http://serverfault.com/questions/372512/why-change-net-inet-tcp-tcbhashsize-in-freebsd
net.inet.tcp.tcbhashsize=524288

# Disable ipfw deny all
# Should be uncommented when there is a chance that
# kernel and ipfw binary may be out-of sync on next reboot
#net.inet.ip.fw.default_to_accept=1

#
# SIFTR (Statistical Information For TCP Research) is a kernel module that
# logs a range of statistics on active TCP connections to a log file.
# See prerelease notes:
# http://groups.google.com/group/mailing.freebsd.current/browse_thread/thread/b4c18be6cdce76e4
# and man 4 sitfr
#siftr_load="YES"

# Enable superpages, for 7.2+ only
# See: http://lists.freebsd.org/pipermail/freebsd-hackers/2009-November/030094.html
vm.pmap.pg_ps_enabled=1

# Useful if you are using Intel-Gigabit NIC
#hw.em.rxd=4096
#hw.em.txd=4096
#hw.em.rx_process_limit=-1
# Also if you have A LOT interrupts on NIC - play with following parameters
# NOTE: You should set them for every NIC
#dev.em.0.rx_int_delay: 250
#dev.em.0.tx_int_delay: 250
#dev.em.0.rx_abs_int_delay: 250
#dev.em.0.tx_abs_int_delay: 250
# There is also multithreaded version of em/igb drivers that can be found here:
# http://people.yandex-team.ru/~wawa/
#
# for additional em monitoring and statistics use 
# sysctl dev.em.0.stats=1 ; dmesg
# sysctl dev.em.0.debug=1 ; dmesg
# Also after r209242 (-CURRENT) there is a separate sysctl for each stat variable;   
# Same tunings for igb
#hw.igb.rxd=4096
#hw.igb.txd=4096
#hw.igb.rx_process_limit=-1

# Some useful netisr tunables. See sysctl net.isr
#net.isr.maxthreads=4
#net.isr.defaultqlimit=10240
#net.isr.maxqlimit=10240
# Bind netisr threads to CPUs
#net.isr.bindthreads=1

#
# FreeBSD 9.x+
# Increase interface send queue length
# See commit message http://svn.freebsd.org/viewvc/base?view=revision&revision=207554
#net.link.ifqmaxlen=1024

# Nicer boot logo =)
loader_logo="beastie"

และสุดท้ายนี่คือKERNCONF:

# Just some of them, see also
# cat /sys/{i386,amd64,}/conf/NOTES

# This one useful only on i386
#options         KVA_PAGES=512
# From UPDATING 20121223:
#    After switching to Clang as the default compiler some users of ZFS
#    on i386 systems started to experience stack overflow kernel panics.
#    Please consider using 'options KSTACK_PAGES=4' in such configurations.
#options         KSTACK_PAGES=4

# You can play with HZ in environments with high interrupt rate (default is 1000) 
# 100 is for my notebook to prolong it's battery life
#options         HZ=100

# Eliminate datacopy on socket read-write
# To take advantage with zero copy sockets you should have an MTU >= 4k
# This req. is only for receiving data.
# Read more in man zero_copy_sockets
# Also this epic thread on kernel trap:
#    http://kerneltrap.org/node/6506
# In conclusion Linus says:
#    "anybody that does it that way (FreeBSD) is totally incompetent"
#
# Also see /usr/src/UPDATING 20121023 for notes about
# SOCKET_SEND_COW and SOCKET_RECV_PFLIP
#options         ZERO_COPY_SOCKETS

# Support TCP sign. Used for IPSec
options         TCP_SIGNATURE
# There was stackoverflow found in KAME IPSec stack:
# See http://secunia.com/advisories/43995/
# For quick workaround you can use `ipfw add deny proto ipcomp`
options         IPSEC

# This ones can be loaded as modules. They described in loader.conf section     
#options         ACCEPT_FILTER_DATA
#options         ACCEPT_FILTER_HTTP

# Adding ipfw, also can be loaded as modules
options         IPFIREWALL
# On 8.1+ you can disable verbose to see blocked packets on ipfw0 interface.
# Also there is no point in compiling verbose into the kernel, because
# now there is net.inet.ip.fw.verbose tunable.
#options         IPFIREWALL_VERBOSE
#options         IPFIREWALL_VERBOSE_LIMIT=10
# The IPFIREWALL_FORWARD kernel option has been removed. Its
# functionality now turned on by default.
#options         IPFIREWALL_FORWARD
# Adding kernel NAT
options         IPFIREWALL_NAT
options         LIBALIAS
# Traffic shaping
options         DUMMYNET          
# Divert, i.e. for userspace NAT
options         IPDIVERT

# This is for OpenBSD's pf firewall
device          pf
device          pflog
# pf's QoS - ALTQ
options         ALTQ
options         ALTQ_CBQ        # Class Bases Queuing (CBQ)
options         ALTQ_RED        # Random Early Detection (RED)
options         ALTQ_RIO        # RED In/Out
options         ALTQ_HFSC       # Hierarchical Packet Scheduler (HFSC)
options         ALTQ_PRIQ       # Priority Queuing (PRIQ)
options         ALTQ_NOPCC      # Required for SMP build

# Pretty console 
# Manual can be found here http://forums.freebsd.org/showthread.php?t=6134
#options         VESA
#options         SC_PIXEL_MODE

# Disable reboot on Ctrl Alt Del
#options         SC_DISABLE_REBOOT
# Change normal|kernel messages color
options         SC_NORM_ATTR=(FG_GREEN|BG_BLACK)
options         SC_KERNEL_CONS_ATTR=(FG_YELLOW|BG_BLACK)
# More scroll space
options         SC_HISTORY_SIZE=8192

# Adding hardware crypto device
device          crypto
device          cryptodev

# Useful network interfaces
device          vlan
device          tap                     #Virtual Ethernet driver
device          gre                     #IP over IP tunneling
device          if_bridge               #Bridge interface
device          pfsync                  #synchronization interface for PF
device          carp                    #Common Address Redundancy Protocol
device          enc                     #IPsec interface
device          lagg                    #Link aggregation interface
device          stf                     #IPv4-IPv6 port

# Also for my notebook, but may be used with Opteron
device         amdtemp
# Same for Intel processors
device         coretemp

# man 4 cpuctl
device         cpuctl                   # CPU control pseudo-device

# Support for ECMP. More than one route for destination
# Works even with default route so one can use it as LB for two ISP
# For now code is unstable and panics (panic: rtfree 2) on route deletions.
#options         RADIX_MPATH

# Multicast routing
#options         MROUTING
#options         PIM

# Debug & DTrace
options        KDB                     # Kernel debugger related code
options        KDB_TRACE               # Print a stack trace for a panic
options        KDTRACE_FRAME           # amd64-only(?)
options        KDTRACE_HOOKS           # all architectures - enable general DTrace hooks
#options        DDB
#options        DDB_CTF                 # all architectures - kernel ELF linker loads CTF data

# Adaptive spining in lockmgr (8.x+)
# See http://www.mail-archive.com/svn-src-all@freebsd.org/msg10782.html
options         ADAPTIVE_LOCKMGRS

# UTF-8 in console (8.x+) 
#options         TEKEN_UTF8

# FreeBSD 8.1+
# Deadlock resolver thread 
# For additional information see http://www.mail-archive.com/svn-src-all@freebsd.org/msg18124.html 
# (FYI: "resolution" is panic so use with caution)
#options         DEADLKRES

# Increase maximum size of Raw I/O and sendfile(2) readahead
#options MAXPHYS=(1024*1024)
#options MAXBSIZE=(1024*1024)

# For scheduler debug enable following option.
# Debug will be available via `kern.sched.stats` sysctl
# For more information see http://svnweb.freebsd.org/base/head/sys/conf/NOTES?view=markup
#options SCHED_STATS

# A framework for very efficient packet I/O from userspace, capable of 
# line rate at 10G (FreeBSD10+)
# See http://svnweb.freebsd.org/base?view=revision&revision=227614
#device netmap

หากคุณปรับจูนเครือข่ายเพื่อประสิทธิภาพสูงสุดคุณอาจต้องการเล่นกับ ifconfigตัวเลือกเช่น:

# You can list all capabilities via `ifconfig -m`
ifconfig [-]rxcsum [-]txcsum [-]tso [-]lro mtu

ในกรณีที่คุณเปิดใช้งาน DDB ในการกำหนดค่าเคอร์เนลคุณควรแก้ไข /etc/ddb.conf และเพิ่มสิ่งนี้เพื่อเปิดใช้งานการรีบูตอัตโนมัติ (และ textdump เป็นโบนัส):

script kdb.enter.panic=textdump set; capture on; show pcpu; bt; ps; alltrace; capture off; call doadump; reset
script kdb.enter.default=textdump set; capture on; bt; ps; capture off; call doadump; reset

และไม่ลืมที่จะเพิ่มddb_enable="YES"การ/etc/rc.conf

ตั้งแต่ FreeBSD 9 คุณสามารถเลือกที่จะเปิด / ปิดการใช้งาน flowcontrol บน NIC ของคุณ:

# See http://en.wikipedia.org/wiki/Ethernet_flow_control and
# http://www.mail-archive.com/svn-src-head@freebsd.org/msg07927.html for additional info
ifconfig bge0 media auto mediaopt flowcontrol

ข้อ จำกัด ของ FreeBSD ส่วนใหญ่สามารถตรวจสอบได้โดย:

# vmstat -z

และ

# limits

สามารถตรวจสอบเคาน์เตอร์เครือข่ายได้หลากหลาย

# netstat -s

ในตัวเลือก -Q ของ FreeBSD-8 + netstat ปรากฏขึ้นให้ลองทำตามคำสั่งเพื่อแสดง netisrสถิติ

# netstat -Q

สำหรับการแก้ปัญหา TCP ที่ไม่เกี่ยวกับเรื่องใดเรื่องหนึ่งก็สามารถใช้net.inet.tcp.log_debugมันสร้างเอาต์พุต dmesg คล้ายกับ:

host kernel: TCP: [0.0.0.0]:0 to [1.1.1.1]:1; syncache_socket: Socket create failed due to limits or memory shortage
host kernel: TCP: [0.0.0.0]:0 to [1.1.1.1]:1 tcpflags 0x10<ACK>; tcp_input: Listen socket: Socket allocation failed due to limits or memory shortage, sending RST

NB!
สุดท้าย แต่ไม่ใช่อย่างน้อย: หากคุณกำลังปรับจูนเครือข่าย - เป็นวิธีปฏิบัติที่ดีในการซื้อการ์ดเครือข่ายที่ดีที่สุดที่คุณสามารถจ่ายได้ ฉันชอบของ Intel igb(4)รายการรุ่นสามารถพบได้ในif_igb.c

PS ยังเห็น

# man 7 tuning

และFreeBSD Wiki ในการปรับแต่งประสิทธิภาพเครือข่ายโดยนักพัฒนาเอง

PPS Calomel.org - Open Source วิจัยและบล็อกอ้างอิงมีการเขียนที่ดีขึ้นเกี่ยวกับประสิทธิภาพของเครือข่ายและบทความล่าสุดเกี่ยวกับFreeBSD ปรับแต่งและการเพิ่มประสิทธิภาพ

ขอบคุณ
ฉันอยากขอบคุณชุมชน FreeBSD โดยเฉพาะผู้เขียน nginx - Igor Sysoev, nginx-ru @ และรายชื่อผู้รับจดหมาย FreeBSD-performance @ สำหรับการให้ข้อมูลที่เป็นประโยชน์เกี่ยวกับการปรับ FreeBSD คนรัก Yandex BSD จากnoc@และ search-admin@โดยเฉพาะอย่างยิ่งและmelifaro@zont@

ข้อสงวนสิทธิ์
นี่ไม่ใช่สิ่งที่คุณควรคัดลอก / วางในการกำหนดค่าการผลิตของคุณอย่างแน่นอน! "tunings" ที่ให้มาบางส่วนอาจเป็นอันตรายได้ ใช้ข้อมูลที่ให้ไว้เป็นข้อมูลอ้างอิงสำหรับการตรวจสอบเพิ่มเติมหรือทดสอบ A / B ฉันพูดอีกครั้งเพื่อให้ชัดเจน: อย่าใช้ "การปรับ" ที่คุณได้พบบนอินเทอร์เน็ต! .
ก่อนนำไปใช้sysctlกับระบบการผลิตใด ๆคุณควรตรวจสอบว่ามีผลกระทบ (จำเป็นต้องดูในซอร์สโค้ดของเคอร์เนล) และวัดประสิทธิภาพการใช้งาน (ถ้ามี) ในสภาพแวดล้อมการทดสอบ
ใช้โพสต์นี้ด้วยความเสี่ยงของคุณเอง

FreeBSD WIP
* การปรุงอาหารสำหรับ FreeBSD 7 คืออะไร
* การปรุงอาหารสำหรับ FreeBSD 8 เป็นอย่างไร
* การปรุงอาหารสำหรับ FreeBSD 9 เป็นอย่างไร
* มีอะไรใหม่สำหรับ FreeBSD 10
* มีอะไรใหม่สำหรับ FreeBSD 11

คำถามต่อผู้ชม
คุณใช้ Tunnel อะไรในเซิร์ฟเวอร์ FreeBSD ของคุณ

นอกจากนี้คุณยังสามารถโพสต์ของคุณ/etc/sysctl.conf, /boot/loader.confตัวเลือกเคอร์เนล ฯลฯ ด้วยคำอธิบายของความหมายของมัน (ไม่ได้คัดลอกวางจากsysctl -d) อย่าลืมระบุประเภทเซิร์ฟเวอร์ (ส่วนหน้า, ส่วนหลัง, แคช, ฐานข้อมูล, ที่เก็บข้อมูล, เกตเวย์และอื่น ๆ )

มาแบ่งปันประสบการณ์กัน!


5
สิ่งนี้กลายเป็น CW ที่น่าประทับใจและมีประโยชน์อย่างแท้จริง รุ่งโรจน์ไปยัง SaveTheRbtz
Chris S

นี่เป็นหนึ่งในโพสต์ที่ฉันชอบ แต่ฉันชอบที่จะเห็นแนวทางเพิ่มเติมเกี่ยวกับการปรับการตั้งค่าต่างๆที่โพสต์ไว้ด้านบน ตัวอย่างเช่นรายการหน่วยความจำที่ใช้ร่วมกันทางด้านบนของส่วน sysctl.conf: ฉันจะรู้ได้อย่างไรว่าฉันต้องการเพิ่มหรือไม่ ไกลแค่ไหนที่ฉันควรเพิ่มมัน? มีรายการที่แตกต่างกันมากเกินไปที่นี่เพื่อทำการทดลองและข้อผิดพลาดกับแต่ละรายการ ขอบคุณ!
Jed Daniels

ฉันพบบล็อกโพสต์และแม้แต่รายชื่อผู้รับจดหมายที่สร้างความเข้าใจผิดให้มากเกินไป แหล่งข้อมูลเชิงลึกที่ดีที่สุดยังคงเป็นซอร์สโค้ดเอง จากนี้ไปฉันจะพยายามให้ข้อมูลเพิ่มเติมเกี่ยวกับพารามิเตอร์ นี่คือ CW ดังนั้นใคร ๆ ก็สามารถแก้ไขได้ฟรี
SaveTheRbtz

คำตอบ:


12

options IPFIREWALL_DEFAULT_TO_ACCEPTผมอยากแนะนำให้กับ ค่าเริ่มต้นคือการเริ่มต้นที่จะปฏิเสธ ไฟร์วอลล์เกิดขึ้นด้วยกฎเพียงข้อเดียวdeny ip from any to anyและยังคงอยู่จนกว่าสคริปต์จะกำหนดค่าปริมาณการรับส่งข้อมูลที่แน่นอน

การติดตามหมายเหตุ: RSA (หนึ่งใน บริษัท เทคโนโลยีรักษาความปลอดภัยชั้นนำของโลก) ถูกแฮ็กเมื่อไม่นานมานี้เมื่อส่วนหนึ่งของไฟร์วอลล์ของพวกเขาถูกปิดใช้งานในช่วงหน้าต่างการบำรุงรักษา สิ่งนี้ตอกย้ำว่าระบบสามารถถูกบุกรุกได้เร็วเพียงใดภายใต้เงื่อนไขที่เหมาะสม

หากคุณยืนยันในการปิดใช้งานไฟร์วอลล์จนกว่าคุณจะปิดกั้นการจราจรที่ไม่พึงประสงค์โปรดพิจารณาใช้ sysctl ที่มีอยู่โดยการเพิ่มการnet.inet.ip.fw.default_to_accept=1 loader.confสิ่งนี้มีประโยชน์เพิ่มเติมในการแก้ไขได้อย่างง่ายดาย (ไม่มีการคอมไพล์เคอร์เนล) หากคุณเปลี่ยนใจในอนาคต


ผู้ดูแลระบบที่ดีควรมีdeny allปลายไฟร์วอลล์เสมอ ตัวเลือกนี้ที่นี่เพื่อป้องกันการยิงขาเมื่อคุณใช้งานโดยบังเอิญipfw flushหรือสิ่งที่คล้ายกัน
SaveTheRbtz

1
ใช่ แต่ถ้าคุณใช้ค่าเริ่มต้นเพื่อยอมรับคุณจะได้รับเซิร์ฟเวอร์ที่มีช่องโหว่ในขณะทำการบูท นี่อาจเป็นเหตุการณ์ที่เกิดขึ้นได้ยาก แต่ขอให้ผู้ดูแลระบบขององค์กรใด ๆ ว่ามันโอเคสำหรับเซิร์ฟเวอร์ของพวกเขาที่จะเปิด 100% ในไม่กี่นาทีทุกคราว คุณน่าจะดูสกปรกและตอบคำถามสั้น ๆ การใช้ตัวเลือกนี้สำหรับการพัฒนาและทดสอบกฎในสภาพแวดล้อมที่มีการควบคุมเป็นสิ่งหนึ่ง แต่แนะนำว่ามันเป็นเรื่องธรรมดาสำหรับวัตถุประสงค์ในการปฏิบัติงานจะไม่รับผิดชอบ
Chris S

ตกลงจุดของคุณชัดเจนฉันควรเพิ่มความคิดเห็นบางอย่างเกี่ยวกับ IPFIREWALL_DEFAULT_TO_ACCEPT มาลองแก้ไขกันก่อน ลบ DEFAULT_TO_ACCEPT แต่เพิ่ม net.inet.ip.fw.default_to_accept ด้วยความคิดเห็นที่แสดงความคิดเห็นโดยค่าเริ่มต้น
SaveTheRbtz

8

จากค่าเริ่มต้น sysctl.conf จะให้ "ความปลอดภัย" กับ kiddies สคริปต์ที่จัดการเพื่อวิธีการของพวกเขาในบัญชีที่ไม่ใช่ราก ไม่เจ็บที่จะเปิดใช้งาน (ในกรณีส่วนใหญ่ข้อยกเว้นเป็น daemons ที่ไม่มีสิทธิพิเศษที่จำเป็นต้องดูรายการกระบวนการ)

# Uncomment this to prevent users from seeing information about processes that
# are being run under another UID.
security.bsd.see_other_uids=0

8

ฉันมักจะเพิ่มสิ่งต่อไปนี้ใน /etc/sysctl.conf ของฉันเช่นกัน ...

net.inet.tcp.blackhole = 2
net.inet.udp.blackhole = 1

และทั้งคู่

security.bsd.see_other_uids = 0
security.bsd.see_other_gids = 0

ในขณะที่เรากำลังอยู่ในหัวข้อการปรับแต่งฉันยังแนะนำให้ดูที่นี่:

NGINX + PHP-FPM + APC = ยอดเยี่ยม

ดังนั้นการสอนนี้ใน FreeBSD + การสอนเกี่ยวกับ NGINX = ยอดเยี่ยมจริงๆ! ;)


8

สิทธิ์ด้านความปลอดภัย

security.bsd.see_other_uids=0
security.bsd.see_other_gids=0
security.bsd.conservative_signals=1
security.bsd.unprivileged_proc_debug=0
security.bsd.unprivileged_read_msgbuf=0
security.bsd.hardlink_check_uid=1
security.bsd.hardlink_check_gid=1
vfs.usermount=0
net.inet.tcp.log_in_vain=1
net.inet.udp.log_in_vain=1
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.