(no commit message)
[ikiwiki.git] / nextrelease / index.mdwn
1 # DragonFly BSD 4.6
2
3 * Version 4.6.0 released xx July 2016
4
5 DragonFly version 4.6 brings more updates to accelerated video for both i915 and radeon users, 
6
7 The details of all commits between the 4.4 and 4.6 branches are available in the associated commit messages for [4.6RC](http://lists.dragonflybsd.org/pipermail/commits/2016-July/582905.html),
8 [4.6RC2](http://lists.dragonflybsd.org/pipermail/commits/2016-July/582968.html), and [4.6.0]().
9  
10 ## Big-ticket items
11
12 ### Improved graphics support
13
14 The i915 driver has been updated to match the version found with the Linux 4.4 kernel.  This gives us significantly better stability on newer cpus, Broadwell and Skylake in particular.
15
16 We highly recommend that users use chrome (the "chromium" package).
17
18 ### NVMe support
19
20 We now have a NVMe driver (PCIe SSDs).  It currently must be kldloaded (nvme_load="YES" in /boot/loader.conf will do the trick).  The driver uses all concurrency features offered by the chip and will distribute queues and interrupts across multiple CPUs to maximize performance.  It has been tested up to around 1.05M IOPS @4K, and roughly 6.5 GBytes/sec @32K (random read from urandom-filled partition, physio, many threads), with the 2xE5-2620v4 (xeon) test server 78% idle in the IOPS test and 72% idle on the bandwidth test.  In otherwords, we maxed out the three NVMe devices we had plugged in and the system still had plenty of suds left over.
21
22 Please note that a machine's ability to boot from an NVMe device depends on the BIOS, and not DragonFly.  Most BIOSes cannot boot from NVMe devices and those that can probably only do it through UEFI.
23
24 ### SMP Performance Significantly Improved
25
26 SMP performance was already very good.  As part of the NVMe driver work we revamped the buffer cache subsystem and a number of other I/O related paths, further reducing lock contention and IPI signalling overheads.
27
28 The network subsystem also continues to receive significant improvement, with modest machine configurations now capable of handling upwards of 580K conns/sec.
29
30 ### Expansion of Supported Packages
31
32 DragonFly now supports over 24000 packages via its dports mechanism.  This year a great deal of work went into improving library compatibility and improving the quality of the ports and the dependability of the bulk build system that backs them.  Normal users can now do customized bulk builds of their own ports packages through a simplified build interface called "synth", which is itself available via the dports system (if desired, and you have sufficient machine resources and time).
33
34 ### Preliminary EFI Support
35
36 DragonFly now supports (64-bit) EFI booting, but it has not been integrated into the installer.
37
38 ## Changes since DragonFly 4.4
39
40 ### Kernel
41
42 * Fix a namecache race (triggered by heavy tmpfs mount/umount rate)
43 * Fix two unmount / access races when many mounts are present
44 * Improve context switch hotpath
45 * Cut pmap invalidations from buffer cache activity in half
46 * Reduce certain potential interrupt stacking issues
47 * Implement a new fixed memory pool for physio accesses, eliminating all SMP invalidations from the path
48 * Refactor pmap invalidations to operate at a higher priority than critical sections, reduce response latency and greatly reducing multi-core stalls during heavy invalidation activity
49 * Fix a 2-instruction SMP race during thread exit.
50 * Add buffer cache repurposing to reduce TLB invalidations in high-I/O-thru-filesystem situations.  Defaults to off (sysctl vfs.repurpose_enable).
51 * Revamp the IPIQ (IPI messaging) mechanics to avoid deadlocks during heavy activity.
52 * Revamp the IPI interrupt signalling mechanics to reduce unnecessary duplicate IPIs.
53 * We no longer use the vm_map subsystem to dynamically allocate and deallocate KVM for the buffer-cache.  Instead we pre-reserve the maximum amount of (unmapped) KVM for every buffer.  This makes certain congestion-control algorithms for the buffer cache unnecessary and they have been removed.
54 * Add a SMP %rip sniffer IPI, very useful for debugging.
55 * Fix an issue where the reported real-time becomes inconsistent between cpu threads under heavy loads.  This issue generally resulted in 'make' getting confused.
56 * Refactor the VM prefaulting code to improve pipe-lining.  This improves burst page-in performance when starting large applications such as chrome.
57 * A lot of work to reduce noticable (but short) stalls in various subsystems when they have to work on large data-sets.  For example such as when a process with 64GB of RSS exits.
58 * Fix zfree()'s hysteresis, greatly reducing unnecessary IPIs.
59 * Reduce stalls during major token contention.  It used to be that a large multi-threaded program contending on a single lock across all cpus could create noticable stalls even if the program was running niced or at a high (aka low) dynamic priority.  These situations have been fixed.
60 * New threads should not inherit the sigalstack.  Fixes issues with 'go'.
61 * Fix MSI support issues.
62 * Improve buffer flush and cluster_write linearity.
63 * Allow drivers to register interrupts which are specifically meant to be high-frequency (disable the rate limiter for such interrupts).
64 * Bring in ipfw3 plus implement a lockless in-kernel NAT for ipfw3 (note that PF's NAT is also mostly lockless).
65 * Various procfs workarounds added to fix truss issues.
66 * Implement PIE (place independent executables).  Randomization be enabled with a sysctl kern.elf64.pie_base_mmap.
67 * Implement ppoll() with precise microsecond timeout.
68 * Fix VM issues with virtio.
69 * Add EVFILT_FS support to kqueue.
70 * Cut-down on the amount of BSS in the kernel binary.  We ran over the loader's 64MB limit (with the initrd image and a few kld's also loaded), AGAIN!
71 * Implement I2cSerialBus ACPI module support (used by IG4).
72 * Implement ACPI's GPIO.
73 * Work around HW VM bugs by aligning the kernel load's end address to 2MB, so there is no transition from 4K pages to 2MB pages for kernel text+data+bss.
74 * Many, many HAMMER improvements.
75 * Do not allow the kqueue sleep timer to wrap.
76 * User process scheduler adjustments to improve interactive responsiveness in situations where (essentially) batch jobs are syscall-heavy or VM fault-heavy.
77 * Fixed vfork()/getpid() bug in heavily threaded programs.
78
79 ### Graphics
80
81 * The drm/i915 driver now matches Linux kernel 4.4, supporting Intel GPUs up to the Skylake and Cherryview generations
82 * The drm/radeon driver mostly matches Linux 3.18 with specific fixes from Linux 3.19
83 * UEFI framebuffer support
84
85 ### Networking
86
87 * Fix an issue with IWMs packet tx.
88 * Bring in expanded ipfw from FreeBSD (called ipfw3 in DFly)
89 * Complete WIFI sync from FreeBSD.  This gives us the new single-ifconfig mechanic that fixes all the locking issues that existed with the dual-ifconfig mechanic and allowed us to synchronize all FreeBSD wlan drivers.  DragonFly and FreeBSD developers are thus able to combine efforts on bug fixes and new work.
90 * IWM, IWN, ATH, usb-based, and other wifi drivers now have better support.
91 * Reduce network maintenance IPI spamming (e.g. ipfrag_slowtimo()).  These now only signal the cpus that actually need it.
92 * hyperv/vmbus support added (FBsd)
93 * AUTOFS added (ported from FBsd), AM-UTILS removed.
94 * Improve NFS handling of ESTALE.
95 * Fix two inet6 issues.
96 * Do not prematurely drop receiving-only TCP connections when mbufs are not available.
97 * Make setsockopt() asynchronous for commonly used options.  This significantly improves the connection rate.
98 * Fix kernel panic when /dev/mapper/control is read or written (it isn't supposed to be readable or writable).
99 * Improved power management for AHCI.
100 * Improve DDB by making x/a work like in gdb.  Add x/p.
101 * Implement per-cpu lport cache for listen sockets.  Greatly reduces listen/accept contention on a busy TCP server.
102 * Move libedit and libncurses to /lib/priv to ensure that packages do not try to use them.  They should only be used by base utilities.
103 * Remove all references to libtermcap from ncurses.
104 * The nrelease build can now build snapshots on tmpfs.
105 * Rework the GCC Makefiles to reduce unnecessary re-building for incremental builds (quickworld).
106 * Add kqueue support to NFS (fixes firefox issues w/NFS that cause firefox to corrupt itself).
107 * Add EV_RECEIPT and EV_DISPATCH support to kqueue.
108 * Add quirks for xhci (USB).
109 * Significant work on IGB, IG, EMX, and many other NIC drivers.
110
111 ### Other drivers
112
113 * NVMe (PCIe SSD) driver added.  This is a home-grown driver written from the ground-up for maximum SMP performance.
114 * Syscons got some rework to work better with GPU framebuffers.
115
116 ### Userland
117
118 * Revamp systat -vm display.  MSI/MSI-x interrupts are aggregated a little, memory use reformulated, more page rates are shown in bytes (K,M,G, etc) instead of pages.
119 * Revamp systat -pv display on wide terminals (add %rip sampling)
120 * Fix mountd-caused system performance issue in mount-heavy systems
121 * TRIM support refactored for newfs_hammer.
122 * Align output from cat(1) when invoked with -be and -ne flags (from NetBSD)
123 * Remove non-standard <varargs.h> and <malloc.h> headers from the system.
124 * Turn SO_REUSEADDR on for mountd.  Fixes startup errors when mountd is restarted or initially fails due to /etc/exports issues, and then restarted a little later.
125 * Numerous wide-char improvements.
126 * pathchk - sync w/FBsd
127 * Port fstyp from FBsd
128 * Add -E option to showmount
129 * Add -o retrycnt= option to mount_nfs.
130 * Add -i and -q to sysctl (from FBsd)
131 * Add -x to chown/chgrp and sync with FBsd
132 * Sync chflags with FBsd
133 * Sync chmod with FBsd
134 * Sync ctags with FBsd
135 * Sync cpucontrol with FBsd
136 * Sync kenv with FBsd
137 * Sync stat(1) with FBsd
138 * Sync ncal(1) with FBsd
139 * Fix an issue with malloc() improperly setting errno.
140 * Fix fscanf() format in atrun when reading the uid and gid from the job file.
141 * Misc fixes to zic.
142 * Add unzip(1) (if you can't beat 'em, join 'em).
143 * libc - improve realloc() performance.
144 * libc - Fix numerous open/dup/pipe descriptor leaks due to threaded races by using O_CLOEXEC in appropriate places.  In particular, fixed bugs in popen().
145
146 ### Various tools have been upgraded in the base system:
147
148 * Installer changes the inode/data space mix for the UFS /boot.  We don't need 128K inodes on a 1GB /boot!
149 * Installer no longer uses HAMMER PFSs, it causes too much confusion.  Instead it separates out stuff that would normally not need to be backed up into /build and uses null-mounts.
150 * Fix a couple of logic issues in (gcc, mpfr, tre).  gcc and mpfr fixes pushed to upstream.
151 * Import OpenSSL 1.0.1t
152
153 ### Removed from the base system:
154
155 * 32-bit support has been removed.  DragonFlyBSD is now a 64-only distribution.
156
157 ### HAMMER improvements
158
159 * Many bug fixes and improvements by Tomohiro Kusumi
160 * Fix an improper DATA CRC error that can occur sometimes when a block of data read just after being written.
161
162
163 ### Other improvements
164
165 * 24000+ dports packages now build.
166 * User utility "synth" to automate bulk building.
167 * Many manual page improvements.
168
169 ### Hammer2 Status
170
171 HAMMER2 is still in-progress and will continue to be for some time.  It is not ready for prime-time, but significant work has been done on its internals to improve backing-device separation, improve stability, and increase throughput in SMP environments.
172
173 ### Clang Status
174
175 Status has not changed since 4.4.  Clang is supported as a package.
176
177 ### A Note on the Removal of 32-bit Supported
178
179 DragonFlyBSD is now a 64-bit only distribution.  It will no longer compile for a 32-bit target and most of the 32-bit support code has been removed.  Some users have noted that this might be  little premature, but the reality is that developers not only of DragonFlyBSD, but of other operating systems and more importantly of applications have begun to quickly shift over as well.  From a kernel development perspective:
180
181 * Several kernel subsystems now need to be able to assume a larger kernel virtual memory address space than is possible in 32-bit mode, allowing the implementation of significantly more efficient algorithms.  The older code paths were conditionalized for 32-bit, but were becoming stale due to lack of eyeballs.
182
183 * The 32-bit pmap code was becoming difficult to maintain for multiple reasons.
184
185 * We need to be able to assume that a DMAP exists because non-DMAP code paths were no longer being tested or maintained.  And certain algorithms just don't work without a DMAP.  The 32-bit kernel didn't have enough address space for a DMAP.
186
187 * We need to be able to assume a minimum SSE2 level for FP support moving forwards.  Compilers are starting to assume this regardless.
188
189 * There's virtually no point running a 32-bit server OR workstation any more.  While some BSDs strive to maintain support for old (or ancient) hardware, the DragonFlyBSD team just doesn't have the man-power to do that.  We are able to keep DFly relevant because we are able to focus on supporting contemporary hardware.  That said, we do not expect to remove support for 'older' 64-bit hardware for many years as the 64-bit baseline is quite decent.