~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/tools/testing/selftests/size/get_size.c

Version: ~ [ linux-5.18 ] ~ [ linux-5.17.9 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.41 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.117 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.195 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.244 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.280 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.315 ] ~ [ linux-4.8.17 ] ~ [ linux-4.7.10 ] ~ [ linux-4.6.7 ] ~ [ linux-4.5.7 ] ~ [ linux-4.4.302 ] ~ [ linux-4.3.6 ] ~ [ linux-4.2.8 ] ~ [ linux-4.1.52 ] ~ [ linux-4.0.9 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.9 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 /*
  2  * Copyright 2014 Sony Mobile Communications Inc.
  3  *
  4  * Licensed under the terms of the GNU GPL License version 2
  5  *
  6  * Selftest for runtime system size
  7  *
  8  * Prints the amount of RAM that the currently running system is using.
  9  *
 10  * This program tries to be as small as possible itself, to
 11  * avoid perturbing the system memory utilization with its
 12  * own execution.  It also attempts to have as few dependencies
 13  * on kernel features as possible.
 14  *
 15  * It should be statically linked, with startup libs avoided.
 16  * It uses no library calls, and only the following 3 syscalls:
 17  *   sysinfo(), write(), and _exit()
 18  *
 19  * For output, it avoids printf (which in some C libraries
 20  * has large external dependencies) by  implementing it's own
 21  * number output and print routines, and using __builtin_strlen()
 22  */
 23 
 24 #include <sys/sysinfo.h>
 25 #include <unistd.h>
 26 
 27 #define STDOUT_FILENO 1
 28 
 29 static int print(const char *s)
 30 {
 31         return write(STDOUT_FILENO, s, __builtin_strlen(s));
 32 }
 33 
 34 static inline char *num_to_str(unsigned long num, char *buf, int len)
 35 {
 36         unsigned int digit;
 37 
 38         /* put digits in buffer from back to front */
 39         buf += len - 1;
 40         *buf = 0;
 41         do {
 42                 digit = num % 10;
 43                 *(--buf) = digit + '';
 44                 num /= 10;
 45         } while (num > 0);
 46 
 47         return buf;
 48 }
 49 
 50 static int print_num(unsigned long num)
 51 {
 52         char num_buf[30];
 53 
 54         return print(num_to_str(num, num_buf, sizeof(num_buf)));
 55 }
 56 
 57 static int print_k_value(const char *s, unsigned long num, unsigned long units)
 58 {
 59         unsigned long long temp;
 60         int ccode;
 61 
 62         print(s);
 63 
 64         temp = num;
 65         temp = (temp * units)/1024;
 66         num = temp;
 67         ccode = print_num(num);
 68         print("\n");
 69         return ccode;
 70 }
 71 
 72 /* this program has no main(), as startup libraries are not used */
 73 void _start(void)
 74 {
 75         int ccode;
 76         struct sysinfo info;
 77         unsigned long used;
 78 
 79         print("Testing system size.\n");
 80         print("1..1\n");
 81 
 82         ccode = sysinfo(&info);
 83         if (ccode < 0) {
 84                 print("not ok 1 get runtime memory use\n");
 85                 print("# could not get sysinfo\n");
 86                 _exit(ccode);
 87         }
 88         /* ignore cache complexities for now */
 89         used = info.totalram - info.freeram - info.bufferram;
 90         print_k_value("ok 1 get runtime memory use # size = ", used,
 91                 info.mem_unit);
 92 
 93         print("# System runtime memory report (units in Kilobytes):\n");
 94         print_k_value("#   Total:  ", info.totalram, info.mem_unit);
 95         print_k_value("#   Free:   ", info.freeram, info.mem_unit);
 96         print_k_value("#   Buffer: ", info.bufferram, info.mem_unit);
 97         print_k_value("#   In use: ", used, info.mem_unit);
 98 
 99         _exit(0);
100 }
101 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | Wiki (Japanese) | Wiki (English) | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

osdn.jp