跳转至

12.2 LHAASO

12.2.1 概况

资源类型 资源量 说明
登录节点
HTCondor
Slurm
home目录
工作目录 /eos/user// 1TB 空间,25 万文件数

站点说明

LHAASO实验目前有两个计算集群,分别是北京本地计算集群和稻城海子山计算集群。北京本地计算集群是LHAASO实验数据处理的中心站点,负责LHAASO实验数据的存储、处理、分析以及长期保存等功能;稻城海子山计算集群主要用于对在线获取的数据进行快速预处理和压缩。

由于稻城计算集群主要由特殊用户使用,因此本手册主要介绍北京本地计算集群使用情况。

12.2.2 计算服务

  • 申请计算集群账号

请参考 4.1 账号申请,得到 LHAASO 实验计算负责人同意后,用户可获得 AFS 账号。

  • 作业提交和管理

请参考 9.1.1 HTCondor 作业 小节中关于作业提交的说明。

环境设置

计算集群上使用HepJob工具集来管理作业,在使用之前,建议首先进行环境变量设置,具体方法为:

HepJob涉及的所有命令在/afs/ihep.ac.cn/soft/common/sysgroup/hep_job/bin下,建议将该目录加入用户环境变量 PATH 中:

  • bash 用户
export PATH=/afs/ihep.ac.cn/soft/common/sysgroup/hep_job/bin:$PATH
  • tcsh 用户
setenv PATH /afs/ihep.ac.cn/soft/common/sysgroup/hep_job/bin:$PATH

提交 HTCondor 计算集群的作业文件必须具备可执行权限。可使用以下命令查看和赋予文件权限:

  • 查看文件权限
/bin/ls -l job.sh
# 输出:-rw-r--r-- 1 jiangxw u07 85 Aug 29 18:23 job.sh

上面的例子中 job.sh 不具有可执行权限,执行如下命令可赋予文件可执行权限

/bin/chmod +x job.sh

计算作业提交

在作业提交和查询时,需要指定所使用的用户组,即 -g 选项。对于北京集群,须指定使用 lhaaso 组;对于稻城集群,须指定使用 lhaasorun 组。具体使用方法如下:

1)北京计算集群作业提交

  • 作业提交

    hep_sub -g lhaaso jobfile
    

  • 作业查询 bash hep_q -g lhaaso -u userid

  • 作业删除

    hep_rm -g lhaaso jobid
    

注意

-g lhaaso 并不是必选项,如果集群账号的主组是 lhaaso,则不需要添加此选项。查看集群账号主组的方法是:

id username
比如,查看km2amc账号的信息:
id km2amc
# 输出:uid=13014(km2amc) gid=580(lhaaso) groups=580(lhaaso),340(lhaasorun)
这里,gid 即为 km2amc 账号的主组,这里是 lhaaso,则提交作业不需要再加 -g lhaaso 选项。

如果想要修改集群账号的主组,由 ybj 改为 lhaaso,请向 ihep_computing_service@ihep.ac.cn 发送邮件申请,并抄送吴超勇老师 wucy@ihep.ac.cn。

2)稻城计算集群作业提交

  • 作业提交

    hep_sub -g lhaasorun jobfile
    

  • 作业查询 bash hep_q -g lhaasorun -u userid

  • 作业删除

    hep_rm -g lhaasorun jobid
    

作业提交高级用法

对于需要批量提交的作业,可使用以下方法进行作业提交,可极大优化提交效率。

实例说明:此实例所要解决的问题是原始数据目录下子文件很多时,需大批量产生作业脚本,再提交脚本运行,造成集群卡顿的问题。

解决方式:使用带参数批量提交作业,将脚本数量减少到几个。

这里提供两种方式:非 Cluster 的方式提交和 Cluster 的方式提交,其中 Cluster 的方式是目前 hep_sub 支持的,能够大大提升作业提交的速度。

比如原始目录下有很多个 dat 文件,需要分别提交作业。

Raw_1.dat  Raw_2.dat   Raw_3.dat ...

方法 1:非 Cluster 的方式提交

1)首先需要提前写好要执行的带外部输入变量的运行脚本(test.sh):

rawfile=you want
outfile=you want
./run.exe  ${rawfile}/${1}  ${outfile}/${1}.root 

2)带参数提交作业(subjob.sh):

run=1
run1=3
while [ $run -le $run1 ]
do
    hep_sub test.sh -g lhaaso -argu "Raw_${run}.dat"
    run=`expr $run + 1`
done 

方法 2:使用 Cluster 的方式提交

1)首先需要提前写好要执行的带外部输入变量的运行脚本(test.sh):

procid=$1
raw_id=$(expr $1 + 1)
input="Raw_${raw_id}.txt"
rawfile=you want
outfile=you want
./run.exe  ${rawfile}/${input}  ${outfile}/${1}.root 

2)使用 Cluster 方式提交作业(subjob.sh):

hep_sub test.sh -g lhaaso -argu "%{ProcId}" -n 3

北京计算集群作业时长及优先级

1)LHAASO作业时长及优先级 在登录节点上,可运行命令,按组查看作业时长限制。具体命令为:

hep_clus -g lhaaso --walltime
2)作业优先级设置

对于北京计算集群,为保证公用账号的作业任务,依据LHAASO实验组要求,设定一些账号的作业优先级。具体情况为:

账号名 作业优先级数量
wfctamc 2000
lhaasorec 2000
wcdarec 1000
wcdaplusrec 500
wfctarec 400
gmxiang 500

12.2.3 存储服务

针对实验数据使用的不同场景,计算集群提供不同的存储系统。目前按数据访问场景分为四类,分别是home目录,软件目录,实验数据存储目录,用户脚本存储目录。

数据存储场景 用途 目录名称 空间限额/文件数限额 访问方式 查看使用份额命令
Home目录 afs账号配置文件,脚本 /afs/ihep.ac.cn/users/a-z/username 500MB/none 直接访问 fs listquota /afs/ihep.ac.cn/users/username
软件目录 公共软件 /cvmfs/lhaaso.ihep.ac.cn/anysw - 直接访问 只有实验联系人有权限发布软件
实验数据存储 用于存放实验原始数据,重建数据,部分分析数据,模拟数据,刻度数据 /eos/lhaaso - 无法直接访问,需通过xrootd方式访问 -
实验数据存储 实验数据,如一些模拟作业数据,不能够使用xrootd协议访问的 /lhaasofs/data - 直接访问 -
个人实验数据存储 存储个人实验数据 /eos/user/a-z/username 1TB/25万个 无法直接访问,需通过xrootd方式访问 eos quota
个人工作目录 用于存放用户脚本,作业日志输出文件 /home/lhaaso/username 200GB/30万个 直接访问 homequota

在申请集群账号时,用户通常只有/afs/ihep.ac.cn/users/a-z/username和/eos/user/a-z/user,如果需要申请/lhaasofs/user/username目录,请向陈松战(chensz@ihep.ac.cn)和(zham@ihep.ac.cn)两位老师申请,申请批准后,将会建立该目录账号。

/eos/lhaaso 实验数据目录说明

目录名称 空间限额/文件数限额 查看使用份额的命令 存放用途 负责人
/eos/lhaaso/raw none/none eos quota /eos/lhaaso/raw 原始数据 计算中心
/eos/lhaaso/spt none/none eos quota /eos/lhaaso/spt 各实验单粒子数据 计算中心
/eos/lhaaso/decode none/none eos quota /eos/lhaaso/decode decode数据 LHAASO组
/eos/lhaaso/rec none/none eos quota /eos/lhaaso/rec 重建数据 LHAASO组
/eos/lhaaso/cal none/none eos quota /eos/lhaaso/cal 标定参数数据 LHAASO组
/eos/lhaaso/monitor none/none eos quota /eos/lhaaso/monitor 数据质量监测数据及月影和Crab监测数据 LHAASO组

上述每个目录下设 km2a、wcda、wcdapls、wfcta 子目录,每个目录由相应实验专人负责。数据按年/月/日/分级目录存储。

磁带数据

LHAASO 目前使用的 Castor 和 stager 服务器是 nslhaaso.ihep.ac.cn,磁带库服务器是 tplhaaso01.ihep.ac.cn。磁带备份目录是 /castor/ihep.ac.cn/lhaaso/raw,目前是按照 年/月(即 yyyy/mm)进行存储。

EOS 使用说明

EOS文件系统是一套基于xrootd框架的面向EB级数据存储的分布式文件系统。具体情况请参考8.4 EOS 文件存储。 1)EOS 访问文件

xrootd 协议访问 EOS 系统,访问方式为:

root://EOS_MGM_URL//filepath

说明

  • xrootd 默认使用 1094 端口
  • 在端口后需要使用 //
  • filepath 需要使用 绝对路径

此处的 EOS_MGM_URL 为实例的服务器地址,北京 EOS 集群服务器地址为 root://eos01.ihep.ac.cn,稻城 EOS 集群服务器地址为 root://lhmteos01.lhaaso.ihep.ac.cn,该环境变量已配置在登录节点和计算节点中,可通过以下命令检查是否存在:

北京集群:

echo $EOS_MGM_URL
root://eos01.ihep.ac.cn/

如果不存在,请自行设置:

export EOS_MGM_URL=root://eos01.ihep.ac.cn/

稻城集群:

echo $EOS_MGM_URL
root://lhmteos01.lhaaso.ihep.ac.cn/

如果不存在,请自行设置:

export EOS_MGM_URL=root://lhmteos01.lhaaso.ihep.ac.cn/

提醒

可以将 EOS_MGM_URL 环境变量,写入 ~/.bash_profile 文件中,这样每次登录时,会自动加载。

echo "export EOS_MGM_URL=root://eos01.ihep.ac.cn/" >> ~/.bash_profile

注意

当用户在使用 /eos 盘时,只能通过 eos 命令来访问。

表 12.2-1 eos 命令与系统命令对照表
Eos命令(推荐使用) Linux命令(不可用) 说明
eos ls ls 查看文件列表
eos cp cp 拷贝文件
eos mv eos file rename mv 移动文件
eos cp /eos/user/myfile -|cat cat 查看文件内容
eos cp /eos/user/myfile -|tail tail 查看文件内容
eos mkdir mkdir 创建文件夹
eos touch touch 创建文件
eos newfind -f /eos/mypath 无 查找某一个目录下所有文件列表(包含子目录)
eos newfind -d /eos/mypath 无 查找某一个目录下所有目录列表(包含子目录)
eos ln ln 创建软链接
eos quota 无 查看个人空间使用大小(/eos/user/a-z/username)
eos stat -f ls 判断文件是否存在,如果不存在,返回值为空
eos file info stat 可查看文件的 Modify 修改时间和 Change 状态改动时间

其中,Linux 下的 cat 和 tail 命令可以用 xrdfs 相应命令代替,需要在 xrdfs 后面加上 EOS 的域名,比如 LHAASO EOS,就是 eos01 或 eos01.ihep.ac.cn:

  • 查看文件全部内容:xrdfs eos01 cat /eos/user/myfile
  • 查看文件尾部 N bytes 内容:xrdfs eos01 tail -c N /eos/user/myfile
  • 实时查看文件尾部内容:xrdfs eos01 tail -f /eos/user/myfile

2)作业中访问 EOS

作业中使用 xrootd 的前提 是物理软件需要支持 xrootd 协议。对于 ROOT 软件,目前已支持 xrootd 方式,但需要注意目前有三种方式产生 TFile 对象:

  • 声明:TFile(PATHNAME):不支持 xrootd
  • 新文件:new TFile (PATHNAME):不支持 xrootd
  • 打开方法:TFile::Open(PATHNAME):支持 xrootd

举例:

  • 对于 ROOT 格式的文件,可以直接用 TFile::Open 打开:
TFile *filein = TFile::Open("root://eos01.ihep.ac.cn//eos_absolute_path_filein_name.root");
  • 对于非 ROOT 格式的文件,也可以用 ROOT 的 TFile 类直接读写,需要在文件名后增加一个参数 ?filetype=raw。举例:
void rawfile(){  
  int size;
  char buf[1024];
  TFile *rf = TFile::Open("root://eos01.ihep.ac.cn//eos/user/c/chyd/set.log?filetype=raw");
  size = rf->GetSize();
  printf("size is %d\n", size);
  memset(buf, 0, 1024);
  rf->ReadBuffer(buf, 1024);
  printf("%s\n", buf);
  rf->Close();
  }

3)支持 xrootd 的 hadd

hadd 支持通过 xrootd 方式对文件进行合并,需要首先 source 环境变量,之后通过 histadd 命令就可以使用了。具体使用方式为:

source /cvmfs/lhaaso.ihep.ac.cn/anysw/slc5_ia64_gcc73/external/envf.sh 
histadd -h

输出示例:

Function: An alternative "hadd" made by <zhiguo.yao@ihep.ac.cn>
SYNOPSIS:
  histadd  [ -o outfile ]
  [ -topdir | +topdir ] [ -folder folder1 [ -folder folder2 ... ] ]
  [ -tree | +tree ]
  [ -list listfile1 [ -list listfile2 ... ] ]
  [ -inclhist histname1 [ -inclhist histname2 ... ] ]
  [ -exclhist histname1 [ -exclhist histname2 ... ] ]
  [ filename1 [ filename2 ... ] ]

BRIEF EXPLANATIONS:
  -topdir: Add objects in the top directory of every root file (default).
  +topdir: Ignore all objects in the top directory.
  -folder folder: Activate adding the TFolder "folder".
  *** Note: Only folders specfied by option "-folder folder" are added.
  -tree: Add TTree objects (default).
  +tree: Ignore all TTree objects.
  -inclhist histname: include histname in the top directory. Default: all.
  -exclhist histname: exclude histname in the top directory. Default: nothing.
  -list listfile: Add every lines in "listfile" to the input list.
  *** Note: Lines with leading "#" will be ignored!
  filename: Add "filename" to the input list.
  *** Note: (Many) list files and file names can be specified simultanously.
  *** Note: EOS files will be automatically accessed via the xrootd protocol.

12.2.4 LHAASO 提交作业实例

  1. 应用程序:支持 xrootd 访问 /eos 盘文件

  2. 确保在使用 ROOT 打开文件时,使用 TFile::Open() 方式打开

  3. 对于 EOS 盘上的文件,传入参数时,添加 EOS_MGM_URL=root://eos01.ihep.ac.cn/ 前缀
  4. 记住调用 TFile::Close() 关闭文件

  5. 作业脚本:批量提交

hep_sub test.sh -g lhaaso -argu "%{ProcId}" -n number

12.2.5 注意事项

  1. 单一目录下不要有过多(几万以上)数据或脚本等文件,建议按照一定规律创建子目录,将文件放在子目录下, 单目录文件数量控制在 1000 以内。

  2. 作业中避免使用 ls \* 或 rm \* 之类的操作,如果确需使用,建议在登录节点上提前将需要用到的目录 生成一个文件列表,在作业中通过查找文件列表来访问数据。另外在登录节点,如果只需查看文件名信息,可以使用 /bin/ls 代替 ls 命令,可以加快速度。如果需要查看 /eos 目录,则使用 eos ls 目录绝对路径,速度会更快。

  3. 任务脚本写成一个模板,将要分析的文件名、数据目录和其他程序参数 作为脚本参数在用 hep_sub 提交时传递给脚本,例如 hep_sub my_job.sh -argu "aaa" "bbb",而不用生成许多类似的脚本,如 my_job_aaa.sh、my_job_bbb.sh。

  4. 直接将生成的数据文件放在 eos 上(可以使用 xrootd 方式读写文件),后面有需要可以用 eos file rename 将文件移动到指定目录。

  5. 对于 hadd 操作,避免使用 hadd \*.root,这样如果目录内文件很多,对文件系统压力会非常大。建议提前将需要合并的文件生成到一个列表里,再用 hadd 进行合并;而对于 ROOT 文件存在于 /eos 上,因为 hadd 操作可以支持 xrootd 方式的,所以只需要在文件名(绝对路径)前面增加 root://eos01.ihep.ac.cn/ 这个前缀就可以。

  6. 体积不大的个人程序文件(几 MB),如 my_program 如果没有存放在 CVMFS 上,则可以在脚本中用 eos cp 命令将程序复制到运行节点的 /tmp/ 目录下,在复制之前可以先判断是否存在,不存在时再复制,然后运行 /tmp/my_program my_para。

12.2.6 稻城集群使用

注意

稻城现在的个人目录在 WCDA 开始比较正式的快速重建后将会被全部清除掉,仅只保留 wcdarec、wcdaplsrec 两个公共目录(理论上)。

1)稻城计算集群说明

目前稻城计算集群有 1748 个 CPU 核、1.63PB 存储空间,有 2 个登录节点。

2)提交稻城集群作业步骤

a. 使用 AFS 账号登录稻城登录节点

节点名:lhmtlogin01.lhaaso.ihep.ac.cn、lhmtlogin02.lhaaso.ihep.ac.cn

登录方式:AFS 账号名、密码

目前已建立 wcdarec 账号,路径是 /eos/daocheng/user/w/wcdarec。

b. 拷贝作业脚本

目前稻城计算节点上有两个挂载目录,一个是 AFS 目录,另一个是 /eos/daocheng 的存储目录。所以,需要把相关作业脚本通过 rsync 命令拷贝到 /eos/daocheng 下面。

c. 提交作业

由于 AFS 目录不能写文件,如果要使用 AFS 目录来提交作业的话,需要重定向一下作业输出和错误输出文件位置。

可以直接在 /eos/daocheng 目录下提交作业。

d. 作业拷回

目前只支持通过 rsync 拷贝回本地。

3)作业提交及查询命令

提交作业:

hep_sub -site daocheng -g lhaasorun -os SL7 myjob.sh

查询作业:

hep_q -site daocheng -u username

删除作业:

hep_rm -site daocheng jobid

查看作业 held 原因:

hep_q -site daocheng -u username -hold

XCache 缓存代理服务

为降低访问时延,计算中心为 LHAASO 用户访问稻城 EOS 数据提供了 XCache 缓存代理服务,服务器地址是 lhaasocache.ihep.ac.cn。使用方法也很简单,在访问稻城数据时,将稻城 EOS 地址直接替换为前面的地址即可。

root://lhmteos01.lhaaso.ihep.ac.cn//eos/daocheng/user/l/lihaibo/bill.root

替换为:

root://lhaasocache.ihep.ac.cn//eos/daocheng/user/l/lihaibo/bill.root
  1. 在北京登录节点,通过 ROOT 访问稻城 EOS 集群数据

    登录 lxlogin,执行:

    root -l root://lhaasocache.ihep.ac.cn//eos/daocheng/user/l/lihaibo/bill.root
    
  2. 查看稻城 EOS 集群数据情况

    首先登录 lxlogin,执行:

    /usr/bin/xrdfs root://lhaasocache.ihep.ac.cn/
    

    进入 xrdfs 的命令行后,可以敲入 help 查看相关命令,比如查看目录情况:ls /eos/daocheng/raw。

注意

  1. 目前采用的缓存代理服务,只提供 只读 权限,即只能查看稻城 EOS 集群上的文件,而不能进行修改。
  2. 由于目前是缓存代理服务,所以初次访问时速度并不会增快,随着数据访问越来越多,越来越频繁,缓存的数据也就越多,缓存命中率也就越高,届时文件访问速度也会有明显改善。
  3. 如果使用了 cvmfs 上的 lhaaso 环境,默认会使用 cvmfs 上的 xrdfs,由于目前 cvmfs 上的依赖包不全,会找不到相应的库,所以建议直接使用系统自带的 xrdfs——/usr/bin/xrdfs。

12.2.7 其他注意事项

注意

不要在 ~/.bashrc 中 source 存储文件系统(如 /workfs 等)的文件,因为这样会在登录到集群时,如果某个存储文件系统盘卡住,会造成无法登录或登录时间太长。比如这种不建议:

cat ~/.bashrc
source /workfs/ybj/username

有些作业删除后显示"X"状态,对于这种作业,需要使用 hep_rm -forcex jobid 来删除这种状态的作业。

常见问题(FAQ)

见常见问题。

🤖 AI 助手
💬 快速提问 ×

有问题?输入后跳转到对话页继续交流