ia64/xen-unstable

view xen/TODO @ 489:3eeebe63afee

bitkeeper revision 1.263 (3f044553Casub9OwqMoobhkY4qWGpQ)

Apply Composite pattern to add recursive command parsing; this allows commands to be in groups so that the user interface isn't quite so unwieldy.
In order to make this sensible, rename the domain classes to indicate better what they are.
author rac61@labyrinth.cl.cam.ac.uk
date Thu Jul 03 15:01:39 2003 +0000 (2003-07-03)
parents 5e482605e7d8
children 3aa0265ba99b
line source
2 This is stuff we probably want to implement in the near future. I
3 think I have them in a sensible priority order -- the first few would
4 be nice to fix before a code release. The later ones can be
5 longer-term goals.
7 -- Keir (16/3/03)
10 1. ACCURATE TIMERS AND WALL-CLOCK TIME
11 --------------------------------------
12 Currently our long-term timebase free runs on CPU0, with no external
13 calibration. We should run ntpd on domain 0 and allow this to warp
14 Xen's timebase. Once this is done, we can have a timebase per CPU and
15 not worry about relative drift (since they'll all get sync'ed
16 periodically by ntp).
18 2. ASSIGNING DOMAINS TO PROCESSORS
19 ----------------------------------
20 More intelligent assignment of domains to processors. In
21 particular, we don't play well with hyperthreading: we will assign
22 domains to virtual processors on the same package, rather then
23 spreading them across processor packages.
25 What we need to do is port code from Linux which stores information on
26 relationships between processors in the system (eg. which ones are
27 siblings in the same package). We then use this to balance domains
28 across packages, and across virtual processors within a package.
30 3. DOMAIN 0 MANAGEMENT DAEMON
31 -----------------------------
32 A better control daemon is required for domain 0, which keeps proper
33 track of machine resources and can make sensible policy choices. This
34 may require support in Xen; for example, notifications (eg. DOMn is
35 killed), and requests (eg. can DOMn allocate x frames of memory?).
37 4. SANE NETWORK ROUTING
38 -----------------------
39 The current virtual firewall/router is completely broken. Needs a new
40 design and implementation!
42 5. NETWORK CHECKSUM OFFLOAD
43 ---------------------------
44 All the NICs that we support can checksum packets on behalf of guest
45 OSes. We need to add appropriate flags to and from each domain to
46 indicate, on transmit, which packets need the checksum added and, on
47 receive, which packets have been checked out as okay. We can steal
48 Linux's interface, which is entirely sane given NIC limitations.
50 6. MODULE SUPPORT FOR XEN
51 -------------------------
52 Network and blkdev drivers are bloating Xen. At some point we want to
53 build drivers as modules, stick them in a cheesy ramfs, then relocate
54 them one by one at boot time. If a driver duccessfully probes hardware
55 we keep it, otherwise we blow it away. Alternative is to have a
56 central PCI ID to driver name repository. We then use that to decide
57 which drivers to load.
59 Most of the hard stuff (relocating and the like) is done for us by
60 Linux's module system.
62 7. NEW DESIGN FEATURES
63 ----------------------
64 This includes the last-chance page cache, and the unified buffer cache.
68 Graveyard
69 *********
71 The hypervisor page cache
72 -------------------------
73 This will allow guest OSes to make use of spare pages in the system, but
74 allow them to be immediately used for any new domains or memory requests.
75 The idea is that, when a page is laundered and falls off Linux's clean_LRU
76 list, rather than freeing it it becomes a candidate for passing down into
77 the hypervisor. In return, xeno-linux may ask for one of its previously-
78 cached pages back:
79 (page, new_id) = cache_query(page, old_id);
80 If the requested page couldn't be kept, a blank page is returned.
81 When would Linux make the query? Whenever it wants a page back without
82 the delay or going to disc. Also, whenever a page would otherwise be
83 flushed to disc.
85 To try and add to the cache: (blank_page, new_id) = cache_query(page, NULL);
86 [NULL means "give me a blank page"].
87 To try and retrieve from the cache: (page, new_id) = cache_query(x_page, id)
88 [we may request that x_page just be discarded, and therefore not impinge
89 on this domain's cache quota].