mmpage-writeback.c文件里面都是啥
时间: 2024-03-18 13:42:59 浏览: 111
mmpage-writeback.c文件是Linux内核中负责脏页(被修改但尚未写回磁盘的页)回写的组件的实现。该文件包含了一些函数,如`writeback_sb_inodes()`和`writeback_inodes_wb()`等,用于将脏页写回到块设备中。这些函数会在特定的条件下触发,如系统资源紧张、文件系统挂载等。此外,mmpage-writeback.c文件还包含了一些与回写相关的数据结构,如`inode`和`super_block`等。
相关问题
static u64 extend_obj_stats(struct zram *zram, u16 gid, int type) { if (!CHECK(zram->zgrp, "zram extend is not enable!\n")) return 0; if (!CHECK_BOUND(gid, 0, zram->zgrp->nr_grp - 1)) return 0; if (type == CACHE_SIZE) return atomic64_read(&zram->zgrp->stats[gid].zram_size); else if (type == CACHE_PAGE) return atomic_read(&zram->zgrp->stats[gid].zram_pages); else if (type == CACHE_FAULT) return atomic64_read(&zram->zgrp->stats[gid].zram_fault); #ifdef CONFIG_ZRAM_EXTEND_WRITEBACK else if (type == SWAP_SIZE) return atomic64_read(&zram->zgrp->stats[gid].wb_size); else if (type == SWAP_PAGE) return atomic_read(&zram->zgrp->stats[gid].wb_pages); else if (type == READ_SIZE) return atomic64_read(&zram->zgrp->stats[gid].read_size); else if (type == WRITE_SIZE) return atomic64_read(&zram->zgrp->stats[gid].write_size); else if (type == SWAP_FAULT) return atomic64_read(&zram->zgrp->stats[gid].wb_fault); BUG(); #endif return 0; } 这个函数做一下流程优化
可以做如下的流程优化:
```c
static u64 extend_obj_stats(struct zram *zram, u16 gid, int type) {
if (!CHECK(zram->zgrp, "zram extend is not enable!\n"))
return 0;
if (!CHECK_BOUND(gid, 0, zram->zgrp->nr_grp - 1))
return 0;
switch (type) {
case CACHE_SIZE:
return atomic64_read(&zram->zgrp->stats[gid].zram_size);
case CACHE_PAGE:
return atomic_read(&zram->zgrp->stats[gid].zram_pages);
case CACHE_FAULT:
return atomic64_read(&zram->zgrp->stats[gid].zram_fault);
#ifdef CONFIG_ZRAM_EXTEND_WRITEBACK
case SWAP_SIZE:
return atomic64_read(&zram->zgrp->stats[gid].wb_size);
case SWAP_PAGE:
return atomic_read(&zram->zgrp->stats[gid].wb_pages);
case READ_SIZE:
return atomic64_read(&zram->zgrp->stats[gid].read_size);
case WRITE_SIZE:
return atomic64_read(&zram->zgrp->stats[gid].write_size);
case SWAP_FAULT:
return atomic64_read(&zram->zgrp->stats[gid].wb_fault);
#endif
default:
break;
}
BUG();
return 0;
}
```
这里使用 `switch-case` 替换了原来的 `if-else` 结构,使代码更加简洁易读。同时,由于 `BUG()` 表示代码中存在错误,因此可以将其放在 `default` 分支中,避免出现无法预料的错误。
vm.admin_reserve_kbytes = 8192 vm.block_dump = 0 vm.compact_unevictable_allowed = 1 vm.dirty_background_bytes = 0 vm.dirty_background_ratio = 10 vm.dirty_bytes = 0 vm.dirty_expire_centisecs = 3000 vm.dirty_ratio = 20 vm.dirty_writeback_centisecs = 500 vm.dirtytime_expire_seconds = 43200 vm.drop_caches = 3 vm.extfrag_threshold = 500 vm.hugepages_treat_as_movable = 0 vm.hugetlb_shm_group = 0 vm.laptop_mode = 0 vm.legacy_va_layout = 0 vm.lowmem_reserve_ratio = 256 256 32 1 vm.max_map_count = 65530 vm.memory_failure_early_kill = 0 vm.memory_failure_recovery = 1 vm.min_free_kbytes = 67584 vm.min_slab_ratio = 5 vm.min_unmapped_ratio = 1 vm.mmap_min_addr = 65536 vm.mmap_rnd_bits = 28 vm.mmap_rnd_compat_bits = 8 vm.nr_hugepages = 0 vm.nr_hugepages_mempolicy = 0 vm.nr_overcommit_hugepages = 0 vm.numa_stat = 1 vm.numa_zonelist_order = Node vm.oom_dump_tasks = 1 vm.oom_kill_allocating_task = 0 vm.overcommit_kbytes = 0 vm.overcommit_memory = 0 vm.overcommit_ratio = 50 vm.page-cluster = 3 vm.panic_on_oom = 0 vm.percpu_pagelist_fraction = 0 vm.stat_interval = 1 vm.swappiness = 60 vm.user_reserve_kbytes = 131072 vm.vfs_cache_pressure = 100 vm.watermark_scale_factor = 10 vm.zone_reclaim_mode = 0
这是一个包含多个与虚拟内存相关的系统参数的列表。以下是其中一些参数的解释:
- `vm.max_map_count`:最大映射数量,限制了内存中可以同时映射的页面数量,从而影响了缓存的大小。
- `vm.dirty_background_bytes` 和 `vm.dirty_background_ratio`:脏页的阈值,当脏页的数量超过该阈值时,系统会开始写回脏页。
- `vm.dirty_bytes` 和 `vm.dirty_ratio`:系统允许脏页占用的内存大小的上限。
- `vm.min_free_kbytes`:系统保留的空闲内存的大小,当空闲内存低于该值时,系统会开始清理缓存。
- `vm.swappiness`:控制系统在内存不足时使用交换空间的程度,该参数的值越高,系统越可能使用交换空间。
你可以使用 `sysctl` 命令来修改这些参数的值,具体的命令如下:
```
sysctl -w <parameter>=<value>
```
其中 `<parameter>` 表示参数名,`<value>` 表示你希望设置的值。请注意,该命令的修改是临时的,如果你想要永久生效,需要将修改写入到 `/etc/sysctl.conf` 配置文件中。
阅读全文