diff --git a/README.md b/README.md index 5d9df66..2df6a95 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,11 @@ # aWsm (awesome) -**aWsm** is an efficient WASM runtime built with the `silverfish` compiler. This is an active research effort with regular breaking changes and no guarantees of stability. +**aWsm** is an efficient serverless runtime built with the `silverfish` compiler. It combines WebAssembly sandboxing with asynchronous I/O to provide a lightweight serverless solution suitable for edge computing. ## Host Dependencies -- Docker - -Additionally, if you want to execute the Awsm runtime on your host environment, you need libuv. A reason you might want to do this is to debug your serverless function, as GDB does not seem to run properly within a Docker container. +- Docker - [Installation Instructions](https://docs.docker.com/install/) +- libuv If on Debian, you can install libuv with the following: @@ -18,7 +17,7 @@ If on Debian, you can install libuv with the following: **Note: These steps require Docker. Make sure you've got it installed!** -We provide a Docker build environment configured with the dependencies and toolchain needed to build the Awsm runtime and serverless functions. +We provide a Docker build environment configured with the dependencies and toolchain needed to build the aWsm runtime and serverless functions. To setup this environment, run: @@ -66,9 +65,9 @@ You should be in the root project directory (not in the Docker container) cd runtime/bin/ ``` -We can now run Awsm with one of the serverless functions we built. Let's run Fibonacci! +We can now run aWsm with one of the serverless functions we built. Let's run Fibonacci! -Because serverless functions are loaded by Aswsm as shared libraries, we want to add the `runtime/tests/` directory to LD_LIBRARY_PATH. +Because serverless functions are loaded by aWsm as shared libraries, we want to add the `runtime/tests/` directory to LD_LIBRARY_PATH. ```bash LD_LIBRARY_PATH="$(pwd):$LD_LIBRARY_PATH" ./awsmrt ../tests/test_fibonacci.json @@ -96,75 +95,27 @@ Notice that it is configured to run on port 10000. The `name` field is also used Our fibonacci function expects an HTTP POST body of type "text/plain" which it can parse as an integer to figure out which Fibonacci number we want. -Let's get the 10th. Note that I'm using ApacheBench to make this request. +Let's get the 10th. Note that I'm using [HTTPie](https://httpie.org/) to send a POST request with a body containing the parameter I want to pass to my serverless function. Note: You possibly run the awsmrt command in the foreground. If so, you should open a new terminal session. ```bash -echo 10 >fib.txt -ab -c 1 -n 1 -p fib.txt -v 2 http://localhost:10000/fibonacci +echo "10" | http :10000 ``` In my case, I received the following in response. The response is 55, which seems to be correct! ```bash -This is ApacheBench, Version 2.3 <$Revision: 1807734 $> -Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ -Licensed to The Apache Software Foundation, http://www.apache.org/ - -Benchmarking localhost (be patient)...INFO: POST header == ---- -POST /fibonacci HTTP/1.0 -Content-length: 3 -Content-type: text/plain -Host: localhost:10000 -User-Agent: ApacheBench/2.3 -Accept: */* - - ---- -LOG: header received: HTTP/1.1 200 OK -Content-type: text/plain -Content-length: 3 +Content-length: 3 +Content-type: text/plain 55 - -..done - - -Server Software: -Server Hostname: localhost -Server Port: 10000 - -Document Path: /fibonacci -Document Length: 3 bytes - -Concurrency Level: 1 -Time taken for tests: 0.001 seconds -Complete requests: 1 -Failed requests: 0 -Total transferred: 100 bytes -Total body sent: 141 -HTML transferred: 3 bytes -Requests per second: 952.38 [#/sec] (mean) -Time per request: 1.050 [ms] (mean) -Time per request: 1.050 [ms] (mean, across all concurrent requests) -Transfer rate: 93.01 [Kbytes/sec] received - 131.14 kb/s sent - 224.14 kb/s total - -Connection Times (ms) - min mean[+/-sd] median max -Connect: 1 1 0.0 1 1 -Processing: 0 0 0.0 0 0 -Waiting: 0 0 0.0 0 0 -Total: 1 1 0.0 1 1 ``` ## Stopping the Runtime -When you are finished, stop Awsm with +When you are finished, stop aWsm with ```bash ./devenv.sh stop diff --git a/devenv.sh b/devenv.sh index e9e9be9..fbf12cb 100755 --- a/devenv.sh +++ b/devenv.sh @@ -31,23 +31,12 @@ SYS_BUILD_TIMEOUT=0 # Provides help to user on how to use this script usage() { - echo "usage $0 " -} - -# It's easier to debug on host, so probably you want to execut awsm outside of the container -# That means we need the LibUV dependency installed on our host -install_libuv() { - # If using Debian, install LibUV Dependency - if [ -f "/etc/debian_version" ]; then - if [ "$(dpkg-query -W -f='${Status}' libuv1-dev 2>/dev/null | grep -c "ok installed")" -eq 0 ]; then - echo "LibUV seems to be missing. Install?" - sudo apt-get install libuv1-dev - else - echo "libuv detected!" - fi - else - echo "You don't seem to be on a Debian-based system, and this script only knows about aptitude. Sorry!" - fi + echo "usage $0 " + echo " setup Build aWsm and a Docker container with toolchain needed to compile your own functions" + echo " run Start the aWsm Docker image as an interactive container with this repository mounted" + echo " stop Stop and remove the aWsm Docker container after use" + echo " rm Remove the aWsm runtime container and image, but leaves the awsm-dev container in place" + echo " rma Removes all the awsm and awsm-dev containers and images" } # Given a number of seconds, initiates a countdown sequence @@ -199,9 +188,6 @@ case $1 in rma) envrma ;; - install_libuv) - install_libuv - ;; *) echo "invalid option: $1" usage "$0"