SchOS/kernel/dev
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
..
audio.c audio: /dev/dsp, AudioEngine, and an AC'97 under it 2026-09-24 14:23:13 +02:00
bio.c bio: a buffer cache that grows to 1/32 of RAM, looked up by hash 2026-10-23 13:28:12 +02:00
blkdev.c fs: follow symlinks like Linux; Linux mknod; /proc/partitions 2026-10-23 10:50:41 +02:00
cdev.c dev: read /dev/zero and /dev/urandom from them, not from the keyboard 2026-10-23 09:33:08 +02:00
dbg.c licence: SchOS is GPL-2.0-or-later, no longer Apache-2.0 2026-10-22 08:48:45 +02:00
device.c audio: /dev/dsp, AudioEngine, and an AC'97 under it 2026-09-24 14:23:13 +02:00
disk.c fat: FAT12, FAT16 and FAT32 with long names, read and write 2026-10-23 09:33:35 +02:00
dmi.c hwreport: describe a machine onto a USB stick, from a Linux-style /sys 2026-10-23 12:54:11 +02:00
fb.c gfx: draw the console in RAM, and write it to the card write-combined 2026-10-22 23:46:58 +02:00
gfx.c gfx: draw the console in RAM, and write it to the card write-combined 2026-10-22 23:46:58 +02:00
ide.c q35: five seconds of boot spent waiting on disks that are not there 2026-10-22 11:10:07 +02:00
input.c kernel: the clock ran 7x slow because the GPU never acknowledged its interrupt 2026-09-12 21:34:36 +02:00
irq.c acpi: uACPI, for interrupt routing, the power button and power-off 2026-10-22 16:12:28 +02:00
kbd.c kbd: three layouts, and the arrow keys were sitting on top of UTF-8 2026-09-20 01:09:32 +02:00
keymap.c kbd: three layouts, and the arrow keys were sitting on top of UTF-8 2026-09-20 01:09:32 +02:00
mouse.c boot: stop assuming the machine is an emulator 2026-10-22 10:29:12 +02:00
netuser.c licence: SchOS is GPL-2.0-or-later, no longer Apache-2.0 2026-10-22 08:48:45 +02:00
pci.c acpi: uACPI, for interrupt routing, the power button and power-off 2026-10-22 16:12:28 +02:00
pciuser.c licence: SchOS is GPL-2.0-or-later, no longer Apache-2.0 2026-10-22 08:48:45 +02:00
procfs.c bio: a buffer cache that grows to 1/32 of RAM, looked up by hash 2026-10-23 13:28:12 +02:00
ramdisk.c Initial commit: Schunix as it stands before the SchOS rename 2026-08-09 13:47:01 +02:00
text.c gfx: one glyph blitter, and a terminal cell is a surface 2026-09-23 17:57:16 +02:00
ttf.c font: the console draws outlines now, and a byte could not have held Ą 2026-09-20 00:35:34 +02:00
uart.c boot: one line when it works, all of it when it does not 2026-09-14 21:19:50 +02:00
vt.c gfx: draw the console in RAM, and write it to the card write-combined 2026-10-22 23:46:58 +02:00