nvidia jetson nano 设备频率设置

1,介绍

本文讨论了各种Tegra CPU和GPU性能主题。Tegra处理器以及整个嵌入式板卡的功耗与Tegra处理器的性能密切相关,因此你通常需要仔细选择哪些部件应该以高性能设置运行(以获得最大速度),哪些应该以低性能设置运行(以降低功耗和热量)或完全禁用。

2,控制CPU性能

注意:Debugfs和  non-upstream sysfs节点不保证在未来的L4T版本中保持不变。

Tegra K1是为移动用途设计的,因此包含了大量的功率降低系统,以控制硬件的各个部分何时应运行得更快、更慢或关闭,基于运行时使用情况。这对大多数用例来说是好的,因为默认设置会给许多密集型项目带来高性能,并为许多轻量级任务带来低功耗。但你可能想要强制某些硬件部件以较低或较高的性能运行,例如运行峰值性能的基准测试或强制降低功耗。自动打开/关闭4个主CPU核心和第5个伴随核心主要是在L4T内核中使用“cpuquiet”完成的,这是一种基于工作负载/策略动态热插拔CPU核心的机制。有许多方法可以在运行时或始终在启动时调整性能和功耗行为(都需要下面提到的root权限)。

作为一个通用指南,CPU性能/功耗的不同选项(从最高功耗到最低功耗排序)是:

  • 通过禁用热插拔缩放机制,强制所有4个CPU内核达到最大性能。
  • 只用默认设置(它会自动在运行时切换4个主CPU核心和第5个低功耗伴随核心的开关)。
  • 将4个主CPU核心的最大时钟速率限制在低速以降低功耗(它仍然会自动切换它们的开关,并在适当时切换到第5个低功耗伴随核心)。
  • 根据特定用例的最佳效果,打开一些CPU核心并关闭一些。
  • 关闭所有4个主CPU核心,强制所有CPU代码改为在第5个“LP”低功耗影子伴随核心上运行,以实现最大的功耗降低。

2.1,如何临时或在每次启动时以root权限运行命令

本页面上的所有命令都必须以root用户身份执行。要以root权限执行某些命令,只需运行“sudo su”登录为root用户,执行命令,然后运行“exit”返回到普通用户。例如:

sudo su
    (enter your password, it is "ubuntu" by default)
    # Run a command that requires root privileges
    echo Hello > /TEST.txt
    exit
要在每次启动时自动执行命令,你可以将你的命令放入“/etc/rc.local”引导脚本中。例如,在你的板上运行以下操作:
sudo nano /etc/rc.local

然后在文件底部但“exit”行之前添加你的自定义命令:

# Disable USB auto-suspend, since it disconnects some devices such as webcams on Jetson TK1.
echo -1 > /sys/module/usbcore/parameters/autosuspend 

保存文件后按Ctrl+X,然后按Y再按Enter键,然后重启设备:

sudo reboot

2.2,查看当前CPU状态

你可以检查4个CPU核心中哪些目前正在运行(在线)而不是休眠(离线):

cat /sys/devices/system/cpu/online
例如,它可能会显示“0-2”,表示核心0、1和2目前正在运行。如果你再次运行,它现在可能显示“0”,表示只有核心0在运行,如果没有很多后台任务的话。

要查看当前的CPU时钟频率(注意,对于当前正在休眠的核心,你会看到错误):

cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq
cat /sys/devices/system/cpu/cpu1/cpufreq/scaling_cur_freq
cat /sys/devices/system/cpu/cpu2/cpufreq/scaling_cur_freq
cat /sys/devices/system/cpu/cpu3/cpufreq/scaling_cur_freq
你还可以看到它是在主4核CPU集群(名为“G”代表通用集群)上运行,还是在第5个低功耗伴随核心(名为“LP”代表低功耗集群)上运行:
cat /sys/kernel/cluster/active

2.3,最大化CPU性能

为了在CPU上获得全性能(例如:用于性能测量或基准测试,或者当你不关心功耗时),你可以禁用CPU缩放并强制4个主CPU核心始终以最大性能运行,直到重启:(使用root权限)

echo 0 > /sys/devices/system/cpu/cpuquiet/tegra_cpuquiet/enable
echo 1 > /sys/devices/system/cpu/cpu0/online
echo 1 > /sys/devices/system/cpu/cpu1/online
echo 1 > /sys/devices/system/cpu/cpu2/online
echo 1 > /sys/devices/system/cpu/cpu3/online
echo performance > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor

2.4,手动设置CPU频率

通过写入以下内容可以设置CPU频率:(使用root权限)

echo "userspace" > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor

然后把上面的一个频率写到这里:

echo <frequency> > /sys/devices/system/cpu/cpu0/cpufreq/scaling_setspeed

请注意,如果你在LP(低性能)集群上运行,以下频率是可用的:

    51000 102000 204000 312000 564000 696000 828000 960000 1092000

如果你在HP(高性能,“G”)集群上运行,以下频率是可用的:

    204000 312000 564000 696000 828000 960000 1092000 1122000 1224000 1326000 1428000 1530000 1632000 1734000 1836000 1938000 2014500 2116500 2218500 2320500

(这些频率信息是通过在HP / LP集群上尝试所有频率组合并检查/sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_cur_freq手动提取的。)注意:如果在LP集群上将频率设置为51000,然后切换到HP集群,频率读数仍将为51000。在你再次设置之前,实际频率是不确定的。

2.5,限制主CPU核心以低速运行

你可以将4个主核心(“G”通用集群)在CPU中的最大时钟速率限制在低速,以降低功耗(它仍会在适当时自动切换到第5个“LP”(低功耗)伴随核心)。

要查看可用的CPU频率(以kHz为单位,因此“51000”表示51MHz):

cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies
    51000 102000 204000 312000 564000 696000 828000 960000 1092000 1122000 1224000 1326000 1428000 1530000 1632000 1734000 1836000 1938000 2014500 2116500 2218500 2320500

然后你可以设置每个CPU核心的最小和最大频率。

例如,要将4个主CPU核心的速度限制为仅564MHz,运行此命令(使用root权限):

echo 564000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq
echo 564000 > /sys/devices/system/cpu/cpu1/cpufreq/scaling_max_freq
echo 564000 > /sys/devices/system/cpu/cpu2/cpufreq/scaling_max_freq
echo 564000 > /sys/devices/system/cpu/cpu3/cpufreq/scaling_max_freq

请注意,这只对当时没有休眠的核心有效,因此在设置频率之前,你可能想要打开所有CPU核心(如下所述),然后在完成设置频率后关闭核心1-3。

2.6,打开和关闭一些CPU内核

你可以手动将每个CPU核心设置为在线(1)或离线(0):

echo 1 > /sys/devices/system/cpu/cpu0/online
echo 1 > /sys/devices/system/cpu/cpu1/online
echo 1 > /sys/devices/system/cpu/cpu2/online
echo 1 > /sys/devices/system/cpu/cpu3/online

(在此更改期间忽略任何“无效参数”错误)(注意:你可能想要尝试设置cpuquiet的开启/关闭,例如:“echo 0 > /sys/devices/system/cpu/cpuquiet/tegra_cpuquiet/enable”)

2.7,仅限低功率核心

将CPU限制在低功耗伴随核心可以显著降低峰值功率(例如,如果运行在功率受限的电池组上)。Tegra K1中的第5个伴随核心仍然是一个具有NEON SIMD和32KB L1缓存以及512KB L2私有缓存的1GHz Cortex-A15核心,但显然性能低于4个主核心。要仅使用低功耗核心,运行此命令:(使用root权限)

echo 0 > /sys/devices/system/cpu/cpuquiet/tegra_cpuquiet/enable
echo 0 > /sys/devices/system/cpu/cpu1/online
echo 0 > /sys/devices/system/cpu/cpu2/online
echo 0 > /sys/devices/system/cpu/cpu3/online
echo LP > /sys/kernel/cluster/active

(在此更改期间忽略任何“无效参数”错误)(使用上面的“查看当前CPU状态”部分来查看当前正在使用的集群、核心和频率)。

3,控制GPU性能

要手动控制GPU的时钟频率,首先确定支持的频率(由sysfs以kHz列出):

 cat /sys/kernel/debug/clock/gbus/possible_rates
 72000 108000 180000 252000 324000 396000 468000 540000 612000 648000 684000 708000 756000 804000 852000 (kHz)

然后设置一个频率(例如最大值852000kHz),以Hz为单位指定:(使用root权限)

 echo 852000000 > /sys/kernel/debug/clock/override.gbus/rate
 echo 1 > /sys/kernel/debug/clock/override.gbus/state

最后验证频率:

 cat /sys/kernel/debug/clock/gbus/rate
 852000

gbus sysfs节点控制GPU的核心时钟。要控制GPU的内存时钟,请将gbus替换为emc。

4,保持设置

在JetPack 21.4上,添加了一个新脚本,可能会覆盖引导设置。这个论坛帖子有一个很好的解释: Jetson TK1 CPU scaling governor settings not sticking - Jetson TK1 - NVIDIA Developer Forums

本质上,关闭按需引导脚本如下:

sudo update-rc.d -f ondemand remove

这将阻止你的设置在启动后60秒被覆盖。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值