GVKun编程网logo

Linux 内核禁用三星 860/870 SSD TRIM 和 NCQ(三星linux系统)

30

如果您想了解Linux内核禁用三星860/870SSDTRIM和NCQ和三星linux系统的知识,那么本篇文章将是您的不二之选。我们将深入剖析Linux内核禁用三星860/870SSDTRIM和NCQ

如果您想了解Linux 内核禁用三星 860/870 SSD TRIM 和 NCQ三星linux系统的知识,那么本篇文章将是您的不二之选。我们将深入剖析Linux 内核禁用三星 860/870 SSD TRIM 和 NCQ的各个方面,并为您解答三星linux系统的疑在这篇文章中,我们将为您介绍Linux 内核禁用三星 860/870 SSD TRIM 和 NCQ的相关知识,同时也会详细的解释三星linux系统的运用方法,并给出实际的案例分析,希望能帮助到您!

本文目录一览:

Linux 内核禁用三星 860/870 SSD TRIM 和 NCQ(三星linux系统)

Linux 内核禁用三星 860/870 SSD TRIM 和 NCQ(三星linux系统)

早在2019年,就有用户反映在Linux系统上使用三星860 Evo SATA SSD会出现问题,但由于报道较少,这个问题并没有引起关注。随后推出的三星870 Evo SATA SSD也存在同样的问题。此问题主要与驱动器的性能有关,在使用过程中可能会出现各种异常锁定和错误信息。

经过两年的调查,Linux工程师确认上述固态硬盘存在一些故障。作为对策,最新版Linux Kernel的维护团队通过补丁禁止了上述固态硬盘的TRIM和NCQ功能,这两种功能都用于优化驱动。

Linux 内核禁用三星 860/870 SSD TRIM 和 NCQ

根据调查结果,已经确定三星860 Evo和870 Evo SATA版本使用的Queued Trim命令会导致Intel、ASmedia和Marvell SATA ACHI控制器出现故障,此类故障更容易发生在ATI AMD ACHI 平台。

TRIM 命令允许操作系统通知固态驱动器哪些数据不再使用并且可以擦除。通过Trim命令对数据进行排序后,可以提高固态硬盘的写入速度。目前几乎所有新推出的固态硬盘都支持TRIM命令并自动开机。

NCQ 是 SATA 上的一项技术,它允许系统根据负载优化数据的排队和移动,以获得最佳性能。NCQ 和TRIM 都用于提高驱动器的性能。默认开启时,兼容性失败可能会导致Linux用户遇到问题,比如在启动阶段系统卡顿20到30秒。

作为对策,Linux Kernel 禁用了 860 和 870 Evo SATA 版本的所有 TRIM 和 NCQ 功能。当然,这可能会影响性能,但遗憾的是,暂时没有其他解决方案。

值得注意的是,三星在这个问题上有些含糊其辞。三星似乎已经禁用了所有800系列SSD的Queued Trim功能,但三星告诉Linux Kernel维护团队,840和850以外的型号没有问题,但这次修复的是860和870。鉴于这样问题,建议Linux用户不要使用三星800系列的所有硬盘,以免出现影响使用或导致性能下降的故障。

AMD 上架锐龙 5 8600G / 7 8700G 处理器:台积电 4nm

AMD 上架锐龙 5 8600G / 7 8700G 处理器:台积电 4nm

amd 今天在京东上架锐龙 5 8600g 及锐龙 7 8700g 两款处理器,均采用台积电 4nm finfet 工艺。

AMD 锐龙 5 8600G 处理器基于 Zen4 架构,为 6 核心 12 线程,基准频率为 4.3GHz,加速频率至高 5.0GHz,配备 22MB 游戏高速缓存(L2+L3),内置 Radeon 760M 核显,8CU,显卡频率为 2800MHz,至高支持 DDR5 5200MHz 内存。内置 NPU 人工智能引擎,轻松应对各种 Al 应用和工作负载。处理器 TDP 功耗为 65W。

AMD 上架锐龙 5 8600G / 7 8700G 处理器:台积电 4nm

AMD 锐龙 7 8700G 基于 Zen4 架构,为 8 核心 16 线程,基准频率为 4.2GHz,加速频率至高 5.1GHz,配备 24MB 游戏高速缓存(L2+L3),内置 Radeon 780M 核显,12CU,2900MHz,至高支持 DDR5 5200MHz 内存。内置 NPU 人工智能引擎,轻松应对各种 Al 应用和工作负载。处理器 TDP 功耗为 65W。

AMD 上架锐龙 5 8600G / 7 8700G 处理器:台积电 4nm

以上就是AMD 上架锐龙 5 8600G / 7 8700G 处理器:台积电 4nm的详细内容,更多请关注php中文网其它相关文章!

Arch GNU/Linux 移植运行 FreeBSD 内核

Arch GNU/Linux 移植运行 FreeBSD 内核

类似运行Freebsd内核的Debian GNU/kFreebsd项目和Gentoo/FreeBSD项目,Arch GNU/Linux开发者用FreeBSD 9.0内核替代Linux内核创造了ArchBSD。开发者称,ArchBSD的项目重点是在FreeBSD 上使用ArchLinux包管理器,为 FreeBSD用户提供最新的软件包。Arch Linux是一个轻量级的Linux发行版,它还有一个使用Hurd内核的移植版本ArchHurd。

assembly – 在汇编程序中编写x86_64 linux内核模块

assembly – 在汇编程序中编写x86_64 linux内核模块

我尝试在nasm中编写简单的内核模块(v3.6),但insmod说我:
$sudo insmod  ./hello.ko
insmod: ERROR: Could not insert module ./hello.ko: Invalid module format
$echo $?
1

我编译我的代码:

$nasm -f elf64 -o hello.m hello.asm
$ld -m elf_x86_64 -r -o hello.ko hello.m

和我的模块代码:

section .modinfo
    __mod_kernel_version db "kernel_version=3.6.8",0
    __mod_license        db "license=GPL",0
    __mod_author         db "author=actics",0
    __mod_description    db "description=hello world module in nasm",0


section .data
    init_mess    db "init_module",10,0
    cleanup_mess db "cleanup_module",0


section .text
    global init_module
    global cleanup_module

    extern printk

init_module:
    push rbp
    mov rbp,rsp

    xor rax,rax
    mov rdi,init_mess
    call printk

    xor rax,rax
    mov rsp,rbp
    pop rbp
    ret

cleanup_module:
    push rbp
    mov rbp,cleanup_mess
    call printk

    xor rax,rbp
    pop rbp
    ret

请帮忙.在互联网中,我找到了1个与2.4相同代码的链接,但他也没有工作
我的系统 – 带有3.6.8内核的archlinux

更新:
在nasm论坛中,我找到了有趣的解决方案.这对我有用,如果我的模块返回0并退出:)但是如果我尝试添加“extern printk”insmod说下一个:

ERROR: Could not insert module hello.ko: Invalid parameters

我做错了什么?我的代码:

[bits 64]

global init_module
global cleanup_module

;extern printk

section .modinfo
    __mod_description8  db   'description=Simple module',0
    align 16,db 0
    __mod_author7       db   'author=That´s me',0
    __mod_license6      db   'license=GPL',db 0
    __module_depends    db   'depends=',0
    align 32,db 0
    __mod_vermagic5     db   'vermagic=3.6.8-1-ARCH SMP preempt mod_unload modversions ',0   ;from a .ko module of my system

section __versions
    ____versions      db   0xdf,0xbc,0xbf,0x8c,"module_layout"   ;from a .ko module of my system
    align 64,db 0

section .data
    init_mess    db "init_module",0


section .text

init_module:
    xor rax,rax
    ret

cleanup_module:
    xor rax,rax
    ret

section .gnu.linkonce.this_module
    times 24 db 0
__name:         db  'Simple',0
    times (0x168 - 24 - 7) db 0
__init_module:      dq  init_module
    times 0x2ac db 0
__cleanup_module:   dq  cleanup_module
    times 1152 db 0

