FreeBSD 9 Brainstorming / Wishlist
This page is of historical interest only.
This is a rough list of ideas / goals / tasks to work on for FreeBSD 9.0 release. Nothing here is guaranteed. Many of these items have been long-term goals for many prior releases as well.
In the lists below, (E) means the suggestion came from the EuroBSDCon DevSummit/200909, and (C) means it came from the BSDCan DevSummit/201005.
A new page based on brainstorming for FreeBSD 10 is at FreeBSD10.
Contents
Timescale
The following timescale was suggested at DevSummit/201005:
7.4-RELEASE, then 8.2-RELEASE, then 9.0-RELEASE (aiming roughly for May 2011)
Kernel
Networking Stack
- (E) Ability to compile INET6 Only kernel
(EC) VIMAGE: More virtualization (BjoernZeeb)
- (E) Remove if(4) send queue
(EC) Dispatch sets of packets (Packet batching) (JeffRoberson has some patches)
- (EC) PCPU packet dispatch / Net taskq
- Arguably this should be a generic interrupt thread task to convert interrupt threads to use more of a taskqueue-like model where interrupt handlers are scheduled events to reduce context switch overhead for processing concurrent interrupts.
(EC) Revised mbufs + tags (JeffRoberson / LuigiRizzo)
- Align mbuf data and use extra space in resulting mbuf header area to store tags
- (E) Pass input queue info up from device
- Allow bpf to tap a specific input queue on a multiqueue NIC for example
- (E) Fixing carp(4)
- (EC) Multiq transmit support (if_transmit)
(EC) TCP Connection groups locking paradigm (RobertWatson) - Expected ~June/July 2010
- (EC) CPU cache analysis, should we prefetch parts of mbufs (headers), etc.
- (E) IEEE 802.1p (this may be already implemented?)
(C) mbuf performance optimisations (JeffRoberson) (~December 2010)
- (C) Software TSO
(C) SIFTR (complete)
- (C) TCP reassembly
(C) Modular Congestion Control (LawrenceStewart) (complete)
Wireless networking
(EC) 802.11n - High Throughput (RuiPaulo)
Device Driver Issues
- (E) Parallel device attach
- The idea here is running device probe and attach routines concurrently to reduce boot time.
- Some tricky questions here are that non-deterministic device names across boots would be a substantial POLA violation and that many bus drivers may not be ready for this complexity.
- (EC) USB video device support (including webcamd)
- (E) Express Card
- (E) External hardware integration
- Not entirely sure what this is about -- jhb@
(E) FlattenedDeviceTree support
- (EC) Further ATA/CAM work
- (E) Resolving different disk geometry under adaX vs adX?
- (EC) Device naming
(C) NCQ, port multipliers etc (AlexanderMotin)
(EC) Device I/O resource management (PnP OS support) (JohnBaldwin)
- (C) resource_list_reserve()
(E) Starting the scheduler sooner for most of device attach (JohnBaldwin)
- (E) Power management
- (E) Option to power down NICs (D1/D2/D3) when they are down (may multiple policies here)
- (E) Handle C2+/C1E where local APIC timer is turned off (need backup timer (HPET?))
(EC) Infiniband - OpenFabric (JeffRoberson) (~March 2011)
- (C) ATAoE?
(C) FPU save/restore for kernel use (kib@) (complete)
(C) HotPlug PCI (JohnBaldwin?)
Other Kernel
(EC) Virtualize more subsystems (VIMAGE) (BjoernZeeb)
- (EC) More embedded platform support
- (EC) avr32
- (EC) mips SMP, mips n64
- (C) PPC64 + SMP
- (EC) Further work on improving scaling to large numbers of cores (e.g. 128)
- Cores and caches and threads! Oh my!
- (E) Queued spin locks
(C) cpumask_t -> cpuset_t (PeterWemm)
(EC) Dynamic CPU configuration (allowing CPUs to go offline/online) (AttilioRao)
(EC) ccNUMA support (AlanCox / JohnBaldwin) (Basics may be in by 9.0)
(EC) Remove Giant if possible (JohnBaldwin)
- (E) SYSINIT()'s
- (E) module event handlers
- (E) !MPSAFE filesystems
(C) if_watchdog / if_timer now gone (complete)
- (E) Unmapped disk I/O buffers (sglist in bio)
- (E) bus_dmamap_load_bio()
- (E) bio_adjust() / bio_start
- (C) Memory descripter for unmapped IO (good if it was in by 9)
(EC) Fix the lemming syncer (AttilioRao)
- (E) Per-mount syncer threads
- (E) Modularity Hygiene (ask phk@ for more details)
- Are optional things still optional or are things so intertwined that things are de facto required.
- (E) MAC for ZFS
- (E) Flash FS support / NAND filesystem?
- (E) TRIM support
- Depends on BIO_DELETE support in filesystems, would be implemented by BIO_DELETE requests
- (EC) tickless kernel / deadline scheduling
(E) BIO_DELETE support for filesystems (KirkMcKusick and KonstantinBelousov) (complete)
(E) per-thread credentials (ZachLoafman)
(E) Kernel capabilities (RobertWatson)
- Process file descriptors and capability rights used to sandbox processes.
- (E) Performance monitoring counters (hwpmc(4)) support for embedded platforms
(E) 64-bit quotas for UFS (KirkMcKusick and DagErlingSmørgrav)
- (E) Hibernate support (S4)
(E) VOP_OPLOCK support for allowing shared locking state between SMB / NFS, etc. (ZachLoafman)
- (E) Shared page data to allow pure userland implementations of certain system calls
- (E) Virtual system call proposal was probably related with this one
(E) Non-executable stack (KonstantinBelousov) (complete for amd64 and powerpc)
(E) Disallow mmap() to offset 0 from userspace (AlanCox and RobertWatson) (complete)
- (E) Clock / power domain management
- (E) Address space randomization
- (E) Start using disk labels to mount filesystems more aggressively / by default
- (E) Enable some sort of kernel debugging by default in release kernels
(E) At minimum we want to get a DDB stack trace by default. (complete)
- (E) Possibly textdumps and/or kernel dumps with crashinfo enabled by default.
- (E) Better config(8)
- (E) Able to build modules with a custom set of kernel options
- (E) Xen DOM0
- (E) ZFS as default?
- (E) sysinstall support
- (E) Licensing?
- (E) Linux 64-bit binary support in FreeBSD/amd64
(CE) Transactional NFS export updating (ZachLoafman)
- (E) Move to disklabels
- (E) Faster reboot (kernel part):
- Don't go to the BIOS at 'reboot', but start the kernel from the beginning
(C) VM page queue lock pushdown (JeffRoberson) / KipMacy / AlanCox / KonstantinBelousov) (complete)
(C) SU+J (JeffRoberson) (complete)
- (C) EFI booting
(C) Capsicum primitives into kernel (RobertWatson) (by 9.0)
(C) Range locking (JeffRoberson) (not by 9)
(C) Network kernel dump (Sandvine via AttilioRao)
(C) BSD ELF tools (JosephKoshy, KaiWang)
(C) pthread work queues (StaceySon)
- (C) Clock stuff
- (C) Enhanced redzones
(C) SYSVSHM tracking (AlfredPerlstein)
User-space and Ports
(EC) Get llvm into the tree alongside gcc (EdSchouten / RomanDivacky) (complete)
(EC) Userland DTrace (complete)
(E) Startup dependencies (MartinBlapp)
- Change /etc/rc.d/foo scripts to autostart dependencies in single user mode (as an example)
- (E) A library to provide multi-platform support for backtraces in userland applications
- (E) Witness for pthreads (Warner)
- (E) Better support for debugging tools: pstack/ltrace/strace
- (E) Compiling 32-bit i386 binaries on amd64
- (E) Improved support for running i386 binaries on amd64
- (E) Better VirtualBOX support
- (E) Always put 64-bit kernel on amd64-capable hardware
- (E) Common install DVD for i386/amd64
- (E) Better support for binary only systems
- (E) Make GENERIC more generic so common tasks don't require custom kernels (network stack modularization may help with this) so that freebsd-update can update the kernel.
- (E) Faster reboot
- (E) Several possible ideas here including parallelized rc.d scripts
- (E) Manual IPv6 support in sysinstall
- (C) binutils update (2.17.50) (dim@) (By 9.0, barring disaster)
(C) External toolchain support (WarnerLosh)
- (C) Ship FreeBSD VM images
- (C) Remove texinfo (not possible for 9.0 due to GNU code, but hopefully for 10.0?)
Ports and Packages
- (E) "Ports STABLE"
- (E) Better Binary Support
- Not sure exactly what this is referring to -- jhb@
- (E) Parallel pkg_add (fetching and adding packages concurrently)
- (E) Switch pkg_add to using http instead of ftp by default due to firewalls, etc.
- (E) Provide more package variants (e.g. -nox11 package builds)
Possibly add a ports variants concept ala MacPorts to avoid a profileration of metaports that exist solely to force variant packages to be built
- (E) Cross building ports infrastructure
- (E) Signed packages
- (E) Building packages for a subset of ports/ tree (useful for embedded)
- (E) Better jail management
- (E) Connection manager-like facilities (more info needed about this one)
- (C) chromium in ports? (decision ~July 2010)
- Support for switching between different self-consistent package sets
Decisions needed before 9.0-RELEASE
- (C) SU+J as default?
(C) Which NFS implementation? (~December 2010) (RickMacklem?)
- (C) Clang?
Testing Foci
- (C) clang
- (C) 64 bit quotas
- (C) SU+J
- (C) Documentation updates (handbook etc)
(C) KrisKennaway-style performance testing
EuroBSDCon Whiteboard Photos