Open8

Linux (Ubuntu), macOS, Windows のスペックを確認する方法

nukopynukopy

Ubuntu

OS

Linux ディストリビューション(lsb_release って debian 系じゃないとだめとかあったっけ、わすれた)

lsb_release -a

OS カーネル

uname -a

プロセッサ

lscpu

メモリ

free -h
               total        used        free      shared  buff/cache   available
 Mem:           15Gi        13Gi       196Mi       103Mi       1.5Gi       1.3Gi
 Swap:         2.0Gi       2.0Gi          0B

ブロックデバイス(ストレージ)

NVMe, SATA

lsblk

ハードウェア全体を出力

sudo lshw
nukopynukopy

systemd 関連

systemctl に登録されているサービス一覧を表示するコマンド

  1. すべてのサービスを表示
    systemctl list-unit-files --type=service
    
  2. 現在アクティブ(実行中)のサービスを表示
    systemctl list-units --type=service
    
  3. 現在ロードされているサービスを表示:
    systemctl list-units --type=service --state=loaded
    
  4. 現在アクティブ(実行中)および非アクティブ(停止中)のサービスを表示:
    systemctl list-units --type=service --state=active,inactive
    
  5. 失敗したサービスを表示
    systemctl list-units --type=service --state=failed
    
  6. すべてのサービスを表示(静的ユニットファイルを含む):
    systemctl list-units --type=service --all
    

これらのコマンドは、systemd に管理されているサービスの状態や設定を確認するのに役立つ。出力には、サービス名、ロード状態、アクティブ状態、サブ状態、説明などの情報が含まれる。

必要に応じて、--type=service の部分を --type=socket--type=target などに変更することで、他のタイプの systemd ユニットの一覧を表示することもできる。

nukopynukopy

特定のポート番号を使用しているプロセスを探して kill する

# ポート3000を使用しているプロセスを見つける
lsof -i :3000
# COMMAND  PID USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
# node    1234 user   12u  IPv6 0x12345678      0t0  TCP *:3000 (LISTEN)

# プロセスの詳細情報を表示
ps -p 1234 -o comm,pid,user,%cpu,%mem
# COMM               PID USER         %CPU %MEM
# node              1234 user          0.1  2.0

# プロセスを通常の方法で終了
kill 1234

# プロセスが終了しない場合のみ、強制終了を使用
# kill -9 1234

# プロセスが終了したことを確認
lsof -i :3000
# コマンドは何も出力しない(プロセスが終了しているため)
nukopynukopy

macOS

OS

sw_vers
# ProductName:		macOS
# ProductVersion:		14.1
# BuildVersion:		23B5056e

もしくはメニューバー > 🍎 > About This Mac > macOS

OS カーネル

uname -a
# Darwin nukopy-m1max.local 23.1.0 Darwin Kernel Version 23.1.0: Tue Sep 26 22:11:21 PDT 2023; root:xnu-10002.40.89.501.1~3/RELEASE_ARM64_T6000 arm64

プロセッサ

名前:メニューバー > 🍎 > About This Mac > Chip

詳細

sysctl -a machdep.cpu
# machdep.cpu.cores_per_package: 10
# machdep.cpu.core_count: 10
# machdep.cpu.logical_per_package: 10
# machdep.cpu.thread_count: 10
# machdep.cpu.brand_string: Apple M1 Max

メモリ

メニューバー > 🍎 > About This Mac > Memory

使用率

memory_pressure -Q
# The system has 68719476736 (4194304 pages with a page size of 16384).
# System-wide memory free percentage: 89%

https://zenn.dev/t_o_d/articles/1de647b8634806

ブロックデバイス(ストレージ)

メニューバー 🍎 > System Settings > Storage

