* Re: [RFC] Defragmentation proposal: preventative maintenance and cleanup [LONG] [not found] ` <1426827386.999856726@[169.254.198.40].suse.lists.linux.kernel> @ 2001-09-07 9:34 ` Andi Kleen 0 siblings, 0 replies; 8+ messages in thread From: Andi Kleen @ 2001-09-07 9:34 UTC (permalink / raw) To: Alex Bligh - linux-kernel; +Cc: linux-kernel Alex Bligh - linux-kernel <linux-kernel@alex.org.uk> writes: > I'd be especially interested to know how we'd solve this for the > network stuff, which currently relies on physically contiguous packets > in memory. This is a *HUGE* change I think (larger than any we'd > make to the VM system). It's already fixed in the network stack for at least the most important protocols. The 2.4 stack supports iovecs of pages in skbs and also linked lists of skbs for a single packet. The biggest killer used to be defragmentation; that will just pass around a linked list now. There are cases where defragmentation-into-a-big-buffer is still needed (e.g. for most of netfilter), but fixing that is just small incremental change. -Andi ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: page_launder() on 2.4.9/10 issue
@ 2001-09-06 17:51 Daniel Phillips
2001-09-06 21:01 ` [RFC] Defragmentation proposal: preventative maintenance and cleanup [LONG] Alex Bligh - linux-kernel
0 siblings, 1 reply; 8+ messages in thread
From: Daniel Phillips @ 2001-09-06 17:51 UTC (permalink / raw)
To: Stephan von Krawczynski; +Cc: riel, jaharkes, marcelo, linux-kernel
On September 6, 2001 03:10 pm, Stephan von Krawczynski wrote:
> > Blindly delaying all the writes in the name of better read performance isn't
> > the right idea either. Perhaps we should have a good think about some
> > sensible mechanism for balancing reads against writes.
>
> I guess I have the real-world proof for that:
> Yesterday I mastered a CD (around 700 MB) and burned it, I left the equipment
> to get some food and sleep (sometimes needed :-). During this time the machine
> acts as nfs-server and gets about 3 GB of data written to it. Coming back today
> I recognise that deleting the CD image made yesterday frees up about 500 MB of
> physical mem (free mem was very low before). It was obviously held 24 hours for
> no reason, and _not_ (as one would expect) exchanged against the nfs-data. This
> means the caches were full with _old_ data and explains why nfs performance has
> remarkably dropped since 2.2. There is too few mem around to get good
> performance (no matter if read or write). Obviously aging did not work at all,
> there was not a single hit on these (CD image) pages during 24 hours, compared
> to lots on the nfs-data. Even if the nfs-data would only have one single hit,
> the old CD image should have been removed, because it is inactive and _older_.
OK, this is not related to what we were discussing (IO latency). It's not too
hard to fix, we just need to do a little aging whenever there are allocations,
whether or not there is memory_pressure. I don't think it's a real problem
though, we have at least two problems we really do need to fix (oom and
high order failures).
--
Daniel
^ permalink raw reply [flat|nested] 8+ messages in thread* [RFC] Defragmentation proposal: preventative maintenance and cleanup [LONG] 2001-09-06 17:51 page_launder() on 2.4.9/10 issue Daniel Phillips @ 2001-09-06 21:01 ` Alex Bligh - linux-kernel 2001-09-07 6:35 ` Daniel Phillips 0 siblings, 1 reply; 8+ messages in thread From: Alex Bligh - linux-kernel @ 2001-09-06 21:01 UTC (permalink / raw) To: Daniel Phillips, riel, linux-kernel; +Cc: Alex Bligh - linux-kernel I thought I'd try coding this, then I thought better of it and so am asking people's opinions first. The following describes a mechanism to change the zone/buddy allocation system to minimize fragmentation before it happens, and then defragment post-facto. Background, & Statement of problem ================================== High order [1] memory allocations tend to fail when memory is fragmented. Memory becomes fragmented through normal system usage, without memory pressure. When memory is fragmented, it stays fragmented. While non-atomic [2] high order can wait until progress is made freeing pages, the algorithm 'free pages without reference to their location until sufficient adjacent pages have by chance been freed for a coalescence' is inefficient compared to a defragmentation routine, or an attempt to free specific adjacent pages which may coalesce. The problem is worse for atomic [2] request, which can neither defragment memory (due to I/O and locking restrictions), nor can they make progress via (for instance) page_launder(). Therefore, in a fragmented memory environment, it has been observed that high order requests, particularly atomic ones [3], fail frequently. Common sources of atomic high order requests include allocations from the network layer where packets exceed 4k in size (for instance NFS packets with rsize,wsize>2048, fragmentation and reassembly), and the SCSI layer. Whilst it is undeniable that some drivers would benefit from using technologies like scatter lists to avoid the necessity of contiguous physical memory allocation, large swathes of current code assumes the opposite, and some is hard to change. [4] As many of these allocations occur in bottom half, or interrupt routines, it is more difficult to handle a failure gracefully than in other code. This tends to lead to performance problems [5], or worse (hard errors), which should be minimized. Causes of fragmentation ======================= Linux adopts a largely requestor-anonymous form of page allocation. Memory is divided into 3 zones, and page requesters can specify a list of suitable zones from which pages may be allocated, but beyond that, pages are allocated in a manner which does not distinguish between users of given pages. Thus pages allocated for packets in flight are likely to be intermingled with buffer pages, cache pages, code pages and data pages. Each of these different types of allocation has a different persistence over time. Some (for instance pages on the InactiveDirty list in an idle system) will persist indefinitely. The buddy allocator will attempt (by looking at lowest order lists first) to allocate pages from fragmented areas first. Assuming pages are freed at random, this would act as a defragmentation process. However, if a system is taken to high utilization and back again to idle, the dispersion of persistent pages (for instance InactiveDirty pages) becomes great, and the buddy allocator performs poorly at coalescing blocks. The situation is worsened by the understandable desire for simplicity in the VM system, which measures solely the number of pages free in different zones, as opposed their respective locations. It is possible (and has been observed) to have a system in a state with hardly any high order buddies on free area lists (thus where it would be impossible to make many atomic high order allocations), but copious easilly freeable RAM. This is in essence because no attempt is made to balance for different order free-lists, and shortage of entries on high-order free lists does not in itself cause memory pressure. It is probably undesirable for the normal VM system to react to fragmentation in the same way it does to normal memory pressure. This would result in an unselective paging out / discarding of data, whereas an approach which selected pages to free which would be most likely to cause coalescence would be more useful. Further, it would be possible, by moving the data in physical pages, to move many types of page, without loss of in-memory data at all. Approaches to solution ====================== It has been suggested that post-facto defragementation is a useful technique. This is undoubtedly true, but the defragmentation needs to run before it is 'needed' - i.e. we need to ensure that memory is never sufficiently fragmented that a reasonable size burst of high order atomic allocations can fail. This could be achieved by running some background defragmentation task against some measurable fragmentation target. Here fragmentation pressure would be an orthogonal measure to memory pressure. Non atomic high order allocations which are failing should allow the defragmenter to run, rather than call pagelaunder(). Defragmentation routines appear to be simple at first. Simply run through the free lists of particular zones, examining whether the constituent pages of buddies of free areas can be freed or moved. However, using this approach alone has some drawbacks. Firstly, it is not immediately obvious that by moving pages you are making the situation any better, because it is not clear that the (new) destination page will be allocated somewhere less awkward. Secondly, whilst many types of page can be allocated and moved with minimal effort (for instance pages on the Active or Inactive lists), it is less obvious how to move buffer and cache pages transparently (given only a pointer to the page struct to start with, it is hard to determine where they are used and referred to, for a start) and it is far from obvious how to move arbitrary pages allocated by the kernel for disparate purposes (including pages allocated by the slab allocator). However, this is not the only possibility to minimize fragmentation. Part of the problem is the fact that pages are allocated by location without reference to the caller. If (for instance) buffer pages tended to be allocated next to eachother, cache pages tended to be allocated next to eachother, pages allocated by the network stack tended to be allocated next to eachother, then a number of benefits would accrue: Firstly, defragmentation would be more successful. Defragmentation would tend to focus on pages allocated away from their natural brethren, and their newly allocated pages, into which their data would be moved, would tend to be next to these. This would help ensure that the new page was indeed a better location than the old page. Also, as pages of similar ease or difficulty to move would be clumped, the effect of a large number of difficult to move pages would be reduced by their mutual proximity. Secondly, defragmentation would be less necessary. Pages allocated by different functions have different natural persistence. For instance, pages allocated within the networking stack typically have short persistence, due to the transitory nature of the packets they represent. Therefore, in areas of memory preferred by low persistence users, the natural defragmentation effect of the buddy allocator would be greater. Therefore it is suggested that different allocators have affinities for different areas of memory. One mechanism of achieving this effect would be an extension to the zone system. Currently, there are three zones (DMA, Normal and High memory). Imagine instead, there were many more zones, and the above three labels became 'zone types'. There would thus be many DMA zones, many normal zones, and many high memory zones. These zones would be at least the highest order allocation in size - currently 2Mb on i386, but this could be reduced slightly with minimal disruption. In this manner, the efficiency of the buddy allocator is not reduced, as the buddy allocator has no visibility of coalescence etc. above this level anyway. Balancing would occur accross the aggregate of zone types (i.e. across all DMA zones in aggregate, accross all High memory zones in aggregate, etc.) as opposed to by individual zones. Each zone type would have an associated hash table, the entries being zones of that type. A routine requesting an allocation would pass information to __alloc_pages which identified it - it may well be that the GFP flags, the order, and perhaps some ID for the subsystem is sufficient. This would act as the key to the hash table concerned. When allocating a page, all zones in the hash table with the appropriate key (i.e. a matching allocator) are first tried, in order. If no page is found, then an empty zone (special key) is found, which is then labelled, and used as, a zone of the type required. If no empty zone is available of that zone type, then, other zone types (using the list of appropriate zone types are tried). If no page is found, then starting with the first zone type again, the first page in ANY zone within that zone hash table is utilized, and so on through other suitable zone types. In this manner, pages are likely to be clustered in zones by allocator. The role of the defragmenter becomes firstly to target pages which have an inappropriate key for the zone concerned, and secondly to target pages in sparsely allocated zones, so the zone becomes unkeyed, and free for rekeying later. As statistics could easilly be kept per zone on the number of appropriately and inappropriately keyed pages which had been allocated within that zone, scanning (and hence finding suitable targets) would become considerably easier. Equally, maintenance of these statistics can determine when the defragmenter should be run as a background process. Some further changes will be necessary; for instance direct_reclaim should not occur when the page to be reclaimed would be inappropriately keyed for the zone; in practice this means using direct reclaim only to reclaim pages for purposes where the allocated page might itself reach the InactiveDirty list AND where the page reclaimed is correctly keyed. Furthermore, the number unkeyed (i.e. empty) zones will need to have a particular low water market target, below which memory pressure must somehow be caused, in order to force buffer flushing or paging. This effectively relegates the buddy system to allocating pages for particular purposes within small chunks of memory - there is a parallel purpose here with a sort of extended slab system. The zone system would then become a low overhead manager of larger areas - a sort of 'super slab'. Thoughts? Notes ===== [1] Higher order meaning greater than order 0 [2] By atomic I mean without __GFP_WAIT set, which are in the main GFP_ATOMIC allocations. [3] The lack of any detail at all on non-atomic requests suggests that this is either a non-problem, or they are little used in the kernel - possibly wrongly so. [4] For instance, the network code assumes that packets (pre-fragmentation, or post-reassembly), are contiguous in memory. [5] For instance, packet drops, which whilst recoverable, impede performance. -- Alex Bligh ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [RFC] Defragmentation proposal: preventative maintenance and cleanup [LONG] 2001-09-06 21:01 ` [RFC] Defragmentation proposal: preventative maintenance and cleanup [LONG] Alex Bligh - linux-kernel @ 2001-09-07 6:35 ` Daniel Phillips 2001-09-07 8:58 ` Alex Bligh - linux-kernel 0 siblings, 1 reply; 8+ messages in thread From: Daniel Phillips @ 2001-09-07 6:35 UTC (permalink / raw) To: Alex Bligh - linux-kernel, riel, linux-kernel; +Cc: Alex Bligh - linux-kernel On September 6, 2001 11:01 pm, Alex Bligh - linux-kernel wrote: > I thought I'd try coding this, then I thought better of it and so am asking > people's opinions first. The following describes a mechanism to change the > zone/buddy allocation system to minimize fragmentation before it happens, > and then defragment post-facto. Nice exposition and analysis, but see my wet-blanket comments below... > [...] > > Causes of fragmentation > ======================= > > Linux adopts a largely requestor-anonymous form of page allocation. Memory > is divided into 3 zones, and page requesters can specify a list of suitable > zones from which pages may be allocated, but beyond that, pages are > allocated in a manner which does not distinguish between users of given > pages. It's a conscious goal to try to unify all sources of memory. The three zones that are there now are only there because they absolutely have to be. > Thus pages allocated for packets in flight are likely to be intermingled > with buffer pages, cache pages, code pages and data pages. Each of these > different types of allocation has a different persistence over time. Some > (for instance pages on the InactiveDirty list in an idle system) will > persist indefinitely. > > The buddy allocator will attempt (by looking at lowest order lists first) > to allocate pages from fragmented areas first. Assuming pages are freed at > random, this would act as a defragmentation process. However, if a system > is taken to high utilization and back again to idle, the dispersion of > persistent pages (for instance InactiveDirty pages) becomes great, and the > buddy allocator performs poorly at coalescing blocks. It becomes effectively useless. The probability of all 8 pages of a given 8 page unit being free when only 1% of memory is free is (1/100)**8 = 1/(10**16). > The situation is worsened by the understandable desire for simplicity in > the VM system, which measures solely the number of pages free in different > zones, as opposed their respective locations. It is possible (and has been > observed) to have a system in a state with hardly any high order buddies on > free area lists (thus where it would be impossible to make many atomic high > order allocations), but copious easilly freeable RAM. This is in essence > because no attempt is made to balance for different order free-lists, and > shortage of entries on high-order free lists does not in itself cause > memory pressure. > > It is probably undesirable for the normal VM system to react to > fragmentation in the same way it does to normal memory pressure. This would > result in an unselective paging out / discarding of data, whereas an > approach which selected pages to free which would be most likely to cause > coalescence would be more useful. Further, it would be possible, by moving > the data in physical pages, to move many types of page, without loss of > in-memory data at all. Moving pages sounds scary. We already know how to evict pages, but moving pages is a whole new mechanism. We probably would not care about the "good" data lost through eviction as opposed to moving fraction of pages we'd have to evict to do the required defragmentation is tiny. > Approaches to solution > ====================== I'm going to confess that I don't understand your solution in detail yet, however, I can see this complaint coming: the changes are too intrusive on the existing kernel, and if that's what we had to do it would probably be easier to just eliminate all high order allocations from the kernel. I already have heard some sentiment that the 0 order allocation failure problems do not have to be solved, that they are really the fault of those coders that used the feature in the first place. I don't know about that, I'd like to hear from the maintainers. But I'm pretty sure that whatever solution we come up with, it has to be very simple in implementation, and have roughly zero impact on the rest of the kernel. -- Daniel ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [RFC] Defragmentation proposal: preventative maintenance and cleanup [LONG] 2001-09-07 6:35 ` Daniel Phillips @ 2001-09-07 8:58 ` Alex Bligh - linux-kernel 2001-09-07 9:15 ` Alex Bligh - linux-kernel 2001-09-07 21:56 ` Daniel Phillips 0 siblings, 2 replies; 8+ messages in thread From: Alex Bligh - linux-kernel @ 2001-09-07 8:58 UTC (permalink / raw) To: Daniel Phillips, Alex Bligh - linux-kernel, riel, linux-kernel Cc: Alex Bligh - linux-kernel Daniel, Some comments in line - if you are modelling this, vital you understand the first! >> The buddy allocator will attempt (by looking at lowest order lists first) >> to allocate pages from fragmented areas first. Assuming pages are freed >> at random, this would act as a defragmentation process. However, if a >> system is taken to high utilization and back again to idle, the >> dispersion of persistent pages (for instance InactiveDirty pages) >> becomes great, and the buddy allocator performs poorly at coalescing >> blocks. > > It becomes effectively useless. The probability of all 8 pages of a given > 8 page unit being free when only 1% of memory is free is (1/100)**8 = > 1/(10**16). I thought that, then I tested & measured, and it simply isn't true. Your mathematical model is wrong. The reason is because pages are freed at random, but they are not allocated at random. The buddy allocator allocates pages whose buddy is allocated (lower order) preferentially to splitting a high order block. Sorry to sound like a broken record, but apply the /proc/memareas patch and you can see this happening. After extensive activity, you see practically none of the free pages in order 0 blocks. You might see only a small number (20 or 30 on a 64k machine) of (say) order 3 blocks, but if you run your stats you would have an expected value of well less than one, and the chance of having 20 or 30 would be vanishingly small. Local aggregation is actually quite effective, provided that the density of persistent pages is not too great. However, it gets considerably less effective as the order increases. > Moving pages sounds scary. We already know how to evict pages, but moving > pages is a whole new mechanism. We probably would not care about the > "good" data lost through eviction as opposed to moving fraction of pages > we'd have to evict to do the required defragmentation is tiny. The sort of moving I was talking about was a diskless page-out / page-in, i.e. which didn't require a swap file, or I/O, and was thus much quicker. Whilst the page would be physically moved, it's virtual address would stay the same. Though this sounds like a completely new system, I think there's a high probability of this just being a special case of the page out routine. > I'm going to confess that I don't understand your solution in detail yet, > however, I can see this complaint coming: the changes are too intrusive on > the existing kernel, A valid criticism. But difficult to see how defragmentation that actually takes account of the contents of memory (rather than 'blind' freeing) could be less intrusive - though I'm open to ideas. > and if that's what we had to do it would probably be > easier to just eliminate all high order allocations from the kernel. I > already have heard some sentiment that the 0 order allocation failure > problems do not have to be solved, that they are really the fault of those > coders that used the feature in the first place. I'd be especially interested to know how we'd solve this for the network stuff, which currently relies on physically contiguous packets in memory. This is a *HUGE* change I think (larger than any we'd make to the VM system). > But I'm pretty sure that whatever > solution we come up with, it has to be very simple in implementation, and > have roughly zero impact on the rest of the kernel. This would of course be ideal. -- Alex Bligh ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [RFC] Defragmentation proposal: preventative maintenance and cleanup [LONG] 2001-09-07 8:58 ` Alex Bligh - linux-kernel @ 2001-09-07 9:15 ` Alex Bligh - linux-kernel 2001-09-07 9:28 ` Alex Bligh - linux-kernel 2001-09-07 21:38 ` Daniel Phillips 2001-09-07 21:56 ` Daniel Phillips 1 sibling, 2 replies; 8+ messages in thread From: Alex Bligh - linux-kernel @ 2001-09-07 9:15 UTC (permalink / raw) To: Alex Bligh - linux-kernel, Daniel Phillips, riel, linux-kernel Cc: Alex Bligh - linux-kernel >> It becomes effectively useless. The probability of all 8 pages of a given >> 8 page unit being free when only 1% of memory is free is (1/100)**8 = >> 1/(10**16). > Sorry to sound like a broken record, but apply the > /proc/memareas patch and you can see this happening. After extensive > activity, you see practically none of the free pages in order 0 > blocks. You might see only a small number (20 or 30 on a 64k > machine) of (say) order 3 blocks, but if you run your stats > you would have an expected value of well less than one, and the > chance of having 20 or 30 would be vanishingly small. Ooops, what I wrote was factually correct, but misleading. What I meant was it looks like this: Zone 4kB 8kB 16kB 32kB 64kB 128kB 256kB 512kB 1024kB 2048kB Tot Pages/kb DMA 495 348 196 72 10 1 1 0 0 0 = 2807) @frag 0% 18% 42% 70% 91% 97% 98% 100% 100% 100% = 11228kB Normal 0 1579 1670 667 140 12 3 1 0 0 = 18118) @frag 0% 0% 17% 54% 84% 96% 98% 99% 100% 100% = 72472kB If your model was correct, you would see free pages per order run like N = a (K ^ (2^-o)); (for a>0, K>1, o=order) This doesn't happen. Instead you get GOOD coalescence at oder 0 (in the Normal zone they've ALL been coalesced), and not bad at order 1 (see how many order 2's we have). 8 page unit is order 3 (32k). This system has 20% of memory free at the point where I took the snap shot. Probability would be, (1/5)^8 = 2^8 / 10^8 = roughly p = 2.5 x 10^-6. In a system with 32000 pages (128Kb), if you were right, I'd expect to see about 0.08 free pages at order 3. But here I see 750. The chance of seeing more than 500 events of probability p = 2.5 ^ (10^-6) across 32000 samples, is vanishingly small. Yet it looks this way all the time. Hence I conclude your model is wrong :-) -- Alex Bligh ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [RFC] Defragmentation proposal: preventative maintenance and cleanup [LONG] 2001-09-07 9:15 ` Alex Bligh - linux-kernel @ 2001-09-07 9:28 ` Alex Bligh - linux-kernel 2001-09-07 21:38 ` Daniel Phillips 1 sibling, 0 replies; 8+ messages in thread From: Alex Bligh - linux-kernel @ 2001-09-07 9:28 UTC (permalink / raw) To: Alex Bligh - linux-kernel, Daniel Phillips, riel, linux-kernel Cc: Alex Bligh - linux-kernel Blush > N = a (K ^ (2^-o)); (for a>0, K>1, o=order) N = a (K ^ -(2^o)); (for a>0, K>1, o=order) -- Alex Bligh ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [RFC] Defragmentation proposal: preventative maintenance and cleanup [LONG] 2001-09-07 9:15 ` Alex Bligh - linux-kernel 2001-09-07 9:28 ` Alex Bligh - linux-kernel @ 2001-09-07 21:38 ` Daniel Phillips 1 sibling, 0 replies; 8+ messages in thread From: Daniel Phillips @ 2001-09-07 21:38 UTC (permalink / raw) To: Alex Bligh - linux-kernel, riel, linux-kernel; +Cc: Alex Bligh - linux-kernel On September 7, 2001 11:15 am, Alex Bligh - linux-kernel wrote: > >> It becomes effectively useless. The probability of all 8 pages of a given > The chance of seeing more than 500 events of probability > p = 2.5 ^ (10^-6) across 32000 samples, is vanishingly > small. Yet it looks this way all the time. > > Hence I conclude your model is wrong :-) True. OK, need to make a better model, time to crack my Knuth. -- Daniel ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [RFC] Defragmentation proposal: preventative maintenance and cleanup [LONG] 2001-09-07 8:58 ` Alex Bligh - linux-kernel 2001-09-07 9:15 ` Alex Bligh - linux-kernel @ 2001-09-07 21:56 ` Daniel Phillips 1 sibling, 0 replies; 8+ messages in thread From: Daniel Phillips @ 2001-09-07 21:56 UTC (permalink / raw) To: Alex Bligh - linux-kernel, riel, linux-kernel; +Cc: Alex Bligh - linux-kernel On September 7, 2001 10:58 am, Alex Bligh - linux-kernel wrote: > Some comments in line - if you are modelling this, vital you > understand the first! > > >> The buddy allocator will attempt (by looking at lowest order lists first) > >> to allocate pages from fragmented areas first. Assuming pages are freed > >> at random, this would act as a defragmentation process. However, if a > >> system is taken to high utilization and back again to idle, the > >> dispersion of persistent pages (for instance InactiveDirty pages) > >> becomes great, and the buddy allocator performs poorly at coalescing > >> blocks. > > > > It becomes effectively useless. The probability of all 8 pages of a given > > 8 page unit being free when only 1% of memory is free is (1/100)**8 = > > 1/(10**16). > > I thought that, then I tested & measured, and it simply isn't true. > Your mathematical model is wrong. Yes, a simple thought experiment show this. Suppose we start with an intial state of every second 0 order page allocated. Now, the next 0 order allocation must coalesce to a 1 order unit but the next allocate will come from a half-allocated allocated unit. If we continue randomly in this way, allocating one page and freeing one, we will eventually arrive at a state where half the pages are in 1 order units and the other half are fully allocated. So, the fragmentation is far from uniformly random. This is going to require deeper analysis. IMO, it's worth putting in the effort to get a handle on this. -- Daniel ^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2001-09-07 21:49 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
[not found] <20010907062851Z16136-26184+30@humbolt.nl.linux.org.suse.lists.linux.kernel>
[not found] ` <1426827386.999856726@[169.254.198.40].suse.lists.linux.kernel>
2001-09-07 9:34 ` [RFC] Defragmentation proposal: preventative maintenance and cleanup [LONG] Andi Kleen
2001-09-06 17:51 page_launder() on 2.4.9/10 issue Daniel Phillips
2001-09-06 21:01 ` [RFC] Defragmentation proposal: preventative maintenance and cleanup [LONG] Alex Bligh - linux-kernel
2001-09-07 6:35 ` Daniel Phillips
2001-09-07 8:58 ` Alex Bligh - linux-kernel
2001-09-07 9:15 ` Alex Bligh - linux-kernel
2001-09-07 9:28 ` Alex Bligh - linux-kernel
2001-09-07 21:38 ` Daniel Phillips
2001-09-07 21:56 ` Daniel Phillips
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®