1. 程式人生 > >NUMA架構的優缺點及核心效能優化

NUMA架構的優缺點及核心效能優化

  numa把一臺計算機分成多個節點(node),每個節點內部擁有多個CPU,節點內部使用共有的記憶體控制器,節點之間是通過互聯模組進行連線和資訊互動。因此節點的所有記憶體對於本節點所有的CPU都是等同的,對於其他節點中的所有CPU都不同。因此每個CPU可以訪問整個系統記憶體,但是訪問本地節點的記憶體速度最快(不經過互聯模組),訪問非本地節點的記憶體速度較慢(需要經過互聯模組),即CPU訪問記憶體的速度與節點的距離有關,該距離成為Node Distance。


檢視當前numa的節點情況:
numactl --hardware

節點之間的距離(Node Distance)指從節點1上訪問節點0上的記憶體需要付出的代價的一種表現形式。
Numa記憶體分配策略有一下四種:
預設default:總是在本地節點分配(當前程序執行的節點上)。
繫結bind:強制分配到指定節點上。
交叉interleavel:在所有節點或者指定節點上交叉分配記憶體。
優先preferred:在指定節點上分配,失敗則在其他節點上分配。
檢視當前系統numa策略:
numactl --show
因為numa預設的記憶體分配策略是優先在程序所在CPU的本地記憶體中分配,會導致CPU節點之間記憶體分配不均衡,
當某個CPU節點記憶體不足時,會導致swap產生,而不是從遠端節點分配記憶體,這就是swap insanity現象。
MySQL伺服器為什麼需要關閉numa?
MySQL是單程序多執行緒架構資料庫,當numa採用預設記憶體分配策略時,MySQL程序會被並且僅僅會被分配到numa的一個節點上去。
假設這個節點的本地記憶體為10GB,而MySQL配置20GB記憶體,超出節點本地記憶體部分(20GB-10GB)Linux會使用swap而不是使用其他節點的實體記憶體。
在這種情況下,能觀察到雖然系統總的可用記憶體還未用完,但是MySQL程序已經開始在使用swap了。
如果單機只執行一個MySQL例項,可以選擇關閉numa,關閉nuam有兩種方法:
1.硬體層,在BIOS中設定關閉;
2.OS核心,啟動時設定numa=off。
修改/etc/grub.conf檔案,在kernel那行追加numa=off;
[

[email protected] ~]#  vim /boot/grub/grub.conf
title Red Hat Enterprise Linux (2.6.32-358.el6.x86_64)
        root (hd0,0)
        kernel /vmlinuz-2.6.32-358.el6.x86_64 ro root=UUID=cb7d8bdc-28a5-4dbd-b04a-3ad9ee3e6bba rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet numa=off
儲存後重啟伺服器,再次檢查numa只剩下一個節點就成功了:
[
[email protected]
~]# numactl --hardware
available: 1 nodes (0)
node 0 cpus: 0
node 0 size: 2047 MB
node 0 free: 1514 MB
node distances:
node   0
  0:  10

IO排程
在不同場景下選擇不同的IO排程器:
在完全隨機訪問環境下,由於CFQ可能會造成小IO的相應延時增加,所以應設定為deadline,這樣更穩定。
對於SSD裝置,採用NOOP或者deadline也可以獲取比預設排程器更好的效能。
檢視當前系統支援的IO排程演算法:
[[email protected]
Desktop]# dmesg|grep -i scheduler
io scheduler noop registered
io scheduler anticipatory registered
io scheduler deadline registered
io scheduler cfq registered (default)
檢視當前裝置(/dev/sda)使用的IO排程演算法:
[[email protected] Desktop]# cat /sys/block/sda/queue/scheduler
noop anticipatory deadline [cfq]

修當前塊裝置(/dev/sda)使用的IO排程演算法,修改IO排程演算法後直接生效:
echo "deadline">> /sys/block/sda/queue/scheduler

永久修改IO排程演算法,可以通過修改核心引導引數,增加elevator=排程演算法:
vim /boot/grub/menu.lst
kernel /boot/                                root=LABEL=/ elevator=deadline

[[email protected] Desktop]# vim /etc/grub.conf

