From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-0.3 required=3.0 tests=DKIM_ADSP_CUSTOM_MED, DKIM_INVALID,DKIM_SIGNED,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS autolearn=no autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id B9185C433E2 for ; Mon, 18 May 2020 17:59:27 +0000 (UTC) Received: from shelob.surriel.com (shelob.surriel.com [96.67.55.147]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id DA9DC207D3 for ; Mon, 18 May 2020 17:59:25 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="CU0fUgRI" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org DA9DC207D3 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=kernelnewbies-bounces@kernelnewbies.org Received: from localhost ([::1] helo=shelob.surriel.com) by shelob.surriel.com with esmtp (Exim 4.93) (envelope-from ) id 1jak2L-00084V-E9; Mon, 18 May 2020 13:58:49 -0400 Received: from mail-vs1-xe41.google.com ([2607:f8b0:4864:20::e41]) by shelob.surriel.com with esmtps (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.93) (envelope-from ) id 1jak2J-00084M-Rm for kernelnewbies@kernelnewbies.org; Mon, 18 May 2020 13:58:47 -0400 Received: by mail-vs1-xe41.google.com with SMTP id w65so3492722vsw.11 for ; Mon, 18 May 2020 10:58:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:from:date:message-id:subject:to; bh=bSRnBxLCr/qIq/O89PX+kqmAZQv6JdU+Wr8UVmVYtQA=; b=CU0fUgRI1R/rsHN6QUZ+H36vT3pDtM25TG+ueaXjRnYZfNPp4lvTkHmXQUkismTgck Pc9UHW2iq7UEOe9RoXF1V+s5eCObRJTyA/3QPvITM0C0GR/8Zwa9QjOyNmEX3Xhk/UVm Dl9zadUhRlCBiivrjUAkrpLz3+bIFxhj2JBl276TvnLuAhcmMXn72rhBSALWWBocaHXG VAlZt7vN2aVlVFxtfeZ0KrMpfXslUeNCvgVTckWC6obF9y8/mtCPKWWwYLcTPiaV7Hui jISA2P0verRA0fCqhq57TGMdZIIFaza2/36N4dUJrwPhNy0phdFjcwQRqSzUxDi8QK4l Nh+A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:from:date:message-id:subject:to; bh=bSRnBxLCr/qIq/O89PX+kqmAZQv6JdU+Wr8UVmVYtQA=; b=CEO3XPqPebHu0zdQQ10M7HmUM8Mg+GfIj1CCiyI43JAyVcWKuwGUw3HUZhRAO3DYPp 0lAjaWrLBmq+eMMva6A1hSDWhTgylZGjpQsxdJXi6871yOX8h1KS4KRg5BVahVkvQFzd Qs3sGBBN53J+tfvh1gXzhHPteHuYDUbxQ6slLsjzB2O/mnpV8CEn24WcPXpk2NdUVJvb 2ueI64P1VBiEZJXXUqABFBZaJ6tzARw4nJUc4AALMOan+6gJKcQbRivwWJZ5I0SFXqqv BZ3Q8EhdE4IJuNQxac8uWFLMaS4C5Rwslmi2U7m6vIxeoJRy3w/hAX1p9eM9ZUq8Tb36 2fgQ== X-Gm-Message-State: AOAM530MMu8XbzBBt7PM6S4fOeu3pGt5hXvhdMQSSZD9IT/EH0CiqSS8 y2/VPPOzxJFouZ1RsahVyXymsgrnwiXFc6mbMBgOKyyi X-Google-Smtp-Source: ABdhPJzDjuJEId9yeU/zhcDenHvp9Gc+LAbwZUquWEM/yTO+P/f7SGPgRWM11OEoCj9FD+6aTwGu8ytH2keq6meYp/c= X-Received: by 2002:a67:e884:: with SMTP id x4mr7902854vsn.106.1589824665557; Mon, 18 May 2020 10:57:45 -0700 (PDT) MIME-Version: 1.0 From: Pintu Agarwal Date: Mon, 18 May 2020 23:27:34 +0530 Message-ID: Subject: Estimating total memory usage in any Linux system To: Kernelnewbies , linux-mm X-BeenThere: kernelnewbies@kernelnewbies.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: Learn about the Linux kernel List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: kernelnewbies-bounces@kernelnewbies.org Hi, I was just trying to manually calculate the total memory available in a system to match up the MemTotal shown in /proc/meminfo I know "free -m" command will give the vary high level usage, but I wanted to breakdown the MemTotal numbers to see usage in each category. I am looking for a common formula that should match on almost all systems. So, I came up with below fields from meminfo to closely match the total. ~Total = {MemFree + Active + Inactive + Shmem + Mapped + Slab + KernelStack + PageTables + (init freed) + (Boot Diff) + (low watermarks)} But I am not sure if these fields are correct at least for arm32 system. In some boards I could able to match up these figures, but some not. So I have some doubts: * Is "Mapped" (NR_MAPPED_PAGES) already part of Active pages ? * Is Kernel allocation (alloc_pages, etc.) accounted somewhere ? Is it part of Anon pages ? * What about vmalloc / ioremap pages ? Do we also need to consider VmallocUsed ? ==> In my opinion vmalloc internally used kmalloc and page tables, so I guess it should be already part of Slab or PageTables ?? Below are some data taken from a small embedded arm32 device with 512MB RAM: Kernel Boot Logs: Memory: 99244K/254976K available (10720K kernel code, 1336K rwdata, 4792K rodata, 400K init, 1602K bss, 135252K reserved, 20480K cma-reserved) Total = 99244 + 400 (init) + 20480 (cma) = 120124 Boot Diff = 121204 - 120124 => 1080 kB MemTotal: 121204 kB MemFree: 2540 kB MemAvailable: 51924 kB Buffers: 0 kB Cached: 47492 kB SwapCached: 0 kB Active: 42604 kB Inactive: 24308 kB Active(anon): 19476 kB Inactive(anon): 92 kB Active(file): 23128 kB Inactive(file): 24216 kB Unevictable: 0 kB Mlocked: 0 kB SwapTotal: 0 kB SwapFree: 0 kB Dirty: 8 kB Writeback: 0 kB AnonPages: 19452 kB Mapped: 12644 kB Shmem: 148 kB Slab: 27560 kB SReclaimable: 7224 kB SUnreclaim: 20336 kB KernelStack: 3104 kB PageTables: 1896 kB NFS_Unstable: 0 kB Bounce: 0 kB WritebackTmp: 0 kB CommitLimit: 60600 kB Committed_AS: 1576740 kB VmallocTotal: 777216 kB VmallocUsed: 53696 kB VmallocChunk: 689148 kB -------------------- These are my calculations from the above fields. --------------------- MemFree 2540 Active 42604 Inactive 24308 Mapped 12644 Slab 27560 KernelStack 3104 PageTables 1896 Shmem 148 init freed 400 Diff from boot total 1080 min_free_kbytes 1384 user_reserve_kbytes 3537 My Total ==> 121205 (add all the above) As you can see "My Total" closely matches with the MemTotal from /proc/meminfo But on some systems it does not match. So, I wanted to understand if there is something wrong in my calculation, or there is something wrong in the system itself (like leaks etc,) Note: I don't want to use any tools or utilize for these, but I wanted to manually understand it. I am also trying to explore every vm counter that populates these fields. But if you have any other opinion about it please let me know. Thanks, Pintu _______________________________________________ Kernelnewbies mailing list Kernelnewbies@kernelnewbies.org https://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies