とりあえずの記録

はじめは同学科の人向けのナレッジまとめでした

CarPlayが正しく機能しなくなったときは (Pioneer PVH-9300DVSZS)

スズキの純正ディスプレイオーディオPVH-9300DVSZS(Pioneer製)を使用していて,あるときCarPlayが正常に機能しなくなった.同様の事例はありそうなので,今回の解決策を記しておく.

  1. ケーブルの断線
    1. 最も可能性が高いのはケーブルの破損.他のケーブルで試してみる.
  2. iPhoneの問題
    1. 強制再起動でだいたいの問題は解決する.
      1. 音量ボタン上 を押して離す
      2. 音量ボタン下 を押して離す
      3. 電源ボタンを長押しし続け,りんごマークが出てきたら離す
    2. もしiOSのアップデートが来ていれば,適用する
    3. 本体がとても熱いようであれば,しばらく接続を解除して冷ます.
    4. 他の人のiPhoneを繋いで確認することで,問題の原因がiPhoneなのかを切り分けられる.
      1. ただし,iOSにバグがあった場合を除く.
      2. 他のiPhoneでは正しく動作するのであれば,Appleサポートへ.
  3. ディスプレイオーディオ/カーナビの問題
    1. とりあえず再起動 (エンジンを切って,しばらく放置して再度エンジンをかける)
    2. ファームウェアのアップデートが来ていないか確認
      1. Pioneer PVH-9300DVSZSの場合,ここ
      2. 最新バージョンは28.04なので,これになっていなければアップデートを行う.
  4. 車両側の問題
    1. 特に後付けした電装品によって,電圧が不安定になったり激しいノイズが出ていたりすることが稀にある.
    2. 電装品をつけてすぐ or 長らく使用しておかしくなった場合には,外してみると解決するかもしれない.

なお,Pioneer製品(carrozzeriaブランド含む)では,使用できるUSBメモリにいろいろと制約があるので注意.今回の場合,FAT16またはFAT32でフォーマットする必要があった.

メーカーが非対応と示しているMacでは,ディスクユーティリティでFAT32を指定してフォーマットしても,Terminalからコマンドで同様にフォーマットしても,読み込まなかった.

Windowsの場合も,64GB以上のUSBメモリではフォーマット時にFAT16/FAT32選択肢に現れない.I-O DATAが提供するハードディスクフォーマッタを入手し,これによってフォーマットすることで正常に認識してくれた.

私の場合,

  1. 接続の怪しかったUSBケーブルを交換しても認識せず,
    (充電はされる)
  2. iPhoneを強制再起動しても正常に動作せず,
    (充電・認識はするが,楽曲を再生するとCarPlayが落ちる.ナビ音源は再生できる)
  3. ファームウェアもアップデートすることでようやく正常に使えるようになった.

昨日までは正常に使用できていたためとうとう壊れたかと思ったが,もうしばらくは使えそうで一安心.

脳内をターゲットとしたデフラグ実行について

思考↔タイピングを繰り返すうちに,頭の中で断片化が発生してallocation costが高くなっているかもしれない.自分の中で効果的だと感じている手法をここに残しておく.ただ,総じてうまく言語化できているとは言えない.

  • 筆記用具を用いて頭の中をdumpする
    • e.g.) for ホワイトボード,紙
    • 人間側のI/Oとしてキーボードや音声ではなく,手書き/手描きを用いることでどこか違う領域が働いてくれる感覚がある
  • 人とディスカッションする
    • 成功すると非常に効果的だが,成功する確率はそう高くない 
    • AIチャットよりも,人と話している方が効果が高い気がしている
      • 現時点ではAIモデルに実装されていない,人間ならではの無意識的な要素が有効に働く?(セレンディピティというやつ?)
      • これが事実であるかは一旦置いておいて,これがある限り,教職は無くならないのだと思う.
        • AIファースト時代における教職の存在意義,というのは言い過ぎか.
    • in-personかonlineか
      • 頭の中の普段使わない領域を活性化させるという観点では,おそらくin-personのほうがよい
      • 一方,できるだけ使わなくともよい領域でのリソース消費を抑えて集中するためには,電話/onlineのほうがよい
      • 一概にin-person/onlineのどちらが優れていると言えるものではないため,両方自由に選択できる状況が望ましい?

あとは,旅行や食事などで非日常的な体験を生活に取り入れるのもよいと聞いたことがあるが,これはデフラグというより不要なファイルの削除による空き領域の増加であるように感じる.

ここまで書いて思ったことが1つ.もしかしてデフラグと同じくらい,脳内全体を使って考える(いろんな領域を活性化させる)ことが重要だったりするのだろうか.人工知能領域でない,医学的な意味でのニューラルネットワークについて学ぶ意欲が高まった.脳科学領域のOCW/MOOCコンテンツを見つけたので,空き時間で勉強してみることにした.

人間脳科学入門 – 東北大学オープンオンライン教育開発推進センター

せっかく大学院生なのだから弊学内で勉強できるとなおよかったのだけれど,うちはそもそも単科大であり関連する講義がほとんど無い & 授業のオンライン化によりそう簡単には潜り込めなくなってしまった.

情報工学領域における情報処理学会/電子情報通信学会の立ち位置と似ているような,脳科学領域の国内学会ってどこなんだろう.

久しぶりに「ブログ感」のある記事を書いた気がする.

Linuxで複数のバイナリを使い分ける

(人に伝える用のメモ書きです.)

まず,Linuxでアプリケーションを使用したい場合,大きく以下の3つのやり方がある.

[方法A] パッケージマネージャを使用してバイナリを取得

apt, snap, dnf, yumなどを使用してインストールする方法.今ではこれが最も一般的かと思います.バイナリの取得,依存関係にあるソフトウェアの取得,それぞれのインストールまで一気通貫でやってくれます.その代わり,sudo権限が必要ですね.

例:
sudo apt update
sudo apt install xxxx -y
xxxx

[方法B] Webサイトなどからバイナリを取得

あらかじめ各環境向けのバイナリをビルドしていてくれて,ダウンロードしてそのまま使用できるタイプもありますね.今や,こちらを使用するように誘導しているソフトウェアはほとんどなくなり,パッケージマネージャを使用するよう示されているところが多いですね.

例:
wget https://example.com/xxxx
chmod +x xxxx
./xxxx

[方法C] ソースコード,依存ソフトウェア,ビルドツールを入手し,自前でバイナリをビルド

依存するソフトウェアやビルドツールがあれば,手元でビルドして使うこともできます.主にソースコードに手をいれて動作を変えたいとき・sudo権限がないが特定のアプリケーションを使用したい場合向けですね.

例:autotoolsを採用しているソフトウェアの場合 (他にCMake, Ninjaなどもある)
(事前に依存するソフトウェアの準備が完了しているものとする)
git clone https://example.com/xxxx.git
cd xxxx
./autogen.sh
./configure --some-configuration-options
make -j$(nproc)
# この段階ですでに build/xxxx などにバイナリが出来ている.
# ./build/xxxx などで直接実行することが可能
sudo make install # 実行すると,システム全体で使用できるようになる
xxxx

本題

ここでは方法Cを前提として,同一アプリケーションの複数のバージョンをホスト内に存在させ,適宜使い分ける方法を示す.

mkdir ~/a && cd ~/a
git clone https://example.com/xxxx.git && cd xxxx
vi somefile

make -j$(nproc) # バイナリファイルが ~/a/xxxx/build/xxxx に生成される

mkdir ~/b && cd ~/b
git clone https://example.com/xxxx.git && cd xxxx
vi somefile

make -j$(nproc) # バイナリファイルが ~/b/xxxx/build/xxxx に生成される

この段階で,2種類のバイナリをそれぞれ実行できる.
適宜両者を使い分けたいだけであれば,ここまででもOK.

Open vSwitchなど,システムにインストールしたほうが運用上使いやすいのであれば,

cd ~/a/xxxx && sudo make install

cd ~/b/xxxx && sudo make install
により,適宜使用したい方をインストールしなおすことで使い分けられる.

このとき,make -j$(nproc) などによる再ビルドは不要.あくまで make install のみ.
ただし,依存ソフトウェアやKernelがいつの間にかアップデートされていたりすると,うまく動作しない場合がある.その時は再度ビルドが必要.(make clean でビルド成果物を削除してから再度ビルド,インストール.)

注意点

  • 現在使用していない方を make install する前に,現在使用しているアプリケーションを停止させる.(OVSであれば,ovs-ctl stop など.)
    • もし止め忘れて新しい方で make install してしまったときは,
      • 単一のバイナリを実行するだけのソフト
        ps aux | grep xxxx でPIDを特定して kill する.pkill でもよい.
      • いろんなところから適宜実行されるソフト (OVSなど)
        → 元の方で再度 make install しなおして停止する
  • ソフトウェアによっては,使用するパラメータをファイルやデータベースで保持している場合がある.その場合,バイナリの切り替えだけでは動作が思うように切り替わってくれない.
    • ファイルやデータベースも複数作成して,それぞれ紐づけるなどの対応が必要
    • OVSを使用していて,仮想スイッチの構成は同一でよい場合,あえてデータベースは複数作成せず,同一のものを複数のバイナリで参照させることもできる.

 

Linux上で動かす仮想L2スイッチまとめ (Linux br, OVS)

  ドライバ ネットワークスタック
アプリケーション
Linux bridge Kernel Kernel-br QEMU
OVS(kernel) Kernel OVS-br(k) QEMU
OVS(user) Kernel OVS-br(u) QEMU
OVS(user)+DPDK DPDK PMD OVS-br(u) w/DPDK QEMU
OVS(user)+AF_XDP Kernel w/XDP OVS-br(u) w/libbpf QEMU

注:赤=カーネル空間,青=ユーザ空間
kernel, (k):カーネルデータパス.datapath_type=system
user, (u):ユーザランドデータパス.datapath_type=netdev

  • Linux bridge
    • 基本的なL2 SW機能で要件を充足するのであれば,これが最もシンプル.
    • 実装:linux/net/bridge
  • OVS(kernel)
  • OVS(user)
  • OVS(user)+DPDK
    • この中では(多くの場合)最も高速.ただし,NIC・CPUコア・HugePageを占有し続ける.
    • Kernelのネットワークスタックを完全にバイパスするため,既存の開発系ツールを一切使用できない.
    • 構成によっては完全にゼロコピー(ポインタ渡し)で動作する
  • OVS(user)+AF_XDP
    • Kernelの機能を拡張して使用するため,他のアプリケーションと共存できる.ユースケースによってはDPDKより高速な場合もある.
    • 構成によっては完全にゼロコピー(ポインタ渡し)で動作する

性能比較

出典:Revisiting the Open vSwitch Dataplane Ten Years Later

vNICドライバに関する補足

vNICドライバとしてvirtioの代わりにvhost, vhost-userを使用することで,qemuをスキップしてネットワークスタックからVMへ直接パケットデータを送ることが可能.

  • virtio (virtio-net)
    • 基礎的な実装.qemu - VM間共有メモリで転送.
  • vhost
    • QEMUのバックエンドをkernel内で実行.kernel - VM間共有メモリで転送.
  • vhost-user
    • vhostのkernel側処理をユーザランドで実行.ユーザランドデータパス使用時にこちらを選択.
    • OVSでは,旧タイプのvhost-userと新タイプのvhost-user-clientの2つが存在する.(DPDK vHost User Ports — Open vSwitch 3.5.90 documentation)
      • vhost-userはクライアント-サーバモデルのアーキテクチャで構成されている.
      • 旧タイプはOVSがサーバ,VM(QEMU)がクライアントとして機能するため,OVSがひとたび停止すると,すべてのVMを再起動しなければならない.すでに非推奨とされており,ドキュメントにて将来削除予定であることが示されている.古いページではこちらを紹介しているものもあるため,要注意.
      • 新タイプではVM(QEMU)がサーバ,OVSがクライアントとして機能する.したがって,OVSが停止しても再びOVSを立ち上げ直すだけで通信を復旧できる.

参考文献

DPDK / AF_XDPについて

vNICドライバについて

PukiWikiのページ名を変えたい

ページ末尾右下の,

↑のアイコンをクリックすることで変更可能.(要 管理者パスワード)

wiki内のリンクは自動更新されないので,言及している箇所があれば手動で修正が必要.

Invisalign Go 治療レポート Vol. 1

インビザラインGoで歯列矯正を始めました.記録も兼ねて,ここにいろいろと残しておきます.

インビザライン / インビザラインGoとは

まず,インビザラインとは米国Align Technology, Inc.(日本法人 インビザライン・ジャパン合同会社)が提供するマウスピース型歯列矯正ソリューションです.同様のものとして,マイオブレースやクリアコレクトなどがあるようです.

そしてインビザラインには,いくつかの種類があります.

私の場合,インビザライン Goの適用が可能であり,シミュレーション結果に納得できたためこちらで進めました.なお,シミュレーション結果はあくまで想定される結果の一例に過ぎず,シミュレーション通りになることを保証してくれるわけではありません.(画面内にきちんと表記があります.)

あまり期待しすぎず,x0万円でこれくらい整ったらいいな,くらいの心意気で始めるのが良いと思います.

当初の想定と違ったこと

1. 思っていたより安い

ワイヤー矯正を前提として,とりあえず100万円は積まないと始められないと思っていました.しかし実際には,後述する「リテーナー」の将来の追加購入分を除き,諸々込で50万円以内に収まりました.もっと踏み込むと,リテーナーを3セット追加で購入してちょうど50万円くらいです.

提供物品の原価で考えればそれでも高く感じますが,ブランド展開や製品・ITシステムの開発・運用,サプライチェーンの構築にかかる費用,そして何より歯科医師につきっきりでメンテナンスしていただく時間を考えれば,もう少し高くてもおかしくないなと感じました.

2. 思っていたより早く終わる

こちらもワイヤー矯正やインビザライン(フル)を前提として,最短でも1年はかかるものという考えでいました.しかし今のところ,半年以内に完了する計画になっています.

前述したように,こだわり始めるとキリがありません.費用(時間/手間/費用) 対 効果を考えて,落とし所を見つける必要があると思います.

3. 歯科医院によって,パッケージ料金に含まれるものが大きく異なる

例:メンテナンス費用(〜円/回)の発生有無,矯正終了後に必要となるリテーナーの初回分

比較する際には注意が必要です.パッと見で片方を安く感じても,totalで考えればむしろ高いケースがありました.

また,相場より安いものの,Google Mapsのレビューで明らかに悪評が多い医院もありました.事前に検診や治療で一定期間通院して相性を見極めてから相談しても,遅くはないかもしれません.

 4. マウスピースはそう簡単に外せない・飲食が著しく制限される

着用した状態では,水以外の飲み食べができません.

  • 食:アライナーが破損するため,禁止されます.キシリトールタブレットを口内で溶かすのはOKだとか.
  • 飲:アライナーの着色や変形,虫歯を招くため,水以外は禁止されます.水であっても,炭酸水やお湯はNGです.白湯はドクターによって判断が分かれるようです.私の場合,集中するためのコーヒーを飲めないのが辛いです.これはカフェイン錠剤に置き換えて対応しました.頑張れば細いストローでいけなくもないとか...?

外している間も,できるだけ硬いものを避けたくなります.

  • 歯茎の中では,歯根膜が歯槽骨を溶かし&作っています.このため,アライナーを外すと若干ぐらぐらする感覚があり,硬いものを噛むと多少の痛みがあります.
  • 普通のご飯であればまぁ大丈夫です.ちょっと硬いくらいのものであれば奥歯で噛めます.せんべいクラスは嫌です.

つけ外しが厄介で,かつ外していられる時間に制限があります.

  • きちんと効果をもたらすために,22〜24時間/日の着用が求められます.
  • 最大で2時間外せると考え,朝昼晩の3食をとる場合,1回あたり40分以内に再着用しなければなりません.これは,食事に使える時間は1食あたり20分程度であることを意味します.(詳細は後述します.)
  • 半強制的に間食をなくせます.痩せるね,やったね.

つけ外しを行う際,若干の痛みを伴います.このため,できるだけ外したくない心境になります.(でもお腹は空くので外すしかない…)

  • つけ外しの際,一瞬の痛みがあります.慣れないうちはその一瞬が何回か来た後にようやく外れるので,結構嫌です.
  • また,特に外した直後の数分間,歯が一斉に元の位置に戻ろうとするのか全体的に鈍痛があります.2分程度我慢する必要があります.

5. マウスピースをはめるだけでは済まない

多くの場合,以下の中から複数を行うことになります.私の知る限り,アタッチメントとIPRはほとんど必須と考えてよいのではないかと思います.

  • 歯に小さな小さな樹脂パーツ(アタッチメント)を貼り付ける
    • 取れやすいです.しかし取れるとその歯は期待通りに動いてくれないので,速やかに担当医に連絡して対応を仰ぎます.
  • 歯の側面を削る (IPR)
    • 歯と歯の間を,各歯エナメル質の厚みの1/4以下の範囲で,やすりでゴリゴリ削ります.相応の振動はありますが痛みはありませんでした.結構(60分〜)時間を要します.
  • ゴムかけの実施
    • ワイヤー矯正と同じように,小さな透明の輪ゴムをかける必要がある場合もあるようです.
  • アンカースクリューの設置
    • ネジを骨に埋める場合があるようです.
  • ワイヤー矯正との組み合わせ
    • インビザラインのみでは対応できない / 対応できるが時間を要す場合,歯科医師の判断でワイヤー矯正との組み合わせやワイヤー矯正のみの実施を勧められる場合もあるようです.
  • 加速装置の使用
    • 「光加速矯正装置 / PBMヒーリングオルソ」というとてつもなく怪しい名前の装置を使用して,矯正期間を短縮する場合もあるようです.価格や取り扱いの有無は歯科医院によって異なり,取り扱いのある場合でも8〜25万円程度と結構な振れがあるようです.

6. マウスピースとは一生付き合うことになる

厳密には「歯並びを気にする間は」です.

決められた回数のアライナー(歯を動かすためのマウスピース)を終えたあとも,後戻りを防ぐために保定装置(リテーナー)を着用し続ける必要があります.ただし,アライナーと異なり着用時間は夜のみになるなど,負担はそこまで大きくなさそうです.これはワイヤー矯正であっても同様で,生まれつき歯並びがきれいな人を羨ましく思えるポイントの1つですね.

インビザライン着用中のQoL低下について

先ほど,

食事に使える時間は1食あたり20分程度であることを意味します.

と述べました.これは,「アライナーを外し,再度装着する」ためにいくつかのステップを踏む必要があるためです.具体的には,次の通りです.

  1. アライナーを外す (人によっては痛い)
  2. アライナーを水ですすいでケースにいれる
  3. 痛みが収まるまで待つ
  4. 移動飲食移動
  5. 歯磨きする
  6. アライナーを歯ブラシできれいにする
  7. アライナーをつける  (人によっては痛い)
  8. チューイー*を噛む (5分程度.*アライナーを正しい位置に押し込むためのシリコンチューブのようなもの.)

[1.]〜[8.]を40分/回(120分/日)以内に収める必要があります.アライナーのつけ外し自体は慣れればなんともないと思いますが,アライナーの洗浄やそれができるスペースへの移動,そして食事自体も含めてと考えると結構シビアですよね.

リモートワークならまだしも,外食したり,社食の行列に並んだり,会食したり,というのはなかなか難しいと思います.朝食を秒で済ませるか,多少期間が伸びることを受け入れて着用時間の短縮を呑むか,になりますね.22時間/日を守れなくとも,計画通りに進めるためには最低でも20時間/日は必要であるとされています.

着用時間 / 交換日の管理には,公式アプリ「My Invisalign」や,サードパーティ製だが評価の高いアプリ「トレイマインダー」を使用できます.今のところ両方インストールして,着用時間の管理にはトレイマインダーを使用しています.

始めるまでの流れ

  1. 相談 4/8
  2. 虫歯治療 (あれば) 
  3. 簡易スキャン & シミュレーション 4/16
  4. 精密スキャン  5/1
  5. (ドクターによるプランニング)
  6. シミュレーション&治療計画の確認,支払い 5/9
  7. アライナー & スターターキット到着
    1. 海外からの発送なので,最短でも2週間はかかるようです.
  8. IPR等実施,開始 5/30

歯科医院側のスケジュールにもよると思いますが,私の場合では相談から開始までGW挟んで2ヶ月弱でした.

結論

いろいろと考慮すべきポイントはありますが,ワイヤー矯正と比べて(知覚的にも・お財布も)痛みが少ないことは事実であるようです.両方試したわけではないので,断言はできません.ただ,ワイヤー矯正でよく起こるとされる口内炎やワイヤーの間への詰まりなどはありません.

そして見た目についてですが,自分から伝えない限り or 人前で口を😬と広げない限り,気づかれることはないと思って良さそうです.あえてネガティブな表現をすれば,気づかれないが故に数ヶ月間「ただ滑舌悪くて食事の前後で必ず長めにお手洗い行く人」になります.まぁ,それくらいどうってことないですね.

各人によって口内の状況は大きく異なると思いますので,まずは信頼できるドクターや近くの矯正経験者に相談してみるのがおすすめです.

また気づきが貯まり次第,Vol. 2にてご報告します.

クロック周波数もキャッシュ容量も大きくなったのに,特定のワークロードで性能が極端に悪い場合

L3キャッシュの共有範囲に起因する問題かもしれません.

以下,詳細.

 

先日,身の回りで

では良い性能を示すのに,

  • AMD EPYC 9174F

では元の1/100もの性能になってしまうケースがありました.

同一のソフトウェア(カーネル,アプリケーション)を同一の手順でセットアップしていますので,原因箇所をハードウェアに絞って調査しました.
(実際には,ドライバなどソフトウェア側に起因している可能性も0ではありません.)

1. CPU性能

今回対象としているシステムは,シングルスレッドで動作するアプリケーションが複数(3,4個程度)動作します.従って,シングルスレッド性能を計測しました.

$ sysbench --test=cpu --cpu-max-prime=2000 --num-threads=1 run

結果は次の通り.

  • Intel Core i7-12700:16,266 events/10s
  • AMD EPYC 7713P:13,862 events/10s
  • AMD EPYC 9174F:19,755 events/10s

今回問題となっている 9174F が最も高速に動作しています.

2. CPUキャッシュ

CPUキャッシュの容量が小さいのかもしれません.

$ lscpu -C

調査結果は次の通り.

  • 凡例: L1d / L1i / L2 / L3 (いずれもインスタンスあたりの値.)
  • Intel Core i7-12700:48K / 32K / 1.3M / 25M
  • AMD EPYC 7713P:32K / 32K / 512K / 32M
  • AMD EPYC 9174F:32K / 32K / 1M / 32M

キャッシュメモリ全体の容量は7713Pのほうが大きいですが,インスタンス毎で確認すると9174Fとほぼ同等,L2キャッシュに至っては7713Pの2倍です.

この結果からは,CPUキャッシュの問題ではないように見えます.

3. メモリI/O

もしかすると,メモリI/O性能が影響を及ぼしているかもしれません.

$ sysbench --test=memory --memory-block-size=1K --memory-total-size=10G --num-threads=1 run

結果は次の通り.

  • Intel Core i7-12700を搭載しているホスト:10,526 MB/s
  • AMD EPYC 7713Pを搭載しているホスト:5,771 MB/s
    • 注:ECCメモリ
  • AMD EPYC 9174Fを搭載しているホスト:8,410 MB/s
    • 注:ECCメモリ

9174Fを搭載しているホストは,少なくとも7713Pより高速に動作するメモリを積んでいます.原因はメモリではなさそうです.

4. ディスクI/O

ここまで来たら,きっとディスクでしょう.

$ dd if=/dev/zero of=testfile bs=1M count=1000 conv=fdatasync

  • Intel Core i7-12700を搭載しているホスト:1.8 GB/s
    • 注:NVMe SSD
  • AMD EPYC 7713Pを搭載しているホスト: 1.1 GB/s
    • 注:SAS SSD + キャッシュつきRAIDコントローラ
  • AMD EPYC 9174Fを搭載しているホスト:221 MB/s
    • 注:SAS HDD + キャッシュなしRAIDコントローラ

これだ!

...と思いましたが,結論から言えば主な原因はここではありませんでした.そもそも今回のワークロードではディスクI/Oをほとんど使用しません.実際にメモリ使用量を見ても補助記憶へのスワップアウト/スワップインが必要な状況ではなく,I/O waitの発生状況を見てもいずれも0でした.
9174Fを搭載しているホストで,ディスクに負荷をかけた状態で本来のワークロードを実行しても性能悪化は見られず,7713Pを搭載しているホストでも同様でした.

5. ネットワークI/O

同一型番のNICを使用しており,レイテンシ・スループットも適正値でした.ディスクI/Oと同様に,そもそもこのワークロードではネットワークI/Oがボトルネックになることは考えにくい状況です.

6. CPUキャッシュ構成

万策尽きて,お手上げ状態でした.アプリケーションにCPUアフィニティを設定して特定のコアに縛り付けても,性能は改善しませんでした.そんな中,ふと某所で lstopo コマンドを見かけました.

$ lstopo --of ascii

試しに実行してみると,

  • AMD EPYC 7713Pを搭載しているホスト

  • AMD EPYC 9174Fを搭載しているホスト

9174Fでは,L3キャッシュの共有範囲がわずか2コアに限定されています.

仕様を見てみます.

引用元:https://www.hpctech.co.jp/assets/images/info/catalog/pdf/AMD_EPYC_9004_Series_Ver2.pdf

Core:16に対し,CCDが8つです.1つのCCDあたりのコア数は2つ.L3キャッシュは2つのコアでのみ共有される設計です.

これを踏まえて各アプリケーションにCPUアフィニティを設定したところ,性能が5倍に改善しました.しかし,そもそも1/100になっているため微々たるものです.

できることは,

  • L3キャッシュの共有範囲を踏まえて,各プロセスにCPUアフィニティを設定する
  • アプリケーションを,できるだけキャッシュミスが発生しないように実装する
  • キャッシュミスは頻発する前提で,できるだけ高速なメモリを使用する

くらいでしょうか.