opnsense-src/sys/amd64/include
Konstantin Belousov 37eed8419c Implement support for the process-context identifiers ('PCID') on
Intel CPUs.  The feature tags TLB entries with the Id of the address
space and allows to avoid TLB invalidation on the context switch, it
is available only in the long mode.  In the microbenchmarks, using the
PCID decreased latency of the context switches by ~30% on SandyBridge
class desktop CPUs, measured with the lat_ctx program from lmbench.

If available, use INVPCID instruction when a TLB entry in non-current
address space needs to be invalidated.  The instruction is typically
available on the Haswell.

If needed, the use of PCID can be turned off with the
vm.pmap.pcid_enabled loader tunable set to 0.  The state of the
feature is reported by the vm.pmap.pcid_enabled sysctl.  The sysctl
vm.pmap.pcid_save_cnt reports the number of context switches which
avoided invalidating the TLB; compare with the total number of context
switches, available as sysctl vm.stats.sys.v_swtch.

Sponsored by:	The FreeBSD Foundation
Reviewed by:	alc
Tested by:	pho, bf
2013-08-30 07:59:49 +00:00
..
pc - Re-shuffle the <machine/pc/bios.h> headers to move all kernel-specific 2012-09-28 11:59:32 +00:00
xen Implement vector callback for PVHVM and unify event channel implementations 2013-08-29 19:52:18 +00:00
_align.h Merge amd64/i386 _align.h by aligning on the size of register_t (copied 2010-11-26 10:59:20 +00:00
_bus.h
_inttypes.h Copy powerpc/include/_inttypes.h to x86 and replace i386/amd64/pc98 2011-01-08 18:09:48 +00:00
_limits.h Copy amd64 _limits.h to x86 and merge with i386 _limits.h. Replace 2012-02-28 18:24:28 +00:00
_stdint.h Copy amd64 _stdint.h to x86 and merge with i386 _stdint.h. Replace 2012-02-28 18:38:33 +00:00
_types.h Copy amd64 _types.h to x86 and merge with i386 _types.h. Replace existing 2012-02-28 18:15:28 +00:00
acpica_machdep.h Merge acpica_machdep.h for amd64 and i386 and move to x86. In fact, these 2013-08-13 22:05:10 +00:00
apicvar.h Implement vector callback for PVHVM and unify event channel implementations 2013-08-29 19:52:18 +00:00
apm_bios.h Move identical copies of apm_bios.h to sys/x86/include, replace them with 2010-11-11 19:36:21 +00:00
asm.h libc: Access _logname_valid more efficiently. 2013-08-17 19:24:58 +00:00
asmacros.h Clear DF bit in eflags/rflags on the kernel entry. The i386 and amd64 2010-06-23 20:44:07 +00:00
atomic.h Remove empty lines before return statements for style consistency. 2013-08-21 22:05:58 +00:00
bus.h bhyve import part 2 of 2, guest kernel changes. 2011-05-14 18:37:24 +00:00
bus_dma.h
clock.h Unsynchronized TSCs on the host require special handling in bhyve: 2013-04-10 05:59:07 +00:00
counter.h Fix issues with zeroing and fetching the counters, on x86 and ppc64. 2013-07-01 02:48:27 +00:00
cpu.h Revert r253748,253749 2013-07-28 18:44:17 +00:00
cpufunc.h Provide a wrapper for the INVPCID instruction, definition of the 2013-08-30 07:42:38 +00:00
cputypes.h
db_machdep.h
elf.h Convert machine/elf.h, machine/frame.h, machine/sigframe.h, 2013-02-20 17:39:52 +00:00
endian.h Copy amd64 endian.h to x86 and merge with i386 endian.h. Replace 2012-02-28 19:39:54 +00:00
exec.h
fdt.h Add basic support for FDT to i386 & amd64. This change includes: 2013-05-21 03:05:49 +00:00
float.h Copy amd64 float.h to x86 and merge with i386 float.h. Replace 2012-03-04 14:00:32 +00:00
floatingpoint.h
fpu.h IFC @ r242684 2012-11-11 03:26:14 +00:00
frame.h Convert machine/elf.h, machine/frame.h, machine/sigframe.h, 2013-02-20 17:39:52 +00:00
gdb_machdep.h
ieeefp.h People porting FreeBSD to new architectures ought not have to 2011-10-21 06:41:46 +00:00
in_cksum.h MFp4 bz_ipv6_fast: 2012-05-24 22:00:48 +00:00
intr_machdep.h Implement vector callback for PVHVM and unify event channel implementations 2013-08-29 19:52:18 +00:00
iodev.h MFC r207329, r208716: 2010-06-01 21:19:58 +00:00
kdb.h
limits.h
md_var.h x86: detect mwait capabilities and extensions, when present 2013-07-28 17:54:42 +00:00
memdev.h Add reader/writer lock around mem_range_attr_get() and mem_range_attr_set(). 2011-01-17 22:58:28 +00:00
metadata.h Add basic support for FDT to i386 & amd64. This change includes: 2013-05-21 03:05:49 +00:00
minidump.h amd64: introduce minidump version 2 2010-11-11 18:35:28 +00:00
mp_watchdog.h
nexusvar.h
npx.h Move userland bits of i386 npx.h and amd64 fpu.h to x86 fpu.h. 2012-03-16 20:24:30 +00:00
ofw_machdep.h Add basic support for FDT to i386 & amd64. This change includes: 2013-05-21 03:05:49 +00:00
param.h Rename VM_NDOMAIN into MAXMEMDOM and move it into machine/param.h in 2013-05-07 22:46:24 +00:00
pcb.h Retire write-only PCB_GS32BIT pcb flag on amd64. 2013-05-09 21:42:43 +00:00
pci_cfgreg.h Move {amd64,i386}/pci/pci_bus.c and {amd64,i386}/include/pci_cfgreg.h to 2011-06-22 21:04:13 +00:00
pcpu.h Implement support for the process-context identifiers ('PCID') on 2013-08-30 07:59:49 +00:00
pmap.h Implement support for the process-context identifiers ('PCID') on 2013-08-30 07:59:49 +00:00
pmc_mdep.h Add software PMC support. 2012-03-28 20:58:30 +00:00
ppireg.h
proc.h Handle spurious page faults that may occur in no-fault sections of the 2012-03-22 04:52:51 +00:00
profile.h Use intr_disable() and intr_restore() instead of frobbing the flags register 2010-10-25 15:28:03 +00:00
psl.h Copy i386 psl.h to x86 and replace amd64/i386/pc98 psl.h with stubs. 2012-03-19 21:29:57 +00:00
ptrace.h Copy amd64 ptrace.h to x86 and merge with i386 ptrace.h. Replace 2012-03-04 20:24:28 +00:00
reg.h Copy i386 reg.h to x86 and merge with amd64 reg.h. Replace i386/amd64/pc98 2012-03-18 19:06:38 +00:00
reloc.h
resource.h
runq.h
segments.h Move userland bits (and some common kernel bits) from amd64 and i386 2012-03-19 21:24:50 +00:00
setjmp.h Copy amd64 setjmp.h to x86 and replace amd64/i386/pc98 setjmp.h with stubs. 2012-02-28 22:17:52 +00:00
sf_buf.h
sigframe.h Convert machine/elf.h, machine/frame.h, machine/sigframe.h, 2013-02-20 17:39:52 +00:00
signal.h Convert machine/elf.h, machine/frame.h, machine/sigframe.h, 2013-02-20 17:39:52 +00:00
smp.h Implement support for the process-context identifiers ('PCID') on 2013-08-30 07:59:49 +00:00
specialreg.h Copy i386 specialreg.h to x86 and merge with amd64 specialreg.h. Replace 2012-03-19 21:34:11 +00:00
stack.h
stdarg.h Copy amd64 stdarg.h to x86 and replace amd64/i386/pc98 stdarg.h with stubs. 2012-02-28 22:30:58 +00:00
sysarch.h Copy amd64 sysarch.h to x86 and merge with i386 sysarch.h. Replace 2012-03-19 21:57:31 +00:00
timerreg.h
trap.h Copy amd64 trap.h to x86 and replace amd64/i386/pc98 trap.h with stubs. 2012-03-04 14:12:57 +00:00
tss.h
ucontext.h Convert machine/elf.h, machine/frame.h, machine/sigframe.h, 2013-02-20 17:39:52 +00:00
varargs.h
vdso.h Implement mechanism to export some kernel timekeeping data to 2012-06-22 07:06:40 +00:00
vm.h - Rename VM_MEMATTR_UNCACHED to VM_MEMATTR_WEAK_UNCACHEABLE on x86 to 2012-03-29 16:51:22 +00:00
vmm.h Add RIP-relative addressing to the instruction decoder. 2013-04-25 04:56:43 +00:00
vmm_dev.h Implement guest vcpu pinning using 'pthread_setaffinity_np(3)'. 2013-02-11 20:36:07 +00:00
vmm_instruction_emul.h Allow caller to skip 'guest linear address' validation when doing instruction 2013-03-28 21:26:19 +00:00
vmparam.h Bump up the maximum addressable memory on amd64 systems from 1TB to 4TB. 2013-08-17 19:49:08 +00:00