diff --git a/README.md b/README.md index 921d60e..ae42b48 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ -## 编译运行 +## Compile and Run -1. 首先安装依赖: +1. Prerequisites: - Ubuntu 20.04: @@ -9,162 +9,23 @@ sudo pip3 install kiwi ``` -2. 首先拉取代码: +2. Pull Code: ```bash - # 首先进入到一个合适的目录用来存放代码 - cd ~/Documents - - # 然后分别拉取两次 nwfq-ndnsim 这个项目代码,放在两个不同的目录 - git clone https://gitea.qjm253.cn/SunnyQjm/nwfq-ndnsim.git - git clone https://gitea.qjm253.cn/SunnyQjm/nwfq-ndnsim.git nwfq-ndnsim-pcon + git clone https://gitea.qjm253.cn/SunnyQjm/ndnSIM-template.git + git submodule update --init --recursive ``` - - 在这边我们拉取了代码两次,分别放到两个不同的文件夹,主要用来存放我们的实验代码和基于PCON做对比实验的代码,拉取结束之后我们的文件目录应该长下面这样: - +3. Compile and install + - debug(slow but have log) ```bash - . - ├── nwfq-ndnsim - │   ├── README.md - │   ├── ns-3 - │   ├── pybindgen - │   └── scenario - └── nwfq-ndnsim-pcon - ├── README.md - ├── ns-3 - ├── pybindgen - └── scenario + cd ndnSIM-template/ns3 + ./waf configure -d debug --enable-examples + sudo ./waf install ``` - -3. 然后进行分支切换: - - ```bash - # 把 nwfq-ndnsim 文件夹下的代码切换到 nwfq-with-rate-congestion 分支 - cd nwfq-ndnsim - git checkout nwfq-with-rate-congestion - - # 把 nwfq-ndnsim-pcon 文件夹下的代码切换到 pcon 分支 - cd ../nwfq-ndnsim-pcon - git checkout pcon - ``` - - 可以运行下列命令查看有哪些分支: - - ```bash - git branch -a - ``` - - 输出: - - ```bash - * master - remotes/origin/HEAD -> origin/master - remotes/origin/master - remotes/origin/nwfq - remotes/origin/nwfq-with-rate-congestion - remotes/origin/pcon - ``` - - - 可以看到远程有若干个分支,我们只关心两个分支: - - `nwfq-with-rate-congestion` 分支存放了我们的DSCPP方案的实验代码; - - `pcon` 分支存放了我们基于 PCON 做对比实验的代码; - - `master` 分支存放的是ndnsim原本的代码,没有经过任何修改,如果要引入新方案对比,可以基于这个分支开一个新分支进行实验编写。 - -4. 编译 DSCPP 实验代码,我们进入到 `nwfq-ndnsim/ns-3` 目录下开始编译 - - ```bash - cd ../nwfq-ndnsim/ns-3 - - # 配置(这边使用 -d debug 编译成debug模式,才有日志输出) - ./waf configure -d debug --enable-examples - - # 开始编译(要挺久的,够喝杯咖啡了) - ./waf - - # 编译完成开始安装 - sudo ./waf install - ``` - -5. 编译 PCON 对比实验代码,我们进入到 `nwfq-ndnsim-pcon/ns-3` 目录下开始编译 - - ```bash - cd ../../nwfq-ndnsim-pcon/ns-3 - - # 配置(我们基本不用改pcon的代码,所以这边使用 -d optimized 编译成生产模式, 不需要日志输出) - ./waf configure -d optimized --enable-examples - - # 开始编译(要挺久的,够喝杯咖啡了) - ./waf - - # 编译完成开始安装 - sudo ./waf install - ``` - -6. 先运行一下简单的PCON的代码,运行之前保证当前处于 `nwfq-ndnsim-pcon/ns-3` 目录下 - - ```bash - # 执行下面这个才能进入到虚拟环境,才可以对实验进行可视化 - ./waf shell - - # 进入到实验场景目录 - cd ../scenario - - # 如果第一次跑实验,需要跑下面的代码进行配置 - ./waf configure - - # 运行实验 1.1 (--vis 参数表示可视化运行实验,会跳出一个可视化界面,不加的话直接运行实验) - ./waf --run=experiment1.1 --vis - - # 运行结束之后,输入 ctrl+c 退出虚拟环境(这步一定要做,要不然后面不能正常跑) - ``` - -7. 然后我们来跑一下 DSCPP 的时延代码,我们需要进入到 `nwfq-ndnsim/ns-3` 目录下 - - ```bash - cd ../nwfq-ndnsim/ns-3 - - # 下面这一步是因为刚才我们跑的 PCON 的实验代码,所以需要执行下面的安装一下 DSCPP 的代码的编译结果 - # 每次想要切换运行两份代码的时候就需要到对应代码的 ns-3 文件夹下执行这个安装一下链接库 - sudo ./waf install - - # 执行下面这个才能进入到虚拟环境,才可以对实验进行可视化 - ./waf shell - - # 进入到实验场景目录 - cd ../scenario - - # 如果第一次跑实验,需要跑下面的代码进行配置 - ./waf configure - - # 运行实验 1.1 (--vis 参数表示可视化运行实验,会跳出一个可视化界面,不加的话直接运行实验) - ./waf --run=experiment1.1 --vis - ``` - -8. 输出运行日志: - - ```bash - NS_LOG=ndn-cxx.nfd.DataRateMerger ./waf --run=experiment2 - ``` - - - 上面这个代码运行了实验2,并且不带 `--vis` 表示不需要图形化界面; - - - NS_LOG = `ndn-cxx.nfd.DataRateMerger` 表示输出 DataRateMerger 这个类里面的输出 - - - 只要输出一个错误的值,就会告诉你 NS_LOG 可以取那些值 - - ![image-20210722194839783](https://gitee.com/quejianming/pic-bed/raw/master/uPic/2021/07/22/image-20210722194839783-1626954521.png) - - - 目前对我们比较有用的LOG有以下几种: - - - `ndn.ConsumerNWFQ` => DSCPP 客户端程序的输出 - - `ndn.ConsumerPcon` => PCON 客户端程序的输出 - - `ndn-cxx.nfd.GenericLinkService` => NFD 通用链路服务的日志输出 - - `ndn-cxx.nfd.DataRateMerger` => DSCPP 转发策略的速率合并模块的日志输出 - - `ndn-cxx.nfd.RandomLoadBalancerStrategy` => DSCPP 转发策略的日志输出 - - `ndn-cxx.nfd.NWFQ` => DSCPP NFD中的速率整型部分的日志输出 - - - 如果要输出多种类型的日志,用 `:` 拼接就好了 - + - optimized(fast but have no log) ```bash - NS_LOG=ndn-cxx.nfd.DataRateMerger:ndn.ConsumerNWFQ ./waf --run=experiment2 - ``` + cd ndnSIM-template/ns3 + ./waf configure -d optimized --enable-examples + sudo ./waf install + ``` \ No newline at end of file