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.
Kernel
Networking Stack
- Ability to compile INET6 Only kernel
- VIMAGE: More virtualization
- Remove if(4) send queue
- Dispatch sets of packets (Packet batching)
- 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.
- Revised mbufs + tags
- Align mbuf data and use extra space in resulting mbuf header area to store tags
- 802.1p (we think this is already possible)?
- Pass input queue info up from device
- Allow bpf to tap a specific input queue on a multiqueue NIC for example
- Fixing carp(4)
- Multiq transmit support (if_transmit)
- Connection groups locking paradigm
- CPU cache analysis, should we prefetch parts of mbufs (headers), etc.
Wireless networking
- 802.11n - High Throughput
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 trees
- Not sure what this is about either – jhb@
- 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.
- Shared page data to allow pure userland implementations of certain system calls
- 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
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
- 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)


