This is an old revision of the document!
FreeBSD 9 Brainstorming / Wishlist
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 200909DevSummit, and (C) means it came from the BSDCan 201005DevSummit.
Timescale
The following timescale was suggested at 201005DevSummit:
7.4-RELEASE, then 8.2-RELEASE, then 9.0-RELEASE (aim for 2011-05)
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
- (C) TCP reassembly
- (C) Modular Congestion Control (LawrenceStuart?)
Wireless networking
- (EC) 802.11n - High Throughput (RuiPaulo)
Device Driver Issues
- 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.
- USB video device support
- Express Card
- External hardware integration
- Not entirely sure what this is about – jhb@
- Flattened device tree support
- Further ATA/CAM work
- Resolving different disk geometry under adaX vs adX?
- Device naming
- Device I/O resource management (PnP OS support) (JohnBaldwin)
- Starting the scheduler sooner for most of device attach (JohnBaldwin)
- Power management
- Option to power down NICs (D1/D2/D3) when they are down (may multiple policies here)
- Handle C2+/C1E where local APIC timer is turned off (need backup timer (HPET?))
Other Kernel
- Virtualize more subsystems (VIMAGE)
- More embedded platform support
- avr32
- mips64
- Further work on improving scaling to large numbers of cores (e.g. 128)
- Queued spin locks
- Dynamic CPU configuration (allowing CPUs to go offline/online)
- ccNUMA support
- Remove Giant if possible
- SYSINIT()'s
- module event handlers
- !MPSAFE filesystems
- Unmapped disk I/O buffers (sglist in bio)
- bus_dmamap_load_bio()
- bio_adjust() / bio_start
- Fix the lemming syncer
- Per-mount syncer threads
- Modularity Hygiene (ask phk@ for more details)
- Are optional things still optional or are things so intertwined that things are de facto required.
- MAC for ZFS
- Flash FS support / NAND filesystem?
- TRIM support
- Depends on BIO_DELETE support in filesystems, would be implemented by BIO_DELETE requests
- tickless kernel / deadline scheduling
- BIODELETE support for filesystems
- per-thread credentials (ZachLoafman)
- Kernel capabilities (RobertWatson)
- Process file descriptors and capability rights used to sandbox processes.
- Performance monitoring counters (hwpmc(4)) support for embedded platforms
- 64-bit quotas for UFS (KirkMcKusick and DagErlingSmorgrav)
- Hibernate support (S4)
- VOP_OPLOCK support for allowing shared locking state between SMB / NFS, etc. (ZachLoafman)
- Shared page data to allow pure userland implementations of certain system calls
- Virtual system call proposal was probably related with this one
- Non-executable stack
- Disallow mmap() to offset 0 from userspace (AlanCox and RobertWatson)
- Clock / power domain management
- Address space randomization
- Start using disk labels to mount filesystems more aggressively / by default
- Enable some sort of kernel debugging by default in release kernels
- At minimum we want to get a DDB stack trace by default.
- Possibly textdumps and/or kernel dumps with crashinfo enabled by default.
- Better config(8)
- Able to build modules with a custom set of kernel options
- Xen DOM0
- Infiniband
- ZFS as default
- sysinstall support
- Licensing?
- Linux 64-bit binary support in FreeBSD/amd64
- Transactional NFS export updating
- Move to disklabels
- Faster reboot (kernel part):
- Don't go to the BIOS at 'reboot', but start the kernel from the beginning
User-space and Ports
- Get llvm into the tree alongside gcc
- Userland DTrace
- Startup dependencies (MartinBlapp)
- Change /etc/rc.d/foo scripts to autostart dependencies in single user mode (as an example)
- A library to provide multi-platform support for backtraces in userland applications
- Witness for pthreads (Warner)
- Better support for debugging tools: pstack/ltrace/strace
- Compiling 32-bit i386 binaries on amd64
- Improved support for running i386 binaries on amd64
- Better VirtualBOX support
- Always put 64-bit kernel on amd64-capable hardware
- Common install DVD for i386/amd64
- Better support for binary only systems
- 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.
- Faster reboot
- Several possible ideas here including parallelized rc.d scripts
- Manual IPv6 support in sysinstall
Ports and Packages
- “Ports STABLE”
- Better Binary Support
- Not sure exactly what this is referring to – jhb@
- Parallel pkg_add (fetching and adding packages concurrently)
- Switch pkg_add to using http instead of ftp by default due to firewalls, etc.
- 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
- Cross building ports infrastructure
- Signed packages
- Building packages for a subset of ports/ tree (useful for embedded)
- Better jail management
- Connection manager-like facilities (more info needed about this one)


