标签 内核 下的文章

现代的 Zstd 被并入 Linux 5.16,大幅提升性能

虽然 Zstd 被用于 Linux 内核的各个领域,从 Btrfs 透明文件系统压缩到允许内核模块用 Zstd 算法压缩,但内核内的 Zstd 代码已经过时多年了。内核中现有的 Zstd 代码已经有四年的历史了,而在这段时间里,Zstd 的上游已经有了许多错误的修正和性能的优化。本周六晚上合并到 Linux 5.16 的 Zstd 代码,经过了 全面的修改。使用 Linux 5.16 的新 Zstd 代码,Btrfs 和 SquasFS 中的 Zstd 的解压速度可以提高 15%,F2FS 和 zRAM 的解压速度可以提高 20% 到 30% 不等,内核 Zstd 镜像的解压速度可以提高 35%。因为它的影响巨大,Linus Torvalds 表示有意推迟 合并它,以便有时间自己亲自审查代码。

老王点评:这么重要的部分,居然内核等了 4 年才考虑合入。

智能电视厂商的主要收入是广告、订阅和数据

前段时间曾 被 FSF 起诉 的智能电视厂商 Vizio 透露在过去的三个月里,其广告和观众数据部门的毛利润为 5730 万美元。这是其销售电视等设备所获利润的 两倍多,尽管这些设备销售的收入要多得多。虽然其 2021 年电视的出货量下降到 140 万,下降了 36%。但其广告收入激增了 136%,该公司 77% 的收入直接来自广告。

老王点评:看来智能家电都是载体,真正挣钱的都是其上的订阅和广告,这就难怪前段时间有人买冰箱结果买了一台关不掉的家庭广告大屏,我有点担心哪天我家的扫地机器人也给我播放广告。

互联网档案馆庆祝 25 周年生日

位于一座前基督教科学派教堂内的 互联网档案馆 Internet Archive 是保存互联网、电视和广播历史的最大数字图书馆。它目前储存了 4750 亿个网页,2800 万份书籍和文本的扫描件,以及 1400 万份录音,加起来有 30PB 的数据。他们呼吁,“我们比以往任何时候都更需要你的帮助”。互联网档案馆已经收集了 1 亿多人的作品,目标是达到 10 亿人。他们目前正在与来自四家大型出版商的法律挑战作斗争,而电子前沿基金会正在帮助他们进行法律辩护。

老王点评:互联网档案馆非常有意义,我尤其喜欢它的时光机,在上面还能找到我 20 多年前的第一个个人网站。

Linux 内核很复杂。我说的甚至不是代码的问题。

Linux 内核的代码本身很复杂,但你不需要为这个问题而烦恼。我说的是 Linux 内核的发布时间表。

一年内多久发布一个新的内核版本?内核被支持多长时间?还有一些 LTS(长期支持)内核,LTS Linux 内核的支持时间有多长?

问题是,虽然这些问题看起来很简单,但答案却不简单。

这些问题没有一个直接明了的答案,需要做一些解释,这就是我在这篇文章中要做的。

Linux 内核发布时间表:有吗?

短的回答是,每两到三个月就有一个新的内核版本发布。长的回答是,这不是一个硬性规定。

这个意思是,你经常会看到每两到三个月就有一个新的内核版本发布。这是内核维护者团队的目标,但并没有规定新版本必须在前一个版本的 8 周后准时发布的期限。

新的内核版本(通常)是由 Linus Torvalds 在它准备好的时候发布的。通常是每 2 到 3 个月发布一次。该版本被宣布为“稳定”,一般以 X.Y 的格式编号。

但这并不是 X.Y 开发的结束。稳定版会有更多的小版本以进行错误的修复。这些小版本在稳定版的内核上又增加了一个点,就像是 X.Y.Z。

虽然 X.Y(通常)是由 Linux 创造者 Linus Torvalds 发布的,但是维护稳定的 X.Y 内核、合并错误修复和发布 X.Y.Z 版本的责任是由另外的内核开发者负责的。

一个内核版本支持多长时间?

和发布一样,一个内核版本支持多长时间也没有固定的日期和时间表。

一个普通的稳定内核版本通常会被支持两个半月到三个月,这取决于下一个稳定内核版本的发布时间。

例如,稳定版内核 5.14 会在稳定版内核 5.15 发布后的几周内达到 生命末期。结束支持是由该稳定内核版本的维护者在 Linux 内核邮件列表中宣布的。用户和贡献者会被要求切换到新发布的稳定版本。

但这只适用于正常的稳定内核版本,还有 LTS(长期支持)内核版本,它们的支持期要比 3 个月长得多。

LTS 内核:它支持多长时间?

LTS 内核也没有固定的发布时间表。通常,每年都有一个 LTS 内核版本,一般是当年的最后一个版本,它至少会被支持两年。但同样,这里也没有固定的规则。

LTS 内核的维护者可以同意某个 LTS 内核的维护时间超过通常的两年。这个协议是根据必要性和参与的人员来达成的。

这种情况经常发生在 Android 项目中。由于两年的时间不足以让制造商结束对他们的硬件和软件功能的支持,你经常会发现一些 LTS 内核会被支持六年之久。

Linux LTS 内核计划支持日期

你可以 在 Linux 内核网站上 找到这个信息。

你的发行版可能没有跟随通常的 Linux 内核版本

如果你检查你的 Linux 内核版本,你可能会发现 你的发行版使用了一个旧的内核。也有可能该发行版提供的内核已经在内核网站上被标记为到达了生命末期。

不要惊慌。你的发行版会负责修补内核的错误和漏洞。除非你真的在使用一个不知名的 Linux 发行版,否则你可以相信你的发行版会保持它的安全和健全。

如果你有足够的理由,比如为了支持更新的硬件,你可以自由地在你使用的任何发行版或 Ubuntu 中安装最新的 Linux 内核

如果你想了解更多细节,我已经 在这里解释了为什么你的发行版使用过时的 Linux 内核

没有直接明了的答案

正如你所看到的,对于 Linux 内核发布时间表的问题,没有直接明了的答案。一切都是暂定的。

在我看来,好的方面是,如果你使用一个常规的 Linux 发行版,你不需要为 Linux 内核版本的发布或终止而烦恼。那是由你的发行版处理的事情。

我希望你对 Linux 内核的发布周期有了更多的了解,或者是我把你搞糊涂了。无论是哪种情况,请在评论区告诉我你的观点。


via: https://itsfoss.com/linux-kernel-release-support/

作者:Abhishek Prakash 选题:lujun9972 译者:wxy 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

2046 年的互联网会是什么样子?

以提供“网站时光机”著称的互联网档案馆最近开发了一个未来时光机: Wayforward Machine ,它可以直接“快进”到 2046 年。当然,这只是一个对当前充斥这广告、隐私盗取的互联网的讽刺。

老王点评:你可以在其中输入 URL,然后按回车看看你访问的网站将来会是什么样子?

Facebook 禁用了“一键取关”工具

一位开发了一个让人们自动取消关注 Facebook 上的朋友和团体的工具的开发者说,他的作品已经被这家社交网站永久禁止了。Facebook 允许用户单独取消关注,从而将他们的内容从 Facebook 的算法控制的“消息提要”中删除。而该工具将这一过程自动化,瞬间抹去用户的“新闻源”。作者称,我没有失去什么,因为我仍然可以通过直接进入我最喜欢的朋友页面和群组看到他们。但我却获得了惊人的控制力,我不再被诱惑着向下滚动无限的内容。一夜之间,我的“Facebook 瘾”变得可控了。Facebook 称他创建的软件使用户互动自动化,违反了该网站的服务条款。

老王点评:虽然说干脆删掉 Facebook App 是最好的,但是你这个“一键取关”工具让 Facebook 情何以堪。

谷歌数据中心尝试转向主线内核

谷歌数据中心产品系统运行的内核被称为 Prodkernel,它是基于较旧版本的 Linux 内核,加上谷歌打上的大约 9000 个补丁,补丁包括各种内部 API、硬件支持、性能优化,以及其它必要的微调。每隔两年左右时间,这些补丁会移植到较新版本的内核。但是谷歌发现这种工作模式面临越来越大的挑战。为了解决这个问题,谷歌发起了一个新的内核项目 Project Icebreaker。

老王点评:事实证明,关起门来发展私有分支在 Linux 内核发展迅猛的今天,已经越来越不可行。

trace-cmd 是一个易于使用,且特性众多、可用来追踪内核函数的命令。

 title=

之前的文章 里,我介绍了如何利用 ftrace 来追踪内核函数。通过写入和读出文件来使用 ftrace 会变得很枯燥,所以我对它做了一个封装来运行带有选项的命令,以启用和禁用追踪、设置过滤器、查看输出、清除输出等等。

trace-cmd 命令是一个可以帮助你做到这一点的工具。在这篇文章中,我使用 trace-cmd 来执行我在 ftrace 文章中所做的相同任务。由于会经常参考那篇文章,建议在阅读这篇文章之前先阅读它。

安装 trace-cmd

本文中所有的命令都运行在 root 用户下。

因为 ftrace 机制被内置于内核中,因此你可以使用下面的命令进行验证它是否启用:

# mount | grep tracefs
none on /sys/kernel/tracing type tracefs (rw,relatime,seclabel)

不过,你需要手动尝试安装 trace-cmd 命令:

# dnf install trace-cmd -y

列出可用的追踪器

当使用 ftrace 时,你必须查看文件的内容以了解有哪些追踪器可用。但使用 trace-cmd,你可以通过以下方式获得这些信息:

# trace-cmd list -t
hwlat blk mmiotrace function_graph wakeup_dl wakeup_rt wakeup function nop

启用函数追踪器

在我 之前的文章 中,我使用了两个追踪器,在这里我也会这么做。用 function 启用你的第一个追踪器:

$ trace-cmd start -p function
  plugin 'function'

查看追踪输出

一旦追踪器被启用,你可以通过使用 show 参数来查看输出。这只显示了前 20 行以保持例子的简短(见我之前的文章对输出的解释):

# trace-cmd show | head -20
## tracer: function
#
# entries-in-buffer/entries-written: 410142/3380032   #P:8
#
#                                _-----=> irqs-off
#                               / _----=> need-resched
#                              | / _---=> hardirq/softirq
#                              || / _--=> preempt-depth
#                              ||| /     delay
#           TASK-PID     CPU#  ||||   TIMESTAMP  FUNCTION
#              | |         |   ||||      |         |
           gdbus-2606    [004] ..s. 10520.538759: __msecs_to_jiffies <-rebalance_domains
           gdbus-2606    [004] ..s. 10520.538760: load_balance <-rebalance_domains
           gdbus-2606    [004] ..s. 10520.538761: idle_cpu <-load_balance
           gdbus-2606    [004] ..s. 10520.538762: group_balance_cpu <-load_balance
           gdbus-2606    [004] ..s. 10520.538762: find_busiest_group <-load_balance
           gdbus-2606    [004] ..s. 10520.538763: update_group_capacity <-update_sd_lb_stats.constprop.0
           gdbus-2606    [004] ..s. 10520.538763: __msecs_to_jiffies <-update_group_capacity
           gdbus-2606    [004] ..s. 10520.538765: idle_cpu <-update_sd_lb_stats.constprop.0
           gdbus-2606    [004] ..s. 10520.538766: __msecs_to_jiffies <-rebalance_domains

停止追踪并清除缓冲区

追踪将会在后台继续运行,你可以继续用 show 查看输出。

要停止追踪,请运行带有 stop 参数的 trace-cmd 命令:

# trace-cmd stop

要清除缓冲区,用 clear 参数运行它:

# trace-cmd clear

启用函数调用图追踪器

运行第二个追踪器,通过 function_graph 参数来启用它。

# trace-cmd start -p function_graph
  Plugin 'function_graph'

