Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 230710
b: refs/heads/master
c: b7aba69
h: refs/heads/master
v: v3
  • Loading branch information
Mel Gorman authored and Linus Torvalds committed Jan 14, 2011
1 parent e98047f commit 1b25529
Show file tree
Hide file tree
Showing 3 changed files with 88 additions and 2 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 2d90508f638241a2e7422d884767398296ebe720
refs/heads/master: b7aba6984dc048503b69c2a885098cdd430832bf
74 changes: 74 additions & 0 deletions trunk/include/trace/events/compaction.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
#undef TRACE_SYSTEM
#define TRACE_SYSTEM compaction

#if !defined(_TRACE_COMPACTION_H) || defined(TRACE_HEADER_MULTI_READ)
#define _TRACE_COMPACTION_H

#include <linux/types.h>
#include <linux/tracepoint.h>
#include "gfpflags.h"

DECLARE_EVENT_CLASS(mm_compaction_isolate_template,

TP_PROTO(unsigned long nr_scanned,
unsigned long nr_taken),

TP_ARGS(nr_scanned, nr_taken),

TP_STRUCT__entry(
__field(unsigned long, nr_scanned)
__field(unsigned long, nr_taken)
),

TP_fast_assign(
__entry->nr_scanned = nr_scanned;
__entry->nr_taken = nr_taken;
),

TP_printk("nr_scanned=%lu nr_taken=%lu",
__entry->nr_scanned,
__entry->nr_taken)
);

DEFINE_EVENT(mm_compaction_isolate_template, mm_compaction_isolate_migratepages,

TP_PROTO(unsigned long nr_scanned,
unsigned long nr_taken),

TP_ARGS(nr_scanned, nr_taken)
);

DEFINE_EVENT(mm_compaction_isolate_template, mm_compaction_isolate_freepages,
TP_PROTO(unsigned long nr_scanned,
unsigned long nr_taken),

TP_ARGS(nr_scanned, nr_taken)
);

TRACE_EVENT(mm_compaction_migratepages,

TP_PROTO(unsigned long nr_migrated,
unsigned long nr_failed),

TP_ARGS(nr_migrated, nr_failed),

TP_STRUCT__entry(
__field(unsigned long, nr_migrated)
__field(unsigned long, nr_failed)
),

TP_fast_assign(
__entry->nr_migrated = nr_migrated;
__entry->nr_failed = nr_failed;
),

TP_printk("nr_migrated=%lu nr_failed=%lu",
__entry->nr_migrated,
__entry->nr_failed)
);


#endif /* _TRACE_COMPACTION_H */

/* This part must be outside protection */
#include <trace/define_trace.h>
14 changes: 13 additions & 1 deletion trunk/mm/compaction.c
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,9 @@
#include <linux/sysfs.h>
#include "internal.h"

#define CREATE_TRACE_POINTS
#include <trace/events/compaction.h>

/*
* compact_control is used to track pages being migrated and the free pages
* they are being migrated to during memory compaction. The free_pfn starts
Expand Down Expand Up @@ -60,7 +63,7 @@ static unsigned long isolate_freepages_block(struct zone *zone,
struct list_head *freelist)
{
unsigned long zone_end_pfn, end_pfn;
int total_isolated = 0;
int nr_scanned = 0, total_isolated = 0;
struct page *cursor;

/* Get the last PFN we should scan for free pages at */
Expand All @@ -81,6 +84,7 @@ static unsigned long isolate_freepages_block(struct zone *zone,

if (!pfn_valid_within(blockpfn))
continue;
nr_scanned++;

if (!PageBuddy(page))
continue;
Expand All @@ -100,6 +104,7 @@ static unsigned long isolate_freepages_block(struct zone *zone,
}
}

trace_mm_compaction_isolate_freepages(nr_scanned, total_isolated);
return total_isolated;
}

Expand Down Expand Up @@ -234,6 +239,7 @@ static unsigned long isolate_migratepages(struct zone *zone,
struct compact_control *cc)
{
unsigned long low_pfn, end_pfn;
unsigned long nr_scanned = 0, nr_isolated = 0;
struct list_head *migratelist = &cc->migratepages;

/* Do not scan outside zone boundaries */
Expand Down Expand Up @@ -266,6 +272,7 @@ static unsigned long isolate_migratepages(struct zone *zone,
struct page *page;
if (!pfn_valid_within(low_pfn))
continue;
nr_scanned++;

/* Get the page and skip if free */
page = pfn_to_page(low_pfn);
Expand All @@ -280,6 +287,7 @@ static unsigned long isolate_migratepages(struct zone *zone,
del_page_from_lru_list(zone, page, page_lru(page));
list_add(&page->lru, migratelist);
cc->nr_migratepages++;
nr_isolated++;

/* Avoid isolating too much */
if (cc->nr_migratepages == COMPACT_CLUSTER_MAX)
Expand All @@ -291,6 +299,8 @@ static unsigned long isolate_migratepages(struct zone *zone,
spin_unlock_irq(&zone->lru_lock);
cc->migrate_pfn = low_pfn;

trace_mm_compaction_isolate_migratepages(nr_scanned, nr_isolated);

return cc->nr_migratepages;
}

Expand Down Expand Up @@ -401,6 +411,8 @@ static int compact_zone(struct zone *zone, struct compact_control *cc)
count_vm_events(COMPACTPAGES, nr_migrate - nr_remaining);
if (nr_remaining)
count_vm_events(COMPACTPAGEFAILED, nr_remaining);
trace_mm_compaction_migratepages(nr_migrate - nr_remaining,
nr_remaining);

/* Release LRU pages not migrated */
if (!list_empty(&cc->migratepages)) {
Expand Down

0 comments on commit 1b25529

Please sign in to comment.