Skip to content
This repository has been archived by the owner on Jul 3, 2020. It is now read-only.

Dev docs

Serge edited this page Jul 11, 2015 · 7 revisions

CLI

https://github.com/runtimejs/runtime-cli

npm install runtime-cli -g

Tested GCC versions

Build OK: 4.8.0, 4.8.1, 4.8.3, 4.9.1, 5.1
Build FAIL: 4.9.0 (gcc bug when compiling libc++)

Kernel Debugging

GDB install:

export PREFIX="$HOME/opt/cross"
export PATH="$PREFIX/bin:$PATH"

wget https://ftp.gnu.org/gnu/gdb/gdb-7.8.tar.gz
tar -xf gdb-7.8.tar.gz
rm gdb-7.8.tar.gz
mkdir build-gdb
cd build-gdb
../gdb-7.8/configure --target=x86_64-pc-linux-gnu --prefix="$PREFIX"
make
make install

Connect to running QEMU:

x86_64-pc-linux-gnu-gdb 
(gdb) target remote localhost:1234 
(gdb) symbol-file runtimejs

Taking a heap snapshot

var u8array = kernel.takeHeapSnapshot();
// returns array of snapshot Uint8Array chunks

Example to send snapshot over TCP for inspection:

console.log('taking snapshot...');
var bufs = kernel.takeHeapSnapshot();

console.log('connecting...');
var socket = new runtime.net.TCPSocket();
socket.onopen = function() {
  console.log('pushing snapshot into socket...');
  for (let buf of bufs) {
    socket.send(buf);
  }
  socket.close();
  console.log('done');
};

socket.open('192.168.1.2', 5555);

It might take a while for TCP to transmit full snapshot depending on heap size.

Snapshot receiver:

nc -l 5555 > 1.heapsnapshot

Snapshot could be loaded into Chrome's profiles tab for inspection.

Memory info

kernel.memoryInfo();

Returns kernel memory usage. Object with properties (all values in bytes):

heapUsed - js heap used

heapTotal - js heap size

pmUsed - physical memory used

pmTotal - physical memory total (available for allocation)

buffersCount - number of allocated ArrayBuffers

buffersSize - total size of ArrayBuffers