万年历 购物 网址 日历 小说 | 三峰软件 天天财富 小游戏 视频推荐 小游戏
TxT小说阅读器
↓小说语音阅读,小说下载↓
一键清除系统垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放,产品展示↓
首页  日历2023  日历2024  日历2025  日历知识  | 每日头条  视频推荐  数码知识 两性话题 情感天地 心理咨询 旅游天地 | 明星娱乐 电视剧  职场天地  体育  娱乐 
日历软件  煮酒论史  历史 中国历史 世界历史 春秋战国 三国 唐朝 宋朝 明朝 清朝 哲学 厚黑学 心理学 | 文库大全  文库分类 
电影票房 娱乐圈 娱乐 弱智 火研 中华城市 仙家 六爻 佛门 风水 钓鱼 双色球 戒色 航空母舰 网球 乒乓球 足球 nba 象棋 体操
    
  知识库 -> 数码 -> 实时 Linux 内核音质会更好吗? -> 正文阅读

[数码]实时 Linux 内核音质会更好吗?

[收藏本文] 【下载本文】
实时 Linux 内核音质会更好吗?
关注问题?写回答
[img_log]
音质
Linux
Linux 内核
实时 Linux 内核音质会更好吗?
不会。
简单说,外行以为数字音频系统是这样:


自左到右的,按照采样频率,比如48khz,一个点一个点的匀速从磁盘读取、写入DA芯片,然后还原出音频波形。
然后他们就创作出一大堆的奇谈怪论。比如,他们以为,如果CPU不能“实时”的、精确间隔1/48k秒的把一个个采样点送进DA芯片,音频波形就会随之变劣——就好像当年电机转速忽快忽慢的磁带录音机一样——还发明了一个极其有B格的词叫jitter,专门用来描述他们想象出来的这种现象。
这是典型的半瓶子咣当。
他们自己有那么蠢、解决不了这个问题,就以为全世界都必须像他们一样蠢。
很遗憾,只有这一小撮蠢人会如此设计数码音频系统。
真实世界里,哪怕你5块钱买个地摊mp3,它都不会像这些低能老烧一样蠢。因为它是这样设计的:


逻辑功能视角;pc上面是这样,但其它设备可能会把以上所有功能做进同一颗芯片
首先,计算机体系并不是只有CPU。CPU也不是每次需要用的时候就去磁盘/flash读取音频信息,而是一次性把整个mp3或者无损的flac文件读入内存。
然后,音频芯片里面起码包括三个部分。第一部分是DA转换器,第二部分是按照外接晶振频率、均匀从缓冲区搬运采样点、传入DA电路的这么一个逻辑电路(为叙述简单起见,这里忽略了不同采样率如何支持等问题的解决方案),第三部分就是集成在芯片中的存储器,用来缓冲音频。
换句话说,音频播放的时间精度由音频芯片本身(以及晶振)保证,CPU只管保证缓冲区总有数据就够了。
音频播放真正的工作模式是:
CPU从磁盘读入音频信息并解码,置于内存缓冲区CPU指示DMA芯片,把解码后的若干毫秒音频数据传给音频芯片音频芯片把这些音频数据存储在缓冲区里音频芯片的播放控制逻辑开始从缓冲区匀速搬运音频信息音乐播放开始当音频芯片缓冲区内容即将用尽(比如还剩下2ms的数据)时,产生中断CPU执行中断程序,指示DMA把解码后的另外若干毫秒音频数据传给音频芯片DMA芯片忙于数据传输时,CPU就可以做其它事情了CPU的工作时间太宝贵,不应该浪费在这些屁事上它只要消耗若干纳秒处理下中断、指示DMA开始工作就行了正因为cpu这种高效率,使得2ms的缓冲时间已经绰绰有余、无需担心数据接不上音频芯片继续缓存这些数据音频芯片的播放控制逻辑毫无所觉,自始至终以晶振控制的稳定频率搬运数据在播放逻辑眼里,数据永远都是现成的,永远不会缺
现在哪怕SATA都有6Gbps以上的传输率。你知道它的意思吗?
意思是,只要磁盘速度够,CPU可以一秒钟搬运大约100首MP3、或者说500分钟的音频到内存。
换句话说,CPU干一秒活,声卡得忙起码8个小时——注意这还是按磁盘传输速率算的;按内存传输速率的话就更夸张了:DDR4内存每秒能传大约25G字节数据;如果这些数据是mp3的话,这一秒钟传输的内容声卡播放半个月都播不完。
所以,我们压根不需要“实时”处理音频——让CPU干几个ms的活,它就能把过去磁带录音机的一整盘磁带读入内容;然后丢给声卡播放就行了。
但,真这样搞就要求声卡上面必须有一个比较大的存储;而且你听不了几秒钟就切歌的话,这些搬运工作就白费了——CPU/总线的工作时间是很宝贵的,不能这样浪费。
同时,对游戏、MIDI来说,我们希望在敲击键盘后、音箱能尽快出现反馈,让我们知道自己的操作/弹奏有效果了——你让声卡缓存1M信息,这里就会出现若干秒的延迟。这显然是无法使用的。
因此,我们故意把声卡缓冲区做的很小,让它只能存储几个毫秒的音频数据(实际情况是支持更复杂的协议,使得在游戏/MIDI业务时延迟更低、但在播放音乐时缓冲更大:有时候机器突然死机、但并未重启或者关机,你就会听到声卡在反复播放一小段音频。这就是因为CPU罢工、声卡内部的环形缓冲区内容得不到更新、使得它的内置播放逻辑循环播放缓冲区内的声音片段)。这才能尽量降低游戏/演奏的延迟。
——如果你用蓝牙耳机玩过游戏、弹过MIDI的话,应该会对此有所察觉。你会发现音箱里面的声音“不跟手”,总是在你敲过键盘后略微延时才会出现:这在你玩格斗、音游、演奏时更加明显,因为这类游戏/工作需要更实时的反馈
——造成这个问题的原因,就是蓝牙传输比较慢、编解码复杂、缓冲区大
——这样才能在受到外界干扰、产生误码时,从容不迫的纠错或者丢弃错误报文、要求主机重传
——没错。反驳老烧们的另一个谣言:数字音频系统是不会有误码的。各种协议都会实时的识别和纠正它们。借助缓冲区,这个识别和纠正动作也不会对音质造成任何影响
——但,这些技术要求也使得通过蓝牙播放音乐时,延迟可能达到100ms甚至200ms以上
——这个延迟对音乐播放毫无影响,但比较影响游戏、音乐演奏等需要听到实时反馈的应用
内核工匠:一文读懂蓝牙音频4 赞同 · 0 评论文章
扯到蓝牙就有点太远了,哈哈。
回到声卡。
综上,在设计合理的前提下,利用缓冲区和中断机制,数字音频系统是不存在什么jitter的。
就是设计不合理、使得音频芯片缓冲区断流,也只会导致噼噼啪啪的“爆音”而不是jitter。
实时内核不会改变音质。它对音频系统的可能改善只有一个,就是降低延迟——但却对蓝牙这种协议层面产生的延迟无能为力。
而且,非实时内核也能很轻易的就把延迟压到极低水平、低到哪怕格斗游戏玩家、音游玩家、音乐家都感知不到的水平。
鉴于评论区老烧们见缝插针的插入误解,看来这里有再次正本清源的必要。


一、音源-CPU-声卡
音源文件,无论是mp3、flac还是wav,载入内存后CPU都会给它解码。
这是因为无论mp3还是flac甚至wav,都可能是压缩过的:WAV
而声卡是无法直接播放这些五花八门的音频文件的。
因此,虽然如果你使用各种播放库时,它允许你直接传入mp3、flac以及各种格式的wav,或者直接传入各种视频、在播放视频的同时播放它内嵌的伴音音频;但,声卡本身是没有支持这些五花八门的音频格式的能力的。
在你看不见的地方,这些文件都会被CPU按照一定流程识别格式、解开压缩。最终送给声卡的,一定是标准的PCM格式信息。
换句话说,在上面的缓冲区里,存放的一定是PCM格式音频。声卡不可能识别MP3,你给它MP3它一定会发出各种噪音。
很多人可能被评论区老烧误导,以为出现了PCM是多么可怕的事……扯淡。
二、缓冲区到DAC
DAC的工作原理是:你给它一个数字,它输出等于这个数字的电平。
而PCM呢,它其实就是一序列的采样点;只要你按照采样频率把PCM数据传给DAC,DAC就能还原当初采样的音频波形了。这个波形再经过滤波、放大,就可以通过两米长的耳机线播放进你的耳朵,或者通过三四米甚至十几米长的模拟线缆送进功放机(可能内置于音箱),完成模拟波形放大并通过喇叭播放。
换句话说,DAC相当于过去的录音机磁头,而我们把PCM匀速送到这个“磁头”下的“走带机构”是什么呢?
没错。晶振。晶体振荡器。石英晶体振荡器。
依靠晶振输出的、超高稳定性的时钟信号,把一个个PCM数据里的采样点依序、匀速的送到DAC。
当然了,晶体振荡器虽然具有极高的稳定性,但这个稳定性也是有极限的。这在高精度仪表里面是个问题,也就是jitter。
不过,这个jitter究竟听不听得到呢?
1、录音机时代的抖晃率
录音机时代和现在不同,当时全靠电机转速控制技术来保证“走带机构”以4.76厘米每秒的速度匀速走带;但这个技术是不靠谱的,电池电量不足时就会明显变慢。下面就是典型的电机转速控制电路:




录音机磁带走得慢的解决办法 - 音频技术 - 电子发烧友网?www.elecfans.com/video/yinpinjishu/202004191206764.html


有些录音机的调速电路是集成在电机内部的;电机后端会留一个调节孔,用螺丝刀伸进去拧里面的可调电阻,就可以控制走带速度了。


当年我手里没少干坏这种玩意儿
我们可以看到,这套电路并没有石英晶体振荡器来精确控制速度,而是使用了不靠谱的滑动电阻器。
理所当然的,无论环境温度变化还是机器工作时的震动(以及音箱震耳欲聋的声波冲击)造成的滑动变阻器接触簧压紧/放松、还是空气湿度变化、长期使用后的脏污,都可能引起走带速度改变。
那么,怎么校准录音机的走带速度呢?
Freeman:用手机APP调整磁带录音机转速的方法0 赞同 · 0 评论文章
答案是用一盘录着标准1khz音频的专用磁带在上面放音,然后用螺丝刀调整可调电阻,直到最终播放的音频频率恰好等于1khz。
当然,正好等于1000.00HZ是不可能的。人耳并没有那么高的精度。
更“可怕”的是,电机本身依靠磁场工作,而直流电机内部的磁场是不均匀的:


绕组磁场方向和永磁体磁场正好相反时,受到的磁场推力是最大的;但一旦稍微偏转,受到的磁场力就会指数水平的降低:


我拆解过几十个不同录音机使用的电机。很遗憾,它远不如现在的电脑风扇精致:简单的两片弧形永磁体(也有做成环形、但仍然只有两个极性的),三个绕组——现在电脑风扇为了静音,经常都要做5个、7个甚至更多绕组呢。
这样的电机,其转速显然不可能非常均匀。
不仅如此,录音机走带速度还严重依赖于“主轴”的加工精度;但主轴本身可能有安装误差、或者主轴本身不够直、使得转动时另一端画圆、于是走带速度就忽快忽慢。
用久了的主轴还可能沾染上大量脏污,我当年帮人修录音机,其中的一大工作就是抠上面的污物——这玩意儿在上面沾的非常紧,尤其那些使用多年未曾打理的,靠酒精是去不掉的;用指甲抠掉大块的、再用酒精彻底擦净,这是当时的重要维修工作之一。
这些脏污显然也会严重影响磁带走带速度。
显然,走带速度是不可能均匀的,一定存在某种忽快忽慢的变动。这叫“抖晃率”。
那么,允许的走带偏差/抖动是多少呢?
一.核心技术指标:
1,带速误差<0.15%,即4.5Hz
2,抖晃率<0.03%RMS,<0.05%PEAK
二.使用的测试工具:
抖晃仪软件,或者实体抖晃仪
索尼KA3ES三磁头卡座
三.使用方法:
1,分别播放测试带的带头和带尾
2,检查抖晃仪显示的频率和抖晃率
3,和维修手册的参考值进行比较
如果不符合,检查原因并作出调整!
四.实测结果:
华声HCD340测试带
带速2994.1
抖晃率约0.03RMS,0.062PEAK
TEAC MTT111DN(标称误差小于1Hz)
带速2995
抖晃率约0.03RMS,0.057PEAK
索尼KA3ES的指标是:
带速2990到3010
抖晃率小于0.047RMS
可见符合技术指标
两盘测试带的测试结果的基本一致的!
华声测试带实测指标分析:
实测频率和Teac比误差<1Hz
实测抖晃率和Teac比差距<0.01%
玩转测试带之一! 3kHz和3.15kHz测试带的正确使用方法! 国产和进口指标对比!?www.jdbbs.com/thread-8639918-1-1.html
2、石英晶体振荡器的精度


硬之城Allchips:谈谈晶振的频率精度、稳定度及长期稳定度12 赞同 · 0 评论文章
老烧们神奇的耳朵,它们听不见录音机转速0.15%的“巨大”偏差,也听不出录音机主轴脏污/弯曲后远超0.06%的抖晃——却听得出石英晶体振荡器百万分之几的频率差值。
三、信号传输
在这个框图中:


音源-CPU-音频芯片这些路径中,传输的信号都是纯数字信号。
这些信号是无需考虑误码率/抖动的,只要缓冲区补充及时就足够了。
而缓冲区到DAC的搬运过程比较特殊。此时是“半数字半模拟”的。
半数字指的是PCM采样点,这些信息是数字的;半模拟是石英晶体振荡器控制着采样点到DAC的输出间隔——当然了,如果你读了前面部分,会知道石英晶体振荡器远比录音机电机“可怕”的精准度和稳定度;那么你肯定不会担心这里出现问题。
没错。可能有jitter;但那又如何?只要你还是地球上的大型哺乳动物,你就听不出来。
DAC转换并经过前级滤波、放大之后、传输到音箱这段,是纯模拟信号。
实际实现中,不同方案可能会采取不同的传输方式。
1、光纤输出
光纤输出其实相当于用光纤替代了后续的晶振、DAC的位置,从而直接把CPU放到声卡缓冲区的PCM信息透过光纤传递给外部解码器。
这个设计本质上和USB输出是一样的。因此这里不再讨论它。
2、USB输出
USB输出相当于用USB接口替代了声卡的位置,使得CPU直接把本该放到声卡缓冲区的PCM信息通过USB电缆、传递到了外部解码器。
和电脑机箱中一样,这个传输是纯数字输出。也就是说,它并不携带晶振的频率信号。
恰恰相反,USB音频标准要求在报文中包含PCM采样频率等信息(且可以支持不同音频格式);远端的USB解码器需要通过这些信息调整自己的晶振分频,从而以正确的速度从自己的缓冲区把一个个PCM采样点送到DAC。
因此,和老烧们的凭空想象不同,这里并不会引入什么jitter。除非你用的解码器太烂。
3、模拟信号和数字信号
当然,和光纤一样,USB输出的PCM信息是不带校验的。也就是说,它可能出错。
那么,这会不会影响音质呢?
在谈论这个之前,我要先科普一下何谓“数字信号”,以及数字信号有什么优势。
先让我们看看模拟音频信号吧:


如你所见,模拟音频信号是一系列细碎的波。这些波的最高频率是20KHZ。
通过一条音频电缆传输模拟信号时,这些波可能发生畸变。


畸变包括频率漂移、引入干扰、振幅改变等等——总之,把20khz的音频传输150米,这是一项极大的挑战。
不过没关系。人的耳朵极不敏感。只要避免引入干扰、造成极大的底噪甚至啸叫,其它畸变都无所谓。反正听不出来。
相比之下,数字信号就靠谱多了。
和模拟信号不同,数字信号要“简单粗暴”的多得多。


以USB为例:


USB总线电平标准、USB总线状态、USB总线信号详解_usb时序图-CSDN博客?blog.csdn.net/weiaipan1314/article/details/113639911


常用通信接口电气特征(七):USB_usb差分信号电压是多少-CSDN博客?blog.csdn.net/kgufan/article/details/100904772


