鲲鹏社区首页
中文
注册
开发者
我要评分
获取效率
正确性
完整性
易理解
在线提单
论坛求助

Linux核隔离配置

Linux核隔离介绍

Linux核隔离是一种操作系统级别的技术,用于将不同的进程或资源隔离开来,以提供更高的安全性和可靠性。它通过使用Linux内核的特性和机制,将不同的进程或资源限制在一个独立的环境中,使它们无法干扰或影响其他进程或资源。

核隔离可以应用于多个方面,包括进程隔离、文件系统隔离、网络隔离和内存隔离等。通过使用容器技术,如Docker和Kubernetes,可以更方便地实现这些隔离。

核隔离的好处包括:

  • 安全性:通过将进程或资源隔离开来,可以防止恶意进程对其他进程或资源造成损害。
  • 可靠性:由于进程或资源之间的隔离,一个进程或资源的故障不会影响其他进程或资源的正常运行。
  • 性能优化:通过合理地分配资源,可以提高系统的性能和效率。

核隔离配置步骤

  1. 修改grub启动项。

    vim /boot/efi/EFI/openEuler/grub.cfg

    找到关键字“/vmlinuz”所在行,在行末尾添加以下内容:

    irqaffinity=37,75,113,151,189,227,265,303,341,379,417,455,493,531,569,607 nohz_full=0-36,38-74,76-112,114-150,152-188,190-226,228-264,266-302,304-340,342-378,380-416,418-454,456-492,494-530,532-568,570-606 isolcpus=nohz,domain,managed_irq,0-36,38-74,76-112,114-150,152-188,190-226,228-264,266-302,304-340,342-378,380-416,418-454,456-492,494-530,532-568,570-606 rcu_nocbs=0-36,38-74,76-112,114-150,152-188,190-226,228-264,266-302,304-340,342-378,380-416,418-454,456-492,494-530,532-568,570-606 
    disable_sdei_nmi_watchdog enhanced_isolcpus

    当前鲲鹏920专业版上每个节点共2个CPU,每个CPU 8个NUMA,每个NUMA 38核,整机共608核,核隔离参数考虑配置为每个NUMA的最后2个核为隔离核,隔离核的优先级为“irqaffinity”,使内核进程/中断优先调度到隔离核上,减少系统对计算核的影响。

    同时,因配置隔离核后,若程序使用MPI顺序绑核会导致部分计算进程在隔离核上运行,影响程序整体性能。在该配置下,MPI可以指定rankfile,显式指定进程绑定的核。

  2. reboot重启节点,使核隔离参数生效。
  3. 重启后执行 cat /proc/cmdline,确认参数是否添加成功。
  4. 执行初始化脚本,将系统中断/服务绑定到隔离核,并配置性能配置。
    #!/bin/bash
    
    # 禁用自动优化Linux系统硬件中断CPU分配的服务,强制绑定到隔离核
    systemctl stop irqbalance && systemctl mask irqbalance 
    
    #设置实时任务可以使用全部CPU时间
    echo -1 > /proc/sys/kernel/sched_rt_runtime_us
    
    #设置khugepaged 后台线程在合并页面时的碎片整理行为为不整理碎片 
    echo 0 >  /sys/kernel/mm/transparent_hugepage/khugepaged/defrag
    
    #设置进程分配内存时的即时行为为从不整理碎片
    echo never > /sys/kernel/mm/transparent_hugepage/defrag
    
    #设置透明大页内存分配策略为系统全局开启
    echo always > /sys/kernel/mm/transparent_hugepage/enabled
    
    #禁用自动NUMA平衡
    echo 0 > /proc/sys/kernel/numa_balancing 
    
    ps -aux | grep rcu_sched | grep -v 'grep' | awk  '{print $2}' > ~/.tmp 
     cat ~/.tmp | while read line; do taskset -pc 37,75,113,151,189,227,265,303,341,379,417,455,493,531,569,607 $line; done 
      
     ps -aux | grep kswapd | grep -v 'grep' | awk  '{print $2}' > ~/.tmp  
     cat ~/.tmp | while read line; do taskset -pc 37,75,113,151,189,227,265,303,341,379,417,455,493,531,569,607 $line; done  
      
     ps -aux | grep kcompactd  | grep -v 'grep' | awk  '{print $2}' > ~/.tmp  
     cat ~/.tmp | while read line; do taskset -pc 37,75,113,151,189,227,265,303,341,379,417,455,493,531,569,607 $line; done  
      
     ps -aux | grep rcuog | grep -v 'grep' | awk  '{print $2}' > ~/.tmp 
     cat ~/.tmp | while read line; do taskset -pc 37,75,113,151,189,227,265,303,341,379,417,455,493,531,569,607 $line; done 
      
     ps -aux | grep rcuos | grep -v 'grep' | awk  '{print $2}' > ~/.tmp 
     cat ~/.tmp | while read line; do taskset -pc 37,75,113,151,189,227,265,303,341,379,417,455,493,531,569,607 $line; done
    
    # 配置所有核的模式为performance
    for core_id in 0-607
    do 
        echo performance > /sys/devices/system/cpu/cpufreq/policy${core_id}/scaling_governor 
    done