pass 3
[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 * Partly implement the FBIO_BLANK ioctl for display powersaving.
28
29 ### Other user-affecting changes
30
31
32 ## Details
33
34 ### Checksums
35
36
37 ### Upgrading
38
39 If you have an existing 5.0.x system and are running a generic kernel, the normal upgrade process, described below, will work.  
40
41 * 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.
42
43 Change your local /usr/src to 5.2:
44
45     cd /usr/src
46     git fetch origin
47     git branch DragonFly_RELEASE_5_2 origin/DragonFly_RELEASE_5_2
48     git checkout DragonFly_RELEASE_5_2
49     git pull
50
51 And then rebuild: (in /usr/src )
52
53     make buildworld
54     make buildkernel
55     make installkernel
56     make installworld
57     make upgrade
58
59 Don't forget to upgrade your existing packages.  5.2 packages have already been built and are immediately available.
60
61     pkg upgrade
62
63 ## All changes since DragonFly 5.0
64
65 ### Kernel
66
67 * 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.
68
69 * 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.
70
71 * tmpfs performance significantly improved when a large number of files are present.
72
73 * Fix a rare lockmgr() state transition, improving stability.
74
75 * Improve tsleep()/wakeup() queue collisions, significantly reducing spurious wakeup-related IPIs and improving performance.
76
77 * Fix GCC reordering issues with td_critcount that could lead to misordering and instability.
78
79 * Refuse to swapoff under certain conditions (presence of swapped tmpfs or vn pages), instead of panicing.
80
81 * cache-line separation for many things, reducing cache line collisions and improving performance on many-core systems.
82
83 * Essentially rewrite lockmgr(), significantly increasing shared lock performance and improving most other code paths.
84
85 * 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().
86
87 * 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.
88
89 * 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.
90
91 * Refactor SMP collisions statistics somewhat.
92
93 * 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).
94
95 * 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).
96
97 * 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.
98
99 * 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).
100
101 * Increase the pmap placemarks hash from 16 to 64 entries.  This improves concurrent fault performance a bit for heavily threaded programs.
102
103 * Refactor uidinfo.  Again improves SMP performance on many-cpus systems by removing a memory bottleneck.  Hits can now function locklessly.
104
105 * Partition large anonymous mmap()s, improving concurrent VM fault operation for threaded programs.  Note that the pmap itself is still a bottleneck.
106
107 * Add atomic_fcmpset_*() (suggested by mjg_), and use it all over the place to reduce unnecessary cache line ping-ponging during contended locking operations.
108
109 * Clean up ucred and plimit cache line locality, reducing unnecessary cache-line ping-ponging and improving performance.
110
111 * 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.
112
113 * 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.
114
115 * 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.
116
117 * Improve pmap hinting and performance.
118
119 * Refactor sysctl locking, significantly reducing SMP contention in heavily loaded environments.  Also allow certain sysctl()s to execute completely unlocked.
120
121 * Fix ACPI confusion that could arise due to ACPI_SEMAPHORES_MAX_PENDING being too small.  Redefine to a very large number.
122
123 * Adjust the proc structure a little so getppid() can run lockless.
124
125 * Implement exclusive priority for tokens under certain circumstances, improving performance when an exclusive token is needed on a heavily shared token.
126
127 * 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.
128
129 * 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.
130
131 * Fix a cluster_awrite() race, improving stability.
132
133 * 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.
134
135 * 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.
136
137 * 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.
138
139 * Fix a 32-bit overflow in the pv_entry init code related to systems with large amounts of physical memory.
140
141 * Significantly increase the amount of KVA (Kernel Virtual Memory) appropriated in order to properly scale to larger amounts of physical ram.
142
143 * Improve magazine recycling performance in objcache by increasing MAGAZINE_CAPACITY_MAX.
144
145 * Fix an overflow in the vm.max_proc_mmap() calculation which could cause unexpected mmap() failures.
146
147 * 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.
148
149 * Fix bugs in vm_fault and vm_map related to concurrent faults in heavily threaded programs.  Also fix a bug in vm_fault_page().
150
151 * Attempt to fix a CAM unit numbering race that could result in two devices being assigned the same unit number.
152
153 * Increase the syscons history buffer from 4 screens to 10 screens worth.
154
155 * 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.
156
157 * 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.
158
159 * Fix a crash which can occur when a cdev is destroyed.
160
161 ### Networking
162
163 * Limit the number of accepted sockets that kevent() reports.  This improves the performance for heavily optimized userland networking workloads.  Specifically, nginx.
164
165 * Remove the power-of-2 cpu threads limitation for netisrs.  Netisrs now run on all cpu threads, improving load balancing and performance.
166
167 * In if_vtnet, disable rx csum offload due to unuspported ipv6 rx csum offloading.
168
169 * In if_vtnet, clean up the IFCAP flags.
170
171 * Make non-prefix and directly reachable inet6 routes work properly.
172
173 * Properly zero out syncache_percpu, fixing a rare panic.
174
175 * Synchronize ix to Intel's ix-3.2.17.
176
177 ### Other drivers
178
179 * Bring in vmx(4) (VMWare virtual network driver, aka vmxnet3)
180
181 * nvme driver now supports KVABIO for significantly higher performance and concurrency on many-core systems.
182
183 * Fix the capacity calculation in virtio_blk
184
185 * Upgrade arcmsr(4) to Areca's Revision 1.40.00.00, which adds support for ARC1203, ARC1216, ARC1226, and ARC1884.
186
187 * 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().
188
189 * Fix a vclean() assertion due to a short-cut taken by TMPFS.
190
191 * Improve compatibility for kqueue(2)'s EVFILT_FS support.
192
193 * Bring in autofs.
194
195 * Restore floppy driver functionality.  Floppies work again!  REJOICE!
196
197 * Bring in evdev from FreeBSD (a generic input event interface).  Add evdev support to kbdmux, ukbd, and ums.
198
199 ### Userland
200
201 * 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.
202
203 * Remove mailaddr(7).
204
205 * Kernel configuration cleanup, numerous options that have been NOPs for a long time have been removed outright.
206
207 * NOTE!  Due to base compiler updates, upgrading to 5.1 and later versions now require at least a 4.4 (or later) system.
208
209 * Bring s_ceill() into libc from OpenBSD.
210
211 * Fix a few issues in libthread_xu that we believe were confusing certain heavily-threaded user applications, improving the stability of those applications.
212
213 * 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).
214
215 * 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().
216
217 * Fix locale support for cal(1).
218
219 * Fix symbol conflicts between libcrypt and LIBRECRYPTO (buildworld issues).
220
221 * Add static PAM modules support.
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 * Use O_CLOEXEC in many more places to reduce descriptor leakages when heavily threaded programs fork().
246
247 * Fix seg-faults in top(1) on many-core systems.
248
249 * 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.
250
251 * 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.
252
253 ### Various tools have been upgraded in the base system:
254
255 * cpdup has a few new features to make .cpignore files more useful.
256
257 * cpdup is now able to rmdir chflagged directories (it already handles this properly for regular files).
258
259 * cpdup now ignores the UF_ARCHIVE file flag when deciding whether to copy a file.
260
261 * ls command has been enhanced with new options -S and -D, see manual page.
262
263 * Enhance nologin to log nologin attempts to syslog.
264
265 * Fix set-faults on crypt(3) failures.
266
267 * OpenSSH upgraded to 7.6p1.
268
269 * Update the pciconf(8) database to the Oct 12 2017 snapshot from pciids.sourceforge.net.
270
271 * Fix vmstat formatting to deal with large numbers and not run numbers into each other any more.
272
273 * Zoneinfo synchronized to tzdata2017c.
274
275 * Minor fixes to pr(1).
276
277 ### Hammer1 Changes
278
279 * Numerous cleanups.
280
281 ### Hammer2 Changes
282
283 * Many, many bug fixes, improving stability.
284
285 * Numerous performance fixes, including KVABIO support which improves performance on many-core systems.
286
287 * Add support for hammer2 cleaning in the periodic cron, enabled by default.
288
289 * Work around a bug in LZ4_compress_limitedOutput(), the code could sometimes overrun the supplied buffer.
290
291 * Add hammer2 utilities to initrd for hammer2 crypto bootstrapping and rescue.
292
293 ### Clang status
294
295
296 ### Package updates
297
298 * We can now build over 29000 packages.
299
300 * 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.
301
302 ### 64-bit status
303
304 * Note that DragonFly is a 64-bit-only operating system as of 4.6, and will not run on 32-bit hardware.
305
306