63 Commits (master)
 

Author SHA1 Message Date
Avril f4f7aafa32
Feature-gated `-exec/{}` as "exec". Added feature `mode-flags` to enable/disable collect-noallocate collect-preallocate memfile-total-jemalloc.png features that involve runtime flags.
1 year ago
Avril 5c673ae3c4
-exec/{} feature is ready to merge
1 year ago
Avril 9aba1f43a1
Fixed `-exec` to use real `dup()`"d file instead of copying to a new pipe
1 year ago
Avril 31cfee9989
Fixed -exec{}: dup()"d file descriptor was being closed before the process could access it. Fixed -exec (hack ver.): Ditto.
1 year ago
Avril 582bfc0dad
Made -exec (stdin ver) work via piping hack (XXX: We need to find how to pass file directly.) (TODO: -exec{} still doesn"t work: `No such file or directory` error when accessing /dev/fd/{fd} *and* /proc/{pid}/{fd}?? Idk why...
1 year ago
Avril bc121420b8
Chenged return type of `spawn_from_sync()` to be an iterator of `Result<Option<i32>>` so the caller can decide what to do if the child terminates without an exit code. Also changed to `eyre::Result<>` to report the specific failure and child process" index.
1 year ago
Avril 79721444ba
Implemented `-exec/{}` implementation functionality.
1 year ago
Avril 715fa4d5a8
Added simple fatal error message verbosity levels controllable by environment variable at runtime (`RUST_VERBOSE =~ /1|v|verbose/i`), and compile-time (`NO_RT_ERROR_CTL`, `DEFAULT_ERROR =~ /1|v|verbose/i`.) Default is simple error messages at compile and runtime.
2 years ago
Avril f918d5f6e1
Prepared or replacing return type from directly normal operation `Options` to `enum Mode`, which will facilitate returning a `--help` or other special mode case. We can use `impl From<Options> for Mode` and work with this to make the migration of return types easier.
2 years ago
Avril 227abc0d7d
args: Added visitor-pattern argument parsing. Fixed bug in `try_parse_for!()` which `continue`d on the wrong branch. Improved specific and general error messages regarding arguments. Parsing for `-exec/{}` works! A correct `Options` struct is produced, edge-and error- cases are handled correctly with informative messages (TODO: Implement `--help`.)
2 years ago
Avril 177bf3c4ff
main: Added `parse_args()`: Parses args, converts error to eyre::Report, and adds section for suggestion (TODO: Implement `--help`) and section on which args existed.
2 years ago
Avril 1e9224d53c
args: Added `parse_args()`: Attempt to parse the program args into `Options` struct. Added `ArgParseError`, error describing why parsing arguments failed. Added `EXEC_MODE_STRING_TERMINATOR` the terminator used when deciding when to stop parsing an arglist for `-exec/{}`. Added `program_name()`, returns the current executable"s name as a UTF8 string, if the executable"s name was not a UTF8 string, then it is lossily converted to one and invalid characters are replaced.
2 years ago
Avril 0b84adc84f
Added fmt::Display impl for ExecMode that quotes/escapes command or args if needed uses the `POSITIONAL_ARG_STRING` for positional arguments.
2 years ago
Avril 682cd8ec15
args::Option::ExecMode Started argument parsed data structure for `-ecec <command> [<args>...]` (Stdin) `-exec{} <command> [<args>|{}...]` (Positional `"/prof/self/fds/{}" (3++)`).
2 years ago
Avril 6220233d97
Preparation for adding the command-line option `-exec` and `-exec{}`.
2 years ago
Avril 14f32d6262
Explicitly closes `stdout` before process exits.
2 years ago
Avril bc2357c6b6
Attempted to add new feature flag: `memfile-size-output`: Which will pre- or post- set the size of `stdout` to the correct buffer size, allowing consumers of `collect`"s stdout pipe to know the size just like a file. However, `ftruncate()` always fails on stdout. Before re-enabling the feature, we must find out how to set the size of a pipe, if/when you even can, and what syscall(s) you need to do it with.
2 years ago
Avril b2bf26f245
Bumped minor version.
2 years ago
Avril ab56c93532
Bumped minor version.
2 years ago
Avril 395799587b
Removed `stackalloc` dependancy.
2 years ago
Avril 289db974cd
TODO: Find out how to set the length of stdout if possible, so that the consumer of `collect` in a pipeline need only use one syscall splice() to read all the collected data at once, like a file.
2 years ago
Avril b47a27c60f
(partial-merge from (probably) now-defunct branch `hugetlb`.)
2 years ago
Avril 35c6cabce3
memfile::hp: Changed `get_masks()` to return an iterator of `SizedMask` instead of just `Mask` to retain the size of the huge-page itself in bytes (for `ftruncate()` calls, and `mmap()` calls.)
2 years ago
Avril dbf2dbffde
Removed `hugetlb` feature flag: It cannot be used for our use-case.
2 years ago
Avril 8ea3a23e27
Using huge-pages for this is folly from the start: For one, we never actually map the fallocate()"d memory. And two... hugetlbfs does not support write()s in any way, splice()s, send_file()s... It only supports read(), and mmap() (its primary use-case...); which isn"t relevant for us.
2 years ago
Avril 872ea74421
It seems creating HUGETLB memory files either just doesn"t work or changes their behaviour so that any (or at least, small arbitrary) writing or fallocate()ing to them fails... Read up on MFD_HUGETLB more then re-do a test like `memfd_create_wrapper()` to find out why... and if it depends on the MAP_HUGE_ mask, and if so, find one that works... (We know when masks are invalid, since the error message is different. The masks collected via `get_masks()` *are* valid for this system, they just prevent the fd from being any way useful.)
2 years ago
Avril bdfd0a6268
memfile::hp: Added `PartialEq` impl for `c_int` (checks `MAP_HUGE` from `.raw()`), and `c_uint` (checks `memfd_create()` useable constant from `.mask()`.)
2 years ago
Avril 573845a667
memfile::hp: Added `get_masks()`: Returns an iterator over all `MAP_HUGE` masks found on system.
2 years ago
Avril 9b4bb475c0
Added extension methods for flattening `eyre::Result<eyre:Result<T>>`s and related constructs.
2 years ago
Avril e7b96af012
memfile::hp: Added test for `Mask`"s `.raw()` (`MAP_HHUGE_` flag generation.)
2 years ago
Avril c4f73ccfa0
memfile::hp: `find_size_bytes()` fixed and tested; should change function to return `eyre::Result<usize>` instead of `Option<usize>` considering how many different failure-paths exist.
2 years ago
Avril 9c18a5b940
memfile::hp: Added `Mask`: Converts bytes into a suitable `MAP_HUGE_` constant via its `.raw()` method, and a suitable flag for `memfd_create()` via its `.mask()` method.
2 years ago
Avril b882f0ae97
Completed `hp::find_size_bytes()`, and added const-generated lookup table for non "k" seperators.
2 years ago
Avril d46efebbf7
Added huge-page mask calculation algorithm to comment of module file `memfile::hp`.
2 years ago
Avril b1a64475f6
Merge branch 'master' into safe-memfd: memfile: Merged `RawFile::try_link_from()`: Analogue to `try_link_to()`.
2 years ago
Avril c6032467fa
memfile: Added `RawFile::try_link_from()`: Analogue to `try_link_to()`. Instrumented and added panicking versions of both functions. Added `clone_from()` impl that uses `try_link_from()` (i.e. `dup2()`)
2 years ago
Avril 59363848a2
Started: `memfile::hp`: `MFD_HUGETLB` can be used when a size is known to exceed into the boundary of a hugepage. Currently in the process of writing function to collect all possible hugepage sizes and generate the correct flag masks for `memfd_create(, MFD_HUGETLB | ...)` for each one; and the smallest one that contains the known size can be used for the `memfd_create()` call (if the size fits any at all.)
2 years ago
Avril bbed62e738
Version bump (revision): v1.0.2
2 years ago
Avril 2c839da13b
Bumped stackalloc version: Use PLT for trampoline: Causing random linker errors on some machines.
2 years ago
Avril 0262ca88d9
Added TODOs for specific bugs (and impl related ideas for how to go about preventing/warning in the event of `mode-memfd` system OOM) ; moved some RawFd-related functions into a submodule
2 years ago
Avril 8dd7ddaed8
Version bump v1.0.1
2 years ago
Avril 9ecd0ea3d8
Fixed silly bug preventing building on rust-stable.
2 years ago
Avril 1e207ca453
Create LICENSE
2 years ago
Avril 9125199d80
Added Cargo keywords (tags)
2 years ago
Avril 225a0a08f0
Fix README
2 years ago
Avril 8fe92b0951
Version 1.0.0!
2 years ago
Avril f05c1466c7
Added README.md
2 years ago
Avril 8390072309
Reached version 1.0.0!
2 years ago
Avril 515a63c3a2
Fixed bug with `memfile` feature not setting stream length properly without `memfile-preallocate`
2 years ago
Avril 23d022b5fe
Added working memfile implementation
2 years ago