On Wed, 15 Jan 2025 09:58:29 +0800 76824143@xxxxxx wrote: > From: Hao Zhang <zhanghao1@xxxxxxxxxx> > > Extract pressure balance calculation into a function.This > doesn't change current behaviour. OK, I guess it's a slight improvement and the size of my vmscan.o is unaltered. > --- a/mm/vmscan.c > +++ b/mm/vmscan.c > @@ -2367,6 +2367,43 @@ static void prepare_scan_control(pg_data_t *pgdat, struct scan_control *sc) > } > } > > +static inline void calculate_pressure_balance(struct scan_control *sc, int swappiness, > + u64 *fraction, u64 *denominator) As we're wrapping, we may as well wrap within 80 cols: --- a/mm/vmscan.c~mm-vmscan-extract-calculated-pressure-balance-as-a-function-fix +++ a/mm/vmscan.c @@ -2400,8 +2400,8 @@ static void prepare_scan_control(pg_data } } -static inline void calculate_pressure_balance(struct scan_control *sc, int swappiness, - u64 *fraction, u64 *denominator) +static inline void calculate_pressure_balance(struct scan_control *sc, + int swappiness, u64 *fraction, u64 *denominator) { unsigned long anon_cost, file_cost, total_cost; unsigned long ap, fp; _ _ > +{ > + unsigned long anon_cost, file_cost, total_cost; > + unsigned long ap, fp; > + > + /* > + * Calculate the pressure balance between anon and file pages. > + * > + * The amount of pressure we put on each LRU is inversely > + * proportional to the cost of reclaiming each list, as > + * determined by the share of pages that are refaulting, times > + * the relative IO cost of bringing back a swapped out > + * anonymous page vs reloading a filesystem page (swappiness). > + * > + * Although we limit that influence to ensure no list gets > + * left behind completely: at least a third of the pressure is > + * applied, before swappiness. > + * > + * With swappiness at 100, anon and file have equal IO cost. > + */ > + total_cost = sc->anon_cost + sc->file_cost; > + anon_cost = total_cost + sc->anon_cost; > + file_cost = total_cost + sc->file_cost; > + total_cost = anon_cost + file_cost; > + > + ap = swappiness * (total_cost + 1); > + ap /= anon_cost + 1; > + > + fp = (MAX_SWAPPINESS - swappiness) * (total_cost + 1); > + fp /= file_cost + 1; > + > + fraction[WORKINGSET_ANON] = ap; > + fraction[WORKINGSET_FILE] = fp; > + *denominator = ap + fp; > +} > + > /* > * Determine how aggressively the anon and file LRU lists should be > * scanned. > @@ -2379,12 +2416,10 @@ static void get_scan_count(struct lruvec *lruvec, struct scan_control *sc, > { > struct pglist_data *pgdat = lruvec_pgdat(lruvec); > struct mem_cgroup *memcg = lruvec_memcg(lruvec); > - unsigned long anon_cost, file_cost, total_cost; > int swappiness = sc_swappiness(sc, memcg); > u64 fraction[ANON_AND_FILE]; > u64 denominator = 0; /* gcc */ > enum scan_balance scan_balance; > - unsigned long ap, fp; > enum lru_list lru; > > /* If we have no swap space, do not bother scanning anon folios. */ > @@ -2433,35 +2468,8 @@ static void get_scan_count(struct lruvec *lruvec, struct scan_control *sc, > } > > scan_balance = SCAN_FRACT; > - /* > - * Calculate the pressure balance between anon and file pages. > - * > - * The amount of pressure we put on each LRU is inversely > - * proportional to the cost of reclaiming each list, as > - * determined by the share of pages that are refaulting, times > - * the relative IO cost of bringing back a swapped out > - * anonymous page vs reloading a filesystem page (swappiness). > - * > - * Although we limit that influence to ensure no list gets > - * left behind completely: at least a third of the pressure is > - * applied, before swappiness. > - * > - * With swappiness at 100, anon and file have equal IO cost. > - */ > - total_cost = sc->anon_cost + sc->file_cost; > - anon_cost = total_cost + sc->anon_cost; > - file_cost = total_cost + sc->file_cost; > - total_cost = anon_cost + file_cost; > - > - ap = swappiness * (total_cost + 1); > - ap /= anon_cost + 1; > - > - fp = (MAX_SWAPPINESS - swappiness) * (total_cost + 1); > - fp /= file_cost + 1; > + calculate_pressure_balance(sc, swappiness, fraction, &denominator); > > - fraction[0] = ap; > - fraction[1] = fp; > - denominator = ap + fp; > out: > for_each_evictable_lru(lru) { > bool file = is_file_lru(lru); > > base-commit: eea6e4b4dfb8859446177c32961c96726d0117be > -- > 2.25.1