Replies: 7 comments
-
Rusty-hermit学习过程学习rusty-hermit,尝试为arceos支持tokio准备一些参考信息。 Rusty-hermit构造Unikernel Image过程跟踪
正在跟踪libhermit-rs的构建过程和内部实现。待续... |
Beta Was this translation helpful? Give feedback.
-
RustyHermit的构成RustyHermit是一个Unikernel OS的构造工具,最终会生成一个裸机(或虚拟机)上运行的Unikernel Image文件。
构造顺序
关于Target(x86_64_unknown-hermit)& rustc & llvm & std
小结
进一步工作的想法
|
Beta Was this translation helpful? Give feedback.
-
实验目的
实验思路
实验步骤步骤1:导出x86_64-unknown-hermit,定义新的自定义target:x86_64-unknown-monk
步骤2:修改rust-std库和hermit的相关库
git clone [email protected]:shilei-massclouds/step-hermit.git
cd ~/.rustup/toolchains/nightly-2023-03-15-x86_64-unknown-linux-gnu/lib/rustlib/src
mv rust bak_rust
ln -s /home/cloud/gitRust/step-hermit/rust ./rust
cd helloworld
./build.sh
cd rusty-loader
./build.sh
cd ..
./start.sh
|
Beta Was this translation helpful? Give feedback.
-
目标把tokio移植到rusty-hermit,为下一步tokio结合arceos做准备。 准备工作
思路在linux下原本层次如下: graph TD;
tokio --> mio
tokio --> socket2
mio --> libc_syscall
socket2 --> libc_syscall
libc_syscall --> linux_kernel
我们准备改造的hermit目标层次结构: graph TD;
tokio --> mio
tokio --> socket2
mio --> hermit_abi
socket2 --> hermit_abi
hermit_abi --> libhermit
因此,思路总结如下:
过程
|
Beta Was this translation helpful? Give feedback.
-
在rusty-hermit上支持tokio的实验情况。
|
Beta Was this translation helpful? Give feedback.
-
基本思路HermitOS即libhermit.a由三部分构成:
总体步骤
针对hermit功能模块的替换步骤对于ArceOS Apps中的每个应用:
当前进展
小结目前看,Hermit大部分功能在ArceOS中都能找到对应;而文件管理之类的功能,我们可以暂时延用hermit的,最后进行review和修改。所以,工作难度不大,但是应该有一定工作量。如果有同学参与进来,可以参考本文档并在GitHub协作,如下链接 [email protected]:shilei-massclouds/std-arceos.git |
Beta Was this translation helpful? Give feedback.
-
关于学习和借鉴rustyhermit的有趣讨论(jyk,sl):背景:rustyhermit(一种rust-based unikernel)有对rust std的直接部分支持,本小组成员在如何借鉴rustyhermit,在arceos中支持部分rust std,以进一步支持tokio jyk: 建议一开始做时就不要和hermit有任何关系,它的hermit-abi,libhermit,rusty-loader在我们这里都是没有对应关系的,直接调用libax一个就够了 sl: 我感觉目前这条路(基于libhermit,逐步替换位libarceos)是比较稳妥的 可以最大限度复用hermit成果 逐步替换就能达到目标 hermit趟过的路我们没有必要再趟一遍 libax不足以支撑std。其实,libhermit是由三部分构成的,其主体部分基本对应arceos除apps之外的全部。另两部分我们是没有的。rusty-loader 就基本对应于axhal中boot部分,调通再简化合并也比较方便。 jyk: 有必要再趟一遍,他的不够简洁 sl: 先把路走通 再简洁 jyk: 肯定走得通 sl: 不争了 你讲的说服不了我 我先按我目前的想法走下去 jyk: libax中已经实现了Stdin和Stdout,为何还要通过sys_write再包一层?文件已经实现了File结构,为何还要用fd再实现? sl:
jyk: 是计划有一个abi层,会统一处理syscall/fncall,linux abi/arceos abi,但这是在libax之下的,libax对应std后端,std应该直接调用libax而不是abi。目前已实现的是一个假设的arceos abi,专门为rust应用调用rust内核而设计,还在探索,特地不用fd等传统abi。sys_write之后也会实现,但那只是为了兼容linux应用 sl: 我认为libax对应于hermit直接在abi下面那一部分代码 就是你前面说的实现sys_write那一层的东西 它应该在abi下面 jyk: 不是,它就是一个简化的std。abi那一层需要有,但目前还没有特别区分 sl: 专门为rust应用内核设计是什么目的 性能更好吗 我不认为基于abi就能差到哪里去 是有实验数据支撑吗? 手指头快断了 jyk: 比如闭包,async/await函数 sl: 我认为libax不适合定位为std 那rust现在官方的std咋办 你用libax替掉它? jyk: 作为后端 sl: 如果作为std后端那我就觉得 std直接调用rust和通过abi这层再调用rust没有什么性能差别 特别这里还不涉及你提到的闭包等高级rust特性 原来std后端几乎都是C实现的os 基本都提供C接口。 除非你想重构大调整std hermit存在应该有段时间了 之前是c实现 后来才搞得rust 他们应该面临过咱们正在或者即将面临的问题 咱们可以通过这个逐步对应替换的办法 深入的学习一下他们的东西 哪怕它不好 也确切知道它哪里不好。我有个感觉:各位老师同学别见怪。咱们可能对其他os的学习,尤其是总结方面可能是不够的。往往想做一个东西的时候去参考一下,得到想要的就放一边了。很少会专门对一个os进行完整的系统的分析。这样可能会错过一些像架构设计方面只有从整体去看才能得到的好东西。当然也许只是我了解的情况太少。说的不对的请见谅。 jyk: 没说大改std啊,目前libax就是面向std来的,api都很像,接过去很容易 sl: 那std调用abi。 libax在下面实现abi也没什么难的吧 jyk: 我认为hermit已经没什么好学的了,它实现的我们都能实现,只有遇到问题解决不了才去参考它一下,现在就是要做和它不一样的东西。不如去学redox,theuses。hermit一眼就看出它的思想了,我们都能想到 sl: 好吧 之前问题绕远了 其实这个才是根本问题。你认为他没什么好学的。我认为需要好好学。我们解决不了问题的时候去参考人家。正说明人家有好东西。只是有些东西现在发现了。有些东西要等我们遇到问题时才能发现。 |
Beta Was this translation helpful? Give feedback.
-
目标:
探索tokio runtime运行在arceos上,分析其中的I/O性能提升的可能性。涉及 rust std, async, io support等。
初步计划:
参考:
如有兴趣一起来探索,请联系我 yuchen AT tsinghua.edu.cn OR 微信 id chyyuu
Beta Was this translation helpful? Give feedback.
All reactions