答辩Slices位于根目录的
openEuler Competition Slice - zhaos -v2.pdf
openEuler Competition Slice - zhaos -v2.pptx
基于stratovirt的后端虚拟块设备,实现对异步读写组件iouring的支持。
基于crate libc,封装425-427号系统调用与相关iouring的数据结构、宏定义与枚举类型。
实现异步上下文结构体UringContext(util/src/aio/uring.rs), 其成员函数分别实现setup(), enter()和register()功能,具体来说:
按需修改部分mod.rs和block.rs文件中代码逻辑。
sample_program内为示例代码的实现,测试上下文结构为SampleContext(util/src/aio/uring.rs)。
util/src
├── aio
│ ├── mod.rs
│ └── uring.rs
device_model/src
├── virtio
│ └── block.rs
sample_program/src
├── main.rs
├── testFile.txt
代码基于kernel 5.3,rust-libc 0.2.71版本撰写。虚拟机编译与运行方式同原生系统,详见stratovirt
./startup.sh为启动脚本(需要更改个别参数路径)。
# Make sure api-channel can be created.
rm -f /tmp/stratovirt.socket
# Start StratoVirt
./target/release/stratovirt \
-kernel /home/zs/kernel/vmlinux.bin \
-append console=ttyS0 pci=off reboot=k panic=1 root=/dev/vda \
-drive file=/home/zs/rootfs.ext4,id=rootfs,readonly=off,direct=on \
-api-channel unix:/tmp/stratovirt.socket -serial stdio \
-disable-seccomp
[zs@localhost sample_program]$ cargo build & cargo run
Finished dev [unoptimized + debuginfo] target(s) in 0.00s
Running `target/debug/sample_program_Q14`
[Sample Result]: 2020 openEuler Contest - Q14
[UringContext submit]
urcb.aio_fildes : 36
urcb.opcode : 1
urcb.aio_buf : 94519392787568
[UringContext submit over]
[Uring Handle]
e.res : 1024
e.data : 94519392789008
(*aiocb).file_fd : 36
complete_cb desc_index: 0
complete_cb rw_len: 1024
[Uring Handle over]
上述打印信息中submit的请求数据来源于Aiocb,在rw_aio及process_list流程中被构造为urcbs,其中data域被置为CbNode类型,这是为了迎合handle流程时数据的提取。
事件响应时输出的e.res和e.data实为此时cqes头部元素的res和user_data。接着调用在build_aio中注册的回掉函数complete_func,desc_index和rw_len为接下来add_used所需参数。
当前项目还未整合iouring的部分性能优化feature,详细的性能测试有待进一步更新。
to be continue..
TOPIC_ID:14, TEAM_ID:1996338335, TEAM_NAME:NBJL挤牙膏大师.
队长&成员:赵盛,南开大学-计算机学院。
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。