{"id":13774199,"url":"https://github.com/maurer/tachyon","last_synced_at":"2025-03-24T23:38:00.827Z","repository":{"id":66771208,"uuid":"2351678","full_name":"maurer/tachyon","owner":"maurer","description":"Record/Replay for syscall streams","archived":false,"fork":false,"pushed_at":"2015-06-22T04:04:19.000Z","size":318,"stargazers_count":3,"open_issues_count":2,"forks_count":0,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-03-23T21:50:33.857Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Haskell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/maurer.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2011-09-08T21:31:11.000Z","updated_at":"2016-08-17T00:04:33.000Z","dependencies_parsed_at":"2023-02-20T16:20:21.374Z","dependency_job_id":null,"html_url":"https://github.com/maurer/tachyon","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maurer%2Ftachyon","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maurer%2Ftachyon/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maurer%2Ftachyon/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maurer%2Ftachyon/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/maurer","download_url":"https://codeload.github.com/maurer/tachyon/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245372216,"owners_count":20604488,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-08-03T17:01:24.612Z","updated_at":"2025-03-24T23:38:00.808Z","avatar_url":"https://github.com/maurer.png","language":"Haskell","funding_links":[],"categories":["\u003ca id=\"58b6684347a223e01d4d76d9ca185a88\"\u003e\u003c/a\u003eReplay\u0026\u0026重播"],"sub_categories":[],"readme":"# Tachyon\nTachyon is a system for providing record, replay, and tandem execution by forwarding one process's system calls to the other.\n\nThis is still research quality code and is not extraordinarily stable.\n\n## Building\n\nTachyon's non-hackage dependencies are pointed to by git submodules.\nTo pull them down, run\n```\ngit submodule init\ngit submodule update\n```\n\nIf you have [Nix](http://nixos.org) installed, you should just be able to run `nix-build shell.nix` to build.\nOtherwise, descend into each of `ptrace` and `trace`, running `cabal install` in each, then run `cabal install` in the root directory.\n\n## Usage\n\nThe Tachyon package provides two utilities: `tracer` and `corediff`.\n\n### Tracer\n`tracer` can be invoked in 3 different modes: Record, Replay, and Tandem.\n\n```\ntracer RecordMode executable logfile\n```\nwill record the stream of system calls made by `executable` to `logfile`.\n\nSimilarly,\n```\ntracer ReplayMode executable logfile\n```\nwill execute `executable` using `logfile` as its system call stream source.\n\nFinally,\n```\ntracer TandemMode exe1 exe2\n```\nwill run `exe1` and `exe2` simultaneously, attempting to rewrite the system call from `exe1` into something that `exe2` can use.\n\n### Corediff\n`corediff` allows you to diff cores generated when running the `tracer` process.\nThis is primarily of interest for debugging in the case that replay is not proceeding as expected.\n\n## Caveats\nThis code is somewhat brittle, you may need to update or add features to get it to work on your particular kernel version/libc version etc.\nA good start if you notice unexpected deviations is to run `corediff` on cores you expect to be equal, and try to determine if any differences detected are problematic.\n\nThreading is implemented by forcing system calls to interleave the same way on subsequent runs.\nThis does not actually induce determinism, though it does come close.\nIf you want to operate on threaded binaries in any kind of stable environment, I suggest you combine Tachyon with some sort of memory determinizer (e.g. [dthreads](http://www.cs.umass.edu/~emery/pubs/dthreads-sosp11.pdf)).\n\nIf you have a specific problem, feel free to file an issue, and I'll try to look into it.\nHowever, this is not my current project, so any support is on a strictly best effort basis.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmaurer%2Ftachyon","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmaurer%2Ftachyon","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmaurer%2Ftachyon/lists"}