此代码适用于:
nasm -f elf64 hello.asm -o hello.o

但如果我取消注释printk这没有用!)

解决方法

我所做的是使用标准模块宏编写一个小的C包装器,并将其与用asm编写的主模块代码链接起来.使用普通的内核构建系统来构建它.

的module.c:

#include <linux/module.h>
MODULE_AUTHOR("A. U. Thor");
MODULE_DESCRIPTION("Description");
MODULE_LICENSE("GPL");
extern int asm_init(void);
int main_init(void)
{
    return asm_init();
}
module_init(main_init);

main.asm中:

[bits 64]
global asm_init
asm_init:
    xor rax,rax
    ret

Makefile文件:

obj-m += test.o
test-objs := module.o main.o
$(KBUILD_EXTMOD)/main.o: main.asm
        nasm -f elf64 -o $@ $^

使用命令构建:make -C< path_to_kernel_src> M = $PWD

INUX下三个内核文件详解(vmlinuz/initrd.img/System.map)

INUX下三个内核文件详解(vmlinuz/initrd.img/System.map)

在网络中,不少服务器采用的是Linux系统。为了进一步提高服务器的性能,可能需要根据特定的硬件及需求重新编译Linux内核。编译Linux 内核,需要根据规定的步骤进行,编译内核过程中涉及到几个重要的文件。比如对于RedHat Linux,在/boot目录下有一些与Linux内核有关的文件,进入/boot执行:ls –l。编译过RedHat Linux内核的人对其中的System.map 、vmlinuz、initrd-2.4.7-10.img印象可能比较深刻,因为编译内核过程中涉及到这些文件的建立等操作。那么这几个文件是怎么产生 的?又有什么作用呢?本文对此做些介绍。

一、vmlinuz

vmlinuz是可引导的、压缩的内核。“vm”代表“Virtual Memory”。Linux 支持虚拟内存,不像老的操作系统比如DOS有640KB内存的限制。Linux能够使用硬盘空间作为虚拟内存,因此得名“vm”。vmlinuz是可执行 的Linux内核,它位于/boot/vmlinuz,它一般是一个软链接。

vmlinuz的建立有两种方式。一是编译内核时通过“make zImage”创建,然后通过:“cp /usr/src/linux-2.4/arch/i386/linux/boot/zImage /boot/vmlinuz”产生。zImage适用于小内核的情况,它的存在是为了向后的兼容性。二是内核编译时通过命令make bzImage创建,然后通过:“cp /usr/src/linux-2.4/arch/i386/linux/boot/bzImage /boot/vmlinuz”产生。bzImage是压缩的内核映像,需要注意,bzImage不是用bzip2压缩的,bzImage中的bz容易引起 误解,bz表示“big zImage”。 bzImage中的b是“big”意思。

zImage(vmlinuz)和bzImage(vmlinuz)都是用gzip压缩的。它们不仅是一个压缩文件,而且在这两个文件的开头部分内嵌有gzip解压缩代码。所以你不能用gunzip 或 gzip –dc解包vmlinuz。

内核文件中包含一个微型的gzip用于解压缩内核并引导它。两者的不同之处在于,老的zImage解压缩内核到低端内存(第一个 640K),bzImage解压缩内核到高端内存(1M以上)。如果内核比较小,那么可以采用zImage 或bzImage之一,两种方式引导的系统运行时是相同的。大的内核采用bzImage,不能采用zImage。

vmlinux是未压缩的内核,vmlinuz是vmlinux的压缩文件。

二、initrd-x.x.x.img

initrd是“initial ramdisk”的简写。initrd一般被用来临时的引导硬件到实际内核vmlinuz能够接管并继续引导的状态。initrd-2.4.7- 10.img主要是用于加载ext3等文件系统及scsi设备的驱动。比如,使用的是scsi硬盘,而内核vmlinuz中并没有这个scsi硬件的驱 动,那么在装入scsi模块之前,内核不能加载根文件系统,但scsi模块存储在根文件系统的/lib/modules下。为了解决这个问题,可以引导一 个能够读实际内核的initrd内核并用initrd修正scsi引导问题。initrd-2.4.7-10.img是用gzip压缩的文件。

linuxrc这个脚本initrd实现加载一些模块和安装文件系统等。 initrd映象文件是使用mkinitrd创建的。mkinitrd实用程序能够创建initrd映象文件。这个命令是RedHat专有的。其它 Linux发行版或许有相应的命令。这是个很方便的实用程序。具体情况请看帮助:man mkinitrd。

三、 System.map

System.map是一个特定内核的内核符号表。它是你当前运行的内核的System.map的链接。

内核符号表是怎么创建的呢? System.map是由“nm vmlinux”产生并且不相关的符号被滤出。对于本文中的例子,编译内核时,System.map创建在/usr/src/linux-2.4/System.map。像下面这样:

nm /boot/vmlinux-2.4.7-10 > System.map

下面几行来自/usr/src/linux-2.4/Makefile:

nm vmlinux | grep -v ''\(compiled\)\|\(\.o$$\)\|

\( [aUw] \)\|\(\.\.ng$$\)\|\(LASH[RL]DI\)'' | sort > System.map

然后复制到/boot:

cp /usr/src/linux/System.map /boot/System.map-2.4.7-10

在进行程序设计时,会命名一些变量名或函数名之类的符号。Linux内核是一个很复杂的代码块,有许许多多的全局符号。

Linux内核不使用符号名,而是通过变量或函数的地址来识别变量或函数名。比如不是使用size_t BytesRead这样的符号,而是像c0343f20这样引用这个变量。

对于使用计算机的人来说,更喜欢使用那些像size_t BytesRead这样的名字,而不喜欢像c0343f20这样的名字。内核主要是用c写的,所以编译器/连接器允许我们编码时使用符号名,当内核运行时使用地址。

然而,在有的情况下,我们需要知道符号的地址,或者需要知道地址对应的符号。这由符号表来完成,符号表是所有符号连同它们的地址的列表。变量名checkCPUtype在内核地址c01000a5。

Linux 符号表使用到2个文件:

/proc/ksyms

System.map

/proc/ksyms是一个“proc file”,在内核引导时创建。实际上,它并不真正的是一个文件,它只不过是内核数据的表示,却给人们是一个磁盘文件的假象,这从它的文件大小是0可以看 出来。然而,System.map是存在于你的文件系统上的实际文件。当你编译一个新内核时,各个符号名的地址要发生变化,你的老的System.map 具有的是错误的符号信息。每次内核编译时产生一个新的System.map,你应当用新的System.map来取代老的System.map。

虽然内核本身并不真正使用System.map,但其它程序比如klogd, lsof和ps等软件需要一个正确的System.map。如果你使用错误的或没有System.map,klogd的输出将是不可靠的,这对于排除程序 故障会带来困难。没有System.map,你可能会面临一些令人烦恼的提示信息。

另外少数驱动需要System.map来解析符号,没有为你当前运行的特定内核创建的System.map它们就不能正常工作。

Linux的内核日志守护进程klogd为了执行名称-地址解析,klogd需要使用System.map。System.map应当放在使用它的 软件能够找到它的地方。执行:man klogd可知,如果没有将System.map作为一个变量的位置给klogd,那么它将按照下面的顺序,在三个地方查找System.map:

/boot/System.map

/System.map

/usr/src/linux/System.map

System.map也有版本信息,klogd能够智能地查找正确的映象(map)文件。

from  http://blog.sina.com.cn/s/blog_4fed8bc50100dm2q.html

今天关于Linux 内核禁用三星 860/870 SSD TRIM 和 NCQ三星linux系统的讲解已经结束,谢谢您的阅读,如果想了解更多关于AMD 上架锐龙 5 8600G / 7 8700G 处理器:台积电 4nm、Arch GNU/Linux 移植运行 FreeBSD 内核、assembly – 在汇编程序中编写x86_64 linux内核模块、INUX下三个内核文件详解(vmlinuz/initrd.img/System.map)的相关知识,请在本站搜索。

本文标签: