AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 525674
Accepted
sourcejedi
sourcejedi
Asked: 2019-06-19 08:02:43 +0800 CST2019-06-19 08:02:43 +0800 CST 2019-06-19 08:02:43 +0800 CST

我的低水印和高水印似乎比 Documentation/sysctl/vm.txt 预测的要高

  • 772

动机

我在这里写了一个答案:我的系统上的“水印”内存预留有多大? “正常”区域的“最小”水印显示为 31449 页。这是 125796 KiB - 比我的整个min_free_kbytes(67584) 大。

重置将此区域min_free_kbytes的水印设置min为预期级别(例如 9582 页)。但过了一段时间,它又回到了更高的水平。

我相信这是由于boost_watermark()。它将“min”、“low”和“high”水印提升相同的数量。 watermark_boost_factor是 15000,所以最大提升应该是原始“高”水印的 150%...

问题

为什么我的“高”水印一开始就这么高?(以及“低”水印):

由于我的watermark_scale_factor是 10,“min”、“low”和“high”之间的距离应该只有区域大小的 0.1%。但是如果我在重置后立即查看min_free_kbytes,“min”和“low”之间的差异是区域大小的 2%。为什么?

(此外,“低”和“高”之间的差异是区域大小的 0.2%。所以这也不是我们所期望的!)。

我认为设置水印的代码在__setup_per_zone_wmarks()中。

内核版本:5.0.17-200.fc29.x86_64

来自/proc/zoneinfo:

Node 0, zone   Normal
  pages free     74597
        min      9582
        low      34505
        high     36900
        spanned  1173504
        present  1173504
        managed  1140349

我在 DMA32 区域看不到这种巨大的差异。看起来“最小”水印在 DMA32 区域中也没有得到提升,可能是因为内核更喜欢从“正常”区域分配。

Node 0, zone      DMA
...
  pages free     3961
        min      33
        low      41
        high     49
        spanned  4095
        present  3996
        managed  3961
...
Node 0, zone    DMA32
  pages free     334671
        min      7280
        low      9100
        high     10920
        spanned  1044480
        present  888973
        managed  866356
linux linux-kernel
  • 1 1 个回答
  • 1451 Views

1 个回答

  • Voted
  1. Best Answer
    sourcejedi
    2019-06-19T09:02:29+08:002019-06-19T09:02:29+08:00

    我弄清楚了为什么水印之间的距离与 0.1% 的数字不匹配。

    在“小型系统”上,水印之间的距离是(未增强的)“最小”水印的四分之一。即managed * watermark_scale_factor / 10000,如果记录的距离小于min / 4(对于给定区域),则不使用记录的距离。

        } else {
            /*
             * If it's a lowmem zone, reserve a number of pages
             * proportionate to the zone's size.
             */
            zone->_watermark[WMARK_MIN] = tmp;
        }
    
        /*
         * Set the kswapd watermarks distance according to the
         * scale factor in proportion to available memory, but
         * ensure a minimum size on small systems.
         */
        tmp = max_t(u64, tmp >> 2,
                mult_frac(zone_managed_pages(zone),
                      watermark_scale_factor, 10000));
    
        zone->_watermark[WMARK_LOW]  = min_wmark_pages(zone) + tmp;
        zone->_watermark[WMARK_HIGH] = min_wmark_pages(zone) + tmp * 2;
        zone->watermark_boost = 0;
    

    tmp >> 2相当于tmp / 4。

    源码链接:linux-5.0.17/mm/page_alloc.c:7531

    我还注意到这里最近有一个错误。“high-low”和“low-min”之间不应该有区别!这可能会发生,因为min_wmark_pages(zone)取决于zone->watermark_boost已设置,但在此之前调用它。我已经向维护人员报告了这个错误。

    • 1

相关问题

  • 有没有办法让 ls 只显示某些目录的隐藏文件?

  • 使用键盘快捷键启动/停止 systemd 服务 [关闭]

  • 需要一些系统调用

  • astyle 不会更改源文件格式

  • 通过标签将根文件系统传递给linux内核

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve