Skylake 硬件亮度变化过于细化
Skylake hardware brightness changes too granular
我遇到了 Skylake i7-6700 HQ 笔记本电脑显示屏(HD 530 显卡)亮度变化的问题:
- 如果值改变 20,它会起作用。
- 如果值改变 19,它只适用于数百次跳跃。
- 如果值变化 <19,则根本没有亮度变化。
然而,在我的旧 Ivybridge 笔记本电脑 i7-3630 QM(HD 4000 显卡)上,亮度成功地以 1 为步长变化。
测试脚本如下:
#!/bin/bash
# Test all brightness levels from 1 to max_brightness
# For Intel i7-6700 HQ HD 530 graphics:
# - When change is 18 steps brighhness doesn't change at all.
# - When change is 19 steps brightnesss changes on multi-hundred point jumps.
# - When change is 20 steps each change applied as expected.
# For Intel i7-3630QM steps of 1 work fine!
if [[ $(id -u) != 0 ]]; then
echo >&2 "[=10=] must be called with sudo powers"
exit 1
fi
cd /sys/class/backlight/*/
max=$(cat max_brightness)
save=$(cat brightness)
for (( i=1; i < max; i=i+20)); do
echo $i > brightness
echo setting brightness level: $i
sleep .005
done
echo $save > brightness
echo resetting brightness level from $max back to: $save
exit 0
我认为我的 skylake 工作正常,除了 pch_skylake 传感器报告的异常温度:
$ paste <(cat /sys/class/thermal/thermal_zone*/type) <(cat /sys/class/thermal/thermal_zone*/temp) | column -s $'\t' -t | sed 's/...$/.0°C/'
INT3400 Thermal 20.0°C
SEN1 56.0°C
SEN2 52.0°C
SEN3 57.0°C
SEN4 61.0°C
pch_skylake -44.0°C
B0D4 50.0°C
x86_pkg_temp 52.0°C
除此之外 Linux 英特尔微代码肯定在旧笔记本电脑 (Ubuntu 16.04) 上激活,但可能无法在新笔记本电脑 (Ubuntu 16.04.5) 上加载。
编辑: 使用 Ubuntu 18.04.1 LTS,内核 4.15.0-36 重新启动并见证了相同的行为。
确认:不知道其他人有没有Skylake的笔记本电脑,是否可以用同样的方式确认硬件亮度。
问题: 对于我正在开发的应用程序,我是否必须为每个用户添加一个功能来测试支持的最小粒度亮度变化?
背光亮度与GPU本身是分开的;作为 CPU 芯片一部分的 iGPU 只为 LCD 生成像素数据,例如作为 DisplayPort 输出。 (或者在笔记本电脑中,通常是 eDP lower-voltage 信号)。
请注意,在台式机中,您无法通过软件调节背光亮度;普通 GPU 硬件/驱动程序与背光没有连接。
笔记本电脑中的软件背光控制与 iGPU 几乎是分开的,与它是 Skylake 还是 IvyBridge 无关。背光控制是一个单独的硬件设备,具有单独的 I/O 端口(或 memory-mapped IO 寄存器或其他)。
更细粒度的背光调整是笔记本电脑设计的 属性,而不是 CPU。特别是背光技术和控制器硬件。
(这是我的理解,但我实际上并没有足够详细地查看 GPU 或背光/ACPI 驱动程序代码,无法 100% 确定这是准确的。)
我不知道软件是否可以查询真实/有意义的粒度;这个答案只是为了指出它依赖于 GPU 或 GPU 驱动程序的误解。
我遇到了 Skylake i7-6700 HQ 笔记本电脑显示屏(HD 530 显卡)亮度变化的问题:
- 如果值改变 20,它会起作用。
- 如果值改变 19,它只适用于数百次跳跃。
- 如果值变化 <19,则根本没有亮度变化。
然而,在我的旧 Ivybridge 笔记本电脑 i7-3630 QM(HD 4000 显卡)上,亮度成功地以 1 为步长变化。
测试脚本如下:
#!/bin/bash
# Test all brightness levels from 1 to max_brightness
# For Intel i7-6700 HQ HD 530 graphics:
# - When change is 18 steps brighhness doesn't change at all.
# - When change is 19 steps brightnesss changes on multi-hundred point jumps.
# - When change is 20 steps each change applied as expected.
# For Intel i7-3630QM steps of 1 work fine!
if [[ $(id -u) != 0 ]]; then
echo >&2 "[=10=] must be called with sudo powers"
exit 1
fi
cd /sys/class/backlight/*/
max=$(cat max_brightness)
save=$(cat brightness)
for (( i=1; i < max; i=i+20)); do
echo $i > brightness
echo setting brightness level: $i
sleep .005
done
echo $save > brightness
echo resetting brightness level from $max back to: $save
exit 0
我认为我的 skylake 工作正常,除了 pch_skylake 传感器报告的异常温度:
$ paste <(cat /sys/class/thermal/thermal_zone*/type) <(cat /sys/class/thermal/thermal_zone*/temp) | column -s $'\t' -t | sed 's/...$/.0°C/'
INT3400 Thermal 20.0°C
SEN1 56.0°C
SEN2 52.0°C
SEN3 57.0°C
SEN4 61.0°C
pch_skylake -44.0°C
B0D4 50.0°C
x86_pkg_temp 52.0°C
除此之外 Linux 英特尔微代码肯定在旧笔记本电脑 (Ubuntu 16.04) 上激活,但可能无法在新笔记本电脑 (Ubuntu 16.04.5) 上加载。
编辑: 使用 Ubuntu 18.04.1 LTS,内核 4.15.0-36 重新启动并见证了相同的行为。
确认:不知道其他人有没有Skylake的笔记本电脑,是否可以用同样的方式确认硬件亮度。
问题: 对于我正在开发的应用程序,我是否必须为每个用户添加一个功能来测试支持的最小粒度亮度变化?
背光亮度与GPU本身是分开的;作为 CPU 芯片一部分的 iGPU 只为 LCD 生成像素数据,例如作为 DisplayPort 输出。 (或者在笔记本电脑中,通常是 eDP lower-voltage 信号)。
请注意,在台式机中,您无法通过软件调节背光亮度;普通 GPU 硬件/驱动程序与背光没有连接。
笔记本电脑中的软件背光控制与 iGPU 几乎是分开的,与它是 Skylake 还是 IvyBridge 无关。背光控制是一个单独的硬件设备,具有单独的 I/O 端口(或 memory-mapped IO 寄存器或其他)。
更细粒度的背光调整是笔记本电脑设计的 属性,而不是 CPU。特别是背光技术和控制器硬件。
(这是我的理解,但我实际上并没有足够详细地查看 GPU 或背光/ACPI 驱动程序代码,无法 100% 确定这是准确的。)
我不知道软件是否可以查询真实/有意义的粒度;这个答案只是为了指出它依赖于 GPU 或 GPU 驱动程序的误解。