https://github.com/shinra-dev/memuse
An R package of utilities for benchmarking and optimization
https://github.com/shinra-dev/memuse
memory-estimation r
Last synced: 3 months ago
JSON representation
An R package of utilities for benchmarking and optimization
- Host: GitHub
- URL: https://github.com/shinra-dev/memuse
- Owner: shinra-dev
- License: other
- Created: 2013-05-23T03:24:59.000Z (about 13 years ago)
- Default Branch: master
- Last Pushed: 2023-08-11T11:38:50.000Z (almost 3 years ago)
- Last Synced: 2025-08-21T11:03:04.502Z (9 months ago)
- Topics: memory-estimation, r
- Language: R
- Homepage: https://shinra-dev.github.io/
- Size: 7.72 MB
- Stars: 46
- Watchers: 5
- Forks: 4
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
- Changelog: ChangeLog
- License: LICENSE
Awesome Lists containing this project
README
# memuse
* **Version:** 4.2-3
* **License:** [BSD 2-Clause](https://opensource.org/licenses/BSD-2-Clause)
* **Project home**: https://github.com/shinra-dev/memuse
* **Bug reports**: https://github.com/shinra-dev/memuse/issues
**memuse** is an R package for memory estimation. It has tools for estimating the size of a matrix (that doesn't exist), showing the size of an existing object in a nicer way than `object.size()`. It also has tools for showing how much memory the current R process is consuming, how much ram is available on the system, and more.
Originally, this package was an over-engineered solution to a mostly non-existent problem, as a sort of love letter to other needlessly complex programs like the [Enterprise Fizzbuzz](https://github.com/EnterpriseQualityCoding/FizzBuzzEnterpriseEdition). However, as of version 2.0-0, I'm sad to report that the package is actually becoming quite useful.
The package has been exhaustively tested on Linux, FreeBSD, Windows, Mac, and "other"-NIX. That is also roughly the platforms in descending order of support for the various operations. However, if you have a problem installing or using the package, please open an issue on the project's GitHub repository.
## Installation
To install the R package, run:
```r
install.package("memuse")
```
The development version is maintained on GitHub:
```r
remotes::install_github("shinra-dev/memuse")
```
The C internals, found in `memuse/src/meminfo/` are completely separated from the R wrapper code. So if you prefer, you can easily build this as a standalone C shared library.
## Package Utilities
The package comes with several classes of utilities. I find all of them very useful during the course of benchmarking, but some are certainly more useful than others.
#### Memory Lookups
With this package you can get some information about how much memory is physically available on the host machine:
```r
Sys.meminfo()
# Totalram: 15.656 GiB
# Freeram: 10.504 GiB
Sys.meminfo(compact.free=FALSE) ### Linux and FreeBSD only
# Totalram: 15.656 GiB
# Freeram: 1.067 GiB
# Bufferram: 1.332 GiB
# Cachedram: 8.207 GiB
Sys.swapinfo() ## same as Sys.pageinfo()
# Totalswap: 32.596 GiB
# Freeswap: 32.595 GiB
# Cachedswap: 444.000 KiB
```
You can find the ram usage of the current R process:
```r
Sys.procmem()
# Size: 258.426 MiB
# Peak: 258.426 MiB
x <- rnorm(1e8)
memuse(x)
# 762.939 MiB
rm(x);invisible(gc())
Sys.procmem()
# Size: 258.426 MiB
# Peak: 1021.363 MiB
```
Also, if you're working close to the metal, you may be interested in seeing how large the CPU caches are and/or how big the cache linesize is:
```r
Sys.cachesize()
# L1I: 32.000 KiB
# L1D: 32.000 KiB
# L2: 256.000 KiB
# L3: 6.000 MiB
Sys.cachelinesize()
# Linesize: 64 B
```
#### Estimating Memory Usage
You can estimate memory storage requirements of a matrix without having to divide by some annoying power of 2:
```r
howbig(10000, 500)
# 38.147 MiB
howbig(10000, 500, type="int")
# 19.073 MiB
howbig(10000, 500, representation="sparse", sparsity=.05)
# 1.907 MiB
```
Alternatively, given a (memory) size, you can also find the dimensions of such a matrix:
```r
howmany(mu(800, "mib"))
# [1] 10240 10240
howmany(mu(800, "mib"), ncol=500)
# [1] 209715 500
```
For more information, see the package vignette.
#### Misc
The package also has some miscellaneous helpful utilities:
```r
approx.size(12345)
# 12.3 Thousand
approx.size(123456789)
# 123.5 Million
approx.size(123456789, unit.names="short")
# 123.5m
approx.size(123456789, unit.names="comma")
# 123,456,789
```
## Authors
memuse is authored and maintained by:
* Drew Schmidt
With additional contributions from:
* Christian Heckendorf (FreeBSD improvements to meminfo)
* Wei-Chen Chen (Windows build fixes)
* Dan Burgess (donation of a Mac for development and testing)