Code Monkey home page Code Monkey logo

alice-sled's People

Contributors

divergentdave avatar dvc94ch avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

Forkers

spacejam xyl012

alice-sled's Issues

Nicer way to get crashed directories and checker output

It would be nice if ALICE wrote out interesting crashed directories that exhibit vulnerabilities it identifies. Thus far, I have been modifying alicedefaultexplorer.py, by replacing shutil.rmtree(dirname) with if retcode == 0: shutil.rmtree(dirname), killing the program before it can reach shutil.rmtree(alice_config['scratchpad_dir']) in alice-check, and then digging around in /dev/shm.

libunwind issue with crash tests

When running a crash test, the call to unw_init_remote can fail with UNW_EBADREG, presumably because the child process receives SIGKILL and terminates, and alice-strace will exit with a fatal error message. So far, I have worked around this by setting really_output_stacktrace to 0 in syscall.c, but this gets rid of all stack traces. While the method names aren't terribly informative as it is, it would be nice to gracefully handle this error, and just not collect a stack trace for this one process or syscall.

Printing more information from ALICE traces

ALICE has plenty of interesting information in its traces beyond what's printed in the list of disk ops. For example, there are unused optional arguments to print_ops to show thread IDs and times. Here's an ad-hoc script I used to examine a trace, this might be worth turning into a command-line tool.

#!/usr/bin/env python
import os
import pprint

from alice import Replayer
from alicedefaultfs import defaultfs

traces_dir = "/home/david/Code/alice-sled/cases/random_ops/traces_dir"
workload_dir = "/home/david/Code/alice-sled/cases/random_ops/workload_dir"
starting_wd = "/home/david/Code/alice-sled/cases/random_ops"
scratchpad_dir = "/dev/shm/alice-inspect"
alice_config = {
    "strace_file_prefix": os.path.join(traces_dir, "strace.out"),
    "initial_snapshot": os.path.join(traces_dir, "initial_snapshot"),
    "base_path": workload_dir,
    "starting_cwd": starting_wd,
    "ignore_mmap": False,
    "scratchpad_dir": scratchpad_dir,
}
replayer = Replayer(alice_config)
replayer.set_fs(defaultfs('count', 1))
pprint.pprint(replayer.micro_ops[75].__dict__)

alice-strace and crashing workloads

After fixing the libunwind issue, it appears that there are still multiple ways alice-strace will fail if a tracked executable receives SIGKILL. I noticed one that appeared to be happen while dumping data from a buffer, and one error message from somewhere else. Each of these appears to be individually rarer than the unw_remote_init issue, based on the output.

Check transaction serializability

Test case with dirty database

It would be useful to have a test case where an extra binary prepares a dirty database, before the ALICE workload operates on it, to improve coverage. This would allow exploring databases where recovery has been run multiple times, and would allow working on larger databases without paying the cost of writing the entire database from within ALICE's polynomial blowups.

Python 2

ALICE was written in Python 2, which is on borrowed time. Converting to Python 3 might be worthwhile. BitVector supports Python 3, which helps. Since ALICE deals with binary data as str currently, the transition will require some careful rewriting to use bytes and str as appropriate.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.