ディスクユーティリティアプリ(Disk Utility.app

ハードウェア全体を出力

Linux の sudo lshw と違ってストレージとネットワークインタフェース(NIC)は表示されない。

system_profiler SPHardwareDataType 
# Hardware:
#
#    Hardware Overview:
#
#      Model Name: MacBook Pro
#      Model Identifier: MacBookPro18,4
#      Model Number: Z15H000XLJ/A
#      Chip: Apple M1 Max
#      Total Number of Cores: 10 (8 performance and 2 efficiency)
#      Memory: 64 GB
#      System Firmware Version: 10151.40.171.501.2
#      OS Loader Version: 10151.40.171.501.2
#      Serial Number (system): ****
#      Hardware UUID: ****
#      Provisioning UDID: ****
#      Activation Lock Status: Disabled
nukopynukopy

Q. macOS 14.1 でのコマンドの実行結果です。パフォーマンスコアとエフィシェンシーコアって何が違うの?

system_profiler SPHardwareDataType 
# Hardware:
#
#    Hardware Overview:
#
#      Model Name: MacBook Pro
#      Model Identifier: MacBookPro18,4
#      Model Number: Z15H000XLJ/A
#      Chip: Apple M1 Max
#      Total Number of Cores: 10 (8 performance and 2 efficiency)
#      Memory: 64 GB
#      System Firmware Version: 10151.40.171.501.2
#      OS Loader Version: 10151.40.171.501.2
#      Serial Number (system): ****
#      Hardware UUID: ****
#      Provisioning UDID: ****
#      Activation Lock Status: Disabled

パフォーマンスコアとエフィシェンシーコアの違い

  • パフォーマンスコア(Performance Cores):
  • 高いパフォーマンスを発揮するために設計されています。
  • 高負荷のタスク(例:ビデオ編集、3Dレンダリング、ゲームなど)に最適です。
  • 消費電力が高い。
  • エフィシェンシーコア(Efficiency Cores):
  • 省電力で効率的な動作を重視しています。
  • 低負荷のタスク(例:ブラウジング、メール、テキスト編集など)に最適です。
  • 消費電力が低い。

Apple M1 MaxのようなSoC(システム・オン・チップ)は、これらのコアを組み合わせることで、性能と電力効率のバランスを実現しています。

Q. 例えば Rust でマルチスレッドプログラミングを行う場合、パフォーマンスコア + エフィシェンシーコアの個数をコア数として見てよいの?

Rustでマルチスレッドプログラミングを行う際、パフォーマンスコアとエフィシェンシーコアの両方をコア数として考えても構いません。ただし、各コアの特性を理解して使い分けることが重要です。パフォーマンスコアは高負荷なタスクに最適で、エフィシェンシーコアは低負荷で省電力なタスクに適しています。特定のスレッドに対する優先度や負荷に応じて、適切なコアでタスクを実行することで、効率的なリソース利用が可能になります。

Q. Rust でパフォーマンスコアとエフィシェンシーコアを使い分けるコードを書いてください。

Rust からはどっちの種類のコアを使うかという細かい制御はできないみたい。タスクのスケジューリングやコアの割当は OS の役目なのでハードウェアの詳細な制御は難しい。それはそう。

Rustでパフォーマンスコアとエフィシェンシーコアを使い分ける具体的なコード例を示します。以下>の例では、rayonクレートを使用してスレッドプールを作成し、異なるスレッドでタスクを実行します。実際にコアを指定するには、OSやハードウェアに依存する部分があるため、Rustだけで完全に制御することは難しいですが、概念的な例を示します。

まず、rayonクレートをCargo.tomlに追加します:

[dependencies]
rayon = "1.5"

次に、Rustコードでタスクをパフォーマンスコアとエフィシェンシーコアに分けて実行する例です:

use rayon::prelude::*;
use std::thread;

fn main() {
    // パフォーマンスコア向けのタスク
    let heavy_tasks: Vec<i32> = (0..8).collect();
    // エフィシェンシーコア向けのタスク
    let light_tasks: Vec<i32> = (0..2).collect();

    // スレッドプールの作成
    let heavy_pool = rayon::ThreadPoolBuilder::new().num_threads(8).build().unwrap();
    let light_pool = rayon::ThreadPoolBuilder::new().num_threads(2).build().unwrap();

    // パフォーマンスコア向けのタスクを実行
    heavy_pool.scope(|s| {
        heavy_tasks.into_par_iter().for_each(|task| {
            s.spawn(move |_| {
                perform_heavy_task(task);
            });
        });
    });

    // エフィシェンシーコア向けのタスクを実行
    light_pool.scope(|s| {
        light_tasks.into_par_iter().for_each(|task| {
            s.spawn(move |_| {
                perform_light_task(task);
            });
        });
    });

    // 全タスクの完了を待つ
    thread::sleep(std::time::Duration::from_secs(1));
}

fn perform_heavy_task(task: i32) {
    // 重いタスクの実装
    println!("Performing heavy task: {}", task);
    // 擬似的な重い処理
    thread::sleep(std::time::Duration::from_millis(500));
}

fn perform_light_task(task: i32) {
    // 軽いタスクの実装
    println!("Performing light task: {}", task);
    // 擬似的な軽い処理
    thread::sleep(std::time::Duration::from_millis(100));
}

このコードでは、rayon::ThreadPoolBuilderを使ってパフォーマンスコア向けに8スレッド、エフィシェンシーコア向けに2スレッドのスレッドプールを作成し、それぞれに適したタスクを実行します。これにより、異なるタイプのコアを活用する例を示しています。実際には、タスクのスケジューリングやコアの割り当てはOSが管理するため、ハードウェアの詳細な制御は難しい場合があります。

nukopynukopy

Windows 10 / 11

Windows 11 で調べたので Windows 10 だと若干違うかも、わからん。

ハードウェア全体

「システム情報」アプリ

OS

設定 > システム > バージョン情報 > Windows の仕様 > エディション、バージョン

プロセッサ

設定 > システム > バージョン情報 > デバイスの仕様 > プロセッサ

メモリ

設定 > システム > バージョン情報 > デバイスの使用 > 実装 RAM

ブロックデバイス(ストレージ)

設定 > システム > 記憶域 > Windows (C:)

nukopynukopy

Windows コマンドプロンプト:特定のポート番号を使用しているアプリケーションを探して kill する

netstat -ano | findstr :3000
#   TCP         0.0.0.0:3000           0.0.0.0:0              LISTENING       6648
#   TCP         [::]:3000              [::]:0                 LISTENING       6648

tasklist /fi "pid eq 6648"
# イメージ名                     PID セッション名     セッション# メモリ使用量
# ========================= ======== ================ =========== ============
# node.exe                      6648 Console                    2    179,844 K

netstat -ano | findstr :3000
#   TCP         0.0.0.0:3000           0.0.0.0:0              LISTENING       6648
#   TCP         [::]:3000              [::]:0                 LISTENING       6648

taskkill /pid 6648 /f
# 成功: PID 6648 のプロセスは強制終了されました。
nukopynukopy

ストレージの接続インタフェースの規格:NVMe、SATA

  • BUFFALO: 【かんたん解説】M.2 SSDとは?NVMeとは?

https://www.buffalo.jp/topics/knowledge/detail/m2ssd.html

SATA

  • SATA(Serial ATA、シリアル ATA、シリアルエーティーエー)
    • コンピュータにHDD、SSDや光学ドライブを接続する為のインタフェース規格である。2010年時点において、SCSIやパラレルATAに代わって主流となっている。 英語ではセイタまたはサタと発音する[3]。

    • 発音:サタ

SATAはM.2が普及し始める初期に一般的に使われてきた接続方法です。
NVMe接続のストレージと端子が似ていますが、NVMeとは別の通信規格で動作し端子の形状も異なるため、互換性はありません。
NVMeと比較して速度が遅く、発売時期が古い商品が多いことから容量単価も高くなる傾向にあります。

NVMe

NVMe は読み書きの圧倒的な高速データ転送が特長です。
主に PCI-Express 接続を用いており、SSD 側に搭載されている NVMe コントローラーが高速なデータ転送を実現します。その分、価格は高めではありますが、高性能や高速化を追求する方におすすめです。