Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

extend memory.m for windoze #3

Open
Andy1978 opened this issue Jan 18, 2019 · 5 comments
Open

extend memory.m for windoze #3

Andy1978 opened this issue Jan 18, 2019 · 5 comments

Comments

@Andy1978
Copy link
Member

I think we could merge https://savannah.gnu.org/patch/?9746 into memory.m

But I have no windoze to test it so I just leave this as a reminder.

@odo2063
Copy link
Collaborator

odo2063 commented Jan 19, 2019

If you could provide a howto I'll throw it in the VM.

@markuman
Copy link
Contributor

markuman commented Jan 21, 2019

The "howto" is easy. Just add the function part from Philip (line 44 to 49) after the else block in line 59 https://github.com/octave-de/macgyver_utils/blob/master/memory.m#L59 (replace the error().

## Copyright (C) 2012 - 2019 Markus Bergholz <markuman@gmail.com>
## Copyright (C) 2015 JuanPi Carbajal <ajuanpi+dev@gmail.com>
## Copyright (C) 2019 Philip Nienhuis

## This program is free software; you can redistribute it and/or modify it under
## the terms of the GNU General Public License as published by the Free Software
## Foundation; either version 3 of the License, or (at your option) any later
## version.
##
## This program is distributed in the hope that it will be useful, but WITHOUT
## ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
## FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
## details.
##
## You should have received a copy of the GNU General Public License along with
## this program; if not, see <http://www.gnu.org/licenses/>.

## -*- texinfo -*-
##
##
## memory returns information about how much physical
## memory is available and how much is currently being
## used by Octave

function m = memory()

    if (isunix && ~ismac)

      # open /proc/meminfo
      meminfo = fopen ("/proc/meminfo", "r");
      PID     = getpid;
      total   = str2double ( ...
                cell2mat (cell2mat ( ...
                regexp( ...
                fread(meminfo, "char=>char").', ...
                "MemTotal:(.*?) kB\n", "tokens"))));
      fclose (meminfo);

      # open /proc/<pid>/statm
      statm = fopen (sprintf ("/proc/%d/statm", PID), "r");
      # statm is measured in pages. the pagesize is 4096 bytes
      mem   = sscanf ( ...
              fread (statm, "char=>char").', ...
               "%d ").'([1 2 3 6]) * 4 / 1024;
      fclose (statm);

      if (nargout < 1)
        # print verbose output
        fprintf (["\n Total memory usage by GNU Octave (VmSize): \t %g MB"], mem(1));
        fprintf ("\n RSS Size: \t\t\t\t\t %g MB", mem(2));
        fprintf ("\n shared pages: \t\t\t\t\t %g MB", mem(3));
        fprintf ("\n data + stack size: \t\t\t\t %g MB", mem(4));
        fprintf ("\n Physical Memory (RAM): \t\t\t %g MB\n\n", total/1024);
        fflush (stdout);
      endif

      m = struct ("total",mem(1),"rss",mem(2), ...
                  "shared",mem(3),"data",mem(4), ...
                  "physical", total/1024);
    else
      process = "octave";
      [~, d] = system ("tasklist");
      d = strsplit (d, "\n")';
      try
	d = d(strncmpi (d, process, length (process)));
	m = cellfun (@(x) sscanf (strrep (x(65:end), " ", ""), "%d"), d, "uni", 1);
      end_try_catch
    endif

endfunction

@markuman
Copy link
Contributor

markuman commented Jan 21, 2019

I've found a terminal server in my company. this is the result :D

>> ram = memory
ram =  34
>> ram
ram =  34
>>

hurray windos!

this is the linux output

octave:1> memory

 Total memory usage by GNU Octave (VmSize): 	 984.207 MB
 RSS Size: 					 40.8594 MB
 shared pages: 					 31.4141 MB
 data + stack size: 				 298.277 MB
 Physical Memory (RAM): 			 7692.95 MB

ans =

  scalar structure containing the fields:

    total =  984.21
    rss =  40.859
    shared =  31.414
    data =  298.28
    physical =  7692.9

@markuman
Copy link
Contributor

I've changed the code a little more

>> memory

 Total memory usage by GNU Octave:       41 MB
ans =  41
>>
## Copyright (C) 2012 - 2019 Markus Bergholz <markuman@gmail.com>
## Copyright (C) 2015 JuanPi Carbajal <ajuanpi+dev@gmail.com>
## Copyright (C) 2019 Philip Nienhuis

## This program is free software; you can redistribute it and/or modify it under
## the terms of the GNU General Public License as published by the Free Software
## Foundation; either version 3 of the License, or (at your option) any later
## version.
##
## This program is distributed in the hope that it will be useful, but WITHOUT
## ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
## FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
## details.
##
## You should have received a copy of the GNU General Public License along with
## this program; if not, see <http://www.gnu.org/licenses/>.

## -*- texinfo -*-
##
##
## memory returns information about how much physical
## memory is available and how much is currently being
## used by Octave

function m = memory()

    if (isunix && ~ismac)

      # open /proc/meminfo
      meminfo = fopen ("/proc/meminfo", "r");
      PID     = getpid;
      total   = str2double ( ...
                cell2mat (cell2mat ( ...
                regexp( ...
                fread(meminfo, "char=>char").', ...
                "MemTotal:(.*?) kB\n", "tokens"))));
      fclose (meminfo);

      # open /proc/<pid>/statm
      statm = fopen (sprintf ("/proc/%d/statm", PID), "r");
      # statm is measured in pages. the pagesize is 4096 bytes
      mem   = sscanf ( ...
              fread (statm, "char=>char").', ...
               "%d ").'([1 2 3 6]) * 4 / 1024;
      fclose (statm);

      if (nargout < 1)
        # print verbose output
        fprintf (["\n Total memory usage by GNU Octave (VmSize): \t %g MB"], mem(1));
        fprintf ("\n RSS Size: \t\t\t\t\t %g MB", mem(2));
        fprintf ("\n shared pages: \t\t\t\t\t %g MB", mem(3));
        fprintf ("\n data + stack size: \t\t\t\t %g MB", mem(4));
        fprintf ("\n Physical Memory (RAM): \t\t\t %g MB\n\n", total/1024);
        fflush (stdout);
      endif

      m = struct ("total",mem(1),"rss",mem(2), ...
                  "shared",mem(3),"data",mem(4), ...
                  "physical", total/1024);
    else
      process = "octave";
      [~, d] = system ("tasklist");
      d = strsplit (d, "\n")';
      try
        d = d(strncmpi (d, process, length (process)));
        m = cellfun (@(x) sscanf (strrep (x(65:end), " ", ""), "%d"), d, "uni", 1);
        if (nargout < 1)
          fprintf (["\n Total memory usage by GNU Octave: \t %g MB\n"], m);
        endif
      end_try_catch
    endif

endfunction

@markuman
Copy link
Contributor

One question: what size windows does return for tasklist? or is the unit handled already in the cellfun(...) line?

markuman pushed a commit that referenced this issue Jan 21, 2019
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants