基于 Supermicro X7SPA-H (Atom D510) 的路由器(2)

• 本文约 4473 字,阅读大致需要 9 分钟 | Development

续前。

除了硬件上直接采用的降噪措施之外,一些软件方面的配置也可以提高其效果。

首先是BIOS中的配置。风扇转速最低可调整为"Energy Saving"(即使用30%的频率)。启用Active Power State之后,可节省大约2W左右的耗电(这个选项的默认值是Disabled)。

然后是FreeBSD本身的配置。我个人采用的配置包括:

上述设置,除了ahci部分之外,可将系统闲置时的功耗降低到17W左右。

以下是实现中采用的loader.conf相关的部分:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10

hint.apic.0.clock=0
hint.atrtc.0.clock=0
hw.pci.do_power_nodriver=3
hint.ahcich.0.pm_level=5
hint.ahcich.1.pm_level=5
hint.ahcich.2.pm_level=5
hint.ahcich.3.pm_level=5
hint.ahcich.4.pm_level=5
hint.ahcich.5.pm_level=5

在引导系统时,root crontab使用下面的配置:

将APM设为254。注意,每个硬盘都需要:


@reboot /sbin/camcontrol cmd ada0 -a "EF 05 00 00 00 00 00 00 00 00 FE 00"

将APM设为254。注意,每个硬盘都需要:


@reboot /sbin/camcontrol cmd ada0 -a "EF 42 00 00 00 00 00 00 00 00 80 00"

禁止硬盘自行idle;并不真的需要这个设置,它是预防性的:


@reboot /sbin/camcontrol idle ada0 -t 0

在 /etc/rc.conf 中启用一部分节能基础设施:


powerd_flags="-a hadp -b hadp -n hadp -i 25 -p 1500"

说明:hadp是默认的配置,实际并不需要;-p 1500表示将采样时间从250ms提高到1500ms,这可以减少powerd本身由于采样操作带来的CPU开销(我对powerd进行了少量改动以使其使用正确的CPU占用比例,系统自带的powerd目前采用的是CPU的占用比例总和,其采样值会比应该使用的值高CPU个数倍),-i 25表示将默认的idle阈值由50%降低为25%,这可以在一定程度上弥补由于减少采样速率导致对突发CPU需求响应变慢的不足。

X7SPA-H主板包含两个watchdog,一个是ICH9R芯片组内建的,另一个是 Winbond W83627DGH-P Super I/O 控制器内建的。在 BIOS 中打开 Watchdog 时启用的是后一个 watchdog。如果在 BIOS 交权后5分钟操作系统仍然没有去安抚watchdog,则硬件会直接对系统进行复位。

FreeBSD目前并没有包含 Winbond W83627 系列watchdog的驱动,我自己写了一个来支持它。在调试过程中发现,似乎没有有效的办法来判断其是否存在,故退而求其次改为检测芯片的revision来判断其存在。注意:这样做是有一定的风险的(读端口仍然可能触发不同硬件的动作)。

写好驱动并加入内核以后,在 /etc/rc.conf 中加入:


watchdogd_enable="YES"
watchdogd_flags="-s 4 -t 32"

这里还是同样的路子:尽可能减少不必要的上下文切换。每4秒安抚一次狗,同时将其触发点设为32秒。这样,当内核停止响应28-32秒的时候硬件便会自动复位。

这些设置可以提高系统在出现问题时自动恢复的机会。

由于Atom的计算能力较差,因此,可以使用计算能力较好的笔记本CPU来代替它来编译,具体方法是将系统的 / 等文件系统通过 NFS 来 export 给局域网的其他机器,在上位机上mount之后chroot进去编译,或者使用 ports 的 DESTDIR 支持,或编译好包之后上去 pkg_add。具体的做法可根据需要决定。

以下是我使用的内核编译配置,仅供参考。

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353

--- GENERIC     2010-09-10 17:37:11.669670139 -0700
+++ NEPTUNE     2010-09-23 03:44:26.018389103 -0700
@@ -1,25 +1,10 @@
 #
-# GENERIC -- Generic kernel configuration file for FreeBSD/amd64
+# NEPTUNE -- Customized kernel configuration file for FreeBSD/amd64
 #
-# For more information on this file, please read the config(5) manual page,
-# and/or the handbook section on Kernel Configuration Files:
-#
-#    http://www.FreeBSD.org/doc/en_US.ISO8859-1/books/handbook/kernelconfig-config.html
-#
-# The handbook is also available locally in /usr/share/doc/handbook
-# if you've installed the doc distribution, otherwise always see the
-# FreeBSD World Wide Web server (http://www.FreeBSD.org/) for the
-# latest information.
-#
-# An exhaustive list of options and more detailed explanations of the
-# device lines is also present in the ../../conf/NOTES and NOTES files.
-# If you are in doubt as to the purpose or necessity of a line, check first
-# in NOTES.
-#
-# $FreeBSD: stable/8/sys/amd64/conf/GENERIC 211171 2010-08-11 07:11:20Z bschmidt $
+# From FreeBSD: stable/8/sys/amd64/conf/GENERIC 211171 2010-08-11 07:11:20Z bschmidt

 cpu            HAMMER
-ident          GENERIC
+ident          NEPTUNE

 # To statically compile in device wiring instead of /boot/device.hints
 #hints         "GENERIC.hints"         # Default places to look for devices.
@@ -31,34 +16,22 @@ ident               GENERIC
 # env          "GENERIC.env"

 makeoptions    DEBUG=-g                # Build kernel with gdb(1) debug symbols
+makeoptions    CONF_CFLAGS=-fno-builtin  #Don't allow use of memcmp, etc.

 options        SCHED_ULE               # ULE scheduler
 options        PREEMPTION              # Enable kernel thread preemption
 options        INET                    # InterNETworking
 options        INET6                   # IPv6 communications protocols
 options        SCTP                    # Stream Control Transmission Protocol
-options        FFS                     # Berkeley Fast Filesystem
-options        SOFTUPDATES             # Enable FFS soft updates support
-options        UFS_ACL                 # Support for access control lists
-options        UFS_DIRHASH             # Improve performance on big directories
-options        UFS_GJOURNAL            # Enable gjournal-based UFS journaling
-options        MD_ROOT                 # MD is a potential root device
 options        NFSCLIENT               # Network Filesystem Client
 options        NFSSERVER               # Network Filesystem Server
 options        NFSLOCKD                # Network Lock Manager
-options        NFS_ROOT                # NFS usable as /, requires NFSCLIENT
-options        MSDOSFS                 # MSDOS Filesystem
-options        CD9660                  # ISO 9660 Filesystem
 options        PROCFS                  # Process filesystem (requires PSEUDOFS)
 options        PSEUDOFS                # Pseudo-filesystem framework
 options        GEOM_PART_GPT           # GUID Partition Tables.
 options        GEOM_LABEL              # Provides labelization
-options        COMPAT_43TTY            # BSD 4.3 TTY compat (sgtty)
 options        COMPAT_FREEBSD32        # Compatible with i386 binaries
-options        COMPAT_FREEBSD4         # Compatible with FreeBSD4
-options        COMPAT_FREEBSD5         # Compatible with FreeBSD5
-options        COMPAT_FREEBSD6         # Compatible with FreeBSD6
-options        COMPAT_FREEBSD7         # Compatible with FreeBSD7
+options                COMPAT_FREEBSD7
 options        SCSI_DELAY=5000         # Delay (in ms) before probing SCSI
 options        KTRACE                  # ktrace(1) support
 options        STACK                   # stack(9) support
@@ -70,11 +43,9 @@ options      _KPOSIX_PRIORITY_SCHEDULING # P
 options        PRINTF_BUFR_SIZE=128    # Prevent printf output being interspersed.
 options        KBD_INSTALL_CDEV        # install a CDEV entry in /dev
 options        HWPMC_HOOKS             # Necessary kernel hooks for hwpmc(4)
-options        AUDIT                   # Security event auditing
-options        MAC                     # TrustedBSD MAC Framework
 options        FLOWTABLE               # per-cpu routing cache
-#options       KDTRACE_FRAME           # Ensure frames are compiled in
-#options       KDTRACE_HOOKS           # Kernel DTrace hooks
+options        KDTRACE_FRAME           # Ensure frames are compiled in
+options        KDTRACE_HOOKS           # Kernel DTrace hooks
 options        INCLUDE_CONFIG_FILE     # Include this file in kernel

 # Make an SMP-capable kernel by default
@@ -87,181 +58,30 @@ device             cpufreq
 device         acpi
 device         pci

