There is a bare minimum structure required for something to be associated with a device node. The device nodes exist regardless, and the dynamic allocation of the other things (like the screen state, the output buffer, etc) gets triggered on first access to the node. 1.6k is probably not the absolute minimum it could be, but there are still things that need to be there for it to behave the way it's supposed to. At a minimum, you need stuff to associate the device numbers, handle the tty ioctls, handle device node access, and probably an associated lock or two to maintain consistency. None of that can reasonably be dynamically allocated without multiplexing everything through a single underlying virtual device (kind of like is done with PTY's) or adding some new system calls to manage it, except that that would change the userspace API, and thus be a regression.In fact, there already appears to be some degree of allocation on demand
for VT's (otherwise deallocvt has no point), just not for everything
associated with the VT. I'd be willing to bet that almost everything
that reasonably can be dynamically allocated already is, there is a bare
minimum required for even a virtual device after all.
If there is 1.6K overhead per vt coming from somewhere (given we only
preallocate 1 VT) then either
- There is stuff not being dynamically allocated (which you can find and
fix)
- Your userspace is triggering those dynamic allocations
There is no magic thing that requires 1.6K of kernel data per console.