tarides / notafs Goto Github PK
View Code? Open in Web Editor NEWNot a filesystem for Mirage block devices
License: ISC License
Not a filesystem for Mirage block devices
License: ISC License
Errors are not properly exposed to end-users, as there's a catch-all on the way that hides the precise error. It would at least help the CLI to figure out the correct sector size if this could be cleaned up. Also a proper "disk is full" error should be added rather than raised with failwith
!
It would be nice if we could format and prepare disks from the terminal, to be used later by an unikernel! Probably by using the mirage-kv
interface, to enable copying files from and out of a notafs disk?
There are few settings that we should store on the disk (in the first sector? in each root generation?) to avoid using a disk with the wrong parameters later:
format
?)We need some mutexes to protect against concurrent mutations. Currently it's possible for an lwt promise to be reading a file, and have another lwt process concurrently delete/write to the same rope... which immediately frees related sectors, so the first promise could end up reading garbage!
We have some benchmarks for the unix backend, but it would be interesting to know how it behaves on solo5 where I/O has a different performance profile. To interpret the numbers, it makes sense to compare reads/writes speed with ocaml-tar
as it has the maximum throughput possible.
Currently, reads are batched only when reading a rope as this requires structuring the lwt code in a way that allows concurrency. A similar optimization should be done to verify_checksum
to speed up the validation at boot.
edit: Same thing for Rope.free
! (as we need to traverse the full rope to free all reachable sectors)
It might be helpful to have a more explicit error if we add a new empty named file to the Notafs file system. For the moment, it is just an assertion in src/files.ml
.
Error (File "src/files.ml", line 223, characters 14-20: Assertion failed)
Currently the root generations are not checksummed. Only the sectors containing filesystem data are, as their checksum is stored in their parent pointer. Since there are no pointers to the root generations, their checksum should be stored in their own sector.
The wear-leveling story is looking pretty alright... except for the root generations that might be written much more often than the other sectors. There are two potential directions to reduce the amount of writes performed on the first sectors of the disk:
The support for Mirage_kv.RW
is missing some stuff (like the ability to connect
to an existing disk, rather than format
it!)... and the implementation hasn't been stress-tested (I have some doubts regarding the way we simulate the hierarchical directories in list
)
Add some documentation to the project (via mli files and such)
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.