title Red Hat Enterprise Linux (2.6.32-358.el6.x86_64)
        root (hd0,0)
        kernel /vmlinuz-2.6.32-358.el6.x86_64 ro root=UUID=28d9f713-f49d-49ae-9e63-401986d11ab2 rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet numa=off elevator=deadline

交換分割槽

swappiness是Linux的一個核心引數,使用者控制Linux實體記憶體進行swap頁交換的相對權重,儘量減少系統的頁快取被從記憶體中清除的情況。取值範圍是0~100,vm.swappiness的值越低,Linux核心會盡量不進行swap交換頁的操作,vm.swappiness的值越高,Linux會越多的使用swap空間。Linux系統預設值是60,當系統需要記憶體時,有60%的概率使用swap。對於大多數桌面系統,設定為100可以提高系統的整體效能;對於資料庫應用伺服器,設定為0,可以提高實體記憶體的使用率,進而提高資料庫服務的響應效能。

[[email protected] ~]# vim /etc/sysctl.conf
vm.swappiness=0

sysctl -p 生效
[[email protected] ~]# sysctl -a|grep swap
vm.swappiness = 0

相關推薦

NUMA架構優缺點核心效能優化

  numa把一臺計算機分成多個節點(node),每個節點內部擁有多個CPU,節點內部使用共有的記憶體控制器,節點之間是通過互聯模組進行連線和資訊互動。因此節點的所有記憶體對於本節點所有的CPU都是等同的,對於其他節點中的所有CPU都不同。因此每個CPU可以訪問整個系統記憶體

Java 架構師+高併發+效能優化+Spring boot大型分散式專案實戰

視訊課程內容包含: 高階 Java 架構師包含:Spring boot、Spring cloud、Dubbo、Redis、ActiveMQ、Nginx、Mycat、Spring、MongoDB、ZeroMQ、Git、Nosql、Jvm、Mecached、Netty、Nio、Mina、效能調優、高

Hbase叢集運維應用效能優化總結(hbase1.20+)

(一). 作業系統              1. 足夠大的記憶體       2. 作業系統64位,jdk64位       3. 設定li

TCP/IP核心引數優化調優(轉:https://www.cnblogs.com/jking10/p/5472386.html)

Linux下TCP/IP及核心引數優化有多種方式,引數配置得當可以大大提高系統的效能,也可以根據特定場景進行專門的優化,如TIME_WAIT過高,DDOS攻擊等等。 如下配置是寫在/etc/sysctl.conf中,可使用sysctl -p生效, 相關引數僅

MySQL效能管理架構設計:SQL查詢優化、分庫分表

1.1 獲取有效能問題SQL的三種方式 通過使用者反饋獲取存在效能問題的SQL; 通過慢查日誌獲取存在效能問題的SQL; 實時獲取存在效能問題的SQL; 1.1.2 慢查日誌分析工具 相關配置引數: slow_query_log # 啟動停止記錄

MySQL架構設計效能優化

mysql變數 Variable_name Value auto_increment_increment 1 auto_increment_offset 1 autocommit ON automatic_sp_privileges ON

MySQL效能管理架構設計(二):資料庫結構優化、高可用架構設計、資料庫索引優化

一、資料庫結構優化(非常重要)1.1 資料庫結構優化目的    1、減少資料冗餘:(資料冗餘是指在資料庫中存在相同的資料,或者某些資料可以由其他資料計算得到),注意,儘量減少不代表完全避免資料冗餘;  2、儘量避免資料維護中出現更新,插入和刪除異常:             

MySQL邏輯架構效能優化原理

  說起MySQL的查詢優化,相信所有人都瞭解一些最簡單的技巧:不能使用SELECT *、不使用NULL欄位、合理建立索引、為欄位選擇合適的資料型別….. 你是否真的理解這些優化技巧?是否理解其背後的工

NUMA架構優缺點

oop 參數 當前 節點 頁交換 acl 6.0 FQ 修改 numa把一臺計算機分成多個節點(node),每個節點內部擁有多個CPU,節點內部使用共有的內存控制器,節點之間是通過互聯模塊進行連接和信息交互。因此節點的所有內存對於本節點所有的CPU都是等同的,對於其他節點中

菜鳥要做架構師——java效能優化之for迴圈

完成同樣的功能,用不同的程式碼來實現,效能上可能會有比較大的差別,所以對於一些效能敏感的模組來說,對程式碼進行一定的優化還是很有必要的。今天就來說一下java程式碼優化的事情,今天主要聊一下對於for(while等同理)迴圈的優化。 作為三大結構之一的迴圈,在我們編寫程式碼的時候會經常用到。

【MySQL資料庫】效能優化之索引優化(一)

一、Mysql效能優化之影響效能的因素 1.商業需求的影響 不合理的需求造成的資源投入產出,這裡就用一個看上去很簡單的功能分析。需求:一個論壇帖子的總量統計,附加要求:實時更新。從功能上看來是非常容易實現的,執行一條select count(*)from表名就可以得到結果,但是如果我們採

JAVA架構師大型分散式高併發電商專案實戰,效能優化,叢集,億級高併發,web安全,快取架構實戰

現任58到家技術委員會主席,高階技術總監,負責企業,支付,營銷、客戶關係等多個後端業務部門。本質,技術人一枚。網際網路架構技術專家,“架構師之路”公眾號作者。曾任百度高階工程師,58同城高階架構師,58同城技術委員會主席,58同城C2C技術部負責人。 內容介紹 1.大資

Dubbo(概念篇):Dubbo 詳解,架構演變優缺點

架構演變 單一應用框架(ORM) 當網站流量很小時,只需一個應用,將所有功能如下單支付等都部署在一起,以減少部署節點和成本。 缺點:單一的系統架構,使得在開發過程中,佔用的資源越來越多,而且隨著流量的增加越來越難以維護。 垂直應用框架(MVC) 垂直應用架構解決了單一應用架

SQL Server效能優化案例分享(1)——CPU持續過高——CPU高使用率的常見原因處理方向

本系列屬於 SQL Server效能優化案例分享 專題     部分內容借用《SQL Server 2012實施與管理實戰指南》P592,如果SQL Server錯誤日誌裡面並沒有17883/17884這類錯誤,但是SQ

JAVA效能優化架構師,分散式框架,高可用框架,微服務架構,資料庫優化

程式碼優化,一個很重要的課題。可能有些人覺得沒用,一些細小的地方有什麼好修改的,改與不改對於程式碼的執行效率有什麼影響呢?這個問題我是這麼考慮的,就像大海里面的鯨魚一樣,它吃一條小蝦米有用嗎?沒用,但是,吃的小蝦米一多之後,鯨魚就被餵飽了。 程式碼優化也是一樣,如果專案著眼於儘快無BUG上線,那麼此時可以抓

mysql_建立索引的優缺點&效能優化

建立索引的優缺點: 為什麼要建立索引呢?         這是因為,建立索引可以大大提高系統的效能。          第

【網站架構學習】瞬時響應:應用伺服器效能優化

應用伺服器效能優化 一、應用伺服器效能優化       應用伺服器就是處理網站業務的伺服器,網站的業務程式碼都部署在這裡,是網站開 發最複雜,變化最多的地方,優化手段主要有快取、叢集、非同步等。 1.1、分散式快取

DBA很忙—MySQL的效能優化自動化運維實踐

DBA的日常工作 首先,我們來看看DBA的具體工作,我覺得 DBA 真的很忙:備份和恢復、監控狀態、叢集搭建與擴容、資料遷移和高可用,這是我們 DBA 的功能。 瞭解這些功能以後要對體系結構有更加深入的瞭解,你不知道怎麼處理這些故障和投訴的事情。 所以我們要去了解快取/執行緒、SQL優化、儲

支付寶客戶端架構解析:iOS 客戶端啟動效能優化初探

前言 《支付寶客戶端架構解析》系列將從支付寶客戶端的架構設計方案入手,細分拆解客戶端在“容器化框架設計”、“網路優化”、“效能啟動優化”、“自動化日誌收集”、“RPC 元件設計”、“移動應用監控、診斷、定位”等具體實現,帶領大家進一步瞭解支付寶在客戶端架構上的迭代與優化歷程。 啟動應用是使用者使用任何一款

【redis常用的鍵值操作效能優化

服務端 啟動redis服務   { // -a:指定密碼 -h:指定主機 -p:指定埠 }   //讓redis 服務中斷崩潰 //儲存和關閉   //後臺備份 //設定登入密碼 //redis-benchmark :效能測試 &