add buffer cache project
[ikiwiki.git] / docs / developer / ProjectsPage.mdwn
index 25e82d8..b38b811 100644 (file)
@@ -50,6 +50,7 @@ Projects that can be clearly used for Google Code-In are marked with their categ
 * `WARN` corrections to utilities (GCI:Code)
 * Bring in code from other *BSDs:
 * smbfs changes from FreeBSD (GCI:Code)
+* rpc.lockd and rpc.statd sync with FreeBSD (GCI:Code)
 * Add extended slice support to `fdisk`
 * Install Coverity and fix the FreeBSD bugs that were uncovered by Coverity, but do not just blindly pull over the FreeBSD patches. Make sure that you first understand what the patch does.
 * C99 Standards Conformance. The todo list is on [[/docs/developer/StandardsConformanceProject]] (GCI:Code)
@@ -160,7 +161,6 @@ Projects that can be clearly used for Google Code-In are marked with their categ
 ### Work relating to LWKT (LightWeightKernelThreading)
 * Implement lazy IPI cross-processor lwkt message passing.
 * Add timeout functionality to lwkt_waitmsg().
-* Write man pages for the lwkt message passing API.
 
 ### Filesystem extended attributes
 * Generic VFS attributes layer
@@ -241,12 +241,121 @@ Projects that can be clearly used for Google Code-In are marked with their categ
 * Verify that it is possible and safe to do this, what care would need to be taken, especially with respect to the random seeding?
 * Pull out locks around calls to karc4rand*
 
+### Improve kernel spinlock debug-ability
+* Add a const char *descr  field to the spinlock structure.
+* Adjust spin_init() and all use cases, SPINLOCK_INITIALIZER() could juse use macro string extensions (# head) to install the name there.
+* Adjust error messages to print the spinlock desc field.
+* This change will require a full world & kernel recompile.
+
+### Partially rewrite buffer cache
+* Buffer cache buffers map VM pages from the filesystems VM-backed vnodes, the "buffer space" is the maximum amount of virtual space to allocate to these buffers.
+* When the buffer_map KVA space gets fragmented it caused very expensive defrag operations, the buffer_map KVA was recently increased to double the actual buffer space to allow full space utilization in the face of fragmentation and reduce the frequency of defrag operations.
+* Rewrite the buffer cache to have separate spaces or separate buffer pools for different sizes (16, 32, 64, 128, 256... up to max).
+* The vm_map API is used to allocate kvm out of the buffer_map.  If the buffer's KVAs are preallocated then things can basically just be setup linearly at boot time.
+
+### Add informational hardware-related sysctl's
+* MacOS X exports a bunch of cpu-specific sysctl's detailing sizes, layout, features, etc. Most/all of this could be detected by a userspace program, but exporting these makes the barrier of entry to cpu-conditional code lower.
+* Research which of these sysctl's is the most useful and add them, using the same node names as OSX.
+1. hw.vectorunit = 1
+1. hw.busfrequency = 100000000
+1. hw.cpufrequency = 3062000000
+1. hw.cachelinesize = 64
+1. hw.l1icachesize = 32768
+1. hw.l1dcachesize = 32768
+1. hw.l2settings = 1
+1. hw.l2cachesize = 262144
+1. hw.l3settings = 1
+1. hw.l3cachesize = 6291456
+1. hw.tbfrequency = 1000000000
+1. hw.activecpu: 2
+1. hw.physicalcpu: 2
+1. hw.physicalcpu_max: 2
+1. hw.logicalcpu: 2
+1. hw.logicalcpu_max: 2
+1. hw.cputype: 7
+1. hw.cpusubtype: 4
+1. hw.cpu64bit_capable: 1
+1. hw.cpufamily: 1418770316
+1. hw.cacheconfig: 2 1 1 1 0 0 0 0 0 0
+1. hw.cachesize: 2147483648 32768 262144 6291456 0 0 0 0 0 0
+1. hw.busfrequency: 100000000
+1. hw.busfrequency_min: 100000000
+1. hw.busfrequency_max: 100000000
+1. hw.cpufrequency: 3062000000
+1. hw.cpufrequency_min: 3062000000
+1. hw.cpufrequency_max: 3062000000
+1. hw.cachelinesize: 64
+1. hw.l1icachesize: 32768
+1. hw.l1dcachesize: 32768
+1. hw.l2cachesize: 262144
+1. hw.l3cachesize: 6291456
+1. hw.tbfrequency: 1000000000
+1. hw.packages: 2
+1. hw.optional.floatingpoint: 1
+1. hw.optional.mmx: 1
+1. hw.optional.sse: 1
+1. hw.optional.sse2: 1
+1. hw.optional.sse3: 1
+1. hw.optional.supplementalsse3: 1
+1. hw.optional.sse4_1: 1
+1. hw.optional.sse4_2: 1
+1. hw.optional.x86_64: 1
+1. hw.optional.aes: 1
+1. hw.optional.avx1_0: 1
+1. hw.optional.rdrand: 0
+1. hw.optional.f16c: 0
+1. hw.optional.enfstrg: 0
+1. machdep.cpu.max_basic: 13
+1. machdep.cpu.max_ext: 2147483656
+1. machdep.cpu.vendor: GenuineIntel
+1. machdep.cpu.brand_string: Intel(R) Core(TM) i5-3470 CPU @ 3.20GHz
+1. machdep.cpu.family: 6
+1. machdep.cpu.model: 42
+1. machdep.cpu.extmodel: 2
+1. machdep.cpu.extfamily: 0
+1. machdep.cpu.stepping: 7
+1. machdep.cpu.feature_bits: 262929407 2660770315
+1. machdep.cpu.extfeature_bits: 672139520 1
+1. machdep.cpu.signature: 132775
+1. machdep.cpu.brand: 0
+1. machdep.cpu.features: FPU VME DE PSE TSC MSR PAE MCE CX8 APIC SEP MTRR PGE MCA CMOV PAT PSE36 CLFSH DS MMX FXSR SSE SSE2 SS SSE3 PCLMULQDQ MON SSSE3 CX16 SSE4.1 SSE4.2 POPCNT AES VMM XSAVE OSXSAVE AVX1.0
+1. machdep.cpu.extfeatures: SYSCALL XD EM64T LAHF RDTSCP TSCI
+1. machdep.cpu.cores_per_package: 1
+1. machdep.cpu.microcode_version: 16
+1. machdep.cpu.processor_flag: 0
+1. machdep.cpu.mwait.linesize_min: 4096
+1. machdep.cpu.mwait.linesize_max: 4096
+1. machdep.cpu.mwait.extensions: 3
+1. machdep.cpu.mwait.sub_Cstates: 4384
+1. machdep.cpu.xsave.extended_state: 7 832 832 0
+1. machdep.cpu.arch_perf.version: 1
+1. machdep.cpu.arch_perf.number: 8
+1. machdep.cpu.arch_perf.width: 48
+1. machdep.cpu.arch_perf.events_number: 7
+1. machdep.cpu.arch_perf.events: 127
+1. machdep.cpu.arch_perf.fixed_number: 0
+1. machdep.cpu.arch_perf.fixed_width: 0
+1. machdep.cpu.cache.linesize: 64
+1. machdep.cpu.cache.L2_associativity: 8
+1. machdep.cpu.cache.size: 256
+1. machdep.cpu.tlb.inst.small: 128
+1. machdep.cpu.tlb.data.small: 64
+1. machdep.cpu.tlb.data.large: 32
+1. machdep.cpu.tlb.shared: 512
+1. machdep.cpu.address_bits.physical: 40
+1. machdep.cpu.address_bits.virtual: 48
+1. machdep.cpu.core_count: 1
+1. machdep.cpu.thread_count: 1
+
 ## Live images enhancement
 
-The live images could be made easier to use. The following minimum enhancements should be added:
+The live images could be made easier to use by not assuming a QWERTY keyboard layout.
+
+Not beeing able to choose a localized keyboard layout before having to type 'installer' or 'root' may be a deal breaker for some users.
+A simple menu replacing login(1) and displaying the following three choices could be a good solution:
 
-1. Let the user choose the keyboard layout at startup, do not assume QWERTY.
-Ideally, an user should be able to login after having selected a non-QWERTY layout without needing to use any of the alphabetic keys.
-2. Configure network interfaces automatically, using DHCP
+1. Set keyboard layout
+2. Launch the installer
+3. Login as root
 
 For more theoretical projects and project concepts see [[ResearchProjects|/docs/developer/ResearchProjectsPage]]