5.6.2 noted
[ikiwiki.git] / release56 / index.mdwn
1 # DragonFly BSD 5.6
2
3 * Version 5.6.0 released 17 June 2019
4 * Version 5.6.1 released 19 June 2019
5 * Version 5.6.2 released 11 August 2019
6
7 DragonFly version 5.6 brings an improved virtual memory system, updates to radeon and ttm, and performance improvements for HAMMER2.  5.6.1 fixes a misconfiguration in sshd and a lockup in ttm.  5.6.2 fixes a number of bugs, and includes a disruptive change to TCP timeouts.
8
9 The details of all commits between the 5.4 and 5.6 branches are available in the associated commit messages for [5.6.0rc1](http://lists.dragonflybsd.org/pipermail/commits/2019-June/718996.html), [5.6.0](http://lists.dragonflybsd.org/pipermail/commits/2019-June/719031.html), [5.6.1](http://lists.dragonflybsd.org/pipermail/commits/2019-June/719058.html), and [5.6.2](http://lists.dragonflybsd.org/pipermail/commits/2019-August/719259.html).
10  
11 ## Big-ticket items
12
13 ### Improved VM
14
15 * Informal test results showing the changes from 5.4 to 5.6 [are available](http://lists.dragonflybsd.org/pipermail/users/2019-June/358196.html).
16 * Reduce stalls in the kernel vm_page_alloc*() code (vm_page_list_find*()).
17 * Improve page allocation algorithm to avoid re-iterating the same queues as the search is widened.
18 * Add a vm_page_hash*() API that allows the kernel to do heuristical lockless lookups of VM pages.
19 * Change vm_hold() and vm_unhold() semantics to not require any spin-locks.
20 * Change vm_page_wakeup() to not require any spin-locks.
21 * Change wiring vm_page's no longer manipulates the queue the page is on, saving a lot of overhead.  Instead, the page will be removed from its queue only if the pageout demon encounters it.  This allows pages to enter and leave the buffer cache quickly.
22 * Refactor the handling of fictitious pages.
23 * Remove m->md.pv_list entirely.  VM pages in mappings no longer allocate pv_entry's, saving an enormous amount of memory when multiple processes utilize large shared memory maps (e.g. postgres database cache).
24 * Refactor vm_object shadowing, disconnecting the backing linkages from the vm_object itself and instead organizing the linkages in a new structure called vm_map_backing which hangs off the vm_map_entry.
25 * pmap operations now iterate vm_map_backing structures (rather than spin-locked page lists based on the vm_page and pv_entry's), and will test/match operations against the PTE found in the pmap at the requisite location.  This doubles VM fault performance on shared pages and reduces the locking overhead for fault and pmap operations.
26 * Simplify the collapse code, removing most of the original code and replacing it with simpler per-vm_map_entry optimizations to limit the shadow depth.
27 * TCP keepalive changed.  This will require updating dports that use the network.
28
29 ### DRM
30
31 * Major updates to the radeon and ttm (amd support code) drivers.  We have not quite gotten the AMD support up to the more modern cards or Ryzen APUs yet, however.
32 * Improve UEFI framebuffer support.
33 * A major deadlock has been fixed in the radeon/ttm code.
34 * Refactor the startup delay designed to avoid conflicts between the i915 driver initialization and X startup.
35 * Add DRM_IOCTL_GET_PCIINFO to improve mesa/libdrm support.
36 * Fix excessive wired memory build-ups.
37 * Fix Linux/DragonFly PAGE_MASK confusion in the DRM code.
38 * Fix idr_*() API bugs.
39
40 ### HAMMER2
41
42 * The filesystem sync code has been rewritten to significantly improve performance.
43 * Sequential write performance also improved.
44 * Add simple dependency tracking to prevent directory/file splits during create/rename/remove operations, for better consistency after a crash.
45 * Refactor the snapshot code to reduce flush latency and to ensure a consistent snapshot.
46 * Attempt to pipeline the flush code against the frontend, improving flush vs frontend write concurrency.
47 * Improve umount operation.
48 * Fix an allocator race that could lead to corruption.
49 * Numerous other bugs fixed.
50 * Improve verbosity of CHECK (CRC error) console messages.
51
52 ## Details
53
54 ### Checksums
55
56     MD5 (dfly-x86_64-5.6.1_REL.img) = b64ea4f98ae0c9bb26978925bda1f899
57     MD5 (dfly-x86_64-5.6.1_REL.iso) = 8921dc8bca8b1f8cb44259601b75a608
58     MD5 (dfly-x86_64-5.6.1_REL.img.bz2) = 10f87055369e168494966982d50b4dba
59     MD5 (dfly-x86_64-5.6.1_REL.iso.bz2) = 6b3ddc0d663777476f021750d2bd21b4
60
61 ### Upgrading
62
63 If you have an existing 5.x system and are running a generic kernel, the normal upgrade process, described below, will work.  
64
65 Change your local `/usr/src` to 5.6:
66
67     cd /usr/src
68     git fetch origin
69     git branch DragonFly_RELEASE_5_6 origin/DragonFly_RELEASE_5_6
70     git checkout DragonFly_RELEASE_5_6
71     git pull
72
73 And then rebuild: (in `/usr/src`)
74
75     make buildworld
76     make buildkernel
77     make installkernel
78     make installworld
79     make upgrade
80
81     (reboot your system)
82
83     make initrd 
84
85 `make initrd` is optional for systems with unencrypted disks, and has been possible for several releases; it's mentioned here for completeness. Look at the [initrd(7)](https://leaf.dragonflybsd.org/cgi/web-man?command=initrd&section=ANY) man page for details on what it does.
86
87 Don't forget to upgrade your existing packages.  5.6 packages have already been built and are immediately available.
88
89     pkg update
90     pkg upgrade
91
92 ## All other changes since DragonFly 5.4
93
94 ### Security Issues
95
96 * Add MDS mitigation support for the Intel side-channel attack.  Must be enabled by the user, and also requires an Intel microcode update to supports it.  The mitigation burns around 250ns of additional latency on kernel->user transitions and is set with 'sysctl machdep.mds_mitigation=MD_CLEAR'.
97 * The kernel is compiled with retpoline support by default under GCC8.
98 * Implement support for SMAP and SMEP security when available.  This prevents accidental accesses to the user-address-space by the kernel.  Support is reported in dmesg.
99
100 ### Kernel
101
102 * Add /dev/part-by-label, allowing user-specified labeling of disklabels to show up in /dev.
103 * Synchronize ACPICA to Intel's version 20190509.
104 * Fix a probable callout race that could result in stuck processes.
105 * Increase number of kqueue timers from 4096 to 65536.  More apps use them.
106 * Adjust the blist code to allow more than 2TB of swap to be configured.
107 * Fix bugs related to the STOP signal that could block threads with locks held.
108 * Fix a race related to the STOP signal when operating on a multi-threaded program.
109 * Fix a rare vref() assertion.  This typically required extreme loads to reproduce.
110 * atkbdc - Still attach a PS2 controller even if the FADT says not to.
111 * All modules now use inlined atomics instead of static function calls.
112 * Update PCI ids for pciconf output.
113 * Throw a global lock around udev dictionary ops.  Not having them could result in fairly rare corruption (devices aren't added or removing very often), particularly when using the 'vn' device.
114 * Major cleanup of TSC related code.
115 * Fix panic in mlock() and munlock().
116 * Implement the sbrk() system call and remove obsolete brk() support.
117 * Improve mmap() hinting above RLIMIT_DATA's current value, allowing languages to use it to map data below the 4GB mark if they desire (some languages implement 32-bit interpreters and need this).
118 * Change how SEM_VALUE_MAX is acquired by userland.
119 * Change the behavior of MADV_NOSYNC and MAP_NOSYNC for file-backed pages.  If the file is no longer memory-mapped the filesystem sync will now flush such pages to the filesystem, avoid a CPU-burning degenerate condition in the pageout and filesystem flush code.
120 * Rewrite the callout subsystem to utilize a handle and improve debugging.  This has been done to improve performance and in particular prevent the callout timer lists from getting corrupted by bugged driver code.  This also ensures that the CAM ccb_hdr structure, which is exposed to userland, will no longer be sensitive to changes made to the callout structure.
121 * Fix info->si_code for waitid(2) support.
122 * Add support for char and short-sized values.
123 * Add memcmp() and make bcmp() linux-compatible w/regards to return value.
124 * Remove vm_map traversal heuristics and the secondary linked list.  Just stick with the RB tree.
125 * Limit kernel spams of swap-full warnings.
126 * Permanently disable and remove lazy FP register saving for all cases.  This fixes a previously known hardware bug on Intel CPUs that we thought was fixed before, but wasn't.  Lazy FP switching is no longer supported, period.
127 * Remove an improper direct user-space access by chroot_kernel() (a privileged system call).
128 * Change MAP_STACK operation to better match the expectations of third party applications. See commit 4837705ef8e and d6924570fb4.  This significantly improves the stability of a number of language ports.
129 * Isolate more global variables with __read_mostly and friends, improving SMP operation.
130 * Fix bugs in STOP signal handling that could block a thread in the kernel with locks held.
131 * Refactor nbuf and maxvnodes calculations, generally reducing the limits.  Obscene amounts of memory were being unnecessarily devoted to these caches on systems with tons of memory.  With BKVABUF, buffers are no longer as expensive as they used to be, and both HAMMER1 and HAMMER2 cache file data and meta-data via the device node (prior to decompression).  A large buffer cache would reduce re-decompression but not by much.
132 * Refactor the scheduler heuristics, with serious testing.  This fixes numerous issues which have cropped up due to breaking previous tunings and gets our pgbench results back to normal.
133 * Improve vmstats synchronization, refactoring vmmeter_neg_slop_cnt to improve SMP performance.
134 * vkernel - The vkernel uses the TSC by default when possible.
135
136 ### Filesystems
137
138 * fuse- Initial support added.
139 * hammer2 - (see above)
140 * hammer2 - Refactor the 'info' directive.
141 * hammer2 - No longer panics if the root inode is corrupt, the mount will fail gracefully instead.
142 * hammer1 - Fix left-over /var/run/hammer.cleanup lock files.
143 * tmpfs - Fix cpu inefficiencies related to the syncer.
144 * autofs - Misc fixes.
145 * ufs - Expand time_t support to 48-bits to try to head-off the 32-bit time_t overflow issue in older filesystems.  In addition, treat the original 32-bit fields as unsigned.
146 * smbfs - Bring in some string safety and typo fixes.
147 * nfs - NFS mounts which go bad can now be unmounted.
148 * nfs - NFS mounts that went bad were not being listed in 'df'.  Fixed.
149 * nfs - Try to ensure a uniform fsid for exports.
150
151 ### Networking
152
153 * pf - Improve SMP performance by cpu-localizing most tracking counters.
154 * wpa_supplicant pkg included in nrelease build for usb install image.
155 * pkg based wpa_supplicant is preferred over base version.
156 * Properly bring up/down interface, primarily to support wpa_supplicant.
157 * Add ifconfig -n ... to disable automatic module loading.
158 * dhcpcd will now go into the background immediately by default.
159 * Implement DHCP flag for ipv6_ifconfig_* in rc.conf.
160 * Rework wlan_down() and other wlan support in network.subr.
161 * pf - Fix at least one SMP race related to max-src-nodes and max-src-conn tracking.
162 * dummynet - Only turn on polling while dummynet is operational.  That is, when pipes or flows are present.
163 * Add kern.ipc.soaccess_reuse and set the default to enabled.  This feature fixes a long-standing problem with listen sockets when a daemon goes away but pending or active TCP connections are still present.  Previously, the presence of this state prevented daemons from being able to re-bind and listen() without SO_REUSEADDR.  They would have to wait existing and pending tcp state to timeout/terminate.  SO_REUSEADDR should not be required, and linux does not appear to require it.  This fixes the issue.
164
165
166 ### Driver updates
167
168 * if_re - Sync with Realtek's 1.95.
169 * sound - Add quirk for AC256 sound devices.
170 * evdev - Bring evdev in from FreeBSD.
171 * iwm - Fix possible null pointer indirection.
172 * ena - (amazon AWS) - release MSI-X vectors on probe failure.
173 * ps/2 - Fix a race that could panic the kernel and corrupt the ps/2 packet buffer.  There was a bit of code that was still depending on critical sections to interlock the interrupt, which is obviously no longer protective.
174 * uhci - Fix panic in the uhci attach error path.
175 * da/cd - Try to quiet repeated DA/CD probes for removable devices such as SD cards and CD/DVD drives.
176 * ahci - More generous interrupt rate warning limits to reduce livelock warnings that are more abundant now that fast SSDs exist.
177 * acpi - Reduce the acpi_ec device timeout from 750ms to 100ms after the first failure.  This allows laptops to boot in a reasonable amount of time by default (without having to disable the "ec" sub-module).
178
179 ### Userland
180
181 * Convert many base utilities to use LibreSSL.
182 * Update 'script', bringing new options and bug fixes in from FreeBSD.
183 * Remove groff (and nroff, etc) from base.
184 * Replace the 'man' implementation.
185 * Sync zoneinfo database to tzdata2019a (from ftp.iana.org).
186 * Header file adjustments.
187 * Detect a common mistake of putting a 'sysctl' prefix in /etc/sysctl.conf and don't spew to the console when it happens.
188 * rtld-elf can now handle late dynamic relocations for 'relro' sections.
189 * libc - Now uses sbrk() system call.
190 * The installer now uses /dev/part-by-label to locate the installation media instead of assuming that it is 'da8'.
191 * Add a sysctl debug.acpi.silent_all to silence annoying repetitive ACPI messages.
192 * Remove 'cat*' cached manual pages support.  There's no need to do this any longer, just generate the manual pages in real-time.
193 * buildworld and friends now ensure that /usr/local/bin is NOT in $PATH, preventing the mistaken use of incompatible loaders.
194 * libc - Add aligned_alloc(),
195 * libc - Add freezero(), recallocarray(), explicit_bzero() from OPENBSD.
196 * libc - Add the timing_safe*() functions from OpenBSD.
197 * libc - Add dup3().
198 * libc - Refactor shm_open() and implement /var/run/shm (more linux-like).
199 * build- Add __read_mostly, __read_frequently, and __exclusive_cache_line from FreeBSD.
200
201
202 ### Boot, Image
203
204 * Rework the initrd build logic to simplify matters.
205 * nrelease - Install security/ca_root_nss explicitly (non-automatic).
206 * Reduce the size of /usr/local in various ways.
207
208 ### Various tools have been upgraded in the base system:
209
210 * xz - Upgrade to 5.2.4.
211 * libarchive - Import libarchive-3.3.3
212 * libressl - Update to version 2.9.1 stable.
213 * openssh - Update to 8.0p1.
214 * ldns - Update vendor branch to 1.7.0
215 * libcipher - Removed.
216 * gcore - Significantly improved.
217 * makefs - Bring in from FreeBSD to aid in initrd creation.
218 * ministat - Import from FreeBSD.
219 * libfetch - Synchronize with FreeBSD
220 * libedit - Update to version 2019-03-24.
221 * sysctl - Don't try to update if the current value matches.
222 * dd - Rework the time interval calculation.
223 * dd - Generally sync with FreeBSD.
224 * gpt - Add "-g" to print the gpt GUID info in the 'show' directive.
225 * systat - Default to not showing pass*, sg*, and md* as previously intended, probe terminal width.
226 * iostat - Default to not showing pass*, sg*, and md* as previously intended, probe terminal width.
227 * telnet - Disable use of OPIE
228
229 ### Compiler status
230
231 * gcc-8 is our default compiler.  gcc5 is no longer built by default.  gcc4.7 remains for emergencies.
232 * gcc-8 - Add support for -save-temps=objects option.
233 * gcc-4.7 - Add support for -save-temps=objects option.
234 * libc - Add reallocarray() from OpenBSD to improve application compatibility.
235 * buildkernel - Generate a less ambiguous label via gitrev.sh.
236
237 ### Package updates
238
239 * A full set of new binary packages has been built for 5.6, available through the pkg tool.