Linux 上の uma アーキテクチャについて話しましょう (画像とテキストで詳しく説明)
この記事では、Linux の uma アーキテクチャに関する関連知識を提供します。お役に立てば幸いです。
次のケースは Ubuntu 16.04 に基づいており、他の Linux システムにも適用できます。私が使用したケース環境は次のとおりです。
マシン構成: 32 CPU、64GB メモリ
NUMA におけるストレージ階層の概念:
##1) プロセッサー層: 単一の物理コアはプロセッサー層と呼ばれます。 2) ローカル ノード層: ノード内のすべてのプロセッサに対して、このノードはローカル ノードと呼ばれます。 3)ホームノード層:ローカルノードに隣接するノードをホームノードと呼ぶ。 4) リモートノード層: ローカルノードや隣接ノードではないノードはリモートノードと呼ばれます。 CPU がノードの種類によってメモリにアクセスする速度は異なります。ローカル ノードへのアクセス速度が最も速く、リモート ノードへのアクセス速度が最も遅くなります。つまり、アクセス速度はノードの距離に関係します。距離が離れるほどアクセス速度が遅くなり、この距離をノード距離といいます。アプリケーションは、異なる CPU モジュール間の相互作用を最小限に抑えるように努める必要があり、アプリケーションを CPU モジュール内で固定できれば、アプリケーションのパフォーマンスは大幅に向上します。
** Kunpeng 920 プロセッサに基づく CPU チップの構成について説明します。 ** Kunpeng 920 プロセッサ システムオンチップの各スーパー コア クラスタには、6 つのコア クラスタ、2 つの I/O クラスタが含まれます。および 4 つの DDR コントローラー。各スーパー コア クラスターは CPU チップにパッケージ化されています。各チップには、最大 3200MT/s のデータ転送速度を持つ 4 つの 72 ビット (64 ビット データ + 8 ビット ECC) 高速 DDR4 チャネルが統合されており、単一チップで最大 512GB×4 DDR ストレージ スペースをサポートできます。 L3 キャッシュは、L3 キャッシュ TAG と L3 キャッシュ DATA の 2 つの部分に物理的に分割されています。 L3 キャッシュ TAG は各コア クラスターに統合されており、リスニング レイテンシーを短縮します。 L3 キャッシュ DATA はオンチップ バスに直接接続されています。 Hydra Root Agent (Hydra Home Agent、HHA) は、マルチチップ システムのキャッシュ一貫性プロトコルを処理するモジュールです。 POE_ICL はシステム構成のハードウェア アクセラレータであり、通常、パケット シーケンサ、メッセージ キュー、メッセージ配信として使用したり、特定のプロセッサ コアの特定のタスクを実装したりするために使用できます。さらに、各スーパー コア クラスターは、ARM の GICv4 仕様と互換性のある汎用割り込みコントローラー ディストリビューター (GICD) モジュールを使用して物理的に構成されています。シングルチップまたはマルチチップ システムに複数のスーパー コア クラスタがある場合、システム ソフトウェアから認識できる GICD は 1 つだけです。
umactl の使用
Linux には、手動チューニング コマンド umactl が 1 つ用意されています (デフォルトではインストールされません)。Ubuntu でのインストール コマンドは次のとおりです。
sudo apt install numactl -y
まず、man numactl または umactl --h を使用して、パラメーターの機能と出力内容を理解します。システムの NUMA ステータスを確認します。
numactl --hardware
を実行すると、次の結果が得られます。
available: 4 nodes (0-3) node 0 cpus: 0 1 2 3 4 5 6 7 node 0 size: 16047 MB node 0 free: 3937 MB node 1 cpus: 8 9 10 11 12 13 14 15 node 1 size: 16126 MB node 1 free: 4554 MB node 2 cpus: 16 17 18 19 20 21 22 23 node 2 size: 16126 MB node 2 free: 8403 MB node 3 cpus: 24 25 26 27 28 29 30 31 node 3 size: 16126 MB node 3 free: 7774 MB node distances: node 0 1 2 3 0: 10 20 20 20 1: 20 10 20 20 2: 20 20 10 20 3: 20 20 20 10
この図とコマンドから得られた結果によると、 、このシステムには合計 4 つのノードがあり、それぞれに 8 つの CPU と 16G のメモリが搭載されていることがわかります。ここで注意する必要があるのは、CPU によって共有される L3 キャッシュも、対応する領域を独自に受け取ることになるということです。 umastat コマンドを使用して uma のステータスを確認できます。戻り値の内容:
uma_hit: このノードにメモリを割り当てる意図と、このノードからの最後の割り当て数です。
uma_miss: このノードにメモリを割り当てることが目的です。メモリが割り当てられ、最終的に他のノードから割り当てられた回数です。
uma_foreign: メモリがこのノードに割り当てられる回数です。他のノードに割り当てられますが、最終的にはこのノードから割り当てられます;
interleave_hit: インターリーブ戦略が使用され、このノードから割り当てられる回数は最終的にこのノードによって割り当てられる回数です。
local_node: このノード上のプロセスがこのノードに割り当てられた回数
other_node: 他のノードのプロセスがこのノードに割り当てられた回数
注: uma_miss の値が比較的高いことが判明した場合、配分戦略を調整する必要があることを意味します。たとえば、指定されたプロセスの関連付けが指定された CPU にバインドされるため、メモリ ヒット率が向上します。
root@ubuntu:~# numastat node0 node1 node2 node3 numa_hit 19480355292 11164752760 12401311900 12980472384 numa_miss 5122680 122652623 88449951 7058 numa_foreign 122652643 88449935 7055 5122679 interleave_hit 12619 13942 14010 13924 local_node 19480308881 11164721296 12401264089 12980411641 other_node 5169091 122684087 88497762 67801
NUMA メモリ割り当て戦略
--localalloc または -l: プロセスがローカル ノードからのメモリ割り当てを要求することを指定します。 --membind=nodes または -m nodes: プロセスが指定されたノードからのみメモリ割り当てを要求できることを指定します。 --preferred=node: メモリを取得するための推奨ノードを指定します。取得に失敗した場合は、別のノードを試してください。 --interleave=nodes または -i nodes: プロセスがラウンド ロビン アルゴリズムを使用して、指定されたノードからメモリ割り当てをインターリーブ的に要求することを指定します。
numactl --interleave=all mongod -f /etc/mongod.conf
因为NUMA默认的内存分配策略是优先在进程所在CPU的本地内存中分配,会导致CPU节点之间内存分配不均衡,当开启了swap,某个CPU节点的内存不足时,会导致swap产生,而不是从远程节点分配内存。这就是所谓的swap insanity 现象。或导致性能急剧下降。所以在运维层面,我们也需要关注NUMA架构下的内存使用情况(多个内存节点使用可能不均衡),并合理配置系统参数(内存回收策略/Swap使用倾向),尽量去避免使用到Swap。
Node->Socket->Core->Processor
随着多核技术的发展,将多个CPU封装在一起,这个封装被称为插槽Socket;Core是socket上独立的硬件单元;通过intel的超线程HT技术进一步提升CPU的处理能力,OS看到的逻辑上的核Processor数量。
Socket = Node
Socket是物理概念,指的是主板上CPU插槽;Node是逻辑概念,对应于Socket。
Core = 物理CPU
Core是物理概念,一个独立的硬件执行单元,对应于物理CPU;
Thread = 逻辑CPU = Processor
Thread是逻辑CPU,也就是Processo
lscpu的使用
显示格式:
Architecture:架构
CPU(s):逻辑cpu颗数
Thread(s) per core:每个核心线程,也就是指超线程
Core(s) per socket:每个cpu插槽核数/每颗物理cpu核数
CPU socket(s):cpu插槽数
L1d cache:级缓存(google了下,这具体表示表示cpu的L1数据缓存)
L1i cache:一级缓存(具体为L1指令缓存)
L2 cache:二级缓存
L3 cache:三级缓存
NUMA node0 CPU(s) :CPU上的逻辑核,也就是超线程
执行lscpu,结果部分如下:
root@ubuntu:~# lscpu Architecture: x86_64 CPU(s): 32 Thread(s) per core: 1 Core(s) per socket: 8 Socket(s): 4 L1d cache: 32K L1i cache: 32K L2 cache: 256K L3 cache: 20480K NUMA node0 CPU(s): 0-7 NUMA node1 CPU(s): 8-15 NUMA node2 CPU(s): 16-23 NUMA node3 CPU(s): 24-31
相关推荐:《Linux视频教程》
以上がLinux 上の uma アーキテクチャについて話しましょう (画像とテキストで詳しく説明)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









Linuxは、サーバー、開発環境、埋め込みシステムに適しています。 1.サーバーオペレーティングシステムとして、Linuxは安定して効率的であり、多くの場合、高電流アプリケーションの展開に使用されます。 2。開発環境として、Linuxは効率的なコマンドラインツールとパッケージ管理システムを提供して、開発効率を向上させます。 3.埋め込まれたシステムでは、Linuxは軽量でカスタマイズ可能で、リソースが限られている環境に適しています。

Apacheを開始する手順は次のとおりです。Apache(コマンド:sudo apt-get install apache2または公式Webサイトからダウンロード)をインストールします(linux:linux:sudo systemctl start apache2; windows:apache2.4 "serviceを右クリックして「開始」を右クリック) (オプション、Linux:Sudo SystemCtl

Apache 80ポートが占有されている場合、ソリューションは次のとおりです。ポートを占有するプロセスを見つけて閉じます。ファイアウォールの設定を確認して、Apacheがブロックされていないことを確認してください。上記の方法が機能しない場合は、Apacheを再構成して別のポートを使用してください。 Apacheサービスを再起動します。

この記事では、Debianシステム上のNginxサーバーのSSLパフォーマンスを効果的に監視する方法について説明します。 Nginxexporterを使用して、NginxステータスデータをPrometheusにエクスポートし、Grafanaを介して視覚的に表示します。ステップ1:NGINXの構成最初に、NGINX構成ファイルのSTUB_STATUSモジュールを有効にして、NGINXのステータス情報を取得する必要があります。 NGINX構成ファイルに次のスニペットを追加します(通常は/etc/nginx/nginx.confにあるか、そのインクルードファイルにあります):location/nginx_status {stub_status

Oracleリスナーを開始する手順は次のとおりです。Windowsのリスナーステータス(LSNRCTLステータスコマンドを使用)を確認し、LinuxとUNIXのOracle Services Managerで「TNSリスナー」サービスを開始し、LSNRCTL Startコマンドを使用してリスナーを起動してLSNRCTLステータスコマンドを実行してリスナーを確認します。

この記事では、デビアンシステムでリサイクルビンを構成する2つの方法を紹介します:グラフィカルインターフェイスとコマンドライン。方法1:Nautilusグラフィカルインターフェイスを使用して、ファイルマネージャーを開きます。デスクトップまたはアプリケーションメニューでNautilusファイルマネージャー(通常は「ファイル」と呼ばれる)を見つけて起動します。リサイクルビンを見つけてください:左ナビゲーションバーのリサイクルビンフォルダーを探してください。見つからない場合は、「他の場所」または「コンピューター」をクリックして検索してみてください。リサイクルビンプロパティの構成:「リサイクルビン」を右クリックし、「プロパティ」を選択します。プロパティウィンドウで、次の設定を調整できます。最大サイズ:リサイクルビンで使用可能なディスクスペースを制限します。保持時間:リサイクルビンでファイルが自動的に削除される前に保存を設定します

Apacheサーバーを再起動するには、次の手順に従ってください。Linux/MacOS:sudo systemctl restart apache2を実行します。 Windows:Net Stop apache2.4を実行し、ネット開始apache2.4を実行します。 Netstat -A |を実行しますサーバーのステータスを確認するには、STR 80を見つけます。

Debian Systemsでは、Directoryコンテンツを読み取るためにReadDirシステム呼び出しが使用されます。パフォーマンスが良くない場合は、次の最適化戦略を試してください。ディレクトリファイルの数を簡素化します。大きなディレクトリをできる限り複数の小さなディレクトリに分割し、Readdirコールごとに処理されたアイテムの数を減らします。ディレクトリコンテンツのキャッシュを有効にする:キャッシュメカニズムを構築し、定期的にキャッシュを更新するか、ディレクトリコンテンツが変更されたときに、頻繁な呼び出しをreaddirに削減します。メモリキャッシュ(memcachedやredisなど)またはローカルキャッシュ(ファイルやデータベースなど)を考慮することができます。効率的なデータ構造を採用する:ディレクトリトラバーサルを自分で実装する場合、より効率的なデータ構造(線形検索の代わりにハッシュテーブルなど)を選択してディレクトリ情報を保存およびアクセスする
