[LU-13289] cgroup writeback support for Lustre kernel 5.2+ is broken Created: 22/Feb/20  Updated: 25/Feb/20  Resolved: 25/Feb/20

Status: Resolved
Project: Lustre
Component/s: None
Affects Version/s: None
Fix Version/s: None

Type: Bug Priority: Minor
Reporter: Wang Shilong (Inactive) Assignee: WC Triage
Resolution: Duplicate Votes: 0
Labels: None

Issue Links:
Related
is related to LU-13288 a performance regression on the singl... Resolved
Severity: 3
Rank (Obsolete): 9223372036854775807

 Description   

Since newer kernel no long export account_page_dirtied()

void account_page_dirtied(struct page *page, struct address_space *mapping)
{
        struct inode *inode = mapping->host;

        trace_writeback_dirty_page(page, mapping);

        if (mapping_cap_account_dirty(mapping)) {
                struct bdi_writeback *wb; 

                inode_attach_wb(inode, page);
                wb = inode_to_wb(inode);

                __inc_lruvec_page_state(page, NR_FILE_DIRTY);
                __inc_zone_page_state(page, NR_ZONE_WRITE_PENDING);
                __inc_node_page_state(page, NR_DIRTIED);
                inc_wb_stat(wb, WB_RECLAIMABLE);
                inc_wb_stat(wb, WB_DIRTIED);
                task_io_account_write(PAGE_SIZE);
                current->nr_dirtied++;
                this_cpu_inc(bdp_ratelimits);

                mem_cgroup_track_foreign_dirty(page, wb); 
        }                                                                                                                                              
}

It looks harder to add Lustre cgourp support for new kernel, as copy function back to Lustre dosen't work, as there is static bdp_ratelimits in page-writeback.c , aslo potentially, we might call
__set_page_dirty_nobuffers(), but the problem is Lustre assume page locked, while __set_page_dirty_nobuffers() assume unlocked .

This looks not easy to be fixed without any upstream linux modifications..



 Comments   
Comment by Wang Shilong (Inactive) [ 22/Feb/20 ]

One of walkaround might be we unlock page before call __set_page_dirty_nobuffers(), but there might be some possible race for this?

Comment by Wang Shilong (Inactive) [ 24/Feb/20 ]

One of intresting approach could be using kprobe, there is an API kallsyms_lookup_name() to do this, luckily it looks its config is enabled by default.

Comment by Andreas Dilger [ 24/Feb/20 ]

Shilong, can this be resolved by the patch https://review.whamcloud.com/37686 "LU-13288 llite: Re-export account_page_dirtied", or are there more issues related to cgroups that also need to be fixed?

Comment by Wang Shilong (Inactive) [ 25/Feb/20 ]

adilgerI think patch perfectly solve the problem this ticket try to address.

Generated at Sat Feb 10 03:00:00 UTC 2024 using Jira 9.4.14#940014-sha1:734e6822bbf0d45eff9af51f82432957f73aa32c.