すべてのプロダクト
Search
ドキュメントセンター

Alibaba Cloud Linux:Alibaba Cloud Linux 2 ECS インスタンスの Intel SGX ドライバーでメモリリークが発生した場合の対処方法

最終更新日:May 27, 2025

このトピックでは、Alibaba Cloud Linux 2 を実行している Elastic Compute Service (ECS) インスタンスの Intel Software Guard Extension (SGX) ドライバーでメモリリークが発生する問題の原因と解決策について説明します。

問題の説明

次の構成の Alibaba Cloud Linux 2 インスタンスの Intel SGX ドライバーでメモリリークが発生すると、システムメモリが枯渇する可能性があります。

  • イメージ: Alibaba Cloud Linux 2.1903 LTS 64 ビット。

  • カーネルバージョン: kernel-4.19.91-23.al7 以前。uname -r コマンドを実行して、カーネルバージョンを表示できます。

  • インスタンスファミリー: c7t、r7t、または g7t。

ほとんどのメモリは、Intel SGX のテストプロセスアプリケーションによって占有されています。エラー情報は次のように表示されます。

// oom-killer が systemd-journal によって呼び出されました: gfp_mask=0x6200ca(GFP_HIGHUSER_MOVABLE), nodemask=(null), order=0, oom_score_adj=0
// systemd-journal cpuset=/ mems_allowed=0
// CPU: 0 PID: 415 Comm: systemd-journal Not tainted 4.19.91-23.al7.x86_64 #1
// ハードウェア名: Alibaba Cloud Alibaba Cloud ECS, BIOS 0.0.0 02/06/2015
// 呼び出しトレース:
//  dump_stack+0x66/0x8b
//  dump_global_header+0x12/0x10f
//  oom_kill_process+0x2cf/0x310
//  out_of_memory+0xf7/0x4c0
//  __alloc_pages_nodemask+0xf07/0xfd0
//  ? blk_flush_plug_list+0xd7/0x220
//  pagecache_get_page+0x8c/0x350
//  filemap_fault+0x37e/0x6e0
//  ext4_filemap_fault+0x2c/0x3b
//  __do_fault+0x38/0x170
//  do_fault+0x2eb/0x640
//  __handle_mm_fault+0x621/0xa20
//  ? apic_timer_interrupt+0xa/0x20
//  handle_mm_fault+0x106/0x1c0
//  __do_page_fault+0x1ba/0x480
//  do_page_fault+0x32/0x140
//  ? async_page_fault+0x8/0x30
//  async_page_fault+0x1e/0x30
// RIP: 0033:0x55a1ca49516f
// コード: 無効な RIP 値です。
// ... (その他のレジスタ情報)
// ホストの制限の結果として / 内のタスクが kill されました
// メモリ情報:
// ... (メモリ情報)
// メモリ不足: プロセス 1431 (app) のスコア 1 を kill するか、子を犠牲にする
// kill されたプロセス 1431 (app) total-vm:33571940kB, anon-rss:320kB, file-rss:48kB, shmem-rss:0kB
// oom_reaper: プロセス 1431 (app) を回収しました。anon-rss:0kB, file-rss:0kB, shmem-rss:0kB

原因

Arch、X86、Kernel、CPU、SGX、および encl.csgx_encl_mm_release_deferred 関数が、Encl 構造体の参照カウントを適切に処理できません。Enclave Page Cache (EPC) メモリを使用するプロセスが fork されると、Encl の参照カウントはゼロ以外になり、暗号化メモリ (EPC) のリークが発生します。物理メモリが使い果たされると、共有メモリを使用して暗号化メモリがスワップアウトされ、最終的に暗号化されていないメモリが使い果たされます。

解決策

警告
  • カーネルのアップグレードは、互換性と安定性の問題を引き起こす可能性があります。Alibaba Cloud Linux 2 のリリースノートでカーネルの機能を確認し、カーネルバージョンをアップグレードする際は注意してください。

  • 再起動操作によりインスタンスが一時的に停止し、実行中のサービスが中断され、データ損失が発生する可能性があります。そのため、重要なインスタンスデータをバックアップしてから、オフピーク時にインスタンスを再起動してください。

  • インスタンスのカーネルバージョンが 4.19.91-23.al7.x86_64 以前の場合は、次の手順を実行します。

    1. カーネルを最新バージョンにアップグレードします。

      // カーネルをアップデートする
      sudo yum update kernel
    2. 新しいカーネルバージョンを有効にするために、インスタンスを再起動します。

      // システムを再起動する
      sudo reboot
  • インスタンスのカーネルバージョンが 4.19.91-23.al7.x86_64 の場合は、カーネルライブパッチをインストールします。

    // カーネルホットフィックスをインストールする
    sudo yum install -y kernel-hotfix-5577959-`uname -r | awk -F"-" '{print $NF}'`