-# Floppy drives
-device         fdc
-
-# ATA and ATAPI devices
-device         ata
-device         atadisk         # ATA disk drives
-device         ataraid         # ATA RAID drives
-device         atapicd         # ATAPI CDROM drives
-device         atapifd         # ATAPI floppy drives
-device         atapist         # ATAPI tape drives
-options        ATA_STATIC_ID   # Static device numbering
-
 # SCSI Controllers
-device         ahc             # AHA2940 and onboard AIC7xxx devices
-options        AHC_REG_PRETTY_PRINT    # Print register bitfields in debug
-                                       # output.  Adds ~128k to driver.
-device         ahd             # AHA39320/29320 and onboard AIC79xx devices
-options        AHD_REG_PRETTY_PRINT    # Print register bitfields in debug
-                                       # output.  Adds ~215k to driver.
-device         amd             # AMD 53C974 (Tekram DC-390(T))
-device         hptiop          # Highpoint RocketRaid 3xxx series
-device         isp             # Qlogic family
-#device                ispfw           # Firmware for QLogic HBAs- normally a module
-device         mpt             # LSI-Logic MPT-Fusion
-#device                ncr             # NCR/Symbios Logic
-device         sym             # NCR/Symbios Logic (newer chipsets + those of `ncr')
-device         trm             # Tekram DC395U/UW/F DC315U adapters
-
-device         adv             # Advansys SCSI adapters
-device         adw             # Advansys wide SCSI adapters
-device         aic             # Adaptec 15[012]x SCSI adapters, AIC-6[23]60.
-device         bt              # Buslogic/Mylex MultiMaster SCSI adapters
+device         ahci

 # SCSI peripherals
 device         scbus           # SCSI bus (required for SCSI)
-device         ch              # SCSI media changers
 device         da              # Direct Access (disks)
-device         sa              # Sequential Access (tape etc)
-device         cd              # CD
 device         pass            # Passthrough device (direct SCSI access)
-device         ses             # SCSI Environmental Services (and SAF-TE)
-
-# RAID controllers interfaced to the SCSI subsystem
-device         amr             # AMI MegaRAID
-device         arcmsr          # Areca SATA II RAID
-#XXX it is not 64-bit clean, -scottl
-#device                asr             # DPT SmartRAID V, VI and Adaptec SCSI RAID
-device         ciss            # Compaq Smart RAID 5*
-device         dpt             # DPT Smartcache III, IV - See NOTES for options
-device         hptmv           # Highpoint RocketRAID 182x
-device         hptrr           # Highpoint RocketRAID 17xx, 22xx, 23xx, 25xx
-device         iir             # Intel Integrated RAID
-device         ips             # IBM (Adaptec) ServeRAID
-device         mly             # Mylex AcceleRAID/eXtremeRAID
-device         twa             # 3ware 9000 series PATA/SATA RAID
-
-# RAID controllers
-device         aac             # Adaptec FSA RAID
-device         aacp            # SCSI passthrough for aac (requires CAM)
-device         ida             # Compaq Smart RAID
-device         mfi             # LSI MegaRAID SAS
-device         mlx             # Mylex DAC960 family
-#XXX pointer/int warnings
-#device                pst             # Promise Supertrak SX6000
-device         twe             # 3ware ATA RAID

 # atkbdc0 controls both the keyboard and the PS/2 mouse
 device         atkbdc          # AT keyboard controller
 device         atkbd           # AT keyboard
-device         psm             # PS/2 mouse

 device         kbdmux          # keyboard multiplexer

 device         vga             # VGA video card driver

-device         splash          # Splash screen and screen saver support
-
 # syscons is the default console driver, resembling an SCO console
 device         sc

-device         agp             # support several AGP chipsets
-
-# PCCARD (PCMCIA) support
-# PCMCIA and cardbus bridge support
-device         cbb             # cardbus (yenta) bridge
-device         pccard          # PC Card (16-bit) bus
-device         cardbus         # CardBus (32-bit) bus
-
 # Serial (COM) ports
 device         uart            # Generic UART driver

-# Parallel port
-device         ppc
-device         ppbus           # Parallel port bus (required)
-device         lpt             # Printer
-device         plip            # TCP/IP over parallel
-device         ppi             # Parallel port interface device
-#device                vpo             # Requires scbus and da
-
-# If you've got a "dumb" serial or parallel PCI card that is
-# supported by the puc(4) glue driver, uncomment the following
-# line to enable it (connects to sio, uart and/or ppc drivers):
-#device                puc
-
 # PCI Ethernet NICs.
-device         de              # DEC/Intel DC21x4x (``Tulip'')
 device         em              # Intel PRO/1000 Gigabit Ethernet Family
-device         igb             # Intel PRO/1000 PCIE Server Gigabit Family
-device         ixgbe           # Intel PRO/10GbE PCIE Ethernet Family
-device         le              # AMD Am7900 LANCE and Am79C9xx PCnet
-device         ti              # Alteon Networks Tigon I/II gigabit Ethernet
-device         txp             # 3Com 3cR990 (``Typhoon'')
-device         vx              # 3Com 3c590, 3c595 (``Vortex'')
-
-# PCI Ethernet NICs that use the common MII bus controller code.
-# NOTE: Be sure to keep the 'device miibus' line in order to use these NICs!
-device         miibus          # MII bus support
-device         ae              # Attansic/Atheros L2 FastEthernet
-device         age             # Attansic/Atheros L1 Gigabit Ethernet
-device         alc             # Atheros AR8131/AR8132 Ethernet
-device         ale             # Atheros AR8121/AR8113/AR8114 Ethernet
-device         bce             # Broadcom BCM5706/BCM5708 Gigabit Ethernet
-device         bfe             # Broadcom BCM440x 10/100 Ethernet
-device         bge             # Broadcom BCM570xx Gigabit Ethernet
-device         dc              # DEC/Intel 21143 and various workalikes
-device         et              # Agere ET1310 10/100/Gigabit Ethernet
-device         fxp             # Intel EtherExpress PRO/100B (82557, 82558)
-device         jme             # JMicron JMC250 Gigabit/JMC260 Fast Ethernet
-device         lge             # Level 1 LXT1001 gigabit Ethernet
-device         msk             # Marvell/SysKonnect Yukon II Gigabit Ethernet
-device         nfe             # nVidia nForce MCP on-board Ethernet
-device         nge             # NatSemi DP83820 gigabit Ethernet
-#device                nve             # nVidia nForce MCP on-board Ethernet Networking
-device         pcn             # AMD Am79C97x PCI 10/100 (precedence over 'le')
-device         re              # RealTek 8139C+/8169/8169S/8110S
-device         rl              # RealTek 8129/8139
-device         sf              # Adaptec AIC-6915 (``Starfire'')
-device         sge             # Silicon Integrated Systems SiS190/191
-device         sis             # Silicon Integrated Systems SiS 900/SiS 7016
-device         sk              # SysKonnect SK-984x & SK-982x gigabit Ethernet
-device         ste             # Sundance ST201 (D-Link DFE-550TX)
-device         stge            # Sundance/Tamarack TC9021 gigabit Ethernet
-device         tl              # Texas Instruments ThunderLAN
-device         tx              # SMC EtherPower II (83c170 ``EPIC'')
-device         vge             # VIA VT612x gigabit Ethernet
-device         vr              # VIA Rhine, Rhine II
-device         wb              # Winbond W89C840F
-device         xl              # 3Com 3c90x (``Boomerang'', ``Cyclone'')
-
-# ISA Ethernet NICs.  pccard NICs included.
-device         cs              # Crystal Semiconductor CS89x0 NIC
-# 'device ed' requires 'device miibus'
-device         ed              # NE[12]000, SMC Ultra, 3c503, DS8390 cards
-device         ex              # Intel EtherExpress Pro/10 and Pro/10+
-device         ep              # Etherlink III based cards
-device         fe              # Fujitsu MB8696x based cards
-device         sn              # SMC's 9000 series of Ethernet chips
-device         xe              # Xircom pccard Ethernet
-
-# Wireless NIC cards
-device         wlan            # 802.11 support
-options        IEEE80211_DEBUG # enable debug msgs
-options        IEEE80211_AMPDU_AGE # age frames in AMPDU reorder q's
-options        IEEE80211_SUPPORT_MESH  # enable 802.11s draft support
-device         wlan_wep        # 802.11 WEP support
-device         wlan_ccmp       # 802.11 CCMP support
-device         wlan_tkip       # 802.11 TKIP support
-device         wlan_amrr       # AMRR transmit rate control algorithm
-device         an              # Aironet 4500/4800 802.11 wireless NICs.
-device         ath             # Atheros pci/cardbus NIC's
-device         ath_hal         # pci/cardbus chip support
-options        AH_SUPPORT_AR5416       # enable AR5416 tx/rx descriptors
-device         ath_rate_sample # SampleRate tx rate control for ath
-device         ral             # Ralink Technology RT2500 wireless NICs.
-device         wi              # WaveLAN/Intersil/Symbol 802.11 wireless NICs.

 # Pseudo devices.
 device         loop            # Network loopback
@@ -281,45 +101,49 @@ device            firmware        # firmware assist modul
 device         bpf             # Berkeley packet filter

 # USB support
-options        USB_DEBUG       # enable debug msgs
+#options       USB_DEBUG       # enable debug msgs
 device         uhci            # UHCI PCI->USB interface
-device         ohci            # OHCI PCI->USB interface
 device         ehci            # EHCI PCI->USB interface (USB 2.0)
 device         usb             # USB Bus (required)
-#device                udbp            # USB Double Bulk Pipe devices
-device         uhid            # "Human Interface Devices"
 device         ukbd            # Keyboard
-device         ulpt            # Printer
 device         umass           # Disks/Mass storage - Requires scbus and da
-device         ums             # Mouse
-device         urio            # Diamond Rio 500 MP3 player
-# USB Serial devices
-device         uark            # Technologies ARK3116 based serial adapters
-device         ubsa            # Belkin F5U103 and compatible serial adapters
-device         uftdi           # For FTDI usb serial adapters
-device         uipaq           # Some WinCE based devices
-device         uplcom          # Prolific PL-2303 serial adapters
-device         uslcom          # SI Labs CP2101/CP2102 serial adapters
-device         uvisor          # Visor and Palm devices
-device         uvscom          # USB serial support for DDI pocket's PHS
-# USB Ethernet, requires miibus
-device         aue             # ADMtek USB Ethernet
-device         axe             # ASIX Electronics USB Ethernet
-device         cdce            # Generic USB over Ethernet
-device         cue             # CATC USB Ethernet
-device         kue             # Kawasaki LSI USB Ethernet
-device         rue             # RealTek RTL8150 USB Ethernet
-device         udav            # Davicom DM9601E USB
-# USB Wireless
-device         rum             # Ralink Technology RT2501USB wireless NICs
-device         uath            # Atheros AR5523 wireless NICs
-device         ural            # Ralink Technology RT2500USB wireless NICs
-device         zyd             # ZyDAS zb1211/zb1211b wireless NICs
-
-# FireWire support
-device         firewire        # FireWire bus code
-#device                sbp             # SCSI over FireWire (Requires scbus and da)
-device         fwe             # Ethernet over FireWire (non-standard!)
-device         fwip            # IP over FireWire (RFC 2734,3146)
-device         dcons           # Dumb console driver
-device         dcons_crom      # Configuration ROM for dcons
+
+device         coretemp
+device         cpuctl
+device         pf
+device         smbus
+device         smb
+device         ichsmb
+device         ichwd
+device         winbondwd
+device         crypto          # core crypto support
+device         cryptodev       # /dev/crypto for access to h/w
+options        IPSEC                   #IP security (requires device crypto)
+options        PANIC_REBOOT_WAIT_TIME=5
+
+options        ACCEPT_FILTER_DATA
+options        ACCEPT_FILTER_HTTP
+options        ACCEPT_FILTER_DNS
+options                NULLFS
+options                TMPFS
+
+options        ALTQ
+options        ALTQ_CBQ        # Class Based Queueing
+options        ALTQ_RED        # Random Early Detection
+options        ALTQ_RIO        # RED In/Out
+options        ALTQ_HFSC       # Hierarchical Packet Scheduler
+options        ALTQ_CDNR       # Traffic conditioner
+options        ALTQ_PRIQ       # Priority Queueing
+options        ALTQ_NOPCC      # Required if the TSC is unusable
+
+options                SHMMAXPGS=65536
+options                SEMMNI=40
+options                SEMMNS=240
+options                SEMUME=40
+options                SEMMNU=120
+
+options                KDB
+options                DDB
+options                KDB_TRACE
+options                DDB_NUMSYM
+options                HZ=100

主要的改动包括:

实测静置(只跑网络部分,或完全闲置,网络流量在不吃CPU的时候对耗电影响不太明显)时耗电为17W。理论上AHCI相关的设置可以进一步减少耗电,但我还没有测过具体的影响。

当执行计算任务并且有大量硬盘操作时的耗电峰值是23W。

(未完待续)