pass 2
[ikiwiki.git] / release52 / index.mdwn
1 # DragonFly BSD 5.2
2
3 * Version 5.2.0 released xx April 2018
4
5 ** Release 5.2 is not yet out.  This page is a work in progress.  Please do not link to it until the actual release. **
6
7 DragonFly version 5.2 brings etc etc etc  
8
9 The details of all commits between the 4.8 and 5.0 branches are available in the associated commit messages for [5.2.0rc]() and [5.2.0]().
10  
11 ## Big-ticket items
12
13 ### HAMMER2
14
15 ### ipfw Updates
16
17 * Implement state based "redirect", i.e. without using libalias.
18
19 ### Improved graphics support
20
21 * The drm/i915 kernel driver has been updated to support Intel Coffeelake GPUs
22
23 * Add 24-bit pixel format support to the EFI frame buffer code.
24
25 * Significantly improve fbio support for the "scfb" XOrg driver.  This allows EFI frame buffers to be used by X in situations where we do not otherwise support the GPU.
26
27 ### Other user-affecting changes
28
29
30 ## Details
31
32 ### Checksums
33
34
35 ### Upgrading
36
37 If you have an existing 5.0.x system and are running a generic kernel, the normal upgrade process, described below, will work.  
38
39 * Note that DSA OpenSSH keys were deprecated in the 4.6 to 4.8 release.  If you are upgrading from a release older than 4.8 and use DSA OpenSSH keys, please update your private/public key pair or risk locking yourself out.
40
41 Change your local /usr/src to 5.2:
42
43     cd /usr/src
44     git fetch origin
45     git branch DragonFly_RELEASE_5_2 origin/DragonFly_RELEASE_5_2
46     git checkout DragonFly_RELEASE_5_2
47     git pull
48
49 And then rebuild: (in /usr/src )
50
51     make buildworld
52     make buildkernel
53     make installkernel
54     make installworld
55     make upgrade
56
57 Don't forget to upgrade your existing packages.  5.2 packages have already been built and are immediately available.
58
59     pkg upgrade
60
61 ## All changes since DragonFly 5.0
62
63 ### Kernel
64
65 * The kernel-based if_ppp nic has been replaced with user ppp, i.e. ppp(8) and tun(4).  if_ppp has not been part of the base kernel config for a while.  It has now been removed.
66
67 * faith(4), also not part of the base kernel config for a while, has also been removed.  It has been determined that this IPV4<->IPV6 shim is no longer needed.
68
69 * tmpfs performance significantly improved when a large number of files are present.
70
71 * Fix a rare lockmgr() state transition, improving stability.
72
73 * Improve tsleep()/wakeup() queue collisions, significantly reducing spurious wakeup-related IPIs and improving performance.
74
75 * Fix GCC reordering issues with td_critcount that could lead to misordering and instability.
76
77 * Refuse to swapoff under certain conditions (presence of swapped tmpfs or vn pages), instead of panicing.
78
79 * cache-line separation for many things, reducing cache line collisions and improving performance on many-core systems.
80
81 * Essentially rewrite lockmgr(), significantly increasing shared lock performance and improving most other code paths.
82
83 * Refactor the buffer cache subsystem, removing B_MALLOC support entirely.  Also remove repurposebuf() (This was a shim prior to KVABIO support that is no longer needed).  Remove geteblk().
84
85 * Add KVABIO support to the buffer cache subsystem.  This allows buffer cache buffers to avoid smp_invltlb() calls on its buffer mappings when the related filesystems and storage devices in the chain also support KVABIO.  In particular, HAMMER2, the disk layer, and the NVME controller now support KVABIO.  tmpfs also supports KVABIO.
86
87 * Remove vm_hold_load_pages() and vm_hold_free_pages().  The only remaining use case was in CAM and we can change CAM to use getpbuf_mem() instead.
88
89 * Refactor SMP collisions statistics somewhat.
90
91 * Improve mountlist_scan() performance by using a shared token whenever possible.  Also fix a rare race, improving stability during periods of heavy mounting and unmounting (such as synth's use of tmpfs mounts).
92
93 * Refactor the pipe() code to significantly reduce IPIs and improve performance on many-cpu systems.  Performance is improved 75-100% (almost double in some cases).
94
95 * Increase the ncmount_cache array, improving the hit ratio to almost 100%.  We were hitting the slow path too often in synth runs.  The slow path is really horrible.
96
97 * Simplify umtx_sleep() and umtx_wakeup() support to improve pthreads performance and reduce bottlenecks.  Also rip-out vm_page_action() and vm_page_event() which this API used.  The vm_page_action/event code was pretty unfriendly to SMP.  Use a shared spinlock in places where it was exclusive before, significantly improving concurrent threaded umtx operations (pthreads again).
98
99 * Increase the pmap placemarks hash from 16 to 64 entries.  This improves concurrent fault performance a bit for heavily threaded programs.
100
101 * Refactor uidinfo.  Again improves SMP performance on many-cpus systems by removing a memory bottleneck.  Hits can now function locklessly.
102
103 * Partition large anonymous mmap()s, improving concurrent VM fault operation for threaded programs.  Note that the pmap itself is still a bottleneck.
104
105 * Add atomic_fcmpset_*() (suggested by mjg_), and use it all over the place to reduce unnecessary cache line ping-ponging during contended locking operations.
106
107 * Clean up ucred and plimit cache line locality, reducing unnecessary cache-line ping-ponging and improving performance.
108
109 * Refactor vm_page_busy() to add support for acquiring a soft-busy count without requiring ah ard-busy.  This allows us to 'lock' a vm_page in a shared manner via the soft-busy for situations where we only intend to read from it, aka sendfile() and vop_helper_read_shortcut().  Improves read() performance through filesystems.
110
111 * Add a D_QUICK device flag which allows certain static devices such as /dev/urandom, /dev/zero, and /dev/null to handle open() and close() in a more SMP-friendly manner.
112
113 * Improve SMP performance for devfs VOPs.  Ipmroves getattr(), read(), and readlink().  Mainly reduces contention during concurrent exec()s which almost always do the same bit of manipulation on specific devices, such as obtaining a random seed.
114
115 * Improve pmap hinting and performance.
116
117 * Refactor sysctl locking, significantly reducing SMP contention in heavily loaded environments.  Also allow certain sysctl()s to execute completely unlocked.
118
119 * Fix ACPI confusion that could arise due to ACPI_SEMAPHORES_MAX_PENDING being too small.  Redefine to a very large number.
120
121 * Adjust the proc structure a little so getppid() can run lockless.
122
123 * Implement exclusive priority for tokens under certain circumstances, improving performance when an exclusive token is needed on a heavily shared token.
124
125 * Add a second pageout daemon which only operates on anonymous pages.  This reduces low memory deadlocks that can arise due to the pageout daemon getting stuck on a filesystem-backed vm_page.
126
127 * Rewrite sendfile() to fix panics and corruption and to improve performance.  sendfile() now uses a UIO_NOCOPY/VMIO based VOP_READ() in the blind and loops to obtain file data instead of messing with individual pages.  We retain the synchronous VOP_READ() operation we had before because there isn't much point asynchronizing it for a web server which is already very heavily threaded.
128
129 * Fix a cluster_awrite() race, improving stability.
130
131 * Fix bugs in the namecache cleaning code and refactor the code.  This fixes a cpu live-lock situation that can arise when the namecache is dealing with a large number of hardlinked files.
132
133 * Fix boot and kernel issues when running with greater than 512GB of physical ram.  There were numerous scaling issues, including a bad DMAP initialization loop.  Tested to 1TB of ram.  DragonFly can now theoretically support up to 32TB of physical ram.
134
135 * Significantly increase the amount of KVA (Kernel Virtual Memory) appropriated in order to properly scale to larger amounts of physical ram.
136
137 * Improve magazine recycling performance in objcache by increasing MAGAZINE_CAPACITY_MAX.
138
139 * Fix an overflow in the vm.max_proc_mmap() calculation which could cause unexpected mmap() failures.
140
141 * Remove tons of debugging statistics that are no longer needed.  This also cleans up a ton of unnecessary cache-line ping-ponging that was occurring in the VFS subsystem.
142
143 * Fix bugs in vm_fault and vm_map related to concurrent faults in heavily threaded programs.  Also fix a bug in vm_fault_page().
144
145
146
147 ### Networking
148
149 * Limit the number of accepted sockets that kevent() reports.  This improves the performance for heavily optimized userland networking workloads.  Specifically, nginx.
150
151 * Remove the power-of-2 cpu threads limitation for netisrs.  Netisrs now run on all cpu threads, improving load balancing and performance.
152
153 * In if_vtnet, disable rx csum offload due to unuspported ipv6 rx csum offloading.
154
155 * In if_vtnet, clean up the IFCAP flags.
156
157 * Make non-prefix and directly reachable inet6 routes work properly.
158
159 * Properly zero out syncache_percpu, fixing a rare panic.
160
161
162
163 ### Other drivers
164
165 * Bring in vmx(4) (VMWare virtual network driver, aka vmxnet3)
166
167 * nvme driver now supports KVABIO for significantly higher performance and concurrency on many-core systems.
168
169 * Fix the capacity calculation in virtio_blk
170
171 * Upgrade arcmsr(4) to Areca's Revision 1.40.00.00, which adds support for ARC1203, ARC1216, ARC1226, and ARC1884.
172
173 * Fix mtime updates for deferred writes from shared R+W mmap()s.  This bug could cause make and other programs to get confused, often triggered by ld.gold's use of shared R+W mmap().
174
175
176
177 ### Userland
178
179 * Removed many 'r' commands and daemons.  rcp, rlogin, rlogind, rsh, and rshd have been removed.  People that still need them can get them from the net/bsdrcmds port.
180
181 * Remove mailaddr(7).
182
183 * Kernel configuration cleanup, numerous options that have been NOPs for a long time have been removed outright.
184
185 * NOTE!  Due to base compiler updates, upgrading to 5.1 and later versions now require at least a 4.4 (or later) system.
186
187 * Bring s_ceill() into libc from OpenBSD.
188
189 * Fix a few issues in libthread_xu that we believe were confusing certain heavily-threaded user applications, improving the stability of those applications.
190
191 * Refactor rtld locks as well as add an atfork() facility.  Refactor many libthread_xu modules (pthreads).  All this work improves the stability for fork/exec operations in heavily threaded environments (particularly chrome threads).
192
193 * Numerous pthreads fixes for chrome, thunderbird, and other heavily threaded programs.  Also use the new atfork() facility in our malloc implementation to fix deadlocks which could sometimes arise when heavily threaded programs fork().
194
195 * Fix locale support for cal(1).
196
197 * Fix symbol conflicts between libcrypt and LIBRECRYPTO (buildworld issues).
198
199 * Add static PAM modules support.
200
201 ### Various tools have been upgraded in the base system:
202
203 * cpdup has a few new features to make .cpignore files more useful.
204
205 * cpdup is now able to rmdir chflagged directories (it already handles this properly for regular files).
206
207 * cpdup now ignores the UF_ARCHIVE file flag when deciding whether to copy a file.
208
209 * ls command has been enhanced with new options -S and -D, see manual page.
210
211 * Enhance nologin to log nologin attempts to syslog.
212
213 * Fix set-faults on crypt(3) failures.
214
215 * OpenSSH upgraded to 7.6p1.
216
217 * Update the pciconf(8) database to the Oct 12 2017 snapshot from pciids.sourceforge.net.
218
219 * Fix vmstat formatting to deal with large numbers and not run numbers into each other any more.
220
221 * Zoneinfo synchronized to tzdata2017c.
222
223 * Remove inherited helpers left over from the initial FreeBSD fork 10+ years ago.  Also remove helpers for upgrading directly from pre-4.4, we no longer support upgrading directly from pre-4.4 (its basically impossible due to compiler differences).
224
225 * Really support a static toolchain.
226
227 * Jailbreak games from Dungeon Master.  Games are no longer group-shared, improving security.  Only allow users in the games group to write to the /var/games directory.
228
229 * Remove dm(8).
230
231 * Patch and cleanup a few games.  battlestar(6), hack(6), rogue(6).
232
233 * Move-out non-games from /usr/games.  Move strfile(8) and unstr(8) to /usr/bin.
234
235 * Move banner(6) into games/ where it belongs.  Bring in OpenBSD's banner(1).  Bring in OpenBSD's boggle(6), bring in OpenBSD's tetris(6).
236
237 * Add hostprog variant of tic and link against the wide version of ncurses.
238
239 * Update strfile() to big-endian and produce architecture-independent .dat files.
240
241 * Fix the ownership of several directories in /usr/share.
242
243 * Add a few more fortunes to fortune(6).
244
245 ### Hammer1 Changes
246
247 * Numerous cleanups.
248
249 ### Hammer2 Changes
250
251 * Many, many bug fixes, improving stability.
252
253 * Numerous performance fixes, including KVABIO support which improves performance on many-core systems.
254
255 * Add support for hammer2 cleaning in the periodic cron, enabled by default.
256
257 * Work around a bug in LZ4_compress_limitedOutput(), the code could sometimes overrun the supplied buffer.
258
259 * Add hammer2 utilities to initrd for hammer2 crypto bootstrapping and rescue.
260
261 ### Clang status
262
263
264 ### Package updates
265
266 * We can now build over 29000 packages.
267
268 * Note that firefox does not currently build due to the rust language being out of date.  We are working on that and also working on getting a more recent version of chrome into the tree.
269
270 ### 64-bit status
271
272 * Note that DragonFly is a 64-bit-only operating system as of 4.6, and will not run on 32-bit hardware.
273
274