libcachesim-node
Version:
Node.js bindings for libCacheSim - A high-performance cache simulator and analysis library supporting LRU, FIFO, S3-FIFO, Sieve and other caching algorithms
221 lines (145 loc) • 6.16 kB
Markdown
# libCacheSim Node.js Bindings
Node.js bindings for libCacheSim - A high-performance cache simulator and analysis library supporting LRU, FIFO, S3-FIFO, Sieve and other caching algorithms.
## Features
- **High Performance**: Built on the optimized libCacheSim C library
- **Multiple Algorithms**: Support for LRU, FIFO, LFU, ARC, Clock, S3-FIFO, Sieve, and more
- **Various Trace Types**: Support for vscsi, csv, txt, binary, and oracle trace formats
- **Pre-compiled Binaries**: Fast installation with no build tools required
- **Cross-platform**: Support for Linux (x64) and macOS (x64, ARM64)
## Installation
```bash
npm install libcachesim-node
```
The package includes pre-compiled binaries for supported platforms. No additional build tools or dependencies are required for end users.
### Supported Platforms
- **Linux**: x64 (Ubuntu 18.04+, other distributions with compatible glibc)
- **macOS**: x64 (Intel) and ARM64 (Apple Silicon)
If pre-compiled binaries are not available for your platform, please check the releases page for updates or submit an issue.
## Quick Start
```javascript
const { runSimulation, getSupportedAlgorithms } = require('libcachesim-node');
// Get supported algorithms
console.log('Supported algorithms:', getSupportedAlgorithms());
// Run a cache simulation
const result = runSimulation(
'/path/to/trace.vscsi', // Path to trace file
'vscsi', // Trace type
's3fifo', // Cache algorithm
'1mb' // Cache size
);
console.log('Simulation results:', result);
```
## API Reference
### `getVersion()`
Get the version of the libCacheSim Node.js binding.
**Returns:** String containing the version number (e.g., "1.0.1")
### `runSimulation(tracePath, traceType, algorithm, cacheSize)`
Run a cache simulation with specified parameters.
**Parameters:**
- `tracePath` (string): Path to the trace file
- `traceType` (string): Type of trace file ('vscsi', 'csv', 'txt', 'binary', 'oracle')
- `algorithm` (string): Cache replacement algorithm
- `cacheSize` (string): Cache size (e.g., '1mb', '512kb', '2gb')
**Returns:** Object containing simulation results including hit rate, miss count, etc.
### `getSupportedAlgorithms()`
Get a list of supported cache algorithms.
**Returns:** Array of algorithm names
### `getSupportedTraceTypes()`
Get a list of supported trace file types.
**Returns:** Array of trace type names
## Cache Algorithms
The following cache replacement algorithms are supported:
- **LRU** (Least Recently Used)
- **FIFO** (First In, First Out)
- **LFU** (Least Frequently Used)
- **ARC** (Adaptive Replacement Cache)
- **Clock** (Clock/Second Chance)
- **S3-FIFO** (Simple, Scalable, Scan-resistant FIFO)
- **Sieve** (Eviction algorithm with lazy promotion)
## Trace File Formats
- **vscsi**: VMware vSCSI trace format
- **csv**: Comma-separated values format
- **txt**: Plain text format
- **binary**: Binary trace format
- **oracle**: Oracle optimal algorithm simulation
## Command Line Interface
The package includes a command-line interface:
```bash
# Install globally for CLI access
npm install -g libcachesim-node
# Run simulation from command line
cachesim-js --trace /path/to/trace.vscsi --algorithm s3fifo --size 1mb
# Check version
cachesim-js --version
```
## Development
### Building from Source
If you need to build from source or contribute to development:
```bash
# Clone the repository
git clone https://github.com/1a1a11a/libCacheSim.git
cd libCacheSim/libCacheSim-node
# Install dependencies
npm install
# Build from source (requires cmake, build tools)
npm run build-from-source
# Run tests
npm test
```
### Requirements for Building from Source
- Node.js 14+
- CMake 3.10+
- C/C++ compiler (GCC, Clang, or MSVC)
- System dependencies:
- Linux: `build-essential cmake libglib2.0-dev libzstd-dev`
- macOS: `cmake glib zstd` (via Homebrew)
### Version Synchronization
The Node.js binding version is automatically synchronized with the main libCacheSim project version. To manually sync versions, run:
```bash
python3 scripts/sync_node_version.py
```
This ensures that the Node.js binding version in `package.json` matches the version in the main project's `version.txt` file.
## Architecture
This package uses `prebuild-install` for binary distribution:
1. **Pre-compiled Binaries**: Automatically downloaded from GitHub releases during installation
2. **Automated Building**: GitHub Actions automatically builds binaries for all supported platforms
3. **Standard Tooling**: Uses industry-standard `prebuild` and `prebuild-install` packages
## Troubleshooting
### Installation Issues
If installation fails, try the following:
```bash
# Clear npm cache
npm cache clean --force
# Reinstall with verbose logging
npm install libcachesim-node --verbose
# Force source compilation
npm install libcachesim-node --build-from-source
```
### Binary Loading Issues
If you see binary loading errors:
1. Ensure your platform is supported
2. Check that the `prebuilds` directory exists and contains your platform's binary
3. Try reinstalling the package
4. Check Node.js version compatibility (requires Node.js 14+)
### Build from Source Issues
If source compilation fails:
1. Install required system dependencies (including ninja-build)
2. Ensure CMake 3.10+ is available
3. Check that libCacheSim builds successfully: `cd .. && mkdir _build && cd _build && cmake -G Ninja .. && ninja`
## Contributing
Contributions are welcome! Please see the main [libCacheSim repository](https://github.com/1a1a11a/libCacheSim) for contribution guidelines.
## License
MIT License - see the LICENSE file for details.
## Related Projects
- [libCacheSim](https://github.com/1a1a11a/libCacheSim) - The core C library
- [libCacheSim Python bindings](https://github.com/1a1a11a/libCacheSim/tree/develop/libCacheSim/pyBindings) - Python interface
## Citation
If you use libCacheSim in your research, please cite:
```bibtex
@misc{libcachesim,
title={libCacheSim: A High-Performance Cache Simulator},
author={Tian, Murphy and others},
year={2023},
url={https://github.com/1a1a11a/libCacheSim}
}
```