SchOS/include
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Nexoniarz 62d2a85ac8 bio: a buffer cache that grows to 1/32 of RAM, looked up by hash
The cache was NBUF buffers, 1 MB, on every machine: enough for one with
tens of megabytes and nothing on one with gigabytes, which re-read the
same directory and binary blocks off the disk for every command. It
still starts as those 256 in the kernel image, and a miss with every
buffer busy now makes a new one rather than evicting, up to 1/32 of RAM
or 256 MB. Growing on demand means nothing is spent that is not used,
and binit() needs nothing from the page allocator.

Lookups go through a hash on (dev, blockno) instead of walking the LRU
list, and bflush() walks a creation-order list with an unlocked filter
first, so neither costs more at 65536 buffers than it did at 256.
struct buf's data is a pointer to its own page now; the drivers copy
through their own DMA buffers, so where it sits does not matter.

On a 2 GB QEMU guest: a 40 MB file read back in 0.89 s instead of 1.83,
the big binaries in 0.17 s instead of 0.26. /proc/fsstat shows the
cache as buf_cached now / most.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01S1giNvrHTrPMPw7V6x1kQ4
2026-10-23 13:28:12 +02:00
..
acpi.h acpi: uACPI, for interrupt routing, the power button and power-off 2026-10-22 16:12:28 +02:00
asm.h Initial commit: Schunix as it stands before the SchOS rename 2026-08-09 13:47:01 +02:00
audio.h audio: /dev/dsp, AudioEngine, and an AC'97 under it 2026-09-24 14:23:13 +02:00
blkdev.h vfs: room for 32 disks and partitions, 32 mounts, 16 SchFS volumes 2026-10-23 12:19:50 +02:00
buf.h bio: a buffer cache that grows to 1/32 of RAM, looked up by hash 2026-10-23 13:28:12 +02:00
config_sinit.h Initial commit: Schunix as it stands before the SchOS rename 2026-08-09 13:47:01 +02:00
date.h Initial commit: Schunix as it stands before the SchOS rename 2026-08-09 13:47:01 +02:00
dbg.h debugger: D5, the network transport -- and the plan closes 2026-09-14 15:33:53 +02:00
defs.h mm: the loader jumped out from under itself, and 3 GB was never the limit 2026-09-25 15:23:55 +02:00
device.h audio: /dev/dsp, AudioEngine, and an AC'97 under it 2026-09-24 14:23:13 +02:00
display.h gfx: the second head shows the boot, not just what comes after it 2026-09-22 21:47:35 +02:00
dma.h dma: the 4 MB cap was the refusal, not the arena 2026-09-14 22:52:20 +02:00
elf.h Initial commit: Schunix as it stands before the SchOS rename 2026-08-09 13:47:01 +02:00
errno.h schfs: a format version policy, and refusing is not falling back 2026-09-12 17:13:59 +02:00
fat.h vfs: room for 32 disks and partitions, 32 mounts, 16 SchFS volumes 2026-10-23 12:19:50 +02:00
fb.h Rename Schunix to SchOS; the kernel becomes SchIFT 2026-08-09 14:09:59 +02:00
fcntl.h Rename Schunix to SchOS; the kernel becomes SchIFT 2026-08-09 14:09:59 +02:00
file.h exec: Linux's 2 MB of arguments; mmap: merge neighbouring mappings 2026-10-23 13:20:29 +02:00
font.h Rename Schunix to SchOS; the kernel becomes SchIFT 2026-08-09 14:09:59 +02:00
fs.h init survives stray signals; commands are 4-34x faster 2026-08-09 15:54:05 +02:00
fsstat.h licence: SchOS is GPL-2.0-or-later, no longer Apache-2.0 2026-10-22 08:48:45 +02:00
gfx.h gfx: draw the console in RAM, and write it to the card write-combined 2026-10-22 23:46:58 +02:00
hwinfo.h hwreport: describe a machine onto a USB stick, from a Linux-style /sys 2026-10-23 12:54:11 +02:00
input.h usb-hid: bind an absolute pointer, and plumb EV_ABS through 2026-08-10 18:27:01 +02:00
ioperm.h ldls: a second driver, and everything it found 2026-09-14 15:20:07 +02:00
irq.h acpi: uACPI, for interrupt routing, the power button and power-off 2026-10-22 16:12:28 +02:00
kbd.h kbd: three layouts, and the arrow keys were sitting on top of UTF-8 2026-09-20 01:09:32 +02:00
keymap.h kbd: three layouts, and the arrow keys were sitting on top of UTF-8 2026-09-20 01:09:32 +02:00
klog.h debugger: D5, the network transport -- and the plan closes 2026-09-14 15:33:53 +02:00
kmem.h kmem: a slab allocator, and what the fixed tables actually cost 2026-09-22 09:32:06 +02:00
logo.h docs: a branding folder, and the three marks are not interchangeable 2026-09-12 18:19:09 +02:00
memlayout.h mm: the loader jumped out from under itself, and 3 GB was never the limit 2026-09-25 15:23:55 +02:00
mmu.h Initial commit: Schunix as it stands before the SchOS rename 2026-08-09 13:47:01 +02:00
mp.h boot: stop assuming the machine is an emulator 2026-10-22 10:29:12 +02:00
netdev.h net: a frame wakes the stack, instead of waiting for the clock 2026-09-12 17:23:46 +02:00
netuser.h ldls: L4 was free after all, and the plan closes 2026-09-14 13:37:04 +02:00
param.h exec: Linux's 2 MB of arguments; mmap: merge neighbouring mappings 2026-10-23 13:20:29 +02:00
pci.h acpi: uACPI, for interrupt routing, the power button and power-off 2026-10-22 16:12:28 +02:00
pciuser.h licence: SchOS is GPL-2.0-or-later, no longer Apache-2.0 2026-10-22 08:48:45 +02:00
posix.h licence: SchOS is GPL-2.0-or-later, no longer Apache-2.0 2026-10-22 08:48:45 +02:00
proc.h proc: real CPU time, a tty number, and an exe that is a symlink 2026-09-22 02:45:00 +02:00
qr.h docs: four directories, and a rule for when a thing leaves the roadmap 2026-09-12 17:13:35 +02:00
sbuf.h debugger: D5, the network transport -- and the plan closes 2026-09-14 15:33:53 +02:00
schboot.h hwreport: describe a machine onto a USB stick, from a Linux-style /sys 2026-10-23 12:54:11 +02:00
schfs.h unix: a bound socket is a file 2026-09-22 10:06:10 +02:00
schinit.h licence: SchOS is GPL-2.0-or-later, no longer Apache-2.0 2026-10-22 08:48:45 +02:00
sleeplock.h Initial commit: Schunix as it stands before the SchOS rename 2026-08-09 13:47:01 +02:00
socket.h unix: a bound socket is a file 2026-09-22 10:06:10 +02:00
spinlock.h Initial commit: Schunix as it stands before the SchOS rename 2026-08-09 13:47:01 +02:00
stat.h unix: a bound socket is a file 2026-09-22 10:06:10 +02:00
syscall.h Initial commit: Schunix as it stands before the SchOS rename 2026-08-09 13:47:01 +02:00
text.h gfx: one glyph blitter, and a terminal cell is a surface 2026-09-23 17:57:16 +02:00
theme.h gfx: the console and the crash screen stop drawing on a driver by name 2026-08-15 17:04:10 +02:00
traps.h irq: MSI first, and poll the INTx lines that never arrive 2026-10-22 10:29:24 +02:00
ttf.h Initial commit: Schunix as it stands before the SchOS rename 2026-08-09 13:47:01 +02:00
types.h Initial commit: Schunix as it stands before the SchOS rename 2026-08-09 13:47:01 +02:00
uaccess.h exec: Linux's 2 MB of arguments; mmap: merge neighbouring mappings 2026-10-23 13:20:29 +02:00
usb.h usb: plug and play -- hot-plug, unplug, every interface, real mice 2026-10-22 11:38:13 +02:00
user.h hwreport: describe a machine onto a USB stick, from a Linux-style /sys 2026-10-23 12:54:11 +02:00
virtio.h hybrid: a modeset, from a process 2026-09-14 01:36:05 +02:00
vmap.h gfx: draw the console in RAM, and write it to the card write-combined 2026-10-22 23:46:58 +02:00
vt.h licence: SchOS is GPL-2.0-or-later, no longer Apache-2.0 2026-10-22 08:48:45 +02:00
x86.h audio: /dev/dsp, AudioEngine, and an AC'97 under it 2026-09-24 14:23:13 +02:00