Arch报错日志"ACPI BIOS Error (bug): Failure creating named object [_SB.PCI0.XHC.RHUB.GPLD], AE_ALREADY_EXISTS (20200925/dswload2-326)
"
"INFO: task kworker/2:1H:107 blocked for more than 245 seconds."

内核日志
内核日志
第一条报错是由于BIOS导致的,具体原因为

“ACPI驱动程序尝试执行ACPI屏幕亮度控制方法,但失败了,因为固件中的ACPI AML字节代码没有为某些对象定义的对象_SB.PCI0.GP17.VGA.LCD._BCM.AFN7。结果是ACPI亮度控制无法工作”

对于这个问题,更新BIOS就有概率修复。
为什么是“有概率”呢?因为厂商的最新版BIOS里并不一定修复了这个问题;不过,貌似这个问题并不造成更大影响。
百度贴吧
见:https://tieba.baidu.com/p/5088905107?red_tag=0961919459

另一条报错;是由Linux内核的一个BUG引起的。

By default Linux uses up to 40% of the available memory for file system caching.
After this mark has been reached the file system flushes all outstanding data to disk causing all following IOs going synchronous.
For flushing out this data to disk this there is a time limit of 120 seconds by default.
In the case here the IO subsystem is not fast enough to flush the data withing 120 seconds.
This especially happens on systems with a lot of memory.
The problem is solved in later kernels。

翻译过来就是:一般情况下,linux会把可用内存的40%的空间作为文件系统的缓存。当缓存快满时,文件系统将缓存中的数据整体同步到磁盘中。但是系统对同步时间有最大120秒的限制。如果文件系统不能在时间限制之内完成数据同步,则会发生上述的错误。这通常发生在内存很大的系统上。系统内存大,则缓冲区大,同步数据所需要的时间就越长,超时的概率就越大。

注意,这条报错有可能导致死机:
内核死机
文章链接:https://www.cnblogs.com/xibuhaohao/p/11096163.html

解决办法:

解决办法有三种,我们全部使用好啦
一、降低缓存占内存的比例
网上类似教程有很多,可参考;见:https://blog.csdn.net/electrocrazy/article/details/79377214
但Arch的修改方式有所不同:
weiki
翻译过来就是:

“注意:从207和21x版本开始,systemd仅应用/etc/sysctl.d/*.conf和/usr/lib/sysctl.d/*.conf。如果您已自定义/etc/sysctl.conf,则需要将其重命名为/etc/sysctl.d/99-sysctl.conf。如果有/etc/sysctl.d/foo,则需要将其重命名为/etc/sysctl.d/foo.conf。”

如果你看过上面的链接你就懂了;意思是说,通常需要将内核参数写在/etc/sysctl.conf配置文件中;并在自启动脚本中添加sysctl -p,现在改变了这个路径,并且无需修改自启动脚本(无需修改自启动脚本是我试验出来的,的确不需要了;但并不是weki上标明的)

可能觉得我有些罗嗦……来,操作步骤:

vim /etc/sysctl.d/99-sysctl.conf
添加
vm.dirty_ratio = 3
vm.dirty_background_ratio = 1

注意,这个值与你的内存大小有关:
weiki
重启后生效,可以使用sysctl -a | grep dirty检查操作是否成功
二、取消120秒时间限制
在刚才的99-sysctl.conf中添加

kernel.hung_task_timeout_secs=0

同样重启生效,可用sysctl -a | grep hung_task_timeout_secs命令查看操作是否成功
三、修改系统IO调度策略
cat /sys/block/sda/queue/scheduler查看你当前的硬盘io调度器
注:“sda”应改为你的硬盘名,例如sdb、nvme、等等
应该显示如下信息:

noop deadline [cfq]

"[]"号中的内容表示当前的io调度器
如果你是nvme,最佳的值为“none”
如果你是ssd,最佳的值为"noop"

你可能感到不解:
weiki
weili
注意:令我没想到的是,weiki上把ssd和nvme当作两种不同的东西。
如果你的值不是最佳的,推荐去weiki看看。https://wiki.archlinux.org/index.php/Solid_state_drive_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)#%E5%86%85%E6%A0%B8%E5%8F%82%E6%95%B0(%E9%92%88%E5%AF%B9%E5%8D%95%E4%B8%AA%E8%AE%BE%E5%A4%87)
至此,两条报错一一解决。

查看日志过程中还发现了其他报错,有类似的小伙伴们可以参考一下
内核日志
详情:https://bbs.archlinux.org/viewtopic.php?id=246507

内核日志
详情:https://bbs.archlinux.org/viewtopic.php?id=172163

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