[CentOS] enough free pages but high number of major page faults and page reclaims

Fri Apr 16 23:17:10 UTC 2021
yf chu <cyflhn at 163.com>

We find  that for some servers io disk read is very high. We also notice that there are many major page faults on those servers. But we checked the /proc/zoneinfo, there are enough free pages. Here is the content of /proc/zoneinfo:
  pages free     3913507
        min      11333
        low      14166
        high     16999
        scanned  0
        spanned  16777216
        present  16777216
        managed  16507043
    nr_free_pages 3913507
We also use "perf" to monitor the event of "mm_filemap_delete_from_page_cache". Here is the result of perf:
7fff81189dd0 __delete_from_page_cache ([kernel.kallsyms])
    7fff8119b771 __remove_mapping ([kernel.kallsyms])
    7fff8119c8e8 shrink_page_list ([kernel.kallsyms])
    7fff8119d45a shrink_inactive_list ([kernel.kallsyms])
    7fff8119df55 shrink_lruvec ([kernel.kallsyms])
    7fff8119e376 shrink_zone ([kernel.kallsyms])
    7fff8119e880 do_try_to_free_pages ([kernel.kallsyms])
    7fff8119ed6c try_to_free_pages ([kernel.kallsyms])
    7fff816ac515 __alloc_pages_slowpath ([kernel.kallsyms])
    7fff811932d5 __alloc_pages_nodemask ([kernel.kallsyms])
    7fff811d7a68 alloc_pages_current ([kernel.kallsyms])
    7fff811e27f5 new_slab ([kernel.kallsyms])
    7fff811e40fc ___slab_alloc ([kernel.kallsyms])
    7fff816adaf1 __slab_alloc ([kernel.kallsyms])
    7fff811e609b kmem_cache_alloc ([kernel.kallsyms])
    7fff812778ed proc_alloc_inode ([kernel.kallsyms])
    7fff812234d0 alloc_inode ([kernel.kallsyms])
    7fff81225771 new_inode_pseudo ([kernel.kallsyms])
    7fff812257d9 new_inode ([kernel.kallsyms])
    7fff8127bc1e proc_pid_make_inode ([kernel.kallsyms])
    7fff812800e5 proc_fd_instantiate ([kernel.kallsyms])
    7fff8127c54c proc_fill_cache ([kernel.kallsyms])
    7fff812802dd proc_readfd_common ([kernel.kallsyms])
    7fff812803f5 proc_readfd ([kernel.kallsyms])
    7fff8121c246 vfs_readdir ([kernel.kallsyms])
    7fff8121c665 sys_getdents ([kernel.kallsyms])
    7fff816c2715 system_call_fastpath ([kernel.kallsyms])
           bab95 __getdents64 (/usr/lib64/libc-2.17.so)
It seems that os is carrying on page reclaim. But I don't know since there are enough free pages, why could page reclaim ocurr?