看到了吗?
2.8v以上、0.3v以下有效。
换句话说,0和1状态至少相差2.5v,这才是有效的数字信号。
差值低于2.5v,这个信号就认为是一个错误。
再换句话说,峰值2.5v的干扰,这在模拟信号里面足够遮的什么声音都听不清了、根本谈不上音质;但在数字信号里面可以无视。
当然,高速数字信号不用如此恐怖的电压差。耗电太凶、对器件要求太高了。所以标准定在700~1100mv这样的级别。这叫牺牲可靠性换速度。
正因为这个牺牲,使得目前的USB3对线材存在一定的要求。可以轻易传输USB2.0信号的线缆,传输USB3.0信号就可能协商不通过,只能降速到USB2.0使用。
模拟信号里面,10个mv意味着什么?
——简单说,10个mv就可以把一些耳机驱动到足够损害你的听力的声压级了。
而在数字信号里,几百个毫伏、甚至2500毫伏以下的信号可以直接无视。高于这个压差的信号才被认为是有效信号。
长期戴入耳式耳机听歌有什么危害吗?1.1 万赞同 · 872 评论回答


顺带说一句,搜麦文学大神这篇文章时,我看到了某音频设备厂商在知乎的一个账号正在谋财害命——它甚至鼓吹使用95db以上声压听歌、并要求设备必须能把耳机推到120db,也就是痛阈。
但事实上,长时间用超过65db的音量听歌,已经可能造成永久性听力下降了。


每天暴露在91db噪声环境里的时间超过2小时,就足以造成听力损失。
而那个无良厂商居然到处放毒、要求使用95db以上音量听歌!
那么,如何知道高速数字信号质量好不好呢?


没错,就是硬件同学熟悉的“眼图”了。
只要眼睛张得开,信号就不会有问题。
比如,哪怕牺牲了可靠性的、usb3.2这样10Gbps以上的信号,其误码率都可以低于10E-12——小数点后12个零!
低压差、超高频的USB3.2都有这么高的可靠性;USB2.0嘛……其实压根无需规定,随便捡条线都能用——只要线没锈,包括USB2.0 的480Mbps传输速率,都是想错都难。
USB3之前的任何协议都是不挑线的。随便买,都能用,别锈的太夸张都行。
直到usb3之后,想要支持USB3的传输率,你才需要买质量稍微好一点的线。
这样优秀的能力,以PCM格式传输点傻乎乎的低频音频数字信号,岂不是手到擒来?
你要知道,USB所谓的低速、全速,指的可是:


没错,12Mbps!
——事实上,当调制技术更高时,比如当年12Mbps的ADSL,你知道它的设计传输距离有多远吗?
以 ITU-T G.992.1 标准为例,ADSL 在一对铜线上支持上行速率512Kbps~1Mbps,下行速率1Mbps~8Mbps,有效传输距离在3~5公里范围以内。当电信服务提供商的设备端和用户终端之间距离小于1.3千米的时候,还可以使用速率更高的VDSL,它的速率可以达到下行55.2Mbps,上行19.2Mbps。
adsl?baike.baidu.com/item/adsl/96520


没错。用粗重的音频电缆在音乐会现场把功放后的、强劲的音频信号传递150米,难死了无数音频工程师;用一对细细的铜线传输数字信号,却成了“小于1.3km时,可以使用VDSL,从而达到下行55.2Mbps上行19.2Mbps”——读出其中的举重若轻了吗?
这就是数字信号的优越性。
就你20KHZ的小音频,也敢来碰瓷数字信号?


这玩意儿模拟信号传两米、甚至都不用差分接法,你的木头耳朵照样听不出问题。
结果用更粗的差分线把黑大傻粗的数字信号传一米两米,你居然就听出来了?尤其是,居然是去碰瓷早年的、超高压差的USB2.0前的USB线?
这都是谁给你的勇气……
这里专门研究您这种高人,不妨去为国家做点贡献吧:


对音质没有任何影响
搞audio系统用实时Linux是为了降低各种不确定的延迟,方便音频工具之间的同步处理。硬要说对音质影响,那也是在创作者那里。
发烧友就不要折腾这些了,去学习高数和物理,对提升音质效果更好
短短一句话就能同时得罪:
数电、模电、操作系统、数据结构、信号与系统、通讯原理、信息论、数字音频处理.....
等众多专业的老师。
这何尝不是门技术活儿~
音质最好的笔记本电脑是MacBook Pro,Asahi Linux为了复制macOS的声音体验,在目前的Linux音频栈上实现了DSP插件和防线圈过热看门狗,基本上接近了原版macOS的播放体验.
基本上需要做的就是,使用pipewire-pulse服务器而不是pulseaudio服务器,如果是多声道的系统,还需要编写DSP插件来分离高低频.
New in Fedora Asahi Remix - Asahi Linux?asahilinux.org/2024/01/fedora-asahi-new/


Asahi Linux并没有使用所谓的实时内核, 因此可以认为实时内核不能增强音质. 相反, 实时内核可以在一些特定的条件下防止出现声音上的问题.
无论是否安装实时内核, Linux向用户态提供的接口是不变的, 音频服务器总是通过一些系统调用使自己的调度优先级提升.


如上图所示, pipewire, pipewire-pulse和wireplumber3个进程的优先级是9, 高于普通的服务. 不过优先级仅适用于普通调度策略的线程, 部分线程使用实时调度策略:

> chrt -avp 1796
pid 1796's current scheduling policy: SCHED_OTHER
pid 1796's current scheduling priority: 0
pid 1799's current scheduling policy: SCHED_FIFO|SCHED_RESET_ON_FORK
pid 1799's current scheduling priority: 65
> chrt -avp 1748
pid 1748's current scheduling policy: SCHED_OTHER
pid 1748's current scheduling priority: 0
pid 1764's current scheduling policy: SCHED_OTHER
pid 1764's current scheduling priority: 0
pid 1765's current scheduling policy: SCHED_FIFO|SCHED_RESET_ON_FORK
pid 1765's current scheduling priority: 88
> chrt -avp 1760
pid 1760's current scheduling policy: SCHED_OTHER
pid 1760's current scheduling priority: 0
pid 1762's current scheduling policy: SCHED_FIFO|SCHED_RESET_ON_FORK
pid 1762's current scheduling priority: 88
pid 1763's current scheduling policy: SCHED_OTHER
pid 1763's current scheduling priority: 0
pid 1771's current scheduling policy: SCHED_OTHER
pid 1771's current scheduling priority: 0
pid 1773's current scheduling policy: SCHED_OTHER
pid 1773's current scheduling priority: 0

Linux有很多调度策略

> chrt -m
SCHED_OTHER min/max priority	: 0/0
SCHED_FIFO min/max priority	: 1/99
SCHED_RR min/max priority	: 1/99
SCHED_BATCH min/max priority	: 0/0
SCHED_IDLE min/max priority	: 0/0
SCHED_DEADLINE min/max priority	: 0/0

只有SCHED_FIFO和SCHED_RR属于实时调度策略. 关于各种调度策略的区别, 可以参考man:
sched(7) - Linux manual page?man7.org/linux/man-pages/man7/sched.7.html
pipewire的调度策略为SCHED_FIFO, 实时优先级为88. 这个实时优先级可以在/usr/share/pipewire中设置, 例如pipewire-pulse可以改为65(更低一些)

