# composition_reference_system **Repository Path**: jeffreysharp/composition_reference_system ## Basic Information - **Project Name**: composition_reference_system - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-07-12 - **Last Updated**: 2024-11-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # composition_test ## 工作同步 ```sh # 开始工作 git checkout local_skull git pull origin local_skull git branch skull git merge local_skull # 提交 git add . git commit -m "[local][add]: some message" # 同步 git checkout remote_skull git merge skull git push origin local_skull ``` # 编译 本项目共拥有两个包, composition_test为脚本和回调包, rclcpp_components则是从ros2_humble源码中对应包的拷贝 出于测试目的,对该包进行了适当的修改。 修改内容如下 - 添加了component_manager_test类用于替代component_manager类, 修改内容为on_load回调, 实现了同时加载回调的方法 - 添加了component_container_record, component_container_test 可执行文件用于替代component_container, 实现了文件输出重定向,CPU绑定,添加负载 ```sh # cd composition_reference_system colcon build ``` ```sh colcon build --packages-select rclcpp_components --allow-overriding rclcpp_components ``` ```sh colcon build --packages-select composition_test ``` ## 运行测试脚本 其中0-5并不是确定的,需要根据脚本bench_composition.py中的MAX_CONTAINER_NUM进行动态调整 当前绑定了6个核,因此最大的容器数量(MAX_CONTAINER_NUM)最大为5, 剩余的一个核用于运行除了容器外的所有进程 ```sh # 这种情况下只会运行一个主测试 划分为随机划分 (具体执行函数为main_test) taskset -c 0-5 python3 bench_composition.py # 在这种情况下会穷举所有的可能情况 并逐个运行 最大运行个数为MAX_TEST_NUM (具体执行函数为allcase_test) taskset -c 0-5 python3 bench_composition.py -s 3 # 监控context switch(当前函数修改了全局配置,如需修改则再度修改回去即可) taskset -c 0-3 python3 bench_composition.py -f test_monitor ``` bench_composition.py脚本会根据MAX_CONTAINER_NUM创建同等数量个线程,然后在主线程中进行加载、卸载节点,监控CPU利用率等操作 ## 运行分析脚本 ```sh cd src/composition_test/script ``` ### 分析端到端延迟 (折线图) 从给定的文件中读取数据后,将分析结果直接plt.show() ```sh python3 data_analyze.py ``` ### 分析端到端延迟 (箱形图) 该脚本拥有三个命令行参数 分别用于指定 - 要分析的目录(哪次测试) - 要分析的策略个数 - 容器总个数 ```sh python3 data_analyze_box.py ``` ```sh python3 data_analyze_box -t 1721136662.9450498 -s 2 -c 2 ``` ### 分析某一种策略的某一条链的概率图 该脚本拥有四个命令行参数 分别用于指定 - 要分析的目录 - 要分析的策略id - 容器总个数 - 要分析的链id - ```sh python3 data_analyze_probability.py -t 1721136662.9450498 -s 2 -c 2 -i 1 ``` ### 监控上下文切换次数 将运行的python脚本切换为自己的即可 $1 表示用哪个python脚本 $2表示用到哪个cpu ```sh sudo -E perf stat -e context-switches,cpu-migrations taskset -c 0-$2 /bin/python3 $1 ``` 命名规范 用于做验证性质实验的 开头用verify_ 然后接实验内容 比如我现在要做的一个对另外一个的干扰 node_register ``` ```