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 200909, and (C) means it came from the BSDCan 201005.
A new page based on brainstorming for FreeBSD 10 is at FreeBSD10.
Timescale
The following timescale was suggested at 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) 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


