首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >太多的系统时间

太多的系统时间
EN

Unix & Linux用户
提问于 2014-04-01 18:55:47
回答 1查看 2.7K关注 0票数 1

我观察到,在运行CESM (天气建模应用程序)时,top命令显示系统调用花费了大量时间,大约25%到60%,在用户代码中只使用了40%到75%。该应用程序执行一些I/O操作,并与MPI通信。

下面给出了top命令的示例输出:

代码语言:javascript
复制
top - 16:54:32 up 11 days, 13:45,  2 users,  load average: 8.12, 8.25, 8.08
Tasks: 201 total,   9 running, 192 sleeping,   0 stopped,   0 zombie
Cpu(s): 74.3%us, 25.2%sy,  0.0%ni,  0.0%id,  0.0%wa,  0.0%hi,  0.5%si,  0.0%st
Mem:  24659792k total,  5259280k used, 19400512k free,  1747768k buffers
Swap: 28667984k total,   234408k used, 28433576k free,   169080k cached

  PID USER    PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
20748 user1   25   0  516m 304m  26m R 100.2  1.3  22:31.81 ccsm.exe
20750 user1   25   0  497m 293m  26m R 100.2  1.2  27:12.45 ccsm.exe
20754 user1   25   0  496m 290m  24m R 100.2  1.2  27:18.33 ccsm.exe
20751 user1   25   0  496m 291m  25m R 99.9  1.2  27:21.63 ccsm.exe
20752 user1   25   0  496m 291m  25m R 99.9  1.2  27:18.97 ccsm.exe
20749 user1   25   0  686m 446m  26m R 99.2  1.9  26:36.16 ccsm.exe
20753 user1   25   0  554m 335m  25m R 98.5  1.4  27:19.78 ccsm.exe
20755 user1   25   0  496m 289m  23m R 97.2  1.2  27:12.34 ccsm.exe

使用strace命令附加到进程20748显示了大量的

代码语言:javascript
复制
poll([{fd=4, events=POLLIN}, {fd=5, events=POLLIN}, {fd=6, events=POLLIN}, {fd=7, events=POLLIN}, {fd=10, events=POLLIN}, {fd=18, events=POLLIN}, {fd=19, events=POLLIN}], 7, 0) = 0 (Timeout)
poll([{fd=4, events=POLLIN}, {fd=5, events=POLLIN}, {fd=6, events=POLLIN}, {fd=7, events=POLLIN}, {fd=10, events=POLLIN}, {fd=18, events=POLLIN}, {fd=19, events=POLLIN}], 7, 0) = 0 (Timeout)
poll([{fd=4, events=POLLIN}, {fd=5, events=POLLIN}, {fd=6, events=POLLIN}, {fd=7, events=POLLIN}, {fd=10, events=POLLIN}, {fd=18, events=POLLIN}, {fd=19, events=POLLIN}], 7, 0) = 0 (Timeout)

使用strace -c -p 20748来计算一段时间,我得到:

代码语言:javascript
复制
$ strace -c -p 20748
Process 20748 attached - interrupt to quit
Process 20748 detached
% time     seconds  usecs/call     calls    errors syscall
------ ----------- ----------- --------- --------- ----------------
 85.17    0.068864           0  11713876           poll
  9.74    0.007876           2      4208           write
  4.45    0.003595           1      6463           munmap
  0.37    0.000302           0      6463           mmap
  0.22    0.000179           0      1068           brk
  0.03    0.000025           1        18           open
  0.02    0.000016           1        18           read
  0.00    0.000000           0        18           close
  0.00    0.000000           0         2         1 stat
  0.00    0.000000           0        18           fstat
  0.00    0.000000           0         2           madvise
  0.00    0.000000           0         1           getcwd
------ ----------- ----------- --------- --------- ----------------
100.00    0.080857              11732155         1 total

投票中出现的文件描述符是套接字和管道。

代码语言:javascript
复制
4 -> socket:[2789396]
5 -> socket:[2789451]
6 -> socket:[2789452]
7 -> socket:[2789456]
10 -> pipe:[2789492]
18 -> socket:[2789517]
19 -> socket:[2789518]

我觉得太多的时间被浪费在投票和徘徊,如果有什么可以做,以减少这一点。我能想到的第一件事是找到调用poll的位置。应用程序的代码不直接调用poll。我怎样才能追溯到电话的来源?如何追溯到创建套接字的位置?

EN

回答 1

Unix & Linux用户

发布于 2014-04-01 19:11:40

poll中的时间不会被浪费--这是进程等待输入数据“到达”或输出缓冲区为新的输出数据做好准备的时候。

您可以使用lsof列出开放描述符(包括套接字)。

系统中有多少CPU核?ccsm可以使用多少个核心?

您的top清单显示了ccsm.exe进程大约100%的CPU使用率。在我看来,您的瓶颈不是I/O,而是CPU。

无论如何,为了减少“轮询时间”,您需要加快I/O速度--例如,通过放置数据(数据库?)在快速大容量存储器(系统)上。

票数 2
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/122613

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档