再次使用 show 参数查看输出。正如预期的那样,输出与第一次追踪输出略有不同。这一次,它包括一个函数调用链:

# trace-cmd show | head -20
## tracer: function_graph
#
# CPU  DURATION                  FUNCTION CALLS
# |     |   |                     |   |   |   |
 4)   0.079 us    |        } /* rcu_all_qs */
 4)   0.327 us    |      } /* __cond_resched */
 4)   0.081 us    |      rcu_read_unlock_strict();
 4)               |      __cond_resched() {
 4)   0.078 us    |        rcu_all_qs();
 4)   0.243 us    |      }
 4)   0.080 us    |      rcu_read_unlock_strict();
 4)               |      __cond_resched() {
 4)   0.078 us    |        rcu_all_qs();
 4)   0.241 us    |      }
 4)   0.080 us    |      rcu_read_unlock_strict();
 4)               |      __cond_resched() {
 4)   0.079 us    |        rcu_all_qs();
 4)   0.235 us    |      }
 4)   0.095 us    |      rcu_read_unlock_strict();
 4)               |      __cond_resched() {

使用 stopclear 命令来停止追踪和清除缓存区:

# trace-cmd stop
# trace-cmd clear

调整追踪以增加深度

如果你想在函数调用中看到更多的深度,你可以对追踪器进行调整:

# trace-cmd start -p function_graph --max-graph-depth 5
  plugin 'function_graph'

现在,当你将这个输出与你之前看到的进行比较时,你应该看到更多的嵌套函数调用:

# trace-cmd show | head -20
## tracer: function_graph
#
# CPU  DURATION                  FUNCTION CALLS
# |     |   |                     |   |   |   |
 6)               |        __fget_light() {
 6)   0.804 us    |          __fget_files();
 6)   2.708 us    |        }
 6)   3.650 us    |      } /* __fdget */
 6)   0.547 us    |      eventfd_poll();
 6)   0.535 us    |      fput();
 6)               |      __fdget() {
 6)               |        __fget_light() {
 6)   0.946 us    |          __fget_files();
 6)   1.895 us    |        }
 6)   2.849 us    |      }
 6)               |      sock_poll() {
 6)   0.651 us    |        unix_poll();
 6)   1.905 us    |      }
 6)   0.475 us    |      fput();
 6)               |      __fdget() {

了解可被追踪的函数

如果你想只追踪某些函数而忽略其他的,你需要知道确切的函数名称。你可以用 list -f 参数来得到它们。例如搜索常见的内核函数 kmalloc,它被用来在内核中分配内存:

# trace-cmd list -f | grep kmalloc
bpf_map_kmalloc_node
mempool_kmalloc
__traceiter_kmalloc
__traceiter_kmalloc_node
kmalloc_slab
kmalloc_order
kmalloc_order_trace
kmalloc_large_node
__kmalloc
__kmalloc_track_caller
__kmalloc_node
__kmalloc_node_track_caller
[...]

下面是我的测试系统中可被追踪的函数总数:

# trace-cmd list -f | wc -l
63165

追踪内核模块相关的函数

你也可以追踪与特定内核模块相关的函数。假设你想追踪 kvm 内核模块相关的功能,你可以通过以下方式来实现。请确保该模块已经加载:

# lsmod | grep kvm_intel
kvm_intel 335872 0
kvm 987136 1 kvm_intel

再次运行 trace-cmd,使用 list 参数,并从输出结果中,grep 查找以 ] 结尾的行。这将过滤掉内核模块。然后 grep 内核模块 kvm_intel ,你应该看到所有与该内核模块有关的函数。

# trace-cmd list -f | grep ]$  | grep kvm_intel
vmx_can_emulate_instruction [kvm_intel]
vmx_update_emulated_instruction [kvm_intel]
vmx_setup_uret_msr [kvm_intel]
vmx_set_identity_map_addr [kvm_intel]
handle_machine_check [kvm_intel]
handle_triple_fault [kvm_intel]
vmx_patch_hypercall [kvm_intel]

[...]

vmx_dump_dtsel [kvm_intel]
vmx_dump_sel [kvm_intel]

追踪特定函数

现在你知道了如何找到感兴趣的函数,请用一个例子把这些内容用于时间。就像前面的文章一样,试着追踪与文件系统相关的函数。我的测试系统上的文件系统是 ext4

这个过程略有不同;你在运行命令时,不使用 start 参数,而是在 record 参数后面加上你想追踪的函数的“模式”。你还需要指定你想要的追踪器;在这种情况下,就是 function_graph。该命令会继续记录追踪,直到你用 Ctrl+C 停止它。所以几秒钟后,按 Ctrl+C 停止追踪:

# trace-cmd list -f | grep ^ext4_

# trace-cmd record -l ext4_* -p function_graph
  plugin 'function_graph'
Hit Ctrl^C to stop recording
^C
CPU0 data recorded at offset=0x856000
    8192 bytes in size
[...]

查看追踪记录

要查看你之前的追踪记录,运行带有 report 参数的命令。从输出结果来看,很明显过滤器起作用了,你只看到 ext4 相关的函数追踪:

# trace-cmd report | head -20
[...]
cpus=8
       trace-cmd-12697 [000] 11303.928103: funcgraph_entry:                   |  ext4_show_options() {
       trace-cmd-12697 [000] 11303.928104: funcgraph_entry:        0.187 us   |    ext4_get_dummy_policy();
       trace-cmd-12697 [000] 11303.928105: funcgraph_exit:         1.583 us   |  }
       trace-cmd-12697 [000] 11303.928122: funcgraph_entry:                   |  ext4_create() {
       trace-cmd-12697 [000] 11303.928122: funcgraph_entry:                   |    ext4_alloc_inode() {
       trace-cmd-12697 [000] 11303.928123: funcgraph_entry:        0.101 us   |      ext4_es_init_tree();
       trace-cmd-12697 [000] 11303.928123: funcgraph_entry:        0.083 us   |      ext4_init_pending_tree();
       trace-cmd-12697 [000] 11303.928123: funcgraph_entry:        0.141 us   |      ext4_fc_init_inode();
       trace-cmd-12697 [000] 11303.928123: funcgraph_exit:         0.931 us   |    }
       trace-cmd-12697 [000] 11303.928124: funcgraph_entry:        0.081 us   |    ext4_get_dummy_policy();
       trace-cmd-12697 [000] 11303.928124: funcgraph_entry:        0.133 us   |    ext4_get_group_desc();
       trace-cmd-12697 [000] 11303.928124: funcgraph_entry:        0.115 us   |    ext4_free_inodes_count();
       trace-cmd-12697 [000] 11303.928124: funcgraph_entry:        0.114 us   |    ext4_get_group_desc();

追踪一个特定的 PID

假设你想追踪与一个进程(PID)有关的函数。打开另一个终端,注意运行中的 shell 的PID:

# echo $$
10885

再次运行 record 命令,用 -P 选项传递PID。这一次,让终端运行(也就是说,先不要按 Ctrl+C ):

# trace-cmd record -P 10885 -p function_graph
  Plugin 'function_graph'
Hit Ctrl^C to stop recording

在 shell 上运行一些命令

移动到另一个终端,在那里你有一个以特定 PID 运行的 shell,并运行任何命令,例如,ls 命令用来列出文件:

# ls
Temp-9b61f280-fdc1-4512-9211-5c60f764d702
tracker-extract-3-files.1000
v8-compile-cache-1000
[...]

移动到你启用追踪的终端,按 Ctrl+C 停止追踪:

# trace-cmd record -P 10885 -p function_graph
  plugin 'function_graph'
Hit Ctrl^C to stop recording
^C
CPU1 data recorded at offset=0x856000
    618496 bytes in size
[...]

在追踪的输出中,你可以看到左边是 PID 和 Bash shell,右边是与之相关的函数调用。这对于缩小你的追踪范围是非常方便的:

# trace-cmd report  | head -20

cpus=8
          <idle>-0     [001] 11555.380581: funcgraph_entry:                   |  switch_mm_irqs_off() {
          <idle>-0     [001] 11555.380583: funcgraph_entry:        1.703 us   |    load_new_mm_cr3();
          <idle>-0     [001] 11555.380586: funcgraph_entry:        0.493 us   |    switch_ldt();
          <idle>-0     [001] 11555.380587: funcgraph_exit:         7.235 us   |  }
            bash-10885 [001] 11555.380589: funcgraph_entry:        1.046 us   |  finish_task_switch.isra.0();
            bash-10885 [001] 11555.380591: funcgraph_entry:                   |  __fdget() {
            bash-10885 [001] 11555.380592: funcgraph_entry:        2.036 us   |    __fget_light();
            bash-10885 [001] 11555.380594: funcgraph_exit:         3.256 us   |  }
            bash-10885 [001] 11555.380595: funcgraph_entry:                   |  tty_poll() {
            bash-10885 [001] 11555.380597: funcgraph_entry:                   |    tty_ldisc_ref_wait() {
            bash-10885 [001] 11555.380598: funcgraph_entry:                   |      ldsem_down_read() {
            bash-10885 [001] 11555.380598: funcgraph_entry:                   |        __cond_resched() {

试一试

这些简短的例子显示了使用 trace-cmd 命令而不是底层的 ftrace 机制,是如何实现既容易使用又拥有丰富的功能,许多内容本文并没有涉及。要想了解更多信息并更好地使用它,请查阅它的手册,并尝试使用其他有用的命令。


via: https://opensource.com/article/21/7/linux-kernel-trace-cmd

作者:Gaurav Kamathe 选题:lujun9972 译者:萌新阿岩 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

Google 位居全球互联网访问量第一,有七家中国企业闯入前十

最新的 Data Reportal 的 7 月研究表明,据 Alexa 的数据,Google 成为全球访问量最大的网站,平均全球每个人每天都将花费 17 分钟访问 Google 网站。在全球网站访问量的排行榜中,国内共有 7 个网站闯入了前十名:天猫、QQ、百度、搜狐、淘宝、360 和京东。而 Amazon 位列 11 名,比国内这几家电商网站访问量要低。有一点需要注意的是,中国的网站的几乎所有流量都来自国内。这一数据清楚地表明了中国联网人口的增长速度有多快。

看起来我们的内循环也相当规模庞大。

Linux 内核的 CD-ROM 驱动代码有了新的维护者

在维护了 20 多年的 Linux CD-ROM 驱动代码之后,Jens Axboe 宣布他正在寻找一个人接管 CD-ROM 代码。作为早期参与 Linux 内核的开发者,除了 CD-ROM 驱动外,他还担任多个 Linux 子系统的维护者。不过,他现在没有太多的时间投入到这个工作中。在宣布该消息后,他推荐了另外一位内核维护者 Phillip Potter 来接手该工作,这也是唯一位宣布有兴趣接管的人。

这种陈旧的驱动不断地耗费着内核维护者们的精力,但是似乎丢下不管也不合适。

NTFS3 内核驱动将进入 Linux 5.15 内核

去年,Paragon 软件公司宣布他们正在寻求将他们的 NTFS3 内核驱动程序主线化,此前,该驱动程序只用于商业。在过去的一年里,NTFS3 驱动经历了多轮审查,以提高代码质量。该驱动程序在许多方面都胜出了 Linux 内核之前的 NTFS 驱动,但是一直迟迟没有提出合并进主线,以至于 Linus Torvalds 主动发信呼吁提交到上游。周四晚上,Linus 再次在内核邮件列表上发帖询问 NTFS3 的拉取请求是否会在这个周期提交。作为回应,Paragon 公司提交了该拉取请求。

很高兴一个商业驱动程序能进入到开源世界,这说明了企业对于开源模式的一种新的认识。

开源爱好者们对他们所喜爱的 Linux 内核模块进行了评价。

 title=

Linux 内核今年就要满 30 岁了! 如果你像我们一样对此特别重视,那么让我们本周用几个特别的文章来庆祝 Linux。

今天,我们先来看看来自社区对“你不能没有哪个 Linux 内核模块?为什么?”的回答,让我们听听这 10 位爱好者是怎么说的。

1

我猜一些内核开发者听到我的回答后会尖叫着跑开。不过,我还是在这里列出了两个最具争议性的模块:

  • 第一个是 NVIDIA,因为我的工作笔记本和个人台式机上都有 NVIDIA 显卡。
  • 另一个可能产生的仇恨较少。VMware 的 VMNET 和 VMMON 模块,以便能够运行 VMware Workstation。

Peter Czanik

2

我最喜欢的是 zram 模块。它在内存中创建了一个压缩块设备,然后它可以作为交换分区使用。在内存有限的情况下(例如,在虚拟机上),还有如果你担心频繁的 I/O 操作会磨损你的 SSD 或者甚至更糟糕的基于闪存的存储,那么使用基于 zram 的交换分区是非常理想的。

Stephan Avenwedde

3

最有用的内核模块无疑是 snd-hda-intel,因为它支持大多数集成声卡。我可以一边听音乐,一边在 Linux 桌面上编码一个音频编曲器。

Joël Krähemann

4

如果没有我用 Broadcom 文件生成的 kmod-wl,我的笔记本就没有价值了。我有时会收到关于内核污染的信息,但没有无线网络的笔记本电脑有什么用呢?

Gregory Pittman

5

我不能没有蓝牙。没有它,我的鼠标、键盘、扬声器和耳机除了用来挡住门板还有啥用?

Gary Smith

6

我要冒昧地说 都是。 说真的,我们已经到了随机拿一块硬件,插入它,它就可以工作的地步。

  • USB 串行适配器能正常工作
  • 显卡可以使用(尽管可能不是最好的)
  • 网卡正常工作
  • 声卡正常工作

所有这些模块整体带来大量可以工作的驱动程序,令人印象深刻。我记得在过去那些糟糕的日子里,我们曾经大喊 xrandr 魔法字符串才能来使投影仪工作。而现在,是的,当设备基本不能正常工作时,才真的罕见。

如果我不得不把它归结为一个,那就是 raid6。

John 'Warthog9' Hawley

7

对于这个问题,我想回到 20 世纪 90 年代末。我是一家小公司的 Unix 系统管理员(兼任 IS 经理)。我们的磁带备份系统死了,由于“小公司”预算有限,我们没有急于更换或现场维修。所以我们必须得把它送去维修。

在那两个星期里,我们没有办法进行磁带备份。没有一个系统管理员愿意处于这种境地。

但后来我想起了读过的 如何使用软盘磁带机,我们刚好有一台刚换下来的塔式电脑,它有一个软盘磁带机。

于是我用 Linux 重新安装了它,设置了 ftape 内核驱动模块,进行了一些备份/恢复测试,然后将我们最重要的备份运行到 QIC 磁带上。在这两个星期里,我们依靠 ftape 备份重要数据。

所以,对于那些让软盘磁带机在 1990 年代的 Linux 上工作的无名英雄,你真是太厉害了!

Jim Hall

8

嗯,这很简单。是 kvm 内核模块。就个人而言,我无法想象在没有虚拟机的情况下完成日常工作。我愿意相信我们大多数人都是这样。kvm 模块在使 Linux 成为云战略的核心方面也发挥了很大作用。

Gaurav Kamathe

9

对我来说,是 dm-crypt,它是用于 LUKS 的。参见:

知道别人无法看到你的磁盘上的内容是非常棒的,例如,如果你的笔记本丢失或被盗时。

Maximilian Kolb

10

对于密码学基础,很难超越 crypto 模块和它的 C API,它是如此简洁明了。

在日常生活中,还有什么比蓝牙提供的即插即用更有价值的吗?

Marty Kalin

在评论中与我们分享。你的生活中不能没有什么 Linux 内核模块?


via: https://opensource.com/article/21/8/linux-kernel-module

作者:Jen Wike Huger 选题:lujun9972 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出