[Devel] [PATCH v3 rh7 2/2] mm/page-writeback: Introduce per-CT dirty memory limit.
Andrey Ryabinin
aryabinin at virtuozzo.com
Thu Jan 21 02:55:32 PST 2016
On 01/21/2016 01:35 PM, Vladimir Davydov wrote:
>> + if (ub_dirty + ub_writeback <= ub_thresh)
>> + break;
>> + if (!writeback_in_progress(bdi))
>> + bdi_start_background_writeback(bdi);
>> +
>> + /*
>> + * Throttle it only when the background writeback cannot
>> + * catch-up. This avoids (excessively) small writeouts
>> + * when the bdi limits are ramping up.
>> + */
>> + if (ub_dirty + ub_writeback <
>> + (ub_background_thresh + ub_thresh) / 2)
>> + break;
>> +
>> + if (ub_dirty > ub_thresh) {
>> + pages_written = writeback_inodes_wb(&bdi->wb, write_chunk,
>
> You need to subtract the number of pages written from write_chunk here,
> obviously.
>
Hm... I think you're bit wrong here. We shouldn't change write_chunk.
I did the following:
diff --git a/mm/page-writeback.c b/mm/page-writeback.c
index 951330e..090b6e6 100644
--- a/mm/page-writeback.c
+++ b/mm/page-writeback.c
@@ -1403,6 +1403,8 @@ static void balance_dirty_pages_ub(struct address_space *mapping,
struct backing_dev_info *bdi = mapping->backing_dev_info;
for (;;) {
+ unsigned long nr_to_write = write_chunk;
+
ub_dirty = ub_stat_get(ub, dirty_pages);
ub_writeback = ub_stat_get(ub, writeback_pages);
@@ -1428,8 +1430,10 @@ static void balance_dirty_pages_ub(struct address_space *mapping,
break;
if (ub_dirty > ub_thresh) {
- pages_written = writeback_inodes_wb(&bdi->wb, write_chunk,
- WB_REASON_BACKGROUND, ub);
+ pages_written += writeback_inodes_wb(&bdi->wb,
+ nr_to_write,
+ WB_REASON_BACKGROUND,
+ ub);
ub_dirty = ub_stat_get(ub, dirty_pages);
ub_writeback = ub_stat_get(ub, writeback_pages);
More information about the Devel
mailing list