工具/软件: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