-
Notifications
You must be signed in to change notification settings - Fork 4
New issue
Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? # to your account
关于高并发和性能的问题 #14
Comments
|
关于tracing和metrics,配置项collector_url只有一个,url填到tempo之后似乎查不到metrics信息了 |
三个问题的示例,这里用plain提交了,原始代码为:
第一个示例上传文件,编译,运行 共三个子任务
第二、三个示例上传文件,编译,"ls -la"编译结果-运行 共4个子任务
|
你可以尝试一下 seele |
非常感谢建议。 |
其实 Seele 能够支持在 Kubernetes 上使用 runj 创建容器,只需要将文档中提到的 docker 参数修改为对应的 Pod 配置项,同时配置 Seele 所在 Pod 的 CPU 和内存资源分配即可。 除了云原生的路径,其实还有一种比较传统的办法,就是利用虚拟化平台管理多台虚拟机,利用 Ansible 在每台虚拟机上运行 Seele |
评测机只跑seele,但是遇到了很多不合理的问题:
评测机环境
双路EPYC-9654 96核CPU,系统共192核384线程 2.24T内存
Ubuntu22.04系统配合kubernetes
1. WALL_TIME超时但是user和kernel time都很短
问题描述
例如一个简单的hello world C代码,上传文件,编译,运行 共三个子任务
可以看到它已经正确输出hello,world2了,整个cpu_user+kernel不到200ms,但是wall_time有整整12s,即便如此,整个
time_elapsed_ms
却来到了58s,超时被强行结束的复现条件
讨论
在我们评测机上并发200的时候能以30 tasks/s的速度完成这个,但这种简单的helloworld期望应该是200 tasks/s以上的评测速度。其原因都是wall_time太长导致的。
我感觉应该是runj在面对高并发的时候本身成为瓶颈了:启动、退出容器都很慢
2. runj error: cannot start an already running container
问题描述
跟1一样的C helloworld,上传文件-编译-ls编译结果-执行,结果runj报错:
Error initializing the container process: cannot start an already running container
复现条件
600并发的时候约有5%的概率出现
3.compile编译阶段saves的文件无法被run阶段执行
问题描述
跟1一样的C helloworld,共4个子任务:上传文件->编译->ls编译结果->执行
编译
和ls编译结果
子任务的action都是 "seele/run-judge/compile@1":编译: source:
solution.cpp
saves:solution.cpp,solution
command:g++ solusion.cpp -i solution
ls编译结果: source:
solution.cpp,solution
saves:solution.cpp,solution
command:ls -la
特别注意ls编译结果子任务的source和saves都是一样的
复现条件
200并发的时候100%出现
1000并发的时候变成问题1超时和问题2无法执行了
但是,如果
ls编译结果
步骤 saves改为只有solution(之前是solution和solution.cpp)就能不会出现exec format error讨论
上面的问题1、2应该是runj对系统资源依赖导致并发上不去,这个问题我是真的不懂了
以及它在高并发的时候又不会出现,只是变成超时,太迷惑了
The text was updated successfully, but these errors were encountered: