TODO revision 1.5 1 1.5 perseant # $NetBSD: TODO,v 1.5 2001/07/13 20:30:22 perseant Exp $
2 1.2 cgd
3 1.5 perseant - Investigate alternate inode locking strategy: Inode locks are useful
4 1.5 perseant for locking against simultaneous changes to inode size (balloc,
5 1.5 perseant truncate, write) but because the assignment of disk blocks is also
6 1.5 perseant covered by the segment lock, we don't really need to pay attention to
7 1.5 perseant the inode lock when writing a segment, right? If this is true, the
8 1.5 perseant locking problem in lfs_{bmapv,markv} goes away and lfs_reserve can go,
9 1.5 perseant too.
10 1.3 perseant
11 1.5 perseant - Fully working fsck_lfs. (Really, need a general-purpose external
12 1.3 perseant partial-segment writer.)
13 1.3 perseant
14 1.3 perseant - Inode blocks are currently the same size as the fs block size; but all
15 1.3 perseant the ones I've seen are mostly empty, and this will be especially true
16 1.3 perseant if atime information is kept in the ifile instead of the inode. Could
17 1.5 perseant we shrink the inode block size to DEV_BSIZE? Or parametrize it at fs
18 1.3 perseant creation time?
19 1.3 perseant
20 1.3 perseant - Get rid of DEV_BSIZE, pay attention to the media block size at mount time.
21 1.3 perseant
22 1.3 perseant - More fs ops need to call lfs_imtime. Which ones? (Blackwell et al., 1995)
23 1.3 perseant
24 1.3 perseant - lfs_vunref_head exists so that vnodes loaded solely for cleaning can
25 1.3 perseant be put back on the *head* of the vnode free list. Make sure we
26 1.3 perseant actually do this, since we now take IN_CLEANING off during segment write.
27 1.3 perseant
28 1.3 perseant - The cleaner could be enhanced to be controlled from other processes,
29 1.3 perseant and possibly perform additional tasks:
30 1.3 perseant
31 1.3 perseant - Backups. At a minimum, turn the cleaner off and on to allow
32 1.3 perseant effective live backups. More aggressively, the cleaner itself could
33 1.3 perseant be the backup agent, and dump_lfs would merely be a controller.
34 1.3 perseant
35 1.3 perseant - Cleaning time policies. Be able to tweak the cleaner's thresholds
36 1.3 perseant to allow more thorough cleaning during policy-determined idle
37 1.3 perseant periods (regardless of actual idleness) or put off until later
38 1.3 perseant during short, intensive write periods.
39 1.3 perseant
40 1.3 perseant - File coalescing and placement. During periods we expect to be idle,
41 1.3 perseant coalesce fragmented files into one place on disk for better read
42 1.3 perseant performance. Ideally, move files that have not been accessed in a
43 1.3 perseant while to the extremes of the disk, thereby shortening seek times for
44 1.3 perseant files that are accessed more frequently (though how the cleaner
45 1.3 perseant should communicate "please put this near the beginning or end of the
46 1.3 perseant disk" to the kernel is a very good question; flags to lfs_markv?).
47 1.3 perseant
48 1.3 perseant - Versioning. When it cleans a segment it could write data for files
49 1.3 perseant that were less than n versions old to tape or elsewhere. Perhaps it
50 1.3 perseant could even write them back onto the disk, although that requires
51 1.3 perseant more thought (and kernel mods).
52 1.3 perseant
53 1.3 perseant - Move lfs_countlocked() into vfs_bio.c, to replace count_locked_queue;
54 1.3 perseant perhaps keep the name, replace the function. Could it count referenced
55 1.3 perseant vnodes as well, if it was in vfs_subr.c instead?
56 1.3 perseant
57 1.3 perseant - Why not delete the lfs_bmapv call, just mark everything dirty that
58 1.3 perseant isn't deleted/truncated? Get some numbers about what percentage of
59 1.3 perseant the stuff that the cleaner thinks might be live is live. If it's
60 1.3 perseant high, get rid of lfs_bmapv.
61 1.3 perseant
62 1.3 perseant - There is a nasty problem in that it may take *more* room to write the
63 1.3 perseant data to clean a segment than is returned by the new segment because of
64 1.3 perseant indirect blocks in segment 2 being dirtied by the data being copied
65 1.3 perseant into the log from segment 1. The suggested solution at this point is
66 1.3 perseant to detect it when we have no space left on the filesystem, write the
67 1.3 perseant extra data into the last segment (leaving no clean ones), make it a
68 1.3 perseant checkpoint and shut down the file system for fixing by a utility
69 1.3 perseant reading the raw partition. Argument is that this should never happen
70 1.3 perseant and is practically impossible to fix since the cleaner would have to
71 1.3 perseant theoretically build a model of the entire filesystem in memory to
72 1.3 perseant detect the condition occurring. A file coalescing cleaner will help
73 1.3 perseant avoid the problem, and one that reads/writes from the raw disk could
74 1.3 perseant fix it.
75 1.3 perseant
76 1.3 perseant - Need to keep vnode v_numoutput up to date for pending writes?
77 1.3 perseant
78 1.3 perseant - If delete a file that's being executed, the version number isn't
79 1.3 perseant updated, and fsck_lfs has to figure this out; case is the same as if
80 1.3 perseant have an inode that no directory references, so the file should be
81 1.3 perseant reattached into lost+found.
82 1.3 perseant
83 1.3 perseant - Currently there's no notion of write error checking.
84 1.3 perseant + Failed data/inode writes should be rescheduled (kernel level bad blocking).
85 1.3 perseant + Failed superblock writes should cause selection of new superblock
86 1.3 perseant for checkpointing.
87 1.3 perseant
88 1.3 perseant - Future fantasies:
89 1.3 perseant - unrm, versioning
90 1.3 perseant - transactions
91 1.3 perseant - extended cleaner policies (hot/cold data, data placement)
92 1.3 perseant
93 1.3 perseant - Problem with the concept of multiple buffer headers referencing the segment:
94 1.3 perseant Positives:
95 1.3 perseant Don't lock down 1 segment per file system of physical memory.
96 1.3 perseant Don't copy from buffers to segment memory.
97 1.3 perseant Don't tie down the bus to transfer 1M.
98 1.3 perseant Works on controllers supporting less than large transfers.
99 1.3 perseant Disk can start writing immediately instead of waiting 1/2 rotation
100 1.3 perseant and the full transfer.
101 1.3 perseant Negatives:
102 1.3 perseant Have to do segment write then segment summary write, since the latter
103 1.3 perseant is what verifies that the segment is okay. (Is there another way
104 1.3 perseant to do this?)
105 1.1 mycroft
106 1.3 perseant - The algorithm for selecting the disk addresses of the super-blocks
107 1.3 perseant has to be available to the user program which checks the file system.
108