This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] Linux/AM3352:Getty 的 CPU 性能问题

Guru**** 2589280 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/638265/linux-am3352-cpu-performance-issue-with-getty

器件型号:AM3352

工具/软件:Linux

你(们)好

我希望有人能帮助我确定当我运行特定的 Getty 流程时、我的处理器的性能会受到影响的原因。

我在基于 Beagle Bone Black 的自定义板上运行、其中包含一个非常向下的根文件系统、该文件系统尽可能使用 busybox (无 systemd 或 udev)

我可能是因为要更新我的内核(但目前除了令人困惑的行为之外、它对我来说是正常的)

root@AM335x-EVM:/dev/# uname -a
Linux AM335x-EVM 4.4.1.19-gdb0b54cdd #238抢先于8月25日星期五16:25:18 AEST 2017 armv7l GNU/Linux

导致性能下降的过程是:

389 root 1964 S /sbin/getty 115200 ttyGS0 

这是通过 inittab 中的以下行启动的

美国:12345:respawn:/sbin/getty 115200 ttyGS0 

它是通过 g_multigadget 的 USB 串行连接提供访问;这对于调试用途非常有用。  

但是、如果我没有在主机 PC 上打开与此连接的连接(例如通过 minicom)、则似乎会占用 CPU。

我通过编写一个测试执行紧密循环的时间的小应用来确认这一点;只需递减一个计数器即可。

在 Getty 进程运行时(没有从主机 PC 连接终端)

执行10个100000000的循环递减100000000
在1.576790秒内递减
100000000在1.578677秒内递减100000000
在1.577245秒内递减100000000
在1.580821秒内递减
100000000在1.566301秒内递减
100000000在1.576454秒
内递减100000000在1.737427秒
100000000在1.56941秒内递减100000000在100000000
在1.56941秒内递减100000000在100000000在1.576454秒内递减100000000 秒
100000000在1.553326秒内递减 

没有运行 Getty 进程

执行10个100000000循环递减
100000000递减0.668262秒
100000000递减0.667599秒
100000000递减0.667559秒
100000000递减0.667849秒
100000000递减0.66318秒
100000000递减0.667540秒
100000000递减0.667891秒
100000000递减0.66891秒100000000递减0.66941秒100000000递减0.66741秒100000000递减
秒
100000000在0.67562秒内递减 

在每种情况下、TOP 都会报告此测试过程占用了99%的 CPU。
每个递减需要4个运算、因此在60000000000Hz 的 CPU 频率下、2/3秒的时间对于100000000循环来说是正确的。

我已经确认、这不仅仅是正在更改的 CPU 频率
- root@elle-board:/sys/devices/system/cpu/cpufreq/policy0/stats 中未记录任何更改
-如果我将频率从600000000更改为300000000,则所用的时间会翻倍,例如

100000000在1.335705秒内递减
100000000在1.337115秒内递减
100000000在1.336521秒内递减
100000000在1.336904秒内递减 

这与 Getty Running 中看到的慢下来的比率明显不同。

系统上运行的其它系统很少:PS 报告:

root@elle-board:~/cm# ps
PID 用户 VSZ STAT 命令
1 root 1360 S init [5]
2 root 0 SW [kthreadd]
3 root 0 SW [ksoftirqd/0]
4 root 0 SW [kworker/0:0]
5 root 0 SW<[kworker/0:0h]
6 root 0 SW [ksoftirqd/0] 4 root 0 sw [kworker/0:

ruu root 0] 5 root sw<[kworkers/r0]8 uni_unt u.0[ku.0
0 SW [RCU_BH]
10根0软件[kdevtmpfs]
11根0 SW<[netns]
12根0 SW<[PERF]
13根0 SW [kworker/0:1]
14根0 SW<[writeba]
15根0 SW<[bioset]
16根0 SW<[kblockd]
17
根0 SW<[EDAC-0] 18根根[EDR] SW<
19根[root 用户权限软件 0 sw [kswapd0]
20 root 0 sw [fsnotify_mark]
21 root 0 sw<[nfsiod]
22 root 0 sw [kworker/U2:1]
27 root 0 sw<[dma_wq]
28 root 0 sw<[bioset]
29 root 0 sw<[bioset]
30 root 0 sw<[bioset]
31 root 32 sw][bioset

0 sw<[bioset]
34 root 0 sw<[bioset]
35 root 0 sw<[bioset]
36 root 0 SW [SPI1]
37 root 0 sw<[bioset]
38 root 0 sw<[bioset]
39 root 0 sw<[bioset]
40 root 0 sw<[bioset]
41 root 0 sw<[bioset]
42 root 0 sw<[bioset] 42 root sw <[bioset] 42 root 43] sw
0 sw<[bioset]
44 root 0 sw<[kpsmosed]
45 root 0 SW [IRQ/76-role-e]
46 root 0 SW [IRQ/77-role-e]
47 root 0 SW [IRQ/140-4806000]
48 root 0 sw<[bioset]
49 root 0 sw [mmcqd/0]
50 root 0 sw< vipv6

root 2 sw< wdr 52 root 2 sw] root sw[bird/ root 2 sw][mu.sw
0 SW [IRQ/162-44e0b00]
54 root 0 SW [IRQ/163-4802a00]
55 root 0 sw<[kworker/0:1h]
56 root 0 SW [jbd2/mmcblk0p2-]
57 root 0 sw<[ext4-RSV-conver]
338 0 SW [kbd2/mmcblkbblkb0p2-] 57 root 0 sw] 57 root 0 sw<[ext-238-s [ext-238-s

/usr/sbin/dropbear root 2 uni]/etc/dropbear/dropbear_rsa_host_key
/sbin/syslogd root -uniS -238-s [k] root 2 -uni]-uniS -238-s -s -un. /var/log/messages
370 root 1960 S /sbin/klogd -n
374 root 1960 S{start_Getty}/bin/sh /bin/start_getty 115200 ttyS0
376 root 2372 S -sh
389 root 1964 S /sbin/getty 115200 ttyGS0
391 root 2372 R ps

我可以通过不启动 Getty 过程来解决此问题;但很显然、我无法使用 USB 小工具进行调试。

如果能深入了解这种现象的原因、我将不胜感激
如果我需要、还可以使用任何可能允许我使用 COM 端口的解决方案

感谢你的帮助
此致、
Richard

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    软件团队已收到通知。 他们将在这里作出回应。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Richard、

    我建议您使用最新的 Processor SDK 版本 v04.01.00.06、并检查是否观察到相同的问题。
    如果问题仍然存在、我建议您更改"Getty"和应用程序进程的优先级(良好值)。 例如、您可以使用"release"命令。

    renice -n 19 -p PID_for_Getty
    renice -n -20 -p PID_for_yout_app 


    BR
    Tsvetolin Shulev

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢 茨韦托林  

    重试没有什么不同(我忽略了之前提到我在-20时尝试启动测试流程)

    我将开始尝试升级 SDK

    您能否解释一下在 Getty 操作或 USB 串行设备处理方面的哪些差异可能会影响行为?

    可能是我可以为这些修补程序提供修补程序(作为一个临时步骤); 因为更新完整 SDK 和工具等的过程非常缓慢  

    谢谢

    Richard

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好,Tsvetolin

    我将 SDK 升级到04 01 00 06。

    行为是相同的。

    如果我想让 Getty 在 USB 串行节点(ttyGS0)上启动、我需要从另一侧(主机 PC)连接到它、否则 CPU 性能很差。

    当我在主机上启动 minicom 终端时、您可以看到下面的性能变化

    执行100个100000000的循环递减
    100000000在1.528226秒内递减100000000
    在1.527044秒内递减100000000
    在1.526758秒内递减
    100000000在1.528994秒
    内递减100000000在1.529349秒内递减
    100000000在1.527789秒内递减
    100000000在1.527521秒
    内递减100000000在1.52405秒100000000在
    1.528516秒内递减100000000 秒
    100000000在1.526883秒内递减
    100000000在1.527207秒内递减
    100000000在1.527600秒内递减
    100000000在1.527567秒内递减
    100000000在1.527359秒
    内递减100000000在1.527364秒内递减
    100000000
    在1.527552秒内
    递减100000000在1.527572秒内递减100000000在1.527572秒内递减100000000
    秒
    100000000在1.527521秒内递减
    100000000在1.527517秒内递减
    100000000在1.527636秒内递减
    100000000在1.527554秒
    内递减100000000在1.527522
    秒内递减100000000
    在1.528081秒内
    递减100000000在1.527800秒
    内递减100518在1.528169
    秒内递减100000000在1.527518 秒
    100000000在1.527327秒内递减100000000
    在1.527318秒内递减
    100000000在1.527793秒内递减
    100000000在1.527763秒内递减
    100000000在0.845382秒内递减100000000 // Minicom 在
    0.669116秒内递减
    100000000在0.668499秒
    内递减100000000在0.668510
    0.668731秒
    内递减100000000 0.668523秒
    100000000减量0.668476秒
    100000000减量0.669157秒
    100000000减量0.669991秒
    100000000减量0.668498秒
    100000000减量0.668461秒
    100000000减
    
    量0.668981秒100000000减量0.668493秒100541秒100000000减量0.668913
    100000000减量0.668000000秒100000000减量0.68000000秒100000000减量0.68913 100000000减量0.68000000秒100000000减量
    0.668534秒
    100000000秒100000000秒递减0.668691秒
    100000000秒100000000秒0.668501秒
    100000000秒100000000秒100000000秒
    100000000递减0.668485
    秒100000000
    秒
    100000000秒0.668488秒100000000秒100000000秒100000000秒100000000秒100000000秒递减0.668000000
    秒
    100484秒100000000秒100000000秒100000000秒100000000秒100000000秒100000000秒100000000秒100000000秒100000000
    0.668930秒
    100000000减量0.668894秒
    100000000减量0.668524秒
    100000000减量0.668873秒
    100000000减量0.668483秒
    100000000减量0.668551
    秒100000000减量0.668482秒
    100000000减量0.668819秒100000000
    
    减量0.668487秒100000000减量0.668510秒100000000减量0.6684100秒100000000减量0.668487
    减量0.6688000000秒100000000减量0.688000000 0.668755秒
    100000000递减0.668472秒
    100000000递减0.668519秒
    100000000递减0.668813秒
    100000000递减0.668486秒100000000
    递减0.668488秒
    

    运行时间真的很短:

    root@elle-board:~/cm# ps
    PID 用户 VSZ STAT 命令
    1根 1964 S 初始化
    2根 0软件[kthreadd]
    3根 0 sw [ksoftirqd/0]
    4根 0软件[kworker/0:0]
    5根 0 sw<[kworker/0:0h]
    7根 0 SW [RCU_PRETER]
    8根 0软件[RCU_sched]
    9根 0 SW [RCU_BH]
    10根 0 sw<[LRU-add-Drain]
    11 root 0 SW [kdevtmpfs]
    12根 0 sw<[netns]
    13 root 0 SW [kworker/0:1]
    14根 0 SW [om_reaper]
    15根 0 sw<[writeba]
    16 root 0 SW [kcompactd0]
    17根 0 sw<[bioset]
    18根 0 sw<[kblockd]
    19 root 0 sw<[EDAC-poller]
    20根 0 sw<[watchdogd]
    21 root 0 sw<[rpciod]
    22 root 0 sw<[xprtiod]
    23 root 0 SW [kswapd0]
    24根 0 sw<[nfsiod]
    25 root 0 SW [kworker/U2:1]
    30根 0 sw<[bioset]
    31 root 0 sw<[bioset]
    32 root 0 sw<[bioset]
    33 root 0 sw<[bioset]
    34 root 0 sw<[bioset]
    35 root 0 sw<[bioset]
    36根 0 sw<[bioset]
    37 root 0 sw<[bioset]
    38 root 0 SW [SPI1]
    39根 0 sw<[bioset]
    40 root 0 sw<[bioset]
    41 root 0 sw<[bioset]
    42 root 0 sw<[bioset]
    43 root 0 sw<[bioset]
    44 root 0 sw<[bioset]
    45 root 0 sw<[bioset]
    46 root 0 SW [IRQ/76-Rotter-e]
    47根 0 SW [IRQ/77-Rotter-e]
    48根 0 SW [IRQ/140-4806000]
    49根 0 sw<[bioset]
    50根 0 sw [mmcqd/0]
    51 root 0 sw<[ipv6_addrconf]
    53 root 0 SW [IRQ/162-44e0b00]
    55根 0 SW [IRQ/163-4802a00]
    56根 0 sw<[kworker/0:1h]
    57 root 0 SW [jbd2/mmcblk0p2-]
    58根 0 sw<[ext4-RSV-conver]
    398 root 0 SW [kworker/U2:2]
    421根 0 SW [file-storage]
    436根 2204 S /usr/sbin/dropbear -r /etc/dropbear/dropbear_rsa_host_key -p 22 -B
    447 root 1964 S /sbin/syslogd -n -O /var/log/messages
    449 root 1964 S /sbin/klogd -n
    452 root 用户 2396 S -sh
    468 root 1964 S /sbin/getty 115200 ttyGS0
    470 root 0 SW [kworker/U2:0]
    474根 2400 R ps
    

    如果你能提出一些可能会让人对可能发生的情况有所了解的建议,我将不胜感激。

    感谢你的帮助。

    Richard

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我还应指出,这一重订对所提出的价值没有影响
    但它确实使"ps"命令执行 a (并显示其结果)的速度要慢得多

    再次感谢
    Richard