MT5とスピードの関係 - ページ 75

 
Valeriy Yastremskiy:

私はグラフの専門家ではありません。重要度は、他のタスクの開始と現在のタスクの終了の依存関係によって決定される。一般的にそれは難しく、最も悲しいのは、優先順位付けのアルゴリズムをその場で変更することができないことです。良い面では、疑問が生じる前に、開発者から何らかの説明が欲しいところです。複雑ですが、環境整備における正しい目標です。

リアルタイムシステムでの仕組みの説明から抜粋。

一般に優先順位は動的であり、プロセス自身やOSによって実行時に変更される可能性がある。
割り込みへの対応は、CPUに負荷のかかる計算と分離しています。
イベントや割り込みが発生すると、そのハンドラは直ちにレディプロセスのキューに含まれる。
インタラプトハンドラプログラムは、高速な応答を提供する必要があるため、通常、コンパクトになっています。
例えば、新しいデータの入力や、低い優先度で実行されるより複雑なCPU集約的処理に制御を移行することができます。

 
Roman:

ニコライさん、こんにちは。それはそうですね。
しかし、Slavaが語る同期と同じ問題、つまり理不尽なブレーキがかかってしまわないか。
それとも、問題はないのでしょうか?))優先順位と同期させるより、非同期モデルを使わない方が楽なのかも?))

こんにちは。
私は、ある程度の知識と経験はありますが、非同期と割り込みの専門家ではありません。
タイマーの問題は全くないはずです。配列は重要ではないので、重要なのは周期性である。リソースの割り当てを担当するボスがどう処理するかは、あまり重要ではありません。
さらに、私の理解では、タイマーはシステムのハードウェア割り込みをベースにしています。非同期制御の仕組みは、タイマからの割り込みも含めて、すべてハードウェア割り込みで実装されていると思います。
やはり、割り込み自体がどれだけリソースを消費するか気になります。
たとえば、CPUタイマからグローバル変数 1個のインクリメントを実行するシステム割り込みが入ったとします。このインクリメント自体に、システムは約1ナノ秒を要します。でも。

  • 作業再開に必要な実行中のプロセスやスレッドのパラメータをすべて保存するのに、どれくらいの時間がかかるか?
  • この保存はハードウェアで行うのでしょうか、ソフトウェアで行うのでしょうか?
  • プロセスの復元にはどれくらいの時間がかかりますか?
  • この資源集約度を測ることはできるのでしょうか?おそらく、そうではないでしょう。なぜなら、中断の瞬間をどのようにとらえるか?
  • これらのリソースコストは、数十ナノ秒、数百ナノ秒、マイクロ秒、数十マイクロ秒、数百マイクロ秒と、どのようなオーダーになるのでしょうか。そのような情報を得ることができたら面白いですね。

総じて、自分の知識や経験が不足していることを実感しています。ですから、私は開発者と非同期の優先順位について質問することはしないようにしています。特にトレードオーダーやトレード情報の取得など、完璧なシステムを作ろうとすると、いろいろなニュアンスや落とし穴、障害があることは理解しています。
ただ、正直なところ、5で一部の機能を非同期にした理由はいまだに理解できず、非常に不便です。つまり、ChartGet..., ChartTimePriceToXY, ChartXYToTimePriceです。
結局のところ、チャート状態テーブルの充填は非同期であるべきで、コマンドはこのテーブルからデータを読み取るだけでよいと考えるのが論理的である。また、読み取り時のデータが数ミリ秒遅れていても問題ありません。
問題は、仮にこれらのコマンドが非同期でなく、単にチャート状態表の最後の既知のデータを読み取るものであれば、架空のデータの関連性を追求するあまり、数十ミリ秒の遅れが生じ、その間、抽出された関連性はより大きく無関係と なることである。
また、実行時間から判断して、これらの関数は4では非同期ではなかったと思われます。

 
Roman:

リアルタイムシステムでの仕組みの説明から抜粋。

通常、優先順位は動的であり、実行時にプロセス自身やOSによって変更される可能性があることを意味する。
割り込みに対する反応は、CPUに負荷のかかる計算から切り離されています。
イベントや割り込みが発生すると、そのハンドラは直ちにレディプロセスのキューに含まれる。
割り込みハンドラプログラムは、高速な応答、
例えば新しいデータの入力、低い優先度で実行されるより複雑なプロセッサ集約的な処理への制御の受け渡しなどが必要なため、通常コンパクトに作られています。

説明したとおりです))))もちろん、優先順位のロジックは動的なものです。そして、これがレベル設定の難しさである。優先レベルを設定しても、下の環境の動的優先順位付けロジックではその実行時間を決定できない。ターミナルは常にワインやリナックス環境の上にあり、下の環境の優先順位付けロジックに影響を与えることができない。

 
Nikolai Semko:


すべての質問に回答することを前提としているわけではありません。

割り込み自体がどれだけリソースを消費するか
ほとんどの場合、プロセッサの周波数に依存します。

さらに再開するための、保存にかかる時間
量子化ベースのアルゴリズムによると、アクティブなプロセスが変更されるのは以下の場合です。

  • プロセスが終了し、システムから退出した場合
  • エラー発生
  • プロセスが STANDBY 状態に切り替わりました。
  • プロセスがプロセッサーの時間を使い果たし

割り込みの受け止め方
プリディバイダは
、直列に接続された1つ以上のTトリガとして機能するクロック周波数分周器です。

 
Roman:

投げかけられた質問には、すべて答えられるとは限らない。

勉強してこい(最低10年)、このスレにポイ捨てするなよ。

質問は、ここではトレーニングを変えて、別のクラスで議論します。

 
Nikolai Semko:
  • 動作再開に必要なプロセスやスレッドのパラメータをすべて保存するのに、どれくらいの時間がかかりますか?
  • この保存はハードウェアで行うのでしょうか、ソフトウェアで行うのでしょうか?

286以降何も起こらない? 覚えていないし、理解もできないが、Pentium-1以降(昔、本を読んだことがある)。

プロセッサはプロテクトモードで動作します。 どのプロセッサにも仮想メモリが割り当てられており、メモリバンク(RAMセル)の物理アドレスはプロセッサ自身によって仮想アドレスに変換(というか逆?)されます(覚えていませんが、専用のレジスタとアドレス変換テーブルへの仮想ポインタがあるようです)。それは、すべてのIntelプロセッサを区別する、いわゆるプロセッサコアであり、キャッシュではありません!ハードウェアはすべて起こっており、測定できません。

ニコライ・セムコ
  • プロセスの回復にはどれくらいの時間がかかるのでしょうか?

Win上のプログラムは、プロセスとして登録し、少なくとも1つのスレッドを作成する必要があります。

スケジューラがどのように働くかは私には興味がなく、プロセスの優先順位を上げればよいのです。

ニコライ・セムコ
  • この資源強度を測定することは可能なのでしょうか?おそらく、中断の瞬間をどう捉えるか、でしょうね。
  • このリソースコストは、何十、何百ナノ秒、何マイクロ秒、何十、何百マイクロ秒の順なのでしょうか?そのような情報を得ることができたら面白いですね。

割り込みはハードウェアであり、OSがドライバを使って処理します。

タイマー?- OSのフールプルーフについて、WM_TIMERでググってみてください - 詳しいはずです。

プロセッサのクロックだけを測定し、プロセッサの計算係数を掛けることができます。それはここで議論されましたhttps://www.mql5.com/ru/forum/352454#comment_18588098 、 パフォーマンスの測定に関する情報のトンをグーグル

 
Renat Fatkhullin:

勉強してこい(最低10年)このスレにポイ捨てするなよ

ここでは、別のトレーニング、別のクラスで問題を議論しています。

選択的にではなく、全員がここに送られるべきなのです ))しかし、いつものように適当な質問をする人に帽子を蹴られる。
ハンドラがブロッキングモードで実行されることが分かってから、この話題を無駄に持ち出さなくなったんです。
問題の本質に触れたのに、それが気に食わないのか。よし、この話題はやめよう。
しかし、同期処理でタイムリーな事象を実現する意味がわかりません。
Slavaさん、Nikolayさん、Valeryさん、建設的な対話をありがとうございました。

 
Igor Makanu:

286プロセッサ以来、何も起こらない? hhz、私は覚えていないし、それを処理したことがないが、間違いなくPentium-1以来(私はそれについての本を読んだ、長い時間前ですが)
それは、すべてのハードウェアは、それが測定可能ではない、それはすべてのIntelプロセッサラインを区別する、いわゆるプロセッサコアです、それはキャッシュではありません!それは、すべてのIntelプロセッサを区別することができます!それは、すべてのPentium-1プロセッサを区別することができます!それは、すべてのIntelプロセッサを区別することができます。

であれば良い。
そうだと思う。ほとんどすべてがハードウェアレベルです。そうでなければ、マルチスレッドの効率が悪くなります。

 
Nikolai Semko:

そうであれば良いのですが、
そうだと思います。ほとんどすべてがハードウェアレベルです。そうでなければ、マルチスレッドの効果は期待できないでしょう。

こう見えても

google: プロセッサ保護モード

私の勘違いでなければ、プロテクトモードはOSカーネルに別の特権レベルを与え、各プロセスの仮想メモリのため、実行中のプログラムのRAMデータを取得することは不可能です・・・まあ、別のプロセスとしてデバッガで実行しない限りは・・・それは別の専門分野ですが )))) 。

でも、はっきり言って、すべてはハードウェアレベルで動いていて、それを測定することは不可能です。そして、キャッシュのことを考え始めたら...。なんで- 問題があれば、解決策を探そう!ドライバを作りたい?)))

SZZ:ドライバを書けばいいんです。TCP-loggerを使ったとき、ドライバとしてインストールすると、すべてのトラフィックを記録し、テーブルのプロセスごとにすべてのトラフィックを表示してくれたのを覚えています......。ただ一つ、ドライバを書くことで、収益性の高いTCPを開発することができると考えています ))))



UPD: Hubr "What is Protected Mode and what does it do"https://habr.com/ru/post/118881/

UPD: ハードウェアレベル(CPU)の特権によるコード実行 -Protected Rings Wiki

 
Renat Fatkhullin:

最も単純なアセンブラ型 inc eax を含む、あらゆる命令のランダムなシングルサンプルでは 、常に失敗が保証 されています。これは、アーキテクチャ的にも、「素直に数千スレッドの時間クアンタを少数のコアに割り当てる」という物理的な限界によるものです。

バカなこと言ってないで、100万回のリクエストに対して1回の異常値をキャッチし続ければいい。

CopyTicksがまれにラグることに気づいた。テストスクリプトを書きました

#include <fxsaber\Benchmark\Benchmark.mqh> // https://www.mql5.com/ru/code/31279

void OnTick()
{
  Sleep(1000);
  
  MqlTick Tick[1];
  
  _B(CopyTicks(_Symbol, Tick, COPY_TICKS_ALL, 0, 1), 100);
  _B(SymbolInfoTick(_Symbol, Tick[0]), 100);
}

とストレスモードで実行しました。SymbolInfoTickは、CopyTicksよりもアラートが顕著に多い。


不満はない。ただ、これらの機能の実装において、ストレス負荷の感じ方の違いはどのように影響するのでしょうか?