/usr/share/pipewire/pipewire-pulse.conf:
...
context.modules = [
    { name = libpipewire-module-rt
        args = {
            nice.level   = -11
            #rt.prio      = 88
            rt.prio      = 65
            #rt.time.soft = -1
            #rt.time.hard = -1
            #uclamp.min = 0
            #uclamp.max = 1024
        }
        flags = [ ifexists nofail ]
    }
...

ulimit可以查询非特权进程(不是root且没有CAP_SYS_NICE)允许设置的最大实时优先级, 在我的这个系统上, 这个值为95.

> ulimit -a
-t: cpu time (seconds)              unlimited
-f: file size (blocks)              unlimited
-d: data seg size (kbytes)          unlimited
-s: stack size (kbytes)             8192
-c: core file size (blocks)         unlimited
-m: resident set size (kbytes)      unlimited
-u: processes                       253781
-n: file descriptors                1024
-l: locked-in-memory size (kbytes)  4194304
-v: address space (kbytes)          unlimited
-x: file locks                      unlimited
-i: pending signals                 253781
-q: bytes in POSIX msg queues       819200
-e: max nice                        39
-r: max rt priority                 95
-N 15: rt cpu time (microseconds)   unlimited

如果pipewire的配置文件中实时优先级高于ulimit的限制, 则pipewire服务会使用dbus接口调用rtkit设置自己的实时优先级.
以上这些设置均为用户态的设置, 众所周知Linux并不是一个实时操作系统, 因此即使使用了所谓的实时优先级调度策略, Linux内核也不能保证相关进程可以获得足够的时间片去执行, 相关实时性是否能满足, 必须要通过实机测试才能知道. (一定程度上, 即使是实时操作系统, 也需要通过静态分析和实机测试才能知道实时性是否能满足).
所谓实时Linux内核, 一般指的是PREEMPT_RT补丁集, 原先大部分该补丁集的补丁已经提交给主线Linux内核.
realtime:start [Wiki]?wiki.linuxfoundation.org/realtime/start


在Linux config -> General Setup -> Preemption Model有若干选项, 目前的主线内核在x86架构下, PREEMPT_RT选项是不可见的, 必须打PREEMPT_RT补丁集才能使用该选项.


对应的选项文件处于 https://github.com/torvalds/linux/blob/master/kernel/Kconfig.preempt
Preemption, 中文翻译是抢占, 对应的是操作系统多任务处理的两种模式, 即抢占式多任务和协作式多任务. Windows NT, macOS X, Linux均为抢占式多任务操作系统, 而早期的操作系统, 如Windows 9x, Mac OS 9均为协作式多任务. 协作式多任务操作系统的进程必须主动让出CPU才能让其他进程执行, 而抢占式多任务操作系统可以直接打断正在执行的进程.
在Linux这里, 所有的进程在用户态时都可以被抢占, 但如果进程处于内核态, 则根据选项的不同有不同的行为.
PREEMPT_NONE即内核不可被抢占, 需要等待处于内核态的进程退出内核态时才能进行调度. 由于服务器更在意吞吐量而不是延迟, 因此该选项适合于服务器.
PREEMPT_VOLUNTARY即在部分内核函数中添加调度点, 在调度点处允许让出CPU. 调度点几乎不会影响吞吐量, 但是可以降低调度延迟, 因此该选项适合于普遍桌面.
PREEMPT即可抢断内核, 在几乎所有的内核代码处都可以被抢断, 除非处于关键区(即各种锁)的代码. 该选项适合于高负载但仍用于桌面用途的系统, 或者是一些嵌入式系统.
PREEMPT_RT即完全可抢断内核. PREEMPT_RT将几乎所有关键区代码替换为可抢断的版本, 使绝大部分内核代码可以被抢断, 除了启动时的代码、调度器本身和中断处理函数. 但会降低系统吞吐量.
此外PREEMPT_DYNAMIC选项可以通过启动时的命令行动态选择上述内核抢断行为, 非常适合于发行版分发的二进制内核.
那么是否需要选择PREEMPT_RT取决于电脑的用途. 例如我的电脑作为一个Linux桌面使用, 同时Gentoo Linux经常需要编译软件, 导致CPU负载很高. 因此需要选择Preemption kernel (Low latency kernel), 同时将wayland合成器sway和声音服务器pipewire设置为实时优先级, 同时降低编译器的优先级. 这样经过调整后, 如果内存压力不大, 即使全速编译软件, GUI也不会有较大的卡顿.


小于50微妙的延迟是明显无法感知到的
htop可以很直观的看到满载的CPU是运行在用户态还是内核态, 蓝色的条即为用户态, 红色的条即为内核态. 如果大部分都是蓝色, 说明占用CPU的是用户态代码, 此时完全可抢占内核的作用就不大.
但如果满载时全部都是内核态代码, 则完全可抢占内核可以降低实时调度进程的延迟.


不过此时应优先排出代码是否存在bug, 因为通常内核态不应有较高的占用率. 存在bug的用户态代码或内核态代码可能会误用内核态锁导致这种情况.
如果电脑用于专业音频, 例如MIDI输入、音频录制、混音、复杂的音频播放, (虽然这些工作大多使用macOS完成, 但Linux也可以用于此目的.) 此时完全可抢断内核可能会更有意义, 尤其是与一些PCI声卡一起使用时. Linux的专业音频生态通常不使用pulseaudio协议, 而是使用JACK协议. JACK自己的服务器或者pipewire的JACK服务器都需要仔细的配置才能实现应有的效果, 单独安装完全可抢断内核不一定是最好的.
如果电脑用于PCIE passthrough, 即在Linux系统上运行Windows虚拟机, 同时将物理显卡分配给虚拟机, 此时不应使用完全可抢断内核, 并且需要仔细的配置虚拟机的选项. 软件声卡造成的卡顿、电流声、声音加速或者拉长均与硬件无关, 而是与虚拟机本身有关. 如果可行的话, 尽可能使用GPU的HDMI/DP物理接口提供的音频输出, 或者传入一个物理USB XHCI控制器, 并使用USB声卡.
不会。
实时性关系的不是“好坏”,而是“能不能听”。实时性不够的系统会直接破音,而不是微妙的“音质不好”。
举个具体点的例子。
假如你的线程调度频率是200Hz,那么一个线程在被调度出去之后,大概得等5ms的时间才会重新获得时间片。而如果你的音频工作在44100、32个采样点的处理块尺寸下,每个处理块的时长只有约不到1ms。那么如果你的音频处理线程被切出去了,它下次回来的时候,可能已经有好几个应当填充的块已经错过了,输出设备只能反复播放老块的内容,发出高频重复的啪♂啪♂啪的声音。
如果想要保证不发出啪♂啪♂啪的声音,对于这样的简单系统,你可以简单地把处理块设成巨长,比如512个点。但这样是以更大的处理延迟为代价的。但延迟对于单纯听歌的情景根本不重要,所以对你无所谓。
什么时候延迟重要?你在一边弹MIDI键盘一边听声音,处理系统的延迟会立即造成稀烂的手感。
芯片(adc/dac/dsp)决定音质,么软件啥事。至于latency,芯片都有buffer的,只要系统整体load忙的过来,感觉lantency也不会差太多
据我所知
换内核不如换水电
因为换水电给人家说,人家知道你在干什么
换内核的话,人家最多说你电脑技术真好
必须的,对linux声音影响最大的就是内核,延迟决定了声音。而不同发行版,不同的软件都是用相同的包,对声音几乎没影响。
延迟和音质没有任何关系。音质和采样率和位深度有关。
声速是340m/s也就是说声音传播一米要2.94毫秒。如果你觉得延迟影响了音质,影响最大的应该是声速。
非实时的Linux并没有什么地方妨碍音质达到最高水平,所以实时Linux不会让音质更好。
实时内核是用在物联网和工控领域的,不是给桌面用户用的,使用体验也并不好。
那肯定不如用火电和用水电的区别大。
啊? 你用CPU做音频信号处理??你的声卡是摆设么?
您还是好好的去学数电模电吧。如果玩音箱,再去学一下材料。这些才是真正对于音质影响比较大的。
声卡望着显卡,眼泪不争气地落了下来。
不会,只会降低一点点音频延迟
据我所知只有那些低延迟魔怔音游人会这么干
[收藏本文] 【下载本文】
   数码 最新文章
为什么大型直升机都是头顶上一个大螺旋桨的
如何评价 龙芯老总胡伟武的爆料:下一代八核
想要入手一款能畅玩市面上所有游戏的游戏本
2024 年扫地机器人有哪些推荐?
iOS的墓碑机制这么厉害,为什么Windows、Li
如何看待华为发布会被指造假?
如何看待华为 Pura 70 系列超高速风驰闪拍功
碎纸机是干嘛用的,撕个纸还要用机器,真是
小米真的是为国为民吗?
华为发布 MatePad 11.5 S 平板电脑,该产品
上一篇文章      下一篇文章      查看所有文章
加:2024-01-15 10:28:39  更:2024-01-15 14:05:45 
 
娱乐生活: 电影票房 娱乐圈 娱乐 弱智 火研 中华城市 印度 仙家 六爻 佛门 风水 古钱币交流专用 钓鱼 双色球 航空母舰 网球 乒乓球 中国女排 足球 nba 中超 跑步 象棋 体操 戒色 上海男科 80后
足球: 曼城 利物浦队 托特纳姆热刺 皇家马德里 尤文图斯 罗马 拉齐奥 米兰 里昂 巴黎圣日尔曼 曼联
  网站联系: qq:121756557 email:121756557@qq.com  知识库