Download presentation
Presentation is loading. Please wait.
Published byHugo Holmes Modified 6年之前
1
林韬 高能所计算中心 on behalf of JUNO offline group 第十八届全国科学计算与信息化会议 2017/07 威海
江门中微子实验 离线软件的发布 林韬 高能所计算中心 on behalf of JUNO offline group 第十八届全国科学计算与信息化会议 2017/07 威海
2
OUTLINE 江门中微子实验简介 江门中微子实验的离线软件简介 离线软件的发布 总结与展望 软件发布流程 版本控制管理 软件的编译
0. 大纲 /30 OUTLINE 江门中微子实验简介 江门中微子实验的离线软件简介 离线软件的发布 软件发布流程 版本控制管理 软件的编译 软件的部署和外部库的管理 软件的测试、性能测量和质量检查 总结与展望
3
江门中微子实验 (JUNO) 主要的物理目标:测量中微子质量顺序 实验的基本参数: 地下700m 基线53km 两万吨液闪 3%能量分辨率
1. 实验简介 /30 江门中微子实验 (JUNO) 主要的物理目标:测量中微子质量顺序 实验的基本参数: 地下700m 基线53km 两万吨液闪 3%能量分辨率 53 km JUNO Daya Bay KamLAND 整体实验介绍。让别人知道这个实验是做什么的。
4
探测器设计 Calibration Filling+ overflow Top Tracker Central Detector
1. 实验简介 /30 探测器设计 Calibration Electronics Filling+ overflow Top Tracker Pool’s height 44m Water depth 43.5m Central Detector Acrylic sphere+ 20kt Liquid Scin+ ~ ” PMT+ ~ ’’ PMT AS: ID35.4m Connecting bars: ~600 SSLS: ID40.1m Water Cherenkov ~ ’’ PMT Pillar: ~60 D43.5m AS: Acrylic sphere; SSLS: stainless steel latticed shell
5
离线数据处理 IBD Muon Waveform ADC/TDC 物理产生子 探测器模拟 电子学模拟 Point-like
2. 离线软件简介 /30 离线数据处理 IBD NNVT MCP-PMT Hamamatsu R12860 Muon HZC XP72B22 Waveform ADC/TDC 物理产生子 探测器模拟 电子学模拟 Point-like Energy/Vertex PMT hits charge/time 离线软件的整体介绍。 Tracking Direction/Track Length 顶点位置/能量/径迹重建 波形重建/刻度
6
离线软件的组织结构 软件开发者来自国内外研究机构、大学 核心框架软件SNiPER 数据模型管理和输入/输出 几何管理 事例显示
2. 离线软件简介 /30 离线软件的组织结构 核心框架软件SNiPER 数据模型管理和输入/输出 几何管理 事例显示 数据库接口和管理 物理产生子 探测器模拟和电子学模拟 事例重建:顶点、能量、径迹 刻度 物理分析 数据产生和质量检查组 软件开发者来自国内外研究机构、大学 IHEP SDU SYSU NKU USTC NJU SJTU INFN-ROMA3 LLR FZ-Jülich … 用图片可能更好?
7
离线软件环境 编程语言: C++ and Python 操作系统: Linux 软件配置和包管理: CMT 代码管理: SVN/Trac
2. 离线软件简介 /30 离线软件环境 编程语言: C++ and Python C++: 算法实现; Python: 作业配置 操作系统: Linux 官方支持: Scientific Linux 6/GCC 4.4.7 软件配置和包管理: CMT 编译软件包,设定环境变量 代码管理: SVN/Trac 集中式管理,单一的软件仓库 外部库 Boost, ROOT, GEANT4, …
8
离线软件的发布回顾 2013年开始正式发布,第一个J13v1r1版本包含 了数据处理中的重要算法和服务。
3. 离线软件的发布 /30 离线软件的发布回顾 2013年开始正式发布,第一个J13v1r1版本包含 了数据处理中的重要算法和服务。 2014年的J14v1r2,完成大规模的数据产生。 2015年的J15版本,全面部署到SL6系统。 2016年的J16版本,首次包含完整的数据处理流 程,同时加入用于测试和质量检查的JunoTest。 数据质量检查组完成大规模数据产生。 每年发布约2-3个正式版本。更新主要有软件bug 修复,探测器几何和参数的改变,算法改进等。 此页待定。重要性其实很难写。
9
3.1 软件发布流程 /30 离线软件的发布模式 采用螺旋式的开发模式 正式版本发布前,需要经过多次预发布版本。
10
3.1 软件发布流程 /30 离线软件的发布流程图 整体结构。可以给出后面要说到的子系统
11
软件版本控制 采用SVN进行版本控制。 使用Trac作为管理工具。 集中式仓库。 WebUI,与SVN无缝整合。 允许部分导出。
3.2 版本控制管理 /30 软件版本控制 采用SVN进行版本控制。 使用Trac作为管理工具。 集中式仓库。 WebUI,与SVN无缝整合。 允许部分导出。 支持git,支持多仓库。 目录/文件级别的权限 控制。 浏览源码,追踪bug。 用户和权限管理。 容易定期备份。 开源,支持插件。 最主要的是先说明svn和git的比较。为何用svn。 可提及服务端的管理。李老师建议是否可以在各个实验平台进行统一? Authzpolicy可以提供更加细的保护力度。 需要插入一些图片。
12
3.2 版本控制管理 /30 SVN仓库 Offline软件包全部存储于同一个仓库中。 在AFS上导出需要40s左右的时间。
13
关于git的考虑 背景 GIT和SVN的使用有很多相似之处,但是有几点暂 未满足我们的要求。
3.2 版本控制管理 /30 关于git的考虑 背景 GIT是一个分布式的版本管理系统,使用者有完整的 仓库镜像。 GitHub提供了基于git的软件托管服务,成为开源软 件聚集地之一。也有付费的商业版,提供私有仓库。 GIT和SVN的使用有很多相似之处,但是有几点暂 未满足我们的要求。 它的哲理是“一个项目一个仓库”,无法部分导出。 这导致它对大型的仓库支持并不好。需要拆分仓库, 同时软件包间的依赖丢失,增加了维护成本。 权限控制问题。
14
版本控制在多个实验中的思考 无论使用GIT或者SVN,版本控制对每个实验的软 件都非常重要。
3.2 版本控制管理 /30 版本控制在多个实验中的思考 无论使用GIT或者SVN,版本控制对每个实验的软 件都非常重要。 如果每个实验都需要自己维护一套代码仓库,不 仅重复工作,而且还面临可靠性安全性等问题。 一种是将软件托管于商业平台,如GitHub。 以开源形式托管,如CMS实验。 国外已有部分研究机构购买商业版GitHub。 另一种是建立私有的统一代码托管平台,提供代 码托管的服务。 如使用Trac,GitLab等开源软件进行部署。
15
软件的编译 离线软件基于 CMT[1] 进行编译和配置管理。 CMT以 包(package)为管理单元。 CMT支持自定义的编译规则。
3.3 软件的编译 /30 软件的编译 离线软件基于 CMT[1] 进行编译和配置管理。 CMT主要在高能物理领域使用,包括LHCb,BES3,DYB。 CMT以 包(package)为管理单元。 每个包中编写requirements文件用于指示CMT生成 Makefile和setup脚本。可处理软件包的依赖关系。 CMT支持自定义的编译规则。 可提及 HEPSF packaging [1]
16
关于CMT的替代方案考虑 CMake是一套用于软件编译、测试和打包的软件。 迁移时要考虑的问题 实现方式:CMake支持自定义的宏/函数
3.3 软件的编译 /30 关于CMT的替代方案考虑 CMake是一套用于软件编译、测试和打包的软件。 已被ROOT,Geant4等大型软件使用。 支持源码/编译目录分离的方式,允许生成多套配置 方式的软件,如优化模式和调试模式。 迁移时要考虑的问题 面向的用户是物理学家,要提供简易的使用方式。 能够支持类似CMT的部分软件包编译的方式。 需要为bash/tcsh用户生成环境变量。 实现方式:CMake支持自定义的宏/函数 定义相应的宏/函数用于封装编译的细节。
17
使用CMake进行编译 自定义函数,用于隐藏cmake细节,同时有利于 将来改进具体的实现。 解决了一部分的问题: PRJ:用于描述项目
3.3 软件的编译 /30 使用CMake进行编译 自定义函数,用于隐藏cmake细节,同时有利于 将来改进具体的实现。 PRJ:用于描述项目 PKG:用于具体的软件包 EDM和XOD:用于数据模型 数据模型基于xml生成代码 在configure阶段自动生成 解决了一部分的问题: 简化了使用方式,比CMT更简洁。 自动生成配置脚本。 需要思考一下。
18
对CMake的测试 基于trunk版本,分别测试了cmake和cmt 目前整体的编译时间相差不大。而且程序运行结 果没有差异。
3.3 软件的编译 /30 对CMake的测试 基于trunk版本,分别测试了cmake和cmt 目前整体的编译时间相差不大。而且程序运行结 果没有差异。 关于CMake的下一步工作 优化函数的实现,进一步提升编译时的性能。 研究如何支持部分软件包的导出和编译。 配置方式 configuire setup make CMT v1r26 默认 0m8.703s 0m0.705s 13m21.914s CMake 0m13.564s 0m0.005s 16m15.296s Release 0m27.508s 0m0.006s 16m31.718s
19
外部库管理:需求分析 离线软件依赖于多种外部库,使用固定版本。 对外部库采用源码编译方式 对编译器的考虑 易于修改、添加和移除特定的外部库。
3.4 软件的部署和外部库的管理 /30 外部库管理:需求分析 离线软件依赖于多种外部库,使用固定版本。 外部库的版本会对最终的数据处理结果造成影响。 对外部库采用源码编译方式 更加容易控制软件的版本。 便于用户在主流的Linux系统自己安装。 便于对源码打补丁。 对编译器的考虑 使用系统自带的编译器。 易于修改、添加和移除特定的外部库。
20
外部库管理:实现 采用shell脚本开发,工具集称为junoenv。 更具通用性,Linux系统都可以运行。
3.4 软件的部署和外部库的管理 /30 外部库管理:实现 采用shell脚本开发,工具集称为junoenv。 更具通用性,Linux系统都可以运行。 UI参考了常见的包管理工具,提供常见功能。 源码和offline一起管理,这可确保版本的一致性。 每个外部库都由单独的脚本进行描述,确保扩展性。 可处理依赖关系。 无需管理员权限。 $ bash junoenv libs list # 列出待安装的软件 $ bash junoenv libs all python # 安装 python $ bash junoenv libs reuse python # 重复利用已安装的软件
21
3.4 软件的部署和外部库的管理 /30 子命令 list 的结果 返回信息包括外部库名称,当前版本号,依赖的外部库
22
软件部署 官方的离线软件部署于多个站点 软件目录结构 用户的使用 IHEP:AFS系统,CVMFS系统 INFN CNAF:NFS系统
3.4 软件的部署和外部库的管理 /30 软件部署 官方的离线软件部署于多个站点 IHEP:AFS系统,CVMFS系统 INFN CNAF:NFS系统 CVMFS允许用户只需安装cvmfs client即可使用。 软件目录结构 SITE/OS/Release/Version 含有外部库、外部库接口、sniper、offline等。 用户的使用 对于普通用户,只需source特定脚本,无需其它配 置。 对于开发者,需要额外设置自己的工作目录。 软件的分发,用户的使用,cvmfs
23
JunoTest工具集 部署软件后,需要完成单元测试、集成测试、数 据产生和质量检查。
3.5 软件的测试、性能测量和质量检查 /30 JunoTest工具集 部署软件后,需要完成单元测试、集成测试、数 据产生和质量检查。 对软件进行全面的测试对于软件质量的控制极其重 要。 为了复用测试过程中常用的需求和功能,开发了 一套基于Python/Bash脚本的通用工具集。 基于工具集,建立了高层的应用 UnitTest:用于单元测试和集成测试 Production:用于数据产生和质量检查 对用户提供相同的界面,降低学习难度。
24
软件的自动编译和集成测试 为了自动化编译软件并完成集成测试,使用了 Trac的插件Bitten。
3.5 软件的测试、性能测量和质量检查 /30 软件的自动编译和集成测试 为了自动化编译软件并完成集成测试,使用了 Trac的插件Bitten。 开发者提交完代码后,Bitten server会安排任 务。Bitten worker获取任务后开始运行。 任务脚本中,需要完成: 软件源码的导出/更新 离线软件的编译 调用JunoTest中的任务 支持多种配置方式:worker运行于SL6和SL7 利用IHEP Cloud资源,部署于虚拟机中。
25
Bitten页面 顶层页面显示了软件的版本以及对应的worker信息和运行状态。 自动编译日志 集成测试日志
3.5 软件的测试、性能测量和质量检查 /30 Bitten页面 顶层页面显示了软件的版本以及对应的worker信息和运行状态。 自动编译日志 集成测试日志
26
软件的性能测量 性能的测量可以提供多种信息,如 支持两种方式的测量方式 软件是否正常,运行的作业节点是否正常 和前一个版本的差异
3.5 软件的测试、性能测量和质量检查 /30 软件的性能测量 性能的测量可以提供多种信息,如 软件是否正常,运行的作业节点是否正常 和前一个版本的差异 支持两种方式的测量方式 集成于JunoTest UnitTest中,单独测量test case。 集成于作业中,对大规模的作业进行监测。 虚拟内存 CPU 时间 CPU 利用率
27
数据质量检查和数据产生 为了确保软件的物理性能,每个Pre-Release后, 都需要完成相应的质量检查。
3.5 软件的测试、性能测量和质量检查 /30 数据质量检查和数据产生 为了确保软件的物理性能,每个Pre-Release后, 都需要完成相应的质量检查。 工具“JunoTest Production”可同时用于数据 质量检查和产生工作。 自动完成完整的数据处理流程,从模拟、刻度到重建。 自动运行分析脚本,并完成与其它软件版本的比较。 使用.ini配置文件,为用户提供更高层的使用方式。 同时支持IHEP和CNAF两个站点。 通过编写基于shell的driver,可快速扩展。 顺利完成2016年的大规模数据产生工作。 JunoTest,以及分布式的工具 询问赵宝琦最新的进展。
28
Production的配置文件 用户自定义的section名称 底层使用的driver 可定制数据处理的流程
3.5 软件的测试、性能测量和质量检查 /30 Production的配置文件 用户自定义的section名称 底层使用的driver 可定制数据处理的流程 Tag可以作为driver的输入参数。不同tag产生对应的样本。 可定制数据分析的流程 可定制每个阶段运行的脚本 即可。
29
分布式工具:DistJET DistJET: Distributed Juno Execution Toolkit
3.5 软件的测试、性能测量和质量检查 /30 分布式工具:DistJET DistJET: Distributed Juno Execution Toolkit 基于MPI实现,并行化单元测试和质量检查。 Communication layer Based on MPI Back ends tasks worker Master task application Scheduler worker task AppMgr client feedback worker task Control layer
30
谢谢! 总结与展望 江门离线软件采用螺旋式的开发模式。 借助开源软件和自主研发的工具,完成了软件发 布过程中的规范化和自动化,节约大量人力。
4. 总结和展望 /30 总结与展望 江门离线软件采用螺旋式的开发模式。 软件经过单元测试、集成测试后发布预发布版本。 通过数据质量检查确保预发布版本的正确性,最终发 布正式版本用于质量检查。 借助开源软件和自主研发的工具,完成了软件发 布过程中的规范化和自动化,节约大量人力。 展望 江门实验2020年即将取数,软件质量控制极其重要。 完善软件发布中光学参数、刻度参数等管理。 谢谢!
Similar presentations