PieCloudDB データベースの自社開発メモリ マネージャー ASanAlloc: 製品の品質を保護

メモリ管理はコンピュータ サイエンスの重要な部分であり、オペレーティング システム、ハードウェア、およびソフトウェア アプリケーション間の動的な相互作用に関係します。効果的なメモリ管理により、システムの安定性とセキュリティが確保され、システムの動作効率が向上し、有効なメモリ リソースの使用を最大化し、メモリの合理的な割り当てとリサイクルが可能になり、さまざまなメモリ エラーを防ぐことができます。

コンピューターサイエンスの初期には、メモリ管理はプログラマーによって手動で行われていました。しかし、高度なデジタル時代の到来により、コンピュータ システムはますます複雑になり、メモリの管理と検出のタスクは手作業の範囲を超えています。この課題に対処し、開発者がメモリ エラーを効果的に見つけて修正できるようにするために、一連の高度なメモリ検出ツールが登場しました。これらのツールは、さまざまな種類のメモリ エラーを正確に検出し、詳細な診断情報を提供するため、開発者が問題を特定して解決するのに非常に役立ちます。たとえば、Valgrind と AddressSanitizer という 2 つのよく知られたメモリ検出ツールは、ユーザーの間で非常に人気があります。ただし、どちらのツールにも一定の制限があります。PieCloudDB ソフトウェアの品質を厳密に管理するために、PieCloudDB Database は新しいメモリ マネージャー ASanAlloc を作成しました。

1 既存ツールの限界

PieCloudDB は、クラウドネイティブな分散データベース システムです。メモリ エラーを検出して修正するために、PieCloudDB チームは Valgrind ツールを活用しようとしましたが、Valgrind を使用するとアプリケーションのパフォーマンスが大幅に低下し、場合によっては 10 ~ 50 倍も遅くなる可能性があります。また、開発者にとって非常に厄介な「復帰後のスタック使用」「未定義動作」「スタックバッファオーバーフロー」「グローバルバッファオーバーフロー(グローバルバッファオーバーフロー)」などのエラーもValgrindでは検出できません。

AddressSanitizer は、上記の問題を効果的に検出して対処できるもう 1 つのソリューションです。ただし、メモリをより効率的に操作するために、PieCloudDB には完全な内部メモリ管理メカニズムが備わっています。AddressSanitizer はメモリ管理メカニズムの特殊性により、強力な機能を提供しますが、PieCloudDB 上で直接使用することはできません。

2 ASanAlloc の実装アイデア

PieCloudDB で効果的なメモリ検出を実行するために、メモリ管理メカニズムを徹底的に分析しました。分析を通じて、AddressSanitizer を使用して効果的なメモリ検出を行うには、各メモリ操作 (palloc と pfree) を malloc と free にマッピングする必要があることがわかりました。したがって、palloc と malloc の間で 1 対 1 の対応を確保するために、新しいメモリ マネージャーを革新して実装する必要があります。これにより、より正確かつ効率的なメモリ管理とエラー検出を実現できます。

3 ASanAlloc作成ソリューション

上記の問題と解決策に対応して、PieCloudDB は新しいメモリ マネージャー ASanAlloc を作成しました。ASanAlloc メモリ マネージャーには次の機能があります。

  • Adapt AddressSanitizer メモリ検出ツール

ASanAlloc メモリ マネージャーは、AddressSanitizer メモリ検出ツールと完全に一致します。ASanAlloc を通じて、AddressSanitizer のメモリ エラーの検出と修復機能を最大限に活用でき、それによって PieCloudDB の安定性とセキュリティが向上します。

  • メモリ使用量の統計

ASanAlloc メモリ マネージャーは、メモリ使用量の統計機能を提供します。これにより、メモリ使用量をリアルタイムで監視および追跡でき、メモリ管理の決定に強力なデータ サポートを提供し、システム パフォーマンスとリソース効率のさらなる最適化に役立ちます。

  • メモリコンテキストマッピング

ASanAlloc メモリ マネージャーは、メモリ コンテキスト マッピング機能も提供します。これは、管理者がメモリの割り当てと解放のプロセスを明確に追跡および記録できることを意味し、開発者がメモリ使用パターンをより深く理解し、メモリ関連の問題を効果的に特定して解決できるようにします。

ASanAlloc メモリ マネージャーは次のモジュールで構成されます。

  • メモリ操作管理モジュール: 外部メモリ操作インターフェイスの提供を担当します。
  • グローバル メモリ コンテキスト マッピング モジュール: メモリ アドレスとメモリ コンテキスト間の関係の管理を担当します。
  • メモリブロックメタ情報モジュール: メモリアドレスに対応するメタ情報の記録を担当します。

PieCloudDB の ASanAlloc メモリ マネージャーを使用したメモリ コンテキスト モジュールのアーキテクチャ図は次のとおりです。これは、モジュール間の関係をより明確に示しています。

PieCloudDB の ASanAlloc メモリ マネージャーを使用するメモリ コンテキスト モジュールのタイミング図は次のとおりです。外部インターフェイスの詳細とインターフェイスに対応する内部プロセスが詳しく説明されています。

関連する外部インターフェイスの詳細には、メモリ割り当てインターフェイス palloc およびメモリ解放インターフェイス pfree が含まれます。次に、これら 2 つのインターフェイスの主な論理処理ステップを詳しく紹介します。

3.1 メモリインターフェイスの割り当て palloc 

  • 開発者は、MemoryContext クラスによって提供される palloc インターフェイスを呼び出してメモリ割り当てを適用します。
  • MemoryContext クラスは、ASanContext クラスによって提供されるメモリ操作インターフェイス alloc を呼び出します。
  • ASanContext クラスは、C 標準ライブラリが提供する malloc システム コールを呼び出します。malloc システム コールは、メモリ ブロックを割り当て、メモリ ブロックに対応するアドレスを返します。
  • ASanContext クラスは、メモリ ブロック アドレスと MemoryContext の間のマッピング関係を GlobalMemoryContextTable に書き込みます。
  • ASanContext クラスは、メモリ ブロック アドレスとメモリ ブロック情報の間のマッピング関係を MemoryBlockMetaTable に書き込みます。
  • ASanContext クラスは、呼び出し元にメモリ ブロック アドレスを返します。

3.2メモリインターフェイス pfree の解放

  • 開発者は、MemoryContext クラスによって提供される pfree インターフェイスを呼び出してメモリ解放を適用します。
  • MemoryContext クラスは、ASanContext クラスによって提供されるメモリ操作インターフェイス free_p を呼び出します。
  • ASanContext クラスは、C 標準ライブラリが提供するフリー システム コールを呼び出し、アドレスに応じて対応するメモリ ブロックを解放します。
  • ASanContext クラスは、GlobalMemoryContextTable 内のメモリ ブロック アドレス間のマッピング関係を削除します。
  • ASanContext クラスは、MemoryBlockMetaTable 内のメモリ ブロック アドレスに関するマッピング関係を削除します。
  • ASanContext クラスの free_p インターフェイス呼び出しが完了し、戻ります。

4 アプリケーションのシナリオと例

ASanAlloc メモリ マネージャーの助けを借りて、PieCloudDB の AddressSanitizer ツールのメモリ検出機能を完全に適応させることができました。この強力な組み合わせは、PieCloudDB 開発者が複雑なデータベース環境でさまざまな種類のメモリ エラーを特定し、回避するのに効果的に役立ちます。

最も顕著な問題の 1 つは、メモリ アクセスの境界外の問題です。これは一般的かつ深刻なメモリ エラーであり、対処しないとデータの破損やシステムのクラッシュにつながる可能性があります。ASanAlloc は、問題の特定と解決に効果的に役立ちます。

次の図は、境界外のメモリ アクセスの現象を詳細に示しています。ASanAlloc メモリ マネージャーの助けを借りて、これらの問題を時間内に発見できるだけでなく、提供される詳細情報に基づいて問題の原因を迅速に特定し、効果的な修正を行うことができます。これにより、メモリ エラーの問題を解決する効率が大幅に向上し、PieCloudDB の安定した効率的な動作が保証されます。

日々の開発反復の品質を確保するために、ASanAlloc に基づくメモリ検出機能も PieCloudDB の毎日の CI (Continuous Integration、継続的統合) パイプラインに統合しました。自動化されたツールとプロセスを通じて、コードが送信されたときにリアルタイムのメモリ検出を実行し、潜在的なメモリの問題をタイムリーに発見して修復できます。この早期検出および早期解決メカニズムは、メモリ エラーの問題の影響を防ぐために非常に重要です。

5 ASanAlloc: 品質と安定性の保証

メモリ インストルメンテーションは、高品質でパフォーマンスが高く安全なソフトウェアを構築するために重要です。PieCloudDB によって作成されたこの新しいメモリ マネージャー ASanAlloc は、さまざまなメモリ エラーの問題を効果的に検出するのに役立ちます。同時に、CI パイプラインにメモリ検出機能を統合して、日々の開発反復の品質を確保し、メモリ エラーの問題が安定性に影響を与えるのを防ぎます。システムです。メモリ検出を開発プロセスに統合するこの戦略により、開発効率が向上するだけでなく、PieCloudDB ソフトウェアの品質を常に厳密に管理できるようになります。

Alibaba Cloudが深刻な障害に見舞われ、全製品が影響(復旧) Tumblr がロシアのオペレーティングシステムAurora OS 5.0 を冷却新しいUIが公開 Delphi 12とC++ Builder 12、RAD Studio 12多くのインターネット企業がHongmengプログラマーを緊急採用UNIX時間17 億時代に突入しようとしている (すでに突入している) Meituan が兵力を募集し、Hongmeng システム アプリの開発を計画Amazon が Linux 上の .NET 8 への Android の依存を取り除くために Linux ベースのオペレーティング システムを開発独立した規模はFFmpeg 6.1「Heaviside」がリリースされまし
{{名前}}
{{名前}}

おすすめ

転載: my.oschina.net/u/5944765/blog/10143241