为什么已经在容器里了,但是无法运行命令?
官方文档和实际项目有所出入,即官方文档里的运行命令是simbricks-run,但并没有找到定义改操作的文件,我现在要在实际项目中寻找能运行程序的命令,应该如何寻找?
为什么要有"插槽",即中间步PCIe的接口,直接让PCIeChannel接到self上,省略掉中间的add_if不行吗?
什么是磁盘镜像格式?"Gem5 支持 raw,QEMU 支持 raw/qcow2"什么意思?
什么叫把文件当真实的硬盘来读写?这是怎么做到的?
为什么一定要替换为主机为Gem5适配的I40E主机类?直接用原来的不行吗?
为什么对于Host0,1要加入两个盘,cfg和tar?只用一个不行吗?
# create disk images
distro_disk_image = system.DistroDiskImage(sys, "base")
# Disk images shipped with simbricks
class DistroDiskImage(DiskImage):
def __init__(self, h: sys_host.FullSystemHost, name: str) -> None:
super().__init__(h)
self.name = name
self.formats = ["raw", "qcow2"]
def available_formats(self) -> list[str]:
return self.formats
def path(self, inst: inst_base.Instantiation, format: str) -> str:
path = inst.env.hd_path(self.name)
if format == "raw":
path += ".raw"
elif format == "qcow2":
pass
else:
raise RuntimeError("Unsupported disk format")
DiskImage.assert_is_file(path)
return path
def toJSON(self) -> dict:
json_obj = super().toJSON()
json_obj["name"] = self.name
json_obj["formats"] = self.formats
return json_obj
@classmethod
def fromJSON(cls, system: sys_base.System, json_obj: dict) -> DiskImage:
instance = super().fromJSON(system, json_obj)
instance.name = utils_base.get_json_attr_top(json_obj, "name")
instance.formats = utils_base.get_json_attr_top(json_obj, "formats")
return instance
这里构建镜像的逻辑是什么?输入base时,得到的是什么?
我在experiments目录下创建了生成的sim_logger.py后,在目录下生成了__pycache__和其中的文件/workspaces/simbricks/experiments/pycache/sim_logger.cpython-310.pyc,这个文件还不可打开,这都是什么?为什么会生成?有什么用?
解析命令,并将命令注入到模拟节点的代码是在哪里?怎么实现的?
这里host将app加入,即add_app方法后,再BaseLinuxHost基类里,add_app方法就只是将app加入到applications当中,我现在就是迫切的想知道System是在哪段代码里定义了对Host的application操作?
def simple_instantiation(
simulation: sim_base.Simulation,
) -> inst_base.Instantiation:
instance = inst_base.Instantiation(sim=simulation)
instance.preserve_tmp_folder = False
instance.create_checkpoint = True
return instance
这是simple_instantiation方法,实现了什么?然后再往后如何定位对application操作呢?
这个def()->:中,->是什么意思?
simulator = st(simulation)什么意思?"for comp in system._all_components.values(): # 遍历System中所有组件(Host/NIC/Switch等) if comp in simulation._sys_sim_map: # 跳过已分配模拟器的组件(避免重复) continue"为什么要跳过已分配模拟器的组件?什么叫已分配模拟器的组件?
有个问题,在使用simple_simulation方法时,会传入很多组件,但是simulator是在每个for循环中构建的,simulator也没加入到simulation当中里啊?即我现在感觉最后return的simulation和在for循环中构建的simulator无关,因为我没看到它们之间建立关系的代码
在simulation里写的代码,和在system里写的,分工是怎样的?就是我之前一直以为system里写的才是对各个组件的模拟逻辑,但实际上好像是simulation里?那么system里好像就只是在不断定义不同的组件?
这里st(simulation)当中,st是什么?类型是什么?
我现在是在docker容器当中遇到的这个问题,那我现在安装,即执行pip install命令,是安装到哪?如果关闭容器,下次再启动时,是否还有这个文件?