1. 程式人生 > >Linux核心與SMP(對稱多處理)

Linux核心與SMP(對稱多處理)

什麼 是SMP?

SMP的全稱是“對稱多處理“(Symmetrical Multi-Processing)技術,是指在一個計算機上彙集了一組處理器(多CPU),各CPU之間共享記憶體子系統以及匯流排結構。它是相對非對稱多處理技術而言的、應用十分廣泛的並行技術。在這種架構中,一臺電腦不再由單個CPU組成,而同時由多個處理器執行作業系統的單一複本,並共享記憶體和一臺計算機的其他資源。雖然同時使用多個CPU,但是從管理的角度來看,它們的表現就像一臺單機一樣。系統將任務佇列對稱地分佈於多個CPU之上,從而極大地提高了整個系統的資料處理能力。所有的處理器都可以平等地訪問記憶體、I/O和外部中斷。在對稱多處理系統中,系統資源被系統中所有CPU共享,工作負載能夠均勻地分配到所有可用處理器之上。

另外你可能需要理解就是Non-Uniform Memory Access(NUMA)架構。每個處理器擁有自己的記憶體,訪問共享記憶體時具有不同的訪問延遲。

“可以通過多種方法提高 Linux 系統的效能,而其中最流行的一種是提高處理器的效能。一個明顯的解決方案是使用具有更快時鐘頻率的處理器,但是對於任何特定技術來講都存在一個物理極限,時鐘頻率也有這樣的極限。當達到那個極限時,可使用 “越多越好” 的方法應用多處理器。不幸的是,多處理器的效能並不與單個處理器效能的總和成線性比例。”

Linux核心與SMP

Linux核心編譯時,CONFIG_SMP配置項控制核心是否支援SMP.

現在的核心包從2.4.23以後就沒有專門的SMP核心包,在安裝Linux系統時,會自動監測,如果檢查到了多個CPU或多核,超執行緒時,會自動安裝兩個Linux核心,其中一個是帶SMP的,在GRUB引導列表裡會出現兩個核心選擇,預設使用SMP引導.

如:

[[email protected] ~]# cat /boot/grub/grub.conf
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE:  You have a /boot partition.  This means that
#          all kernel and initrd paths are relative to /boot/, eg.
#          root (hd0,0)
#          kernel /vmlinuz-version ro root=/dev/sda3
#          initrd /initrd-version.img
#boot=/dev/sda
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title Red Hat Enterprise Linux AS (2.6.9-67.ELsmp)
	root (hd0,0)
	kernel /vmlinuz-2.6.9-67.ELsmp ro root=LABEL=/12
	initrd /initrd-2.6.9-67.ELsmp.img
title Red Hat Enterprise Linux AS-up (2.6.9-67.EL)
	root (hd0,0)
	kernel /vmlinuz-2.6.9-67.EL ro root=LABEL=/12
	initrd /initrd-2.6.9-67.EL.img
Redhat、CentOS、SUSE安裝時都有支援smp的核心。
版本號-default: SUSE Linux kernel for uniprocessor machines <---- 預設選項,支援單處理器機器
  版本號-smp: SUSE Linux kernel that supports symmetric multiprocessing (multiple processor machines) and up to 4 GB of RAM <---- 支援4GB記憶體的對稱
多處理器機器
  版本號-bigsmp: SUSE Linux kernel that supports symmetric multiprocessing and up to 64 GB of RAM <---- 支援64GB記憶體的對稱多處理器機器

  Red Hat Linux/CentOS

  版本號.EL: Red Hat Linux kernel for uniprocessor machines <---- 支援單處理器機器
  版本號.ELhugemem: Red Hat Linux kernel that supports up to 64 GB of RAM <---- 支援64GB記憶體的對稱多處理器機器
  版本號.ELsmp: Red Hat Linux kernel that supports symmetric multiprocessing (multiple processor machines) <---- 對稱多處理器機器

檢視CPU資訊

[[email protected]~]# cat /proc/cpuinfo
processor	: 0
vendor_id	: GenuineIntel
cpu family	: 15
model		: 3
model name	: Intel(R) Xeon(TM) CPU 3.00GHz
stepping	: 4
cpu MHz		: 3000.605
cache size	: 1024 KB
physical id	: 0
siblings	: 2
core id		: 0
cpu cores	: 1
fdiv_bug	: no
hlt_bug		: no
f00f_bug	: no
coma_bug	: no
fpu		: yes
fpu_exception	: yes
cpuid level	: 5
wp		: yes
flags		: fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe lm constant_tsc pni monitor ds_cpl cid xtpr
bogomips	: 6003.74

processor	: 1
vendor_id	: GenuineIntel
cpu family	: 15
model		: 3
model name	: Intel(R) Xeon(TM) CPU 3.00GHz
stepping	: 4
cpu MHz		: 3000.605
cache size	: 1024 KB
physical id	: 0
siblings	: 2
core id		: 0
cpu cores	: 1
fdiv_bug	: no
hlt_bug		: no
f00f_bug	: no
coma_bug	: no
fpu		: yes
fpu_exception	: yes
cpuid level	: 5
wp		: yes
flags		: fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe lm constant_tsc pni monitor ds_cpl cid xtpr
bogomips	: 6000.36

[[email protected] ~]# grep -c ^processor /proc/cpuinfo
2

Linux核心報錯與SMP

在國外論壇上看到有人說他的伺服器核心報錯如下:

kernel panic – not syncing: Fatal exception in interrupt
BUG: warning at arch/i386/kernel/smp.c:547/smp_call_function()

最後得知他的伺服器只有一塊CPU。可以在grub設定啟動不啟用SMP。

解決方法:

#vi /boot/grub/grub.conf
title=Linux
root (hd0,0)
kernel /boot/vmlinuz ... nosmp
initrd /boot/initrd ...
kernel行新增nosmp引數

相關推薦

Linux核心SMP對稱處理

什麼 是SMP? SMP的全稱是“對稱多處理“(Symmetrical Multi-Processing)技術,是指在一個計算機上彙集了一組處理器(多CPU),各CPU之間共享記憶體子系統以及匯流排結構。它是相對非對稱多處理技術而言的、應用十分廣泛的並行技術。在這種架構中

Linux核心完全註釋0.11版DAY2

fs目錄是檔案系統實現程式的目錄,包含17個C語言程式。這些程式可分為四個部分:高速緩衝區管理、底層檔案操作、檔案資料訪問和檔案高層函式。核心檔案buffer.c是高速緩衝區程式,因為檔案系統資料訪問都需要首先讀取到高速緩衝區。                       

深入理解linux核心讀書筆記第三章

1.  程序是程式執行時的一個例項。 2. 從核心的角度看,程序是系統進行資源分配的實體。 3. linux 通過輕量級程序來支援多執行緒應用,每一個輕量級程序對應一個執行緒。    執行緒之間共享地址空間,開啟的檔案等資源,核心對每一個輕量級程序進行單獨排程。 4. 一個

線程、對稱處理和微內核OS 筆記三

復雜 另一個 相同 構造 按順序 技術 多進程 優先級 特權 線程、對稱多處理 ? 這一部分繼續深入探討與進程管理相關的高級概念並了解多處理機的對稱多處理技術。 進程和線程 到目前為止提出的進程的概念包含兩個特點: 資源所有權 存放進程映像的虛擬地址空間 調度/執行

linux 核心模組程式設計之編譯個原始檔

編譯擁有多個原始檔的核心模組的方式和編譯一個原始檔的方式差不多,我們先來看下我們需要的檔案都有哪些。 首先是main.c檔案 #include <linux/module.h> #include <linux/init.h> MODULE_LICENSE

第四章—執行緒、對稱處理和微核心【計算機作業系統】

4.1 表3.5列出了在一個沒有執行緒的作業系統中程序控制塊的基本元素。對於多執行緒系統,這些元素中那些可能屬於執行緒控制塊,那些可能屬於程序控制塊? 這對於不同的系統來說通常是不同的,但一般來說,程序是資源的所有者,而每個執行緒都有它自己的執行狀態。關於表3.5中的每一項的一些結論如

易學筆記-系統分析師考試-第6章 系統配置效能評價/6.6 處理機系統/6.6.3 對稱處理結構

