Simbricks翻了一圈发现好像没人写这个,正好最近也在看这个,就抛砖引玉吧
什么是Simbricks欸
总的来说,它就是一个模拟器,详细点就是模拟器框架。
它能干啥呢,能实现对现代的网络系统做端到端模拟,包括运行完整软件的多台服务器,其中甚至有操作系统(一般就是Linux,毕竟代码里的Image就是)、PCI、NET等网络拓扑和设备、应用程序以及现成的和定制的硬件组件。
Simbricks可不是从头开始的新的模拟器,它类似于一个桥梁,将多个现有的模拟器组合连接成一个完整的模拟系统。
这图片是不是很形象?形象就对了,毕竟是从git上弄的
包含了哪些模拟器
好了,说完了Simbricks大概是啥,就来说说它到底给哪几个模拟器搭桥了吧
- QEMU ,快速的主机模拟(跑用例的时候确实快,应该是性能模拟吧);
- gem5 灵活详细的主机模拟(跑用例超慢的,怕不是功能模拟);
- ns3 灵活的网络模拟器(模拟了交换机啊啥的,具体代码还没看);
- OMNeT++ INET 反正也是灵活的网络模拟器(没见过,不知道,别问我);
- Intel Tofino SDK Simulator 供应商提供的用于Tofino P4交换机的闭源模拟器;
- FEMU NVME SSD的相关模拟;
- Verilator Verilog RTL模拟(你会Verilog吗?反正我不会);
如何开始
simbricks的安装
sudo docker run -it simbricks/simbricks /bin/bash
不能加-rm,会在退出后删除刚刚的容器。
当然要加也可以,如果要改源码啥的会给你难受死,哦对,我一开始还傻乎乎的在终端里面用vim改容器里的代码,后面再说;
一个image可以生成不同的container,要是次次都用这个命令,容器会多到起飞的!
记得删除(确信)后面也有其他办法就是
docker的启动方法(使用ssh连接,能保存文件修改的方式)
PS.当然要是,不是远程连服务器,那无所谓ssh
sudo docker ps -a
查看正在运行的容器
如果容器已经关闭,用
sudo docker start 容器名称
打开容器(别跟着在终端里敲一个容器名称啊,查看运行的容器!)
然后就可以起飞辣(不是)用
sudo docker exec -it 容器名称 /bin/bash
进入正在运行的容器内(同上)
可以对容器进行修改,修改会自动保存。下次再进入同样名称的容器内时修改还存在。
(毕竟没删除不是)
使用ssh连接
①创建一个加有端口映射的容器(端口设为20022)
sudo docker run --it -p 20022:22 simbricks/simbricks /bin/bash
②安装ssh server:
apt update
apt install passwd openssl openssh-server openssh-client -y
③配置ssh server:vim /etc/ssh/sshd_config
#添加下面两行
PermitRootLogin yes
PasswordAuthentication yes
上面注意的一点是sshd_config 而不是ssh_config,一定不能混淆了。
④添加后设置密码
输入passwd命令设置密码
后面登录的密码就是现在设置的密码
⑤重启sshd
service ssh restart
⑥然后就可以在远程登录了
本地电脑上可以测试一下连接服务器到这个docker
ssh root@ip -p 20022
有时候ssh服务会莫名其妙关闭,要重启
在根目录下: /etc/init.d/service ssh status
重启ssh服务: /etc/init.d/ssh restart
上面这个命令不行的话得运行下面这个 sudo /etc/init.d/ssh restart
使用vscode通过ssh打开代码
docker配置好端口后就相当于连接一个远程服务器。
已经有其他大佬写好了VScode连接远程服务器辣,我就不献丑了(Ubuntu输入法我受不了了)
VSCode上装些杂七杂八的扩展,docker、python、Dev Containers
装了,基本上就能很方便的改容器内的代码了
运行gem5_i40e_pair.py
①在/simbricks目录下运行
make convert-images-raw
命令
毕竟你不跑这个命令,gem5相关的用例全部木大哒!(欧拉!)
②在/simbricks/experiments目录下运行
simbricks-run --verbose --force pyexps/gem5_i40e_pair.py
命令
Simbricks简单介绍结束!
我这篇文章属于是听君一席话,如听一席话,感觉好像啥也没讲。有大佬愿意接手继续详细将将源码啊,内部脚本是怎么通过代码去调用其他模拟器的啊。就好了,毕竟我也还在看。
下次有机会写写Adapter(咕咕咕)