Function report |
Source Code:mm\vmscan.c |
Create Date:2022-07-28 14:17:19 |
Last Modify:2022-05-23 13:41:30 | Copyright©Brick |
home page | Tree |
Annotation kernel can get tool activity | Download SCCT | Chinese |
Name:do_shrink_slab
Proto:static unsigned long do_shrink_slab(struct shrink_control *shrinkctl, struct shrinker *shrinker, int priority)
Type:unsigned long
Parameter:
Type | Parameter | Name |
---|---|---|
struct shrink_control * | shrinkctl | |
struct shrinker * | shrinker | |
int | priority |
430 | freed = 0 |
437 | batch_size = If claim batch size, 0 = default Then claim batch size, 0 = default Else SHRINK_BATCH |
439 | scanned = 0 |
444 | freeable = count_objects(shrinker, shrinkctl) |
445 | If freeable == 0 || freeable == SHRINK_EMPTY Then Return freeable |
453 | nr = atomic_long_xchg( & bjs pending delete, per node [nid], 0) |
455 | total_scan = nr |
456 | If seeks to recreate an obj Then |
458 | delta *= 4 |
460 | Else |
469 | total_scan += delta |
470 | If total_scan < 0 Then |
471 | pr_err("shrink_slab: %pS negative objects to delete nr=%ld\n", scan_objects, total_scan) |
473 | total_scan = freeable |
474 | next_deferred = nr |
475 | Else next_deferred = total_scan |
490 | If delta < freeable / 4 Then total_scan = min - return minimum of two values of the same or compatible types*@x: first value*@y: second value(total_scan, freeable / 2) |
498 | If total_scan > freeable * 2 Then total_scan = freeable * 2 |
519 | When total_scan >= batch_size || total_scan >= freeable cycle |
522 | nr_to_scan = min - return minimum of two values of the same or compatible types*@x: first value*@y: second value(batch_size, total_scan) |
524 | How many objects scan_objects should scan and try to reclaim.* This is reset before every call, so it is safe for callees* to modify. = nr_to_scan |
525 | How many objects did scan_objects process?* This defaults to nr_to_scan before every call, but the callee* should track its actual progress. = nr_to_scan |
526 | ret = scan_objects(shrinker, shrinkctl) |
527 | If ret == SHRINK_STOP Then Break |
531 | count_vm_events(SLABS_SCANNED, How many objects did scan_objects process?* This defaults to nr_to_scan before every call, but the callee* should track its actual progress.) |
532 | total_scan -= How many objects did scan_objects process?* This defaults to nr_to_scan before every call, but the callee* should track its actual progress. |
533 | scanned += How many objects did scan_objects process?* This defaults to nr_to_scan before every call, but the callee* should track its actual progress. |
535 | cond_resched() |
538 | If next_deferred >= scanned Then next_deferred -= scanned |
540 | Else next_deferred = 0 |
547 | If next_deferred > 0 Then new_nr = atomic_long_add_return(next_deferred, & bjs pending delete, per node [nid]) |
550 | Else new_nr = atomic_long_read( & bjs pending delete, per node [nid]) |
553 | trace_mm_shrink_slab_end(shrinker, nid, freed, nr, new_nr, total_scan) |
554 | Return freed |
Name | Describe |
---|---|
shrink_slab_memcg | |
shrink_slab | shrink_slab - shrink slab caches*@gfp_mask: allocation context*@nid: node whose slab caches to target*@memcg: memory cgroup whose slab caches to target*@priority: the reclaim priority* Call the shrink functions to age shrinkable caches |
Source code conversion tool public plug-in interface | X |
---|---|
Support c/c++/esqlc/java Oracle/Informix/Mysql Plug-in can realize: logical Report Code generation and batch code conversion |