Revision tags: v6.2.1, v6.2.0, v6.3.0, v6.0.1, v6.0.0, v6.0.0rc1, v6.1.0, v5.8.3, v5.8.2, v5.8.1, v5.8.0, v5.9.0, v5.8.0rc1, v5.6.3, v5.6.2, v5.6.1, v5.6.0, v5.6.0rc1, v5.7.0, v5.4.3, v5.4.2, v5.4.1, v5.4.0, v5.5.0, v5.4.0rc1, v5.2.2, v5.2.1, v5.2.0, v5.3.0, v5.2.0rc, v5.0.2, v5.0.1, v5.0.0, v5.0.0rc2, v5.1.0, v5.0.0rc1, v4.8.1, v4.8.0, v4.6.2, v4.9.0, v4.8.0rc, v4.6.1, v4.6.0, v4.6.0rc2, v4.6.0rc, v4.7.0, v4.4.3, v4.4.2, v4.4.1, v4.4.0, v4.5.0, v4.4.0rc, v4.2.4, v4.3.1, v4.2.3, v4.2.1, v4.2.0, v4.0.6, v4.3.0, v4.2.0rc, v4.0.5, v4.0.4, v4.0.3, v4.0.2, v4.0.1, v4.0.0, v4.0.0rc3, v4.0.0rc2, v4.0.0rc, v4.1.0, v3.8.2, v3.8.1, v3.6.3, v3.8.0, v3.8.0rc2, v3.9.0, v3.8.0rc, v3.6.2, v3.6.1, v3.6.0, v3.7.1, v3.6.0rc, v3.7.0 |
|
#
a86ce0cd |
| 20-Sep-2013 |
Matthew Dillon <dillon@apollo.backplane.com> |
hammer2 - Merge Mihai Carabas's VKERNEL/VMM GSOC project into the main tree
* This merge contains work primarily by Mihai Carabas, with some misc fixes also by Matthew Dillon.
* Special note on G
hammer2 - Merge Mihai Carabas's VKERNEL/VMM GSOC project into the main tree
* This merge contains work primarily by Mihai Carabas, with some misc fixes also by Matthew Dillon.
* Special note on GSOC core
This is, needless to say, a huge amount of work compressed down into a few paragraphs of comments. Adds the pc64/vmm subdirectory and tons of stuff to support hardware virtualization in guest-user mode, plus the ability for programs (vkernels) running in this mode to make normal system calls to the host.
* Add system call infrastructure for VMM mode operations in kern/sys_vmm.c which vectors through a structure to machine-specific implementations.
vmm_guest_ctl_args() vmm_guest_sync_addr_args()
vmm_guest_ctl_args() - bootstrap VMM and EPT modes. Copydown the original user stack for EPT (since EPT 'physical' addresses cannot reach that far into the backing store represented by the process's original VM space). Also installs the GUEST_CR3 for the guest using parameters supplied by the guest.
vmm_guest_sync_addr_args() - A host helper function that the vkernel can use to invalidate page tables on multiple real cpus. This is a lot more efficient than having the vkernel try to do it itself with IPI signals via cpusync*().
* Add Intel VMX support to the host infrastructure. Again, tons of work compressed down into a one paragraph commit message. Intel VMX support added. AMD SVM support is not part of this GSOC and not yet supported by DragonFly.
* Remove PG_* defines for PTE's and related mmu operations. Replace with a table lookup so the same pmap code can be used for normal page tables and also EPT tables.
* Also include X86_PG_V defines specific to normal page tables for a few situations outside the pmap code.
* Adjust DDB to disassemble SVM related (intel) instructions.
* Add infrastructure to exit1() to deal related structures.
* Optimize pfind() and pfindn() to remove the global token when looking up the current process's PID (Matt)
* Add support for EPT (double layer page tables). This primarily required adjusting the pmap code to use a table lookup to get the PG_* bits.
Add an indirect vector for copyin, copyout, and other user address space copy operations to support manual walks when EPT is in use.
A multitude of system calls which manually looked up user addresses via the vm_map now need a VMM layer call to translate EPT.
* Remove the MP lock from trapsignal() use cases in trap().
* (Matt) Add pthread_yield()s in most spin loops to help situations where the vkernel is running on more cpu's than the host has, and to help with scheduler edge cases on the host.
* (Matt) Add a pmap_fault_page_quick() infrastructure that vm_fault_page() uses to try to shortcut operations and avoid locks. Implement it for pc64. This function checks whether the page is already faulted in as requested by looking up the PTE. If not it returns NULL and the full blown vm_fault_page() code continues running.
* (Matt) Remove the MP lock from most the vkernel's trap() code
* (Matt) Use a shared spinlock when possible for certain critical paths related to the copyin/copyout path.
show more ...
|
Revision tags: v3.4.3, v3.4.2, v3.4.0, v3.4.1, v3.4.0rc, v3.5.0, v3.2.2, v3.2.1, v3.2.0, v3.3.0, v3.0.3, v3.0.2, v3.0.1, v3.1.0, v3.0.0 |
|
#
86d7f5d3 |
| 26-Nov-2011 |
John Marino <draco@marino.st> |
Initial import of binutils 2.22 on the new vendor branch
Future versions of binutils will also reside on this branch rather than continuing to create new binutils branches for each new version.
|
Revision tags: v2.12.0, v2.13.0, v2.10.1, v2.11.0, v2.10.0 |
|
#
2a418930 |
| 18-Dec-2010 |
Matthew Dillon <dillon@apollo.backplane.com> |
kernel - scheduler adjustments for large ncpus / 48-core monster
* Change the LWKT scheduler's token spinning algorithm. It used to DELAY a short period of time and then simply retry, creating a
kernel - scheduler adjustments for large ncpus / 48-core monster
* Change the LWKT scheduler's token spinning algorithm. It used to DELAY a short period of time and then simply retry, creating a lot of contention between cpus trying to acquire a token.
Now the LWKT scheduler uses a FIFO index mechanic to resequence the contending cpus into 1uS retry slots using essentially just atomic_fetchadd_int(), so it is very cache friendly. The spin-retry thus has a bounded cache management traffic load regardless of the number of cpus and contending cpus will not be tripping over each other.
The new algorithm slightly regresses 4-cpu operation (~5% under heavy contention) but significantly improves 48-cpu operation. It is also flexible enough for further work down the road. The old algorithm simply did not scale very well.
Add three sysctls:
sysctl lwkt.spin_method=1
0 Allow a user thread to be scheduled on a cpu while kernel threads are contended on a token, using the IPI mechanic to interrupt the user thread and reschedule on decontention.
This can potentially result in excessive IPI traffic.
1 Allow a user thread to be scheduled on a cpu while kernel threads are contended on a token, reschedule on the next clock tick (100 Hz typically). Decontention will NOT generate any IPI traffic. DEFAULT.
2 Do not allow a user thread to be scheduled on a cpu while kernel threads are contended. Should not be used normally, for debugging only.
sysctl lwkt.spin_delay=1
Slot time in microseconds, default 1uS. Recommended values are 1 or 2 but not longer.
sysctl lwkt.spin_loops=10
Number of times the LWKT scheduler loops on contended threads before giving up and allowing an idle-thread HLT. In order to wake up from the HLT decontention will cause an IPI so you do not want to set this value too small and. Values between 10 and 100 are recommended.
* Redo the token decontention algorithm. Use a new gd_reqflags flag, RQF_WAKEUP, coupled with RQF_AST_LWKT_RESCHED in the per-cpu globaldata structure to determine what cpus actually need to be IPId on token decontention (to wakeup their idle threads stuck in HLT).
This requires that all gd_reqflags operations use locked atomic instructions rather than non-locked instructions.
* Decontention IPIs are a last-gasp effort if the LWKT scheduler has spun too many times. Under normal conditions, even under heavy contention, actual IPIing should be minimal.
show more ...
|
Revision tags: v2.9.1, v2.8.2, v2.8.1, v2.8.0, v2.9.0, v2.6.3, v2.7.3, v2.6.2, v2.7.2, v2.7.1, v2.6.1, v2.7.0, v2.6.0, v2.5.1, v2.4.1, v2.5.0, v2.4.0 |
|
#
da673940 |
| 17-Aug-2009 |
Jordan Gordeev <jgordeev@dir.bg> |
Add platform vkernel64.
|