双路物理CPU机器上安装Ubuntu并部署KVM以实现系统多开

在双路物理CPU机器上安装Ubuntu并部署KVM以实现系统多开,并追求性能最优,需要从硬件、宿主机系统、KVM配置、虚拟机配置等多个层面进行优化。

以下是详细的操作指南和优化建议:

阶段一:BIOS/UEFI 设置优化 (重启进入)

  1. 启用虚拟化技术:

    • Intel CPU: Intel VT-x (Virtualization Technology)

    • AMD CPU: AMD-V (SVM - Secure Virtual Machine)

    • 通常在 CPU Configuration 或 Advanced Settings 中。

  2. 启用 IOMMU (Input/Output Memory Management Unit):

    • Intel CPU: Intel VT-d (Virtualization Technology for Directed I/O)

    • AMD CPU: AMD-Vi

    • 这对于PCI设备直通 (passthrough) 非常重要,能显著提升某些VM的I/O性能。

  3. 禁用不必要的设备:

    • 如果某些板载设备(如串口、并口、不用的声卡)VM用不到,可以在BIOS中禁用,以释放中断资源。

  4. 内存设置:

    • 确保内存运行在支持的最高频率。

    • 如果支持,启用NUMA (Non-Uniform Memory Access)。双路CPU几乎必然是NUMA架构。

  5. 电源管理:

    • 将电源管理配置文件设置为 "高性能" (High Performance) 或类似选项。避免节能模式降低CPU频率。

    • 禁用C-states (CPU idle states) 或者使用 intel_idle.max_cstate=0 或 processor.max_cstate=0 内核参数(后续宿主机优化中会提到),以减少CPU唤醒延迟,但会增加功耗。需要权衡。

阶段二:Ubuntu Server 安装

  1. 选择最新LTS版本: 推荐使用最新的Ubuntu Server LTS版本(如22.04 LTS),以获得较新的内核和KVM/QEMU版本,通常包含性能改进和新特性。

  2. 最小化安装: 选择 "Minimal installation" 或只安装必要的核心组件,避免不必要的软件包和服务消耗资源。

  3. 磁盘分区:

    • OS盘: 建议使用SSD,分配足够的空间给 / (根目录) 和 /boot。

    • VM存储盘:

      • 高性能方案: 使用高速NVMe SSD或SSD RAID阵列。

      • 大容量方案: 可以使用HDD RAID,但性能会远低于SSD。

      • 分区策略:

        • LVM (Logical Volume Manager): 推荐使用LVM管理VM存储,方便动态调整、快照等。在LVM上创建逻辑卷来存放VM镜像。

        • 单独分区: 也可以直接使用单独的分区(如 /var/lib/libvirt/images 挂载到独立的高速磁盘分区)。

    • Swap分区: 如果物理内存充足(例如64GB+),可以设置较小的Swap(如4-8GB)或不设置,依赖物理内存。如果内存可能紧张,适当设置Swap。

阶段三:KVM及相关工具安装

sudo apt update
sudo apt upgrade -y# 安装KVM及管理工具
sudo apt install -y qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virt-manager cpu-checker# 检查KVM是否可用
sudo kvm-ok
# 输出应包含 "KVM acceleration can be used"# 将当前用户添加到libvirt和kvm组,以便无需sudo管理VM
sudo adduser $(whoami) libvirt
sudo adduser $(whoami) kvm
# 注意:需要重新登录或重启使组更改生效# 启动并设置libvirtd服务开机自启
sudo systemctl enable --now libvirtd
sudo systemctl status libvirtd

content_copydownload

Use code with caution.Bash

阶段四:宿主机系统性能优化

  1. CPU调速器 (CPU Governor):

    • 将其设置为 performance 模式,让CPU以最高频率运行。

    sudo apt install cpufrequtils -y
    echo 'GOVERNOR="performance"' | sudo tee /etc/default/cpufrequtils
    sudo systemctl disable ondemand # 如果存在
    sudo systemctl restart cpufrequtils # 或重启系统
    # 验证
    cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor

    content_copydownload

    Use code with caution.Bash
  2. NUMA优化: 双路CPU系统是NUMA架构,优化NUMA至关重要。

    • 安装NUMA工具:

      sudo apt install numactl -y

      content_copydownload

      Use code with caution.Bash
    • 查看NUMA拓扑:

      numactl --hardware
      lscpu | grep NUMA

      content_copydownload

      Use code with caution.Bash
    • 绑定服务到NUMA节点: 尽量将libvirtd服务和相关的qemu-system-*进程绑定到特定的NUMA节点,或者至少让它们均匀分布。通常libvirtd自身不需要严格绑定,但它启动的QEMU进程(即VM)需要。

    • IRQ平衡: 确保irqbalance服务运行,它会尝试将硬件中断分配到不同的CPU核心,避免单核瓶颈。

      sudo systemctl enable --now irqbalance

      content_copydownload

      Use code with caution.Bash

      对于高性能网络和存储,有时需要手动调整IRQ亲和性,将特定设备的IRQ绑定到VM vCPU所在的NUMA节点的CPU核心上。

  3. 内核参数优化 (GRUB):

    • 编辑 /etc/default/grub 文件,修改 GRUB_CMDLINE_LINUX_DEFAULT 行。

    • 常用参数:

      • intel_iommu=on 或 amd_iommu=on (如果BIOS中已启用,这里可以再次确认或强制启用,对PCI直通重要)

      • isolcpus=<cpu_list>: 隔离部分CPU核心专门给VM使用,宿主机不调度普通进程到这些核心。需要仔细规划,例如将某些核心完全留给特定高性能VM。

      • nohz_full=<cpu_list>: 针对isolcpus指定的CPU核心禁用内核时钟滴答,减少VM抖动。

      • rcu_nocbs=<cpu_list>: 减少RCU回调对隔离CPU的干扰。

      • transparent_hugepage=never 或 transparent_hugepage=madvise:

        • never: 完全禁用透明大页,手动为VM配置静态大页 (HugePages) 性能更好。

        • madvise: 仅在应用程序通过madvise()请求时使用THP,是一个折中。

        • 对于KVM,如果打算使用静态HugePages,则应禁用THP。

      • elevator=noop 或 elevator=none (对于SSD/NVMe): 设置I/O调度器为 noop (或 none for NVMe),因为SSD有自己的内部调度逻辑。

        • 也可以通过udev规则设置: echo noop > /sys/block/sdX/queue/scheduler

    • 示例:
      GRUB_CMDLINE_LINUX_DEFAULT="quiet splash intel_iommu=on transparent_hugepage=never elevator=none"

    • 更新GRUB后生效:

      sudo update-grub
      sudo reboot

      content_copydownload

      Use code with caution.Bash
  4. HugePages (静态大页):

    • 减少TLB (Translation Lookaside Buffer) miss,提高内存密集型应用性能。

    • VM内存应配置为使用HugePages。

    • 计算所需大页数量: (VM总内存 / HugePage大小)。常见HugePage大小为2MB或1GB。

      # 查看支持的HugePage大小
      cat /proc/meminfo | grep Hugepagesize
      # 假设Hugepagesize: 2048 kB (2MB)
      # 如果要给VM分配32GB内存,需要 32 * 1024 / 2 = 16384 个2MB大页
      # 预留 (在 /etc/sysctl.conf 或 .conf 文件中)
      # sudo sysctl -w vm.nr_hugepages=16384
      # 或在启动时通过内核参数:hugepages=16384
      # 永久生效:
      echo "vm.nr_hugepages=16384" | sudo tee -a /etc/sysctl.conf
      sudo sysctl -p

      content_copydownload

      Use code with caution.Bash
    • 确保在VM的XML配置中启用HugePages。

  5. 网络优化:

    • 使用桥接网络 (Bridged Networking): virsh net-define, virsh net-start, virsh net-autostart 或使用 virt-manager 创建。桥接提供接近物理网络的性能,VM像独立主机一样在局域网中。

    • vhost-net: 确保启用。KVM默认会使用vhost-net,它将网络包处理移到内核空间,减少上下文切换,提高性能。

      lsmod | grep vhost_net # 应该能看到模块加载

      content_copydownload

      Use code with caution.Bash
    • SR-IOV (Single Root I/O Virtualization): 如果网卡和主板支持,这是网络性能的极致。它允许物理网卡虚拟出多个VF (Virtual Function),直接分配给VM,VM拥有近乎独占的网卡硬件资源。配置较复杂。

阶段五:虚拟机 (VM) 创建与优化

使用 virt-manager (图形化) 或 virsh (命令行) 创建和管理VM。以下是优化点,主要通过编辑VM的XML配置文件 (virsh edit <vm_name>) 实现。

  1. CPU配置 (<vcpu>, <cputune>):

    • CPU模式 (<cpu mode='...' ...>):

      • host-passthrough: 将宿主机CPU特性完整透传给VM,通常性能最好,但VM迁移可能受限于目标主机的CPU型号。

      • host-model: 模拟宿主机CPU型号,提供较好的性能和一定的迁移兼容性。

      • 避免使用通用CPU型号 (如 qemu64, kvm64),除非为了最大化迁移兼容性。

    • vCPU数量 (<vcpu placement='static' current='X'>X</vcpu>): 按需分配,不要过度分配。current属性设为与最大vcpu数一致。

    • CPU钉扎/亲和性 (<vcpupin>):

      • 关键优化! 将VM的vCPU绑定到宿主机的特定物理核心上,特别是绑定到同一NUMA节点的核心上。

      • 避免VM的vCPU在不同NUMA节点的物理核心间迁移,这会导致严重的性能下降。

      • 示例 (假设VM有2个vCPU,要绑定到物理CPU 0和1):

        <cputune><vcpupin vcpu="0" cpuset="0"/><vcpupin vcpu="1" cpuset="1"/><!-- 如果有更多vCPU和物理核心,继续添加 -->
        </cputune>

        content_copydownload

        Use code with caution.Xml
    • NUMA感知 (<numatune>):

      • 将VM的内存也分配到其vCPU所在的NUMA节点上。

      • 示例 (VM内存分配到宿主机NUMA节点0):

        <numatune><memory mode="strict" nodeset="0"/><!-- 如果VM本身也模拟NUMA,则需要更复杂的配置 -->
        </numatune>

        content_copydownload

        Use code with caution.Xml
      • 如果VM本身也需要模拟NUMA架构(例如,大型数据库VM),则需要更细致的配置,将VM的虚拟NUMA节点映射到宿主机的物理NUMA节点。

        <cpu ...><numa><cell id='0' cpus='0-1' memory='2048' unit='MiB'/> <!-- VM的NUMA节点0用vCPU 0-1,2GB内存 --><!-- ... --></numa>
        </cpu>
        <numatune><memnode cellid='0' mode='strict' nodeset='0'/> <!-- VM节点0的内存来自宿主机节点0 -->
        </numatune>

        content_copydownload

        Use code with caution.Xml
  2. 内存配置 (<memory>, <memoryBacking>):

    • 分配大小: 按需分配。

    • HugePages:

      <memoryBacking><hugepages/>
      </memoryBacking>

      content_copydownload

      Use code with caution.Xml

      确保宿主机已配置足够的HugePages。

    • 内存锁定 (<locked/>): 防止VM内存被交换到磁盘。

      <memoryBacking><hugepages/><locked/>
      </memoryBacking>

      content_copydownload

      Use code with caution.Xml
  3. 磁盘I/O优化 (<disk>):

    • 磁盘总线 (<disk type='file' device='disk'> <driver name='qemu' type='...' cache='...' io='...'/> ... </disk>):

      • virtio-blk: 传统的半虚拟化块设备,性能不错。

      • virtio-scsi: 更现代,支持更多SCSI特性(如TRIM/UNMAP),通常推荐用于SSD。需要 <controller type='scsi' model='virtio-scsi'/>。

    • 镜像格式 (type):

      • raw: 性能最好,无额外开销,但不支持快照、动态扩展等特性。

      • qcow2: 功能丰富(快照、写时复制、压缩、加密),但有性能开销。

        • 优化qcow2:

          • preallocation=metadata 或 preallocation=falloc (创建时预分配,减少碎片)。

          • lazy_refcounts=on (新版本qemu)。

    • 缓存模式 (cache):

      • none: 宿主机不缓存,VM直接访问存储,适合VM内部有良好缓存机制或数据库等应用。通常是SSD的最佳选择。

      • writethrough: 写操作同时写入宿主机缓存和物理磁盘,数据安全,但写入慢。

      • writeback: 写操作先写入宿主机缓存,后异步写入物理磁盘,写入快,但宿主机崩溃可能丢数据。

      • directsync: 类似none,但使用O_DIRECT | O_SYNC。

      • unsafe: 仅用于测试,完全依赖宿主机缓存,不保证数据一致性。

    • I/O模式 (io):

      • native: 使用Linux AIO (Asynchronous I/O),通常是最佳性能选择。

      • threads: 使用QEMU用户空间的线程池处理I/O。

    • I/O线程 (<iothreads>X</iothreads>, <iothreadids>):

      • 为VM分配专用的I/O处理线程,减少主QEMU线程的I/O压力。

      • 示例 (分配1个iothread):

        <iothreads>1</iothreads>
        ...
        <disk type='file' device='disk'><driver name='qemu' type='qcow2' cache='none' io='native'/><source file='/path/to/vm.qcow2'/><target dev='vda' bus='virtio'/><iotune> <!-- 可选,精细控制 --><total_bytes_sec>...</total_bytes_sec><total_iops_sec>...</total_iops_sec></iotune><address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/><iothread_ids> <!-- 仅virtio-scsi支持绑定到特定iothread --><iothread id="1"/></iothread_ids>
        </disk>

        content_copydownload

        Use code with caution.Xml
      • 对于virtio-blk,可以通过 driver ... queue_size=N 调整队列深度,并结合 <blkiotune> 进行IO限速。

    • 块大小 (<blockio logical_block_size='512' physical_block_size='4096'/>): 如果底层物理磁盘是4K扇区 (Advanced Format),对齐VM的块大小可以提高性能。

  4. 网络I/O优化 (<interface>):

    • 设备模型 (<model type='virtio'/>): 始终使用 virtio (virtio-net),这是半虚拟化网卡,性能远超模拟的 e1000 或 rtl8139。

    • 多队列Virtio-net (queues='N'):

      • 允许VM有多个收发队列,每个队列可以由不同的vCPU处理,提高网络吞吐和并发。

      • N 通常设置为VM的vCPU数量,但不超过网卡物理队列数(如果是SR-IOV)或宿主机支持的队列数。

      • 示例:

        <interface type='bridge'><source bridge='br0'/><model type='virtio'/><driver name='vhost' queues='4'/> <!-- 假设VM有4个vCPU --><address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
        </interface>

        content_copydownload

        Use code with caution.Xml
    • SR-IOV (如前所述): 如果硬件支持,配置 <interface type='hostdev' managed='yes'> 并指定PF的VF。

  5. 显卡 (<video>):

    • 对于服务器VM,通常不需要强大的图形性能。使用 virtio 显卡模型,或 none (如果通过串行控制台管理)。

    • <model type='virtio' heads='1' primary='yes'/>

    • 如果完全不需要图形界面,可以移除<graphics>和<video>部分,仅保留<console>。

阶段六:虚拟机内部 (Guest OS) 优化

  1. 安装Virtio驱动: 现代Linux发行版通常自带Virtio驱动。Windows VM需要手动安装Virtio驱动 (从Fedora项目下载ISO)。

  2. Guest OS调优:

    • 关闭不必要的服务。

    • I/O调度器: 对于virtio-blk或virtio-scsi设备,在VM内部也建议使用 noop 或 none (NVMe) 或 mq-deadline (新内核)。

      # 在VM内部执行
      echo 'noop' > /sys/block/vda/queue/scheduler # 假设VM磁盘是vda

      content_copydownload

      Use code with caution.Bash
    • 网络参数: 调整TCP/IP栈参数,如增大缓冲区等,根据应用类型而定。

    • 时间同步: 确保VM时间与宿主机同步,KVM通常会自动处理,但检查一下没坏处 (chrony 或 systemd-timesyncd)。

阶段七:持续监控与调整

  1. 宿主机监控:

    • top, htop (查看CPU、内存占用)

    • vmstat, iostat, sar (系统活动、I/O统计)

    • numastat -m <qemu_pid> (查看VM在NUMA节点间的内存分布)

    • perf top -p <qemu_pid> (分析VM进程的热点函数)

    • virsh domstats <vm_name> (获取VM的各种统计信息)

    • virt-top (类似top,但针对VM)

  2. VM内部监控: 使用VM内部的监控工具。

  3. 基准测试: 在优化前后进行基准测试(如 fio for disk I/O, iperf for network, sysbench for CPU/memory),量化优化效果。

  4. 迭代优化: 性能优化是一个持续的过程。根据监控结果和应用需求,不断调整配置。

重要注意事项:

  • ** workload特性:** 不同的VM应用(如Web服务器、数据库、计算密集型任务)对资源的需求和瓶颈点不同,优化策略应有所侧重。

  • 稳定性优先: 不要为了极致性能而牺牲稳定性。某些激进的优化可能导致系统不稳定。

  • 逐步调整: 每次只修改一个或少数几个相关参数,测试效果,避免一次性改动过多难以定位问题。

  • 备份: 在进行重大配置更改前,备份宿主机和VM的重要数据及配置文件。

  • 文档: 记录你的优化步骤和参数,方便后续维护和问题排查。

对于双路CPU,NUMA亲和性 (CPU和内存绑定到同一NUMA节点) 是最关键的优化点之一。其次是使用Virtio驱动和设备,然后是磁盘I/O (缓存模式、I/O模式、镜像格式) 和网络I/O (多队列、vhost-net)。HugePages对内存密集型应用也非常有益。

遵循这些步骤,你的KVM环境应该能达到相当高的性能水平。祝你成功!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/pingmian/82738.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

adb查看、设置cpu相关信息

查内存 adb shell dumpsys meminfo查CPU top -m 10打开 system_monitor adb shell am start -n eu.chainfire.perfmon/.LaunchActivity设置CPU的核心数 在/sys/devices/system/cpu目录下可以看到你的CPU有几个核心&#xff0c;如果是双核&#xff0c;就是cpu0和cpu1&#xff0c…

【Unity基础】Unity新手实战教程:用ScriptableObject控制Cube颜色

目录 项目概述&#x1f6e0;️ 完整操作步骤&#xff08;10分钟内完成&#xff09;步骤1&#xff1a;创建ScriptableObject类步骤2&#xff1a;创建颜色配置资产步骤3&#xff1a;创建Cube控制器步骤4&#xff1a;设置场景和Cube步骤5&#xff1a;添加简单UI提示步骤6&#xff…

One Year~

入局 作为科班学生&#xff0c;没事就在CSDN闲逛&#xff0c;只作为旁观者的身份去体会别人的好文。当时也没想着说去自己写一些博客记录学习过程。相信大多数同学和我有一样的心理。 但在看鱼皮哥的课程时&#xff0c;发现他有着写文档和博客的习惯&#xff0c;整理自己的思路…

【Redis】第3节|深入理解Redis线程模型

一、Redis基础认知 &#xff08;一&#xff09;定义与定位 Redis&#xff08;Remote Dictionary Server&#xff09;是开源高性能键值数据库&#xff0c;核心特点如下&#xff1a; 数据结构丰富&#xff1a;支持字符串、哈希、列表、集合、有序集合等复杂数据类型&#xff0…

vben-admin 2.8.0 版本修改 axios响应处理逻辑

此前端框架下的 Axios 在后端返回的结果老是无法正常解析&#xff0c;找到他源码的封装类&#xff0c;修正这个问题 文件位于 src\utils\http\axios\index.ts 修改前 transformResponseHook: (res: AxiosResponse<Result>, options: RequestOptions) > {const { t }…

深入理解JavaScript设计模式之原型模式

目录 前言引入原型模式头脑风暴传统方式 vs 原型模式实战案例&#xff1a;飞机大战中的分身术 原型模式实现的关键秘密实战演练&#xff1a;造一架能分身的飞机克隆是创建对象的手段原型模式&#xff1a;轻装上阵的造物术 原型编程范型的一些规则原型编程的四大门规&#xff1a…

【数据库】概述(纯理论)

数据库系统引论 数据管理系统的发展 数据管理&#xff1a;对数据分类、组织、编码、存储、检索、维护 发展&#xff1a;人工管理、文件系统、数据库系统 40-50年代 人工管理 数据不保存&#xff0c;没有专门软件管理数据&#xff0c;应用程序完全依赖于数据&#xff0c;数据…

语音合成之十七 语音合成(TTS)中文自然度:问题、成因、解决方案

语音合成&#xff08;TTS&#xff09;中文自然度&#xff1a;问题、成因、解决方案 中文TTS系统基本架构中文TTS常见问题深度剖析与解决方案音色跳变成因分析解决方案 声调与重读错误成因分析业界解决方案 漏读与断句错误成因分析业界解决方案 在跨语言TTS系统比较中&#xff0…

我在 Linux 进程管理中踩过的坑:僵尸、瞬时与不可中断进程实战实录

作为运维老鸟&#xff0c;我曾在 Linux 进程管理上栽过不少跟头。记得第一次遇到满屏僵尸进程时&#xff0c;服务器直接卡到连 SSH 都登不上&#xff0c;看着ps命令里一排排刺眼的Z状态进程&#xff0c;手心直冒冷汗。后来又碰到过瞬时进程搞崩日志系统&#xff0c;明明监控显示…

【设计模式】简单工厂模式,工厂模式,抽象工厂模式,单例,代理,go案例区分总结

工厂模式三种类型&#xff1a; 一、简单工厂模式&#xff08;Simple Factory&#xff09; 定义&#xff1a; 用一个工厂类&#xff0c;根据传入的参数决定创建哪一种具体产品类实例。 面试说法&#xff1a; 由一个统一的工厂创建所有对象&#xff0c;增加新产品时需要修改工…

某标杆房企BI平台2.0升级实践

当房地产行业从“规模竞赛”转向“精益运营”&#xff0c;数字化转型成为破局关键。某千亿房企携手亿信华辰&#xff0c;以“用数据重构业务价值链”为目标&#xff0c;历经6个月完成BI平台战略性升级。在这场从“数据可视化”到“决策智能化”的跃迁中&#xff0c;亿信华辰ABI…

Lua 脚本在 Redis 中的运用-24 (使用 Lua 脚本实现原子计数器)

实践练习:使用 Lua 脚本实现原子计数器 实现原子计数器是许多应用程序中的常见需求,例如跟踪网站访问量、限制 API 请求或管理库存。虽然 Redis 提供了 INCR 命令用于递增整数,但在复杂场景或与其他操作结合时直接使用它可能并不足够。本课程探讨了如何在 Redis 中利用 Lua…

Rust 学习笔记:使用迭代器改进 minigrep

Rust 学习笔记&#xff1a;使用迭代器改进 minigrep Rust 学习笔记&#xff1a;使用迭代器改进 minigrep不使用 clone&#xff0c;而使用迭代器使用迭代器适配器使代码更清晰在循环或迭代器之间进行选择 Rust 学习笔记&#xff1a;使用迭代器改进 minigrep 前情提要&#xff1…

el-table配置表头固定而且高度变化

根据官网提示只要在 el-table 元素中定义了 height 属性&#xff0c;即可实现固定表头的表格&#xff0c;而不需要额外的代码。 如果你想既要固定表头&#xff0c;又要下方表格高度自适应&#xff0c;可以设置为 height"100%" &#xff1a; 然后外层设置scroll:

弱光环境下如何手持相机拍摄静物:摄影曝光之等效曝光认知

写在前面 博文内容为一次博物馆静物拍摄笔记的简单总结内容涉及&#xff1a;弱光环境拍摄静物如何选择&#xff0c;以及等效曝光的认知理解不足小伙伴帮忙指正 &#x1f603;,生活加油 我看远山&#xff0c;远山悲悯 持续分享技术干货&#xff0c;感兴趣小伙伴可以关注下 _ 采…

ARM笔记-ARM伪指令及编程基础

第四章 ARM伪指令及编程基础 4.1 伪指令概述 4.1.1 伪指令定义 人们设计了一些专门用于指导汇编器进行汇编工作的指令&#xff0c;由于这些指令不形成机器码指令&#xff0c;它们只是在汇编器进行汇编工作的过程中起作用&#xff0c;所以被叫做伪指令。 4.1.2 伪指令特征 …

智能手表怎么申请欧盟EN 18031认证

智能手表申请欧盟 EN 18031 认证&#xff08;针对消费类物联网设备的网络安全标准&#xff09;的流程与智能门锁类似&#xff0c;但需结合手表的功能特性&#xff08;如数据交互、定位、支付等&#xff09;调整合规重点。以下是具体流程和关键要点&#xff1a; 一、标准适配与…

算法-全排列

1、全排列函数的使用 举例&#xff1a;{1,2,3}的全排列 #include<iostream> #include<bits/stdc.h> using namespace std; typedef long long ll; int main(){ll a[3] {1, 2, 3};do{for (ll i 0; i < 3;i){cout << a[i] << " ";}cout…

面试加分秘籍:校招数据倾斜场景下的SQL优化方案

校招面试经常会问大家有没有过调优的经验&#xff0c;相信大家的回答基本都是往数据倾斜和小文件问题这两方面回答&#xff0c;对于数据倾斜相信大部分同学对热key打散或null值引发的倾斜已经非常熟悉&#xff0c;但这些内容面试官也是听腻了&#xff0c;希望大家在面试时候讲一…

Elasticsearch索引机制与Lucene段合并策略深度解析

引言 在现代分布式搜索引擎Elasticsearch中&#xff0c;文档的索引、更新和删除操作不仅是用户交互的核心入口&#xff0c;更是底层存储架构设计的关键挑战。本文围绕以下核心链路展开&#xff1a; 文档生命周期管理&#xff1a;从客户端请求路由到分片定位&#xff0c;从内存…