SMP(共享儲存多處理機) 特點:有一個統一共享的SM 共享儲存模型 均勻儲存器存取模型(UMA: Uniform Memory Access) 特點 所有儲存器被所有處理機均勻共享 所有處理機對所有儲存字具有相同的存取時間 每臺處理機可以有私用快取記憶體

linux核心排程演算法3--核系統的負載均衡

多核CPU現在很常見,那麼問題來了,一個程式在執行時,只在一個CPU核上執行?還是交替在多個CPU核上執行呢?LINUX核心是如何在多核間排程程序的呢?又是核心又是CPU核,兩個核有點繞,下面稱CPU處理器來代替CPU核。 實際上,如果你沒有對你的程序做過特殊處理的話,L

例說linux核心應用資料通訊:對映裝置核心空間到使用者態

#include <linux/module.h> #include <linux/types.h> #include <linux/fs.h> #include <linux/errno.h> #include <linux/mm.h> #incl

例說linux核心應用資料通訊:proc虛擬檔案系統

下面是一個簡單使用proc的示例,應用上面傳入資料,核心經過處理之後,應用再獲取經過處理的資料:#include <linux/init.h> #include <linux/module.h> #include <linux/kernel.h> #include <

Java調用Linux命令cd的處理

time wait adl 連接 ktr lose exce 簡單 res 一、Java調用Linux系統的命令非常簡單 這是一個非常常用的調用方法示例: 1 public String executeLinuxCmd(String cmd) { 2

linux應用web

linux運維web服務器1、卸載原來已經存在的httpd2、插入光盤:Benet 5.0所需軟件\linux安全及高級應用\rhel-server-6.5-x86_64-dvd.iso3、源碼編譯安裝httpd,下圖為: 1)解包 2)配置4、編譯和安裝下圖為安裝編譯和安裝過程中的狀態,這裏將會等待幾

Linux核心核心模組

  核心模組與相依性 /lib/modules/$(uname -r)/kernel /lib/modules/$(uname -r)/modules.dep  儲存各個模組相依性 lsmod 查詢模組資訊,核心模組副檔名以.

《鳥哥的linux私房菜》學習筆記2-檔案目錄管理查閱思維導圖

1、常見處理目錄的命令:cd,pwd,mkdir,rmdir 2、檔案與目錄的管理:ls(https://blog.csdn.net/weixin_42610712/article/details/83032052),cp,rm,mv,touch 3、檔案內容查閱——cat 4、檔案內容

linux核心設計實現

核心在/usr/src/linux/目錄下 linux核心大部分為.h檔案 程序是資源分配的單位,執行緒是CPU排程的單位 程序不能平行計算,cpu同一時刻只能執行一個程序 程序包括多個執行緒 執行緒可以並行,同一時刻可以執行多個執行緒

linux核心--程序排程

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

Linux核心排程分析轉,侵刪

多工 併發和並行 Linux作為一個多工作業系統,必須支援程式的併發執行。 分類 非搶佔式多工    除非任務自己結束,否則將會一直執行。 搶佔式多工(Linux) 這種情況下,由排程程式來決定什麼時候停止一個程序的執行,這個強制的掛起動作即為**“搶佔”**。採用搶佔式多工

linux 核心學習過程1-硬體特性和核心設計之間的聯絡

該貼用來作為自己學習linux核心的記錄和筆記,很多東西都是自己理解後整理的內容,各位看官若覺得有問題的地方,可以留言或自行查閱。 linux核心在設計的過程中很多都是依據硬體晶片特性來設計,晶片在設計的過程中很多時候需要保持相容性,這樣就留下了很多令人費解的概念,比如分段和分頁機制,

Linux核心完全註釋之Linux核心體系結構

Linux核心完全註釋之Linux核心體系結構(續) 2.6 Linux 核心對記憶體的使用方法 2.8 Linux 核心原始碼的目錄結構 2.9 核心系統與使用者程式的關係 2.10 linux/Makefile 檔案 小結

VirtualBox配置Linux實現互相通訊dhcp自動獲取

1. 配置VirtualBox 在Virtualbox介面,選擇 管理-> 全域性設定,新增如下圖: 設定Linux網絡卡: 啟動Linux。 2. 配置網絡卡檔案 vim /etc/sysconfig/network-scripts/ifcfg-eth0