[PATCH 3/3] writeback: Reporting dirty thresholds in /proc/vmstat

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



The kernel already exposes the desired thresholds in /proc/sys/vm with
dirty_background_ratio and background_ratio. Instead the kernel may
alter the number requested without giving the user any indication that
is the case.

Knowing the actual ratios the kernel is honoring can help app developers
understand how their buffered IO will be sent to the disk.

	$ grep threshold /proc/vmstat
	nr_pages_dirty_threshold 409111
	nr_pages_dirty_background_threshold 818223

Signed-off-by: Michael Rubin <mrubin@xxxxxxxxxx>
---
 include/linux/mmzone.h |    2 ++
 mm/vmstat.c            |    8 ++++++++
 2 files changed, 10 insertions(+), 0 deletions(-)

diff --git a/include/linux/mmzone.h b/include/linux/mmzone.h
index f160481..7c4a3bf 100644
--- a/include/linux/mmzone.h
+++ b/include/linux/mmzone.h
@@ -114,6 +114,8 @@ enum zone_stat_item {
 #endif
 	NR_PAGES_ENTERED_WRITEBACK, /* number of times pages enter writeback */
 	NR_FILE_PAGES_DIRTIED,      /* number of times pages get dirtied */
+	NR_PAGES_DIRTY_THRESHOLD,   /* writeback threshold */
+	NR_PAGES_DIRTY_BG_THRESHOLD,/* bg writeback threshold */
 	NR_VM_ZONE_STAT_ITEMS };
 
 /*
diff --git a/mm/vmstat.c b/mm/vmstat.c
index e177a40..8b5bc78 100644
--- a/mm/vmstat.c
+++ b/mm/vmstat.c
@@ -17,6 +17,7 @@
 #include <linux/vmstat.h>
 #include <linux/sched.h>
 #include <linux/math64.h>
+#include <linux/writeback.h>
 
 #ifdef CONFIG_VM_EVENT_COUNTERS
 DEFINE_PER_CPU(struct vm_event_state, vm_event_states) = {{0}};
@@ -742,6 +743,8 @@ static const char * const vmstat_text[] = {
 #endif
 	"nr_pages_entered_writeback",
 	"nr_file_pages_dirtied",
+	"nr_pages_dirty_threshold",
+	"nr_pages_dirty_background_threshold",
 
 #ifdef CONFIG_VM_EVENT_COUNTERS
 	"pgpgin",
@@ -901,6 +904,7 @@ static void *vmstat_start(struct seq_file *m, loff_t *pos)
 #ifdef CONFIG_VM_EVENT_COUNTERS
 	unsigned long *e;
 #endif
+	unsigned long dirty_thresh, dirty_bg_thresh;
 	int i;
 
 	if (*pos >= ARRAY_SIZE(vmstat_text))
@@ -918,6 +922,10 @@ static void *vmstat_start(struct seq_file *m, loff_t *pos)
 		return ERR_PTR(-ENOMEM);
 	for (i = 0; i < NR_VM_ZONE_STAT_ITEMS; i++)
 		v[i] = global_page_state(i);
+
+	get_dirty_limits(&dirty_thresh, &dirty_bg_thresh, NULL, NULL);
+	v[NR_PAGES_DIRTY_THRESHOLD] = dirty_thresh;
+	v[NR_PAGES_DIRTY_BG_THRESHOLD] = dirty_bg_thresh;
 #ifdef CONFIG_VM_EVENT_COUNTERS
 	e = v + NR_VM_ZONE_STAT_ITEMS;
 	all_vm_events(e);
-- 
1.7.1

--
To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Ext4 Filesystem]     [Union Filesystem]     [Filesystem Testing]     [Ceph Users]     [Ecryptfs]     [AutoFS]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux Cachefs]     [Reiser Filesystem]     [Linux RAID]     [Samba]     [Device Mapper]     [CEPH Development]
  Powered by Linux