草庐IT

linux - 哪些 <4GB 的工作负载在 Linux x32 ABI 中的性能会比 x64 差?

有一个比较newLinuxABIreferredtoasx32,其中x86-64处理器以32位模式运行,因此指针仍然只有32位,但仍然使用64位架构特定的寄存器。所以你仍然限制在正常32位中使用4GB最大内存,但是你的指针使用的缓存空间比在64位中少,你可以有效地进行64位算术,并且你可以访问更多寄存器(16)比普通32位(8)中的要多。假设您的工作负载正好适合4GB,x32的性能是否会比x86-64差?在我看来,如果您不需要额外的内存空间,则不会丢失任何东西——您应该始终获得相同的性能(当您已经适合缓存时)或更好(当指针空间节省让您适合更多时)在缓存中)。但如果有分页/TLB/等,我

linux - 为什么我需要在 linux 内核升级后重新编译 vmware 内核模块?

Linux内核升级后,我的VMWare服务器无法启动,直到使用vmware-config.pl进行一些重新配置工作(包括构建一些内核模块)。如果我用最新的WindowsServicePack更新我的WindowsVMWare主机,我通常不需要做任何事情来运行VMWare。为什么VMWare在Linux和Windows之间的工作方式不同?与Windows相比,此重新编译操作是否会在Linux平台上带来任何好处? 最佳答案 去读TheLinuxKernelDriverInterface.Thisisbeingwrittentotryto

linux - 为什么我需要在 linux 内核升级后重新编译 vmware 内核模块?

Linux内核升级后,我的VMWare服务器无法启动,直到使用vmware-config.pl进行一些重新配置工作(包括构建一些内核模块)。如果我用最新的WindowsServicePack更新我的WindowsVMWare主机,我通常不需要做任何事情来运行VMWare。为什么VMWare在Linux和Windows之间的工作方式不同?与Windows相比,此重新编译操作是否会在Linux平台上带来任何好处? 最佳答案 去读TheLinuxKernelDriverInterface.Thisisbeingwrittentotryto

linux - arm-none-eabi 和 arm-linux-gnueabi 之间的区别?

arm-none-eabi和arm-linux-gnueabi有什么区别?我知道如何使用它们的区别(一个用于裸机软件,另一个用于在linux上运行的软件)。但是技术背景是什么?我发现ABI有所不同,据我所知,它类似于API,但在二进制级别。它确保了不同应用程序的互操作性。但我真的不明白拥有或不拥有操作系统会以何种方式影响我的工具链。我唯一想到的是,在编译裸机软件时,库可能必须静态链接(是吗?),因为没有操作系统动态提供它们。我发现与该主题相关的大多数页面只是回答了如何使用工具链,而不是技术背景。我是机电一体化专业的学生,​​刚接触嵌入式系统,所以我在这个领域的经验有些有限。

linux - arm-none-eabi 和 arm-linux-gnueabi 之间的区别?

arm-none-eabi和arm-linux-gnueabi有什么区别?我知道如何使用它们的区别(一个用于裸机软件,另一个用于在linux上运行的软件)。但是技术背景是什么?我发现ABI有所不同,据我所知,它类似于API,但在二进制级别。它确保了不同应用程序的互操作性。但我真的不明白拥有或不拥有操作系统会以何种方式影响我的工具链。我唯一想到的是,在编译裸机软件时,库可能必须静态链接(是吗?),因为没有操作系统动态提供它们。我发现与该主题相关的大多数页面只是回答了如何使用工具链,而不是技术背景。我是机电一体化专业的学生,​​刚接触嵌入式系统,所以我在这个领域的经验有些有限。

linux - x86-64 SysV ABI 中参数和返回值寄存器的高位是否允许垃圾?

x86-64SysVABI指定了如何在寄存器中传递函数参数(在rdi中的第一个参数,然后是rsi等),以及如何将整数返回值传回(在rax和然后rdx对于非常大的值)。然而,我找不到的是,当传递小于64位的类型时,参数或返回值寄存器的高位应该是什么。例如,对于以下函数:voidfoo(unsignedx,unsignedy);...x将在rdi中通过和y在rsi,但它们只有32位。做rdi的高32位和rsi必须为零?直觉上,我会假设是的,但是codegenerated所有gcc、clang和icc都有特定的mov开始时的指令将高位清零,因此编译器似乎另有假设。同样,编译器似乎假定返回值的

linux - x86-64 SysV ABI 中参数和返回值寄存器的高位是否允许垃圾?

x86-64SysVABI指定了如何在寄存器中传递函数参数(在rdi中的第一个参数,然后是rsi等),以及如何将整数返回值传回(在rax和然后rdx对于非常大的值)。然而,我找不到的是,当传递小于64位的类型时,参数或返回值寄存器的高位应该是什么。例如,对于以下函数:voidfoo(unsignedx,unsignedy);...x将在rdi中通过和y在rsi,但它们只有32位。做rdi的高32位和rsi必须为零?直觉上,我会假设是的,但是codegenerated所有gcc、clang和icc都有特定的mov开始时的指令将高位清零,因此编译器似乎另有假设。同样,编译器似乎假定返回值的

c - 是否有原始的 linux 系统调用 API/ABI 文档

系统调用有man(2)页面,但这些页面描述了位于系统调用之上的C库(glibc)的行为。原始系统调用API/ABI是否记录在某处(UseTheSourceLuke除外)?我在手册页中看到了一些关于内核/libc之间差异的提及,但我没有感觉到记录这些差异是头等大事。我真正想说的是:C库是否被POLICY视为稳定/记录的LinuxAPI,并且内核的系统调用API/ABI被认为是不稳定的(可能会更改),因此有意未记录或低优先级?那么更改系统调用的内核开发人员会在glibc中进行变通吗?那么其他的libc呢?我能找到关于这个主题的历史讨论吗?编辑:所以ABI是稳定的,系统调用的行为也是如此,但

c - 是否有原始的 linux 系统调用 API/ABI 文档

系统调用有man(2)页面,但这些页面描述了位于系统调用之上的C库(glibc)的行为。原始系统调用API/ABI是否记录在某处(UseTheSourceLuke除外)?我在手册页中看到了一些关于内核/libc之间差异的提及,但我没有感觉到记录这些差异是头等大事。我真正想说的是:C库是否被POLICY视为稳定/记录的LinuxAPI,并且内核的系统调用API/ABI被认为是不稳定的(可能会更改),因此有意未记录或低优先级?那么更改系统调用的内核开发人员会在glibc中进行变通吗?那么其他的libc呢?我能找到关于这个主题的历史讨论吗?编辑:所以ABI是稳定的,系统调用的行为也是如此,但

c - 为什么在编译 Linux 内核和 uBoot 时使用 arm-linux-gnueabi-gcc 而不是 arm-none-eabi-gcc?

我在为ARMcortex-m设备以及Linux内核、uBoot和BeagleboneBlack(BBB)的应用程序编译裸机代码方面有一些经验(更多功能的ARM和MMU,适合那些生活在岩石下的人)。对我来说,应该使用arm-none-eabi-gcc编译cortex-m代码(因为没有操作系统)并且BBB的应用程序代码应该使用arm-linux-gnueabi-gcc编译(因为有是一个操作系统,可以对其进行系统调用,并可以使用程序加载器和共享对象。我不明白的是为什么uBoot和内核也应该用arm-linux-gnueabi-gcc编译。在我看来,uBoot至少是一个裸机程序,没有花哨的操作