pass 4
[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 ### Meltdown and Spectre mitigation support
14
15 * Meltdown isolation and spectre mitigation support added.  Meltdown mitigation is automatically enabled for all Intel cpus.  Spectre mitigation must be enabled manually via sysctl if desired.
16
17 * machdep.spectre_mitigation
18
19 * machdep.meltdown_mitigation
20
21 ### HAMMER2
22
23 * H2 has received a very large number of bug fixes and performance improvements.  We can now recommend H2 as the default root filesystem in non-clustered mode.  
24
25 * Clustered support is not yet available.
26
27 ### ipfw Updates
28
29 * Implement state based "redirect", i.e. without using libalias.
30
31 * ipfw now supports all possible ICMP types.
32
33 * Fix ICMP_MAXTYPE assumptions (now 40 as of this release).
34
35 ### Improved graphics support
36
37 * The drm/i915 kernel driver has been updated to support Intel Coffeelake GPUs
38
39 * Add 24-bit pixel format support to the EFI frame buffer code.
40
41 * 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.
42
43 * Partly implement the FBIO_BLANK ioctl for display powersaving.
44
45 ### Other user-affecting changes
46
47
48 ## Details
49
50 ### Checksums
51
52
53 ### Upgrading
54
55 If you have an existing 5.0.x system and are running a generic kernel, the normal upgrade process, described below, will work.  
56
57 * 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.
58
59 Change your local /usr/src to 5.2:
60
61     cd /usr/src
62     git fetch origin
63     git branch DragonFly_RELEASE_5_2 origin/DragonFly_RELEASE_5_2
64     git checkout DragonFly_RELEASE_5_2
65     git pull
66
67 And then rebuild: (in /usr/src )
68
69     make buildworld
70     make buildkernel
71     make installkernel
72     make installworld
73     make upgrade
74
75 Don't forget to upgrade your existing packages.  5.2 packages have already been built and are immediately available.
76
77     pkg upgrade
78
79 ## All changes since DragonFly 5.0
80
81 ### Kernel
82
83 * 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.
84
85 * 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.
86
87 * tmpfs performance significantly improved when a large number of files are present.
88
89 * Fix a rare lockmgr() state transition, improving stability.
90
91 * Improve tsleep()/wakeup() queue collisions, significantly reducing spurious wakeup-related IPIs and improving performance.
92
93 * Fix GCC reordering issues with td_critcount that could lead to misordering and instability.
94
95 * Refuse to swapoff under certain conditions (presence of swapped tmpfs or vn pages), instead of panicing.
96
97 * cache-line separation for many things, reducing cache line collisions and improving performance on many-core systems.
98
99 * Essentially rewrite lockmgr(), significantly increasing shared lock performance and improving most other code paths.
100
101 * 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().
102
103 * 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.
104
105 * 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.
106
107 * Refactor SMP collisions statistics somewhat.
108
109 * 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).
110
111 * 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).
112
113 * 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.
114
115 * 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).
116
117 * Increase the pmap placemarks hash from 16 to 64 entries.  This improves concurrent fault performance a bit for heavily threaded programs.
118
119 * Refactor uidinfo.  Again improves SMP performance on many-cpus systems by removing a memory bottleneck.  Hits can now function locklessly.
120
121 * Partition large anonymous mmap()s, improving concurrent VM fault operation for threaded programs.  Note that the pmap itself is still a bottleneck.
122
123 * Add atomic_fcmpset_*() (suggested by mjg_), and use it all over the place to reduce unnecessary cache line ping-ponging during contended locking operations.
124
125 * Clean up ucred and plimit cache line locality, reducing unnecessary cache-line ping-ponging and improving performance.
126
127 * 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.
128
129 * 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.
130
131 * 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.
132
133 * Improve pmap hinting and performance.
134
135 * Refactor sysctl locking, significantly reducing SMP contention in heavily loaded environments.  Also allow certain sysctl()s to execute completely unlocked.
136
137 * Fix ACPI confusion that could arise due to ACPI_SEMAPHORES_MAX_PENDING being too small.  Redefine to a very large number.
138
139 * Adjust the proc structure a little so getppid() can run lockless.
140
141 * Implement exclusive priority for tokens under certain circumstances, improving performance when an exclusive token is needed on a heavily shared token.
142
143 * 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.
144
145 * 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.
146
147 * Fix a cluster_awrite() race, improving stability.
148
149 * 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.
150
151 * 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 64TB of physical ram.
152
153 * Expand all page-count fields to 64 bits.  32-bit page-count fields limit us to 8TB of physical ram.  Expand to allow up to the DMAP limit of 64TB.
154
155 * Fix a 32-bit overflow in the pv_entry init code related to systems with large amounts of physical memory.
156
157 * Significantly increase the amount of KVA (Kernel Virtual Memory) appropriated in order to properly scale to larger amounts of physical ram.
158
159 * Improve magazine recycling performance in objcache by increasing MAGAZINE_CAPACITY_MAX.
160
161 * Fix an overflow in the vm.max_proc_mmap() calculation which could cause unexpected mmap() failures.
162
163 * 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.
164
165 * Fix bugs in vm_fault and vm_map related to concurrent faults in heavily threaded programs.  Also fix a bug in vm_fault_page().
166
167 * Attempt to fix a CAM unit numbering race that could result in two devices being assigned the same unit number.
168
169 * Increase the syscons history buffer from 4 screens to 10 screens worth.
170
171 * Adjust nbuf, maxvnodes, and max_softdeps counts to accomodate systems with a lot of physical memory.  Cap some of the fields to avoid wiring too much physical memory in our default configuration, as large-memory configurations are most typically intended to be used by userland, not kernel caching.
172
173 * Change several sysctls from 32-bits to 64-bits (e.g. hw.usermem, etc, which were in units of pages).  Implement a backwards compatibility feature for applications which still use 32-bit ints.
174
175 * Fix a crash which can occur when a cdev is destroyed.
176
177 * Fix an arbitrary maximum file size limitation in tmpfs.
178
179 * EFI code refactored to use TianoCore EDK II headers.
180
181 * Misc i386 cruft removed.
182
183 * Refactor and clean up a large chunk of the nata driver so it can be modularized.
184
185 * Increase the microcode size limit from 32KB to 4MB so we can support newer microcodes.
186
187 * Handle ig4 startup errors for situations where the BIOS makes it inaccessible.  Also implement driver priortization for ig4 and gpio_intel to manage probe order because we don't handle ACPI _DEP methods properly.
188
189 * lock xhci during attach to avoid spurious interrupts from executing too early.
190
191 * Add Kabylake support to corepower.ko
192
193 * Fix kernel minidumps.  These were broken when we extended physical memory support to multiple DMAP pages.  The minidump now dumps the PDP array for the entire system VA space.  Minidumps will actually be a bit smaller on systems with lots of memory due to the page-table optimizations made in the dump format.
194
195 * Significantly reduce kernel boot times due to various timer calibration functions.
196
197 * Fix CAM peripheral error handling, primarily for AHCI.  This fixes instabilities which could develop when a storage device throws lots of errors, ultimately resulting in a kernel panic.
198
199 * Fix a dataloss issue that can occur with tmpfs vnodes when the kernel devices to recycle the vnodes.
200
201 * Remove kprintf %r, %b, %y support, as well as from libstand.
202
203 ### Networking
204
205 * Limit the number of accepted sockets that kevent() reports.  This improves the performance for heavily optimized userland networking workloads.  Specifically, nginx.
206
207 * Remove the power-of-2 cpu threads limitation for netisrs.  Netisrs now run on all cpu threads, improving load balancing and performance.
208
209 * In if_vtnet, disable rx csum offload due to unuspported ipv6 rx csum offloading.
210
211 * In if_vtnet, clean up the IFCAP flags.
212
213 * Make non-prefix and directly reachable inet6 routes work properly.
214
215 * Properly zero out syncache_percpu, fixing a rare panic.
216
217 * Synchronize ix to Intel's ix-3.2.17.
218
219 * Synchronize igb with Intel's igb-2.5.3.
220
221 * Synchronize em/emx to Intel's em-7.6.2.
222
223 * Change how the TCP local ephermal port is selected to reduce the chance of connection forwarding between cpus.  This change significantly reduces the IPI rate for connection establishment.
224
225 * Increase max stage packet count to 16.  This increases the IP forwarding rate in tests by 200Kpps to 300Kpps.  Normal forwarding achieves 11.3Mpps while fastforwarding achieves 14.2Mpps.  Values higher than 16 do not improve the rate further.
226
227 * Set ip_porthash_trycount based on the number of netisrs.  This reduces connect IPIs on many-cores machines and improves the connection rate a bit in tests.
228
229 * Use a fast close if SO_LINGER and linger == 0.  This is widely used to reset a TCP connection by userland applications.
230
231 ### Other drivers
232
233 * Bring in vmx(4) (VMWare virtual network driver, aka vmxnet3)
234
235 * nvme driver now supports KVABIO for significantly higher performance and concurrency on many-core systems.
236
237 * Fix the capacity calculation in virtio_blk
238
239 * Upgrade arcmsr(4) to Areca's Revision 1.40.00.00, which adds support for ARC1203, ARC1216, ARC1226, and ARC1884.
240
241 * 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().
242
243 * Fix a vclean() assertion due to a short-cut taken by TMPFS.
244
245 * Improve compatibility for kqueue(2)'s EVFILT_FS support.
246
247 * Bring in autofs.
248
249 * Restore floppy driver functionality.  Floppies work again!  REJOICE!
250
251 * Bring in evdev from FreeBSD (a generic input event interface).  Add evdev support to kbdmux, ukbd, and ums.
252
253 ### Userland
254
255 * 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.
256
257 * Remove mailaddr(7).
258
259 * Kernel configuration cleanup, numerous options that have been NOPs for a long time have been removed outright.
260
261 * NOTE!  Due to base compiler updates, upgrading to 5.1 and later versions now require at least a 4.4 (or later) system.
262
263 * Bring s_ceill() into libc from OpenBSD.
264
265 * Fix a few issues in libthread_xu that we believe were confusing certain heavily-threaded user applications, improving the stability of those applications.
266
267 * 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).
268
269 * 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().
270
271 * Fix locale support for cal(1).
272
273 * Fix symbol conflicts between libcrypt and LIBRECRYPTO (buildworld issues).
274
275 * Add static PAM modules support.
276
277 * 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).
278
279 * Really support a static toolchain.
280
281 * 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.
282
283 * Remove dm(8).
284
285 * Patch and cleanup a few games.  battlestar(6), hack(6), rogue(6).
286
287 * Move-out non-games from /usr/games.  Move strfile(8) and unstr(8) to /usr/bin.
288
289 * 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).
290
291 * Add hostprog variant of tic and link against the wide version of ncurses.
292
293 * Update strfile() to big-endian and produce architecture-independent .dat files.
294
295 * Fix the ownership of several directories in /usr/share.
296
297 * Add a few more fortunes to fortune(6).
298
299 * Use O_CLOEXEC in many more places to reduce descriptor leakages when heavily threaded programs fork().
300
301 * Fix seg-faults in top(1) on many-core systems.
302
303 * Preemptive censor certain unnamed quotes in fortune because honestly we're a laid back BSD and don't want to deal with the flying crap.
304
305 * Add a helper script, efisetup(8), which will set up a blank storage device with appropriate gpt partitions for EFI and a DFly disklabel in s1.
306
307 * Add cfmakesane() to libc/termios.
308
309 * Add support for sha512 to md5(1).
310
311 * Handle size_t overflows in posix_memalign() and malloc().
312
313 * Add decoding functionality to morse(6).  You can use -r to supply a sequence of dots and dashes and morse(6) will decode it.
314
315 * Improve application compatibility by relaxing the return code on fflush() when used on a read-only stream.  Return success for this case.  Needed to support the c++ runtime library.  Taken from FreeBSD.
316
317 * Many manual page cleanups.
318
319 * Misc libc/locale cleanups and a few adjustments.
320
321 * libc/nls synchronized with FreeBSD (Jan 4 2018, roughly).
322
323 * Fix an old bug in newsyslog related to log file retention.  One extra file was being retained.
324
325 ### Various tools have been upgraded in the base system:
326
327 * cpdup has a few new features to make .cpignore files more useful.
328
329 * cpdup is now able to rmdir chflagged directories (it already handles this properly for regular files).
330
331 * cpdup now ignores the UF_ARCHIVE file flag when deciding whether to copy a file.
332
333 * ls command has been enhanced with new options -S and -D, see manual page.
334
335 * Enhance nologin to log nologin attempts to syslog.
336
337 * Fix set-faults on crypt(3) failures.
338
339 * OpenSSH upgraded to 7.6p1.
340
341 * Update the pciconf(8) database to the Dec 20 2017 snapshot.
342
343 * Fix vmstat formatting to deal with large numbers and not run numbers into each other any more.
344
345 * Zoneinfo synchronized to tzdata2018c.
346
347 * Minor fixes to pr(1).
348
349 * newlocale(3) add compat support for c++ runtime libs.  Add support for native complex locale.
350
351 * Amd10h support added to cpucontrol.  Allows AMD microcodes to be installed from their packed format, instead of having to unpack them first (from FreeBSD).
352
353 * lvm(8) Add line editing support via libedit.
354
355 * Add a new modifier 'R' to newsyslog, alternative to sending a signal to the process.  Also, -n now implies -r.  mtime is updated after archiving.  Fix a few incorrect messages.  Fix interval-based rotations when the -t flag is used.  And a fix for NFS.  And many other adjustments. Mostly from FreeBSD.
356
357 * fish(6) no longer allows users to request cards they have made books for.
358
359 ### Hammer1 Changes
360
361 * Numerous cleanups.
362
363 ### Hammer2 Changes
364
365 * Many, many bug fixes, improving stability.
366
367 * Numerous performance fixes, including KVABIO support which improves performance on many-core systems.
368
369 * Add support for hammer2 cleaning in the periodic cron, enabled by default.
370
371 * Work around a bug in LZ4_compress_limitedOutput(), the code could sometimes overrun the supplied buffer.
372
373 * Add hammer2 utilities to initrd for hammer2 crypto bootstrapping and rescue.
374
375 ### Compiler status
376
377 * A port of gcc-80 is in-progress but not yet ready.
378
379 * Clang currently available via a dport, but there may still be issues trying to compile the world or kernel with it.
380
381 ### Package updates
382
383 * We can now build over 29000 packages.
384
385 * 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.
386
387 ### 64-bit status
388
389 * Note that DragonFly is a 64-bit-only operating system as of 4.6, and will not run on 32-bit hardware.
390
391