1
0
mirror of https://git.FreeBSD.org/src.git synced 2024-12-20 11:11:24 +00:00
freebsd/sys/dev
Alexander Motin a157e42516 Refactor timer management code with priority to one-shot operation mode.
The main goal of this is to generate timer interrupts only when there is
some work to do. When CPU is busy interrupts are generating at full rate
of hz + stathz to fullfill scheduler and timekeeping requirements. But
when CPU is idle, only minimum set of interrupts (down to 8 interrupts per
second per CPU now), needed to handle scheduled callouts is executed.
This allows significantly increase idle CPU sleep time, increasing effect
of static power-saving technologies. Also it should reduce host CPU load
on virtualized systems, when guest system is idle.

There is set of tunables, also available as writable sysctls, allowing to
control wanted event timer subsystem behavior:
  kern.eventtimer.timer - allows to choose event timer hardware to use.
On x86 there is up to 4 different kinds of timers. Depending on whether
chosen timer is per-CPU, behavior of other options slightly differs.
  kern.eventtimer.periodic - allows to choose periodic and one-shot
operation mode. In periodic mode, current timer hardware taken as the only
source of time for time events. This mode is quite alike to previous kernel
behavior. One-shot mode instead uses currently selected time counter
hardware to schedule all needed events one by one and program timer to
generate interrupt exactly in specified time. Default value depends of
chosen timer capabilities, but one-shot mode is preferred, until other is
forced by user or hardware.
  kern.eventtimer.singlemul - in periodic mode specifies how much times
higher timer frequency should be, to not strictly alias hardclock() and
statclock() events. Default values are 2 and 4, but could be reduced to 1
if extra interrupts are unwanted.
  kern.eventtimer.idletick - makes each CPU to receive every timer interrupt
independently of whether they busy or not. By default this options is
disabled. If chosen timer is per-CPU and runs in periodic mode, this option
has no effect - all interrupts are generating.

As soon as this patch modifies cpu_idle() on some platforms, I have also
refactored one on x86. Now it makes use of MONITOR/MWAIT instrunctions
(if supported) under high sleep/wakeup rate, as fast alternative to other
methods. It allows SMP scheduler to wake up sleeping CPUs much faster
without using IPI, significantly increasing performance on some highly
task-switching loads.

Tested by:	many (on i386, amd64, sparc64 and powerc)
H/W donated by:	Gheorghe Ardelean
Sponsored by:	iXsystems, Inc.
2010-09-13 07:25:35 +00:00
..
aac Use enums in the aac_command_status_table rather than duplicating the same 2010-04-13 12:10:55 +00:00
acpi_support make acpi_hp device a child of acpi_wmi 2010-09-11 08:09:14 +00:00
acpica Refactor timer management code with priority to one-shot operation mode. 2010-09-13 07:25:35 +00:00
adb
adlink Update d_mmap() to accept vm_ooffset_t and vm_memattr_t. 2009-12-29 21:51:28 +00:00
advansys
ae Add new tunable 'net.link.ifqmaxlen' to set default send interface 2010-05-03 07:32:50 +00:00
age Remove unnecessary controller reinitialization. 2010-08-24 19:41:15 +00:00
agp Do not mention VM_ALLOC_RETRY in comment, and normalize the terminology 2010-07-08 08:39:02 +00:00
aha
ahb
ahci MFata(4): 2010-08-28 07:24:45 +00:00
aic
aic7xxx For every instance of '.if ${CC} == "foo"' or '.if ${CC} != "foo"' in 2010-08-17 20:39:28 +00:00
alc Make sure to disable RX MAC in alc_stop_mac(). Previously there 2010-08-13 19:39:33 +00:00
ale It seems ale(4) controllers do not like to see TCP payload in the 2010-04-26 21:08:15 +00:00
amd Remove extraneous semicolons, no functional changes. 2010-01-07 21:01:37 +00:00
amdsbwd amdsbwd: fix nonsensical timeout calculations 2010-05-31 09:07:23 +00:00
amdtemp
amr Fix clang warning on empty statement. 2010-07-28 16:24:11 +00:00
an Add new tunable 'net.link.ifqmaxlen' to set default send interface 2010-05-03 07:32:50 +00:00
arcmsr Apply vendor version 1.20.00.17. 2010-07-21 18:50:24 +00:00
asmc
asr MFp4: Large set of CAM inprovements. 2010-01-28 08:41:30 +00:00
ata Fix a problem where device detection would work unreliably on Serverworks 2010-09-09 13:17:30 +00:00
ath Fix indenting/whitespace issues introduced by me. 2010-08-15 11:40:53 +00:00
atkbdc bus_add_child: change type of order parameter to u_int 2010-09-10 11:19:03 +00:00
auxio Enroll these drivers in multipass probing. The motivation behind this 2009-12-22 21:02:46 +00:00
bce Fix an apparent typo. 2010-07-26 23:24:42 +00:00
bfe
bge Make sure to create DMA'able memory for statistics block. This was 2010-09-07 18:29:29 +00:00
bktr Fix build on architectures where PAGE_SIZE is a long (sparc64, powerpc). 2010-07-13 19:27:20 +00:00
bm
buslogic
bwi Introduce IEEE80211_C_RATECTL, drivers which use the ratectl framework 2010-08-14 20:12:10 +00:00
bwn Introduce IEEE80211_C_RATECTL, drivers which use the ratectl framework 2010-08-14 20:12:10 +00:00
cardbus Move the PCI-specific logic of removing a cardbus device into a 2010-01-05 20:42:25 +00:00
cas KTR_CTx are long time aliased by existing classes so they can't serve 2010-07-21 10:05:07 +00:00
ce Add new tunable 'net.link.ifqmaxlen' to set default send interface 2010-05-03 07:32:50 +00:00
cfe Start using the 'init_static_kenv()' API provided by r198561 to initialize 2010-08-11 02:13:50 +00:00
cfi Convert Freescale PowerPC platforms to FDT convention. 2010-07-11 21:08:29 +00:00
ciss Initialize the callout structure earlier in attach before calling any 2010-04-28 18:49:45 +00:00
cm Add new tunable 'net.link.ifqmaxlen' to set default send interface 2010-05-03 07:32:50 +00:00
cmx
coretemp Catch known CPUs before using IA32_TEMPERATURE_TARGET. 2010-08-04 00:25:13 +00:00
cp Add new tunable 'net.link.ifqmaxlen' to set default send interface 2010-05-03 07:32:50 +00:00
cpuctl
cpufreq
cs Add new tunable 'net.link.ifqmaxlen' to set default send interface 2010-05-03 07:32:50 +00:00
ct Spell "Hz" correctly wherever it is user-visible. 2010-01-12 17:59:58 +00:00
ctau Add new tunable 'net.link.ifqmaxlen' to set default send interface 2010-05-03 07:32:50 +00:00
cx Add new tunable 'net.link.ifqmaxlen' to set default send interface 2010-05-03 07:32:50 +00:00
cxgb Add a drain function for struct sysctl_req, and use it for a variety of 2010-09-09 18:33:46 +00:00
cy
dc cardbus -> CardBus 2010-01-03 23:28:32 +00:00
dcons
de Remove extraneous semicolons, no functional changes. 2010-01-07 21:01:37 +00:00
digi
dpms Attach dpms(4) to vgapm and make sure to restore DPMS state after 2009-12-15 19:58:23 +00:00
dpt Get rid of #ident, GCC 4.4 warns about it being deprecated. 2010-01-08 17:20:41 +00:00
drm Add support for ATI Radeon HD 4250. 2010-08-03 16:30:56 +00:00
e1000 Code correction in refresh_mbufs, just continuing 2010-09-07 21:28:45 +00:00
ed On second thought, we need to force 16-bit mode 2010-08-25 02:09:07 +00:00
eisa
en
ep Add new tunable 'net.link.ifqmaxlen' to set default send interface 2010-05-03 07:32:50 +00:00
esp Include <machine/ofw_machdep.h> for OF_getscsinitid(). 2010-05-10 20:02:39 +00:00
et Change copyright holder to author. We prefer using a real legal 2010-07-30 17:51:22 +00:00
ex Add new tunable 'net.link.ifqmaxlen' to set default send interface 2010-05-03 07:32:50 +00:00
exca CardBus instead of cardbus. 2010-01-03 23:26:29 +00:00
fatm Remove extraneous semicolons, no functional changes. 2010-01-07 21:01:37 +00:00
fb Disable video ROM shadowing by default as I originally intended. I found 2010-09-02 17:22:12 +00:00
fdc Fix a regression from r200554, which broke fdc(4) attachment to acpi(4). 2010-05-30 03:45:41 +00:00
fdt Eliminate FDT_IMMR_VA define. 2010-07-19 18:47:18 +00:00
fe Add new tunable 'net.link.ifqmaxlen' to set default send interface 2010-05-03 07:32:50 +00:00
firewire bus_add_child: change type of order parameter to u_int 2010-09-10 11:19:03 +00:00
flash Add s25sl064a, an 8mb SPI flash part. 2010-08-17 16:27:13 +00:00
fxp If controller received bad frames make sure to update newly added 2010-05-14 17:39:28 +00:00
gem KTR_CTx are long time aliased by existing classes so they can't serve 2010-07-21 10:05:07 +00:00
glxsb
hatm Remove extraneous semicolons, no functional changes. 2010-01-07 21:01:37 +00:00
hifn Update d_mmap() to accept vm_ooffset_t and vm_memattr_t. 2009-12-29 21:51:28 +00:00
hme KTR_CTx are long time aliased by existing classes so they can't serve 2010-07-21 10:05:07 +00:00
hptiop Report transport type in XPT_PATH_INQ. 2010-06-19 13:41:17 +00:00
hptmv Report transport type in XPT_PATH_INQ. 2010-06-19 13:42:14 +00:00
hptrr MFp4: Large set of CAM inprovements. 2010-01-28 08:41:30 +00:00
hwpmc Fix invalid class removal when IAF is not the last class. 2010-09-05 13:31:14 +00:00
ic Merge from projects/mips to head by hand: 2010-01-11 04:13:06 +00:00
ichsmb Add support for Intel Cougar Point SMBus controller. 2010-08-27 23:24:08 +00:00
ichwd Add Intel Cougar Point PCH LPC Controller Device IDs 2010-08-28 00:09:46 +00:00
ida
ie Add new tunable 'net.link.ifqmaxlen' to set default send interface 2010-05-03 07:32:50 +00:00
ieee488 GPIB overhaul, part #2: make the tnt4882 driver work with the newer 2010-02-01 21:21:10 +00:00
if_ndis Add missing MODULE_VERSION() definitions, this resolves problems around 2010-09-01 23:47:53 +00:00
iicbus bus_add_child: change type of order parameter to u_int 2010-09-10 11:19:03 +00:00
iir Get rid of #ident. 2010-01-08 20:40:28 +00:00
io - Extract the IODEV_PIO interface from ia64 and make it MI. 2010-04-28 15:38:01 +00:00
ipmi Fix test for double-nul characters that terminate the string table at 2010-07-29 13:46:37 +00:00
ips Fix argument order in a call to mtx_init. 2009-12-17 00:21:12 +00:00
ipw Enable 5.5 and 11Mbit TX rates. 2010-05-11 17:14:17 +00:00
iscsi/initiator Remove the freelist, which simply duplicates some of the zone allocator's 2010-09-02 14:13:43 +00:00
isp Don't pass a buffer directly as a printflike format string. 2010-06-10 19:38:07 +00:00
ispfw Don't spam dmesg with "registered firmware ..." when module is compiled 2010-03-05 03:37:42 +00:00
iwi Add new tunable 'net.link.ifqmaxlen' to set default send interface 2010-05-03 07:32:50 +00:00
iwn Introduce IEEE80211_C_RATECTL, drivers which use the ratectl framework 2010-08-14 20:12:10 +00:00
ixgb Do not allocate multicast array memory in multicast filter 2010-08-28 00:34:22 +00:00
ixgbe Do not allocate multicast array memory in multicast filter 2010-08-28 00:34:22 +00:00
jme Add TSO support on VLANs. jme(4) controllers do not require VLAN 2010-02-22 22:05:49 +00:00
joy
kbd
kbdmux
ksyms Update d_mmap() to accept vm_ooffset_t and vm_memattr_t. 2009-12-29 21:51:28 +00:00
le Add new tunable 'net.link.ifqmaxlen' to set default send interface 2010-05-03 07:32:50 +00:00
led Fix an incorrect use of sbuf_overflowed() after a call to sbuf_finish(). 2010-09-09 18:35:08 +00:00
lge
lindev
lmc One more #ifdef fix for GCC 4.4. 2010-01-08 15:57:56 +00:00
malo Fix firmware module dependencies. 2010-09-10 08:11:48 +00:00
mc146818 Remove clause 3 from Izumi Tsutsui's licenses. 2009-12-25 22:58:43 +00:00
mca
mcd
md - Remove some extra white space. 2010-07-26 10:37:14 +00:00
mem
mfi Correct mfip module dependency on mfi. This allows mfip to be loaded as 2010-03-02 17:34:11 +00:00
mge Convert Marvell ARM platforms to FDT convention. 2010-06-13 13:28:53 +00:00
mii Correct definition of T2 mode bit of MRBE Message Page 5 Next Page 2010-09-08 21:08:54 +00:00
mk48txx Fix botches in r201005: 2010-01-01 22:47:53 +00:00
mlx
mly MFp4: Large set of CAM inprovements. 2010-01-28 08:41:30 +00:00
mmc Report relative card address to NewBus as location string. 2010-05-23 09:44:48 +00:00
mn
mps MFp4 (//depot/projects/mps/...) 2010-09-10 15:03:56 +00:00
mpt Figure which is the IO and MEM bars- do not assume that they are in 2010-08-06 17:27:00 +00:00
mse
msk Catch up to rename of the constant for the Master Data Parity Error bit in 2010-09-09 20:26:30 +00:00
mvs Export PCI IDs of ATA/SATA controllers through CAM and ata(4) layers to 2010-07-25 15:43:52 +00:00
mwl Fix firmware module dependencies. 2010-09-10 08:11:48 +00:00
mxge Add interrupt descriptions for mxge's msi-x vectors 2010-05-21 15:57:24 +00:00
my Add new tunable 'net.link.ifqmaxlen' to set default send interface 2010-05-03 07:32:50 +00:00
ncv
nfe With r206844, CSUM_TCP is also set for CSUM_TSO case. Modify 2010-04-19 22:10:40 +00:00
nge
nmdm
nsp
null Mark /dev/zero and /dev/null as eternal. 2010-08-06 09:47:48 +00:00
nve Initialize the ifnet before calling mii_phy_probe() as some phy drivers 2010-01-27 14:43:28 +00:00
nvram
nxge Add new tunable 'net.link.ifqmaxlen' to set default send interface 2010-05-03 07:32:50 +00:00
ofw Change OF_interpret() to also take an array of cell_t (missed in r209801). 2010-09-11 18:55:00 +00:00
patm Remove extraneous semicolons, no functional changes. 2010-01-07 21:01:37 +00:00
pbio
pccard cardbus -> CardBus 2010-01-03 23:31:58 +00:00
pccbb
pcf
pci - Rename the constant for the Master Data Parity Error flag in the 2010-09-09 18:19:15 +00:00
pcn
pdq Add new tunable 'net.link.ifqmaxlen' to set default send interface 2010-05-03 07:32:50 +00:00
powermac_nvram Add support for the Sharp/Micron flash chips to powermac_mvram(4). 2010-09-05 20:04:02 +00:00
ppbus bus_add_child: change type of order parameter to u_int 2010-09-10 11:19:03 +00:00
ppc Add PCI ID for MCS9901's parallel port. 2010-03-23 20:08:18 +00:00
pst
pty
puc Add support for the Perle Speed4 LE. 2010-05-20 13:16:42 +00:00
quicc Convert Freescale PowerPC platforms to FDT convention. 2010-07-11 21:08:29 +00:00
ral Introduce IEEE80211_C_RATECTL, drivers which use the ratectl framework 2010-08-14 20:12:10 +00:00
random Use the fpu_kern_enter() interface to properly separate usermode FPU 2010-06-05 16:00:53 +00:00
rc
re Don't change PCIe maximum read request size to 2048 on RTL810x 2010-05-07 23:05:27 +00:00
rndtest
rp
safe Remove extraneous semicolons, no functional changes. 2010-01-07 21:01:37 +00:00
sbni Add new tunable 'net.link.ifqmaxlen' to set default send interface 2010-05-03 07:32:50 +00:00
scc
scd
sdhci
sec Convert Freescale PowerPC platforms to FDT convention. 2010-07-11 21:08:29 +00:00
sf
sge Remove enabling RX checksum offloading in RX filter setup. RX 2010-07-08 18:22:49 +00:00
si
siba bus_add_child: change type of order parameter to u_int 2010-09-10 11:19:03 +00:00
siis Export PCI IDs of ATA/SATA controllers through CAM and ata(4) layers to 2010-07-25 15:43:52 +00:00
sio
sis Fix another bug introduced in r212109. We should unload DMA maps 2010-09-03 18:00:17 +00:00
sk Some revision of Yukon controller generates corrupted frame when TX 2010-07-09 21:21:08 +00:00
smbus
smc Add new tunable 'net.link.ifqmaxlen' to set default send interface 2010-05-03 07:32:50 +00:00
sn Add new tunable 'net.link.ifqmaxlen' to set default send interface 2010-05-03 07:32:50 +00:00
snc Add new tunable 'net.link.ifqmaxlen' to set default send interface 2010-05-03 07:32:50 +00:00
snp
sound Add Intel Cougar Point PCH HD Audio Controller ID 2010-08-28 00:23:13 +00:00
speaker
spibus bus_add_child: change type of order parameter to u_int 2010-09-10 11:19:03 +00:00
ste It seems some old Sundace(now IC Plus Corp.) controllers do not 2010-08-09 01:47:09 +00:00
stg
stge The NetBSD Foundation has granted permission to remove clause 3 and 4 from 2010-03-01 16:52:11 +00:00
streams
sym - On sparc64 obtain the initiator ID from the Open Firmware device tree 2010-04-27 18:05:33 +00:00
syscons Improve style slightly. 2010-07-19 20:31:04 +00:00
tdfx Update d_mmap() to accept vm_ooffset_t and vm_memattr_t. 2009-12-29 21:51:28 +00:00
ti Neither the page lock nor the page queues lock is required to unwire and 2010-05-03 15:51:59 +00:00
tl
tpm Add tpm(4) driver for Trusted Platform Module. 2010-08-12 00:16:18 +00:00
trm MFp4: Large set of CAM inprovements. 2010-01-28 08:41:30 +00:00
tsec Convert Freescale PowerPC platforms to FDT convention. 2010-07-11 21:08:29 +00:00
twa Fix a compile problem introduced with r212008 on 32bit: 2010-09-04 16:27:14 +00:00
twe Teach twe driver to report array stripe size to GEOM. 2009-12-25 17:34:43 +00:00
tx
txp
uart Eliminate FDT_IMMR_VA define. 2010-07-19 18:47:18 +00:00
ubsec Cast the bus_size_t to a intmax_t rather than assuming type-punning to 2010-03-29 17:26:24 +00:00
usb Reduce the need to accesss struct usb_device by providing functions to access 2010-09-02 04:39:45 +00:00
utopia
vge Remove wrong assertion. 2009-12-25 00:23:47 +00:00
vkbd
vr vr_init_locked() will stop and reset the controller. Remove 2010-08-24 18:44:12 +00:00
vx Add new tunable 'net.link.ifqmaxlen' to set default send interface 2010-05-03 07:32:50 +00:00
watchdog
wb
wds
wi Add new tunable 'net.link.ifqmaxlen' to set default send interface 2010-05-03 07:32:50 +00:00
wl Add new tunable 'net.link.ifqmaxlen' to set default send interface 2010-05-03 07:32:50 +00:00
wpi Introduce IEEE80211_C_RATECTL, drivers which use the ratectl framework 2010-08-14 20:12:10 +00:00
xe Add new tunable 'net.link.ifqmaxlen' to set default send interface 2010-05-03 07:32:50 +00:00
xen A number of netfront fixes and stability improvements: 2010-06-08 03:13:26 +00:00
xl Implement basic WOL support. Note, not all xl(4) controllers 2010-08-23 19:18:50 +00:00