(no commit message)
[ikiwiki.git] / release56 / index.mdwn
1 # DragonFly BSD 5.6
2
3 * Version 5.6.0 released xx June 2019
4
5 DragonFly version 5.6 brings etc etc etc.  This page is not finished.  *** Do not link to this page before release, please. ***
6
7 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) and [5.6.0]().
8  
9 ## Big-ticket items
10
11 ### Improved VM.
12
13 * Reduce stalls in the kernel vm_page_alloc*() code (vm_page_list_find*()).
14 * Improve page allocation algorithm to avoid re-iterating the same queues as the search is widened.
15 * Add a vm_page_hash*() API that allows the kernel to do heuristical lockless lookups of VM pages.
16 * Change vm_hold() and vm_unhold() semantics to not require any spin-locks.
17 * Change vm_page_wakeup() to not require any spin-locks.
18 * 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.
19 * Refactor the handling of fictitious pages.
20 * 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).
21 * 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.
22 * 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.
23 * 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.
24
25 ### DRM.
26
27 * Major udpates to the radeon and ttm (amd support code).  We have not quite gotten the amd support up to the more modern cards or ryzen APUs yet, however.
28 * A major deadlock has been fixed in the radeon/ttm code.
29 * Refactor the startup delay designed to avoid conflicts between the i915 driver initialization and X startup.
30 * Add DRM_IOCTL_GET_PCIINFO to improve mesa/libdrm support.
31 * Improve UEFI framebuffer support.
32 * Fix excessive wired memory build-ups.
33 * Fix Linux/DragonFly PAGE_MASK confusion in the DRM code.
34 * Fix idr_*() API bugs.
35
36 ### HAMMER2.
37
38 * The filesystem sync code has been rewritten to significantly improve performance.
39 * Sequential write performance also improved.
40 * Add simple dependency tracking to prevent directory/file splits during create/rename/remove operations, for better consistency after a crash.
41 * Refactor the snapshot code to reduce flush latency and to ensure a consistent snapshot.
42 * Attempt to pipeline the flush code against the frontend, improving flush vs frontend write concurrency.
43 * Improve umount operation.
44 * Fix an allocator race that could lead to corruption.
45 * Numerous other bugs fixed.
46 * Improve verboseness of CHECK (CRC error) console messages.
47
48 ## Details
49
50 ### Checksums
51
52     MD5 (dfly-x86_64-5.6.0_REL.img) = 
53     MD5 (dfly-x86_64-5.6.0_REL.iso) = 
54     MD5 (dfly-x86_64-5.6.0_REL.img.bz2) = 
55     MD5 (dfly-x86_64-5.6.0_REL.iso.bz2) = 
56
57 ### Upgrading
58
59 If you have an existing 5.x system and are running a generic kernel, the normal upgrade process, described below, will work.  
60
61 Change your local `/usr/src` to 5.6:
62
63     cd /usr/src
64     git fetch origin
65     git branch DragonFly_RELEASE_5_6 origin/DragonFly_RELEASE_5_6
66     git checkout DragonFly_RELEASE_5_6
67     git pull
68
69 And then rebuild: (in `/usr/src`)
70
71     make buildworld
72     make buildkernel
73     make installkernel
74     make installworld
75     make upgrade
76
77     (reboot your system)
78
79     make initrd 
80
81 `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.
82
83 Don't forget to upgrade your existing packages.  5.6 packages have already been built and are immediately available.
84
85     pkg update
86     pkg upgrade
87
88 ## All other changes since DragonFly 5.4
89
90 ### Security Issues
91
92 * Add MDS mitigation support for the Intel side-channel attack.  Must be enabled by the user, and also requires an Intel microcode that supports it.  The mitigation burns around 250ns of additional latency on kernel->user transitions.
93
94 * Now that GCC-8 is nice and stable, the kernel is compiled with retpoline support by default.
95
96 * 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 the dmesg.
97
98 ### Kernel
99
100 * Fix a probable callout race that could result in stuck processes.
101 * Increase number of kqueue timers from 4096 to 65536.  More apps use them.
102 * Adjust the blist code to allow more than 2TB of swap to be configured.
103 * Fix bugs related to the STOP signal that could block threads with locks held.
104 * Fix a race related to the STOP signal when operating on a multi-threaded program.
105 * Fix a rare vref() assertion.  This typically required extreme loads to reproduce.
106 * Synchronize ACPICA to Intel's version 20190509.
107 * atkbdc - Still attach a PS2 controller even if the FADT says not to.
108 * All modules now use inlined atomics instead of static function calls.
109 * Update PCI ids for pciconf output.
110  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.
111 * Major cleanup of TSC related code.
112 * Fix panic in mlock() and munlock().
113 * Implement the sbrk() system call and remove obsolete brk() support.
114 * 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).
115 * Change how SEM_VALUE_MAX is acquired by userland.
116 * 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.
117 * Add /dev/part-by-label, allowing user-specified labeling of disklabels to show up in /dev.
118 * 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.
119 * Fix info->si_code for waitid(2) support.
120 * Add support for char and short-sized values.
121 * Add memcmp() and make bcmp() linux-compatible w/regards to return value.
122 * Remove vm_map traversal heuristics and the secondary linked list.  Just stick with the RB tree.
123 * Limit kernel spams of swap-full warnings.
124 * 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.
125 * 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.
126 * Isolate more global variables with __read_mostly and friends, improving SMP operation.
127 * vkernel - The vkernel uses the TSC by default when possible.
128 * (see VM section at top, major VM changes.
129
130 ### Filesystems
131
132 * hammer2 - (see above)
133 * hammer2 - Refactor the 'info' directive.
134 * hammer2 - No longer panics if the root inode is corrupt, the mount will fail gracefully instead.
135 * hammer1 - Fix left-over /var/run/hammer.cleanup lock files.
136 * tmpfs - Fix cpu inefficiencies related to the syncer.
137 * autofs - Misc fixes.
138 * 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.
139 * smbfs - Bring in some string safety and type-o fixes.
140 * nfs - NFS mounts which go bad can now be unmounted.
141 * nfs - NFS mounts that went bad were not being listed in 'df'.  Fixed.
142 * nfs - Try to ensure a uniform fsid for exports.
143 * fuse- Initial support added.
144
145 ### Networking
146
147 * wpa_supplicant pkg included in nrelease build for usb install image.
148 * pkg based wpa_supplicant is preferred over base version.
149 * Implement DHCP flag for ipv6_ifconfig_* in rc.conf.
150 * Add ifconfig -n ... to disable automatic module loading.
151 * Properly bring up/down interface, primarily to support wpa_supplicant.
152 * Rework wlan_down() and other wlan support in network.subr.
153 * dhcpcd will now go into the background immediately by default.
154 * pf - Fix at least one SMP race related to max-src-nodes and max-src-conn tracking.
155 * pf - Improve SMP performance by cpu-localizing most tracking counters.
156
157 * 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.
158
159
160 ### Driver updates
161
162 * iwm - Fix possible null pointer indirection.
163 * if_re - Sync with Realtek's 1.95.
164 * ena - (amazon AWS) - release MSI-X vectors on probe failure.
165 * 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.
166 * uhci - Fix panic in the uhci attach error path.
167 * sound - Add quirk for AC256 sound devices.
168 * da/cd - Try to quiet repeated DA/CD probes for removable devices such as SD cards and CD/DVD drives.
169 * ahci - More generous interrupt rate warning limits to reduce livelock warnings that are more abundant now that fast SSDs exist.
170 * evdev - Bring evdev in from FreeBSD.
171
172 ### Userland
173
174 * Update 'script', bringing new options and bug fixes in from FreeBSD.
175 * Header file adjustments.
176 * Remove groff (and nroff, etc) from base.
177 * Replace the 'man' implementation.
178 * Detect a common mistake of putting a 'sysctl' prefix in /etc/sysctl.conf and don't spew to the console when it happens.
179 * Sync zoneinfo database to tzdata2019a (from ftp.iana.org).
180 * rtld-elf can now handle late dynamic relocations for 'relro' sections.
181 * libc - Now uses sbrk() system call.
182 * The installer now uses /dev/part-by-label to locate the installation media instead of assuming that it is 'da8'.
183 * Add a sysctl debug.acpi.silent_all to silence annoying repetitive ACPI messages.
184 * Remove 'cat*' cached manual pages support.  There's no need to do this any longer, just generate the manual pages in real-time.
185 * buildworld and friends now ensure that /usr/local/bin is NOT in $PATH, preventing the mistaken use of incompatible loaders.
186 * libc - Add aligned_alloc(),
187 * libc - Add freezero(), recallocarray(), explicit_bzero() from OPENBSD.
188 * libc - Add the timing_safe*() functions from OpenBSD.
189 * libc - Add dup3().
190 * build- Add __read_mostly, __read_frequently, and __exclusive_cache_line from FreeBSD.
191 * Convert many base utilities to use LibreSSL.
192
193
194 ### Boot, Image
195
196 * Rework the initrd build logic to simplify matters.
197 * nrelease - Install security/ca_root_nss explicitly (non-automatic).
198 * Reduce the size of /usr/local in various ways.
199
200 ### Various tools have been upgraded in the base system:
201
202 * gcore - Significantly improved.
203 * sysctl - Don't try to update if the current value matches.
204 * makefs - Bring in from FreeBSD to aid in initrd creation.
205 * dd - Rework the time interval calculation.
206 * dd - Generally sync with FreeBSD.
207 * gpt - Add "-g" to print the gpt GUID info in the 'show' directive.
208 * ministat - Import from FreeBSD.
209 * systat - Default to not showing pass*, sg*, and md* as previously intended, probe terminal width.
210 * iostat - Default to not showing pass*, sg*, and md* as previously intended, probe terminal width.
211 * xz - Upgrade to 5.2.4.
212 * libarchive - Import libarchive-3.3.3
213 * libressl - Update to version 2.9.1 stable.
214 * openssh - Update to 8.0p1.
215 * ldns - Update vendor branch to 1.7.0
216 * libcipher - Removed.
217 * telnet - Disable use of OPIE
218 * libfetch - Synchronize with FreeBSD
219 * libedit - Update to version 2019-03-24.
220
221 ### Compiler status
222
223 * gcc-8 is our default compiler.  gcc5 is no longer built by default.  gcc4.7 remains for emergencies.
224 * gcc-8 - Add support for -save-temps=objects option.
225 * gcc-4.7 - Add support for -save-temps=objects option.
226 * libc - Add reallocarray() from OpenBSD to improve application compatibility.
227 * buildkernel - Generate a less ambiguous label via gitrev.sh.
228
229 ### Package updates
230
231 * A full set of new binary packages has been built for 5.6, available through the pkg tool.