
في هذه المقالة ، أود التحدث في شكل علمي شائع حول تحسين وقت الاستجابة في منصات التداول للبورصات والبنوك (HFT). كمرجع ، نحن نتحدث عن أوقات من مئات النانوثانية إلى مئات من الثانية. بالنسبة لمعظم التطبيقات الأخرى ، فإن العديد من طرق التحسين أدناه ليست ذات صلة ببساطة لأنه لا توجد مثل هذه المتطلبات الصارمة.
عادة ما نعتبر الأداء في وحدات النطاق الترددي. على سبيل المثال في Gigaflops. يتم تقليل مهمة التحسين في مثل هذه الحالات إلى إجراء أكبر عدد ممكن من العمليات الحسابية لكل وحدة زمنية أو حل المشكلة في أقل وقت ممكن. تم تصميم تصميم المعالج في المقام الأول لتحقيق الحد الأقصى لعدد العمليات الحسابية لكل وحدة من الوقت وتقنيات التحسين القياسية لنفسه.
ومع ذلك ، هناك تطبيقات يكون فيها وقت الاستجابة أكثر أهمية ، على سبيل المثال ، منصات التداول في تجارة الكمبيوتر (HFT) ، ومحركات البحث ، والروبوتات ، والاتصالات. وقت الاستجابة هو وقت تنفيذ عملية "منفردة" من هذا النوع ، على سبيل المثال ، من استلام حزمة تحتوي على عروض أسعار حالية من البورصة إلى إرسال أمر عملية التبادل. في الواقع ، يرتبط زمن الاستجابة والإنتاجية (عدد العمليات من هذا النوع لكل وحدة زمنية) ارتباطًا وثيقًا ، لكن الفرق أساسي. غالبًا ما يكون من الممكن زيادة الإنتاجية ببساطة عن طريق إضافة أجهزة (المزيد من الخوادم) ، ولكن تحسين وقت الاستجابة بهذه الطريقة يمثل مشكلة (باستثناء حالات التحميل القصوى).
تستخدم العديد من التقنيات الممتازة لتحسين وقت الاستجابة. يحسن البعض كلاً من زمن الاستجابة والإنتاجية في نفس الوقت ، بينما يعمل البعض الآخر على تحسين واحد على حساب الآخر. على سبيل المثال ، لتحسين الإنتاجية ، يعد التخزين المؤقت نموذجيًا لمعالجة مجموعة من الحزم في كل مرة. من الواضح ، بالنسبة لوقت الاستجابة لحزمة واحدة ، فإن هذا الأسلوب ضار.
في منصات التداول ، يعد استقرار وقت الاستجابة مهمًا جدًا أيضًا. تحدث معظم الأرباح والخسائر خلال الحركات الحادة للأسواق ، مصحوبة بنشاط مرتفع بشكل غير طبيعي. يجب أن تتحمل المنصة مثل هذه الأحمال. أي قابس يمكن أن يسبب خسائر ملموسة.
بشكل عام ، يعد تحسين وقت الاستجابة منخفض المستوى هذا موضوعًا معقدًا يتطلب فهمًا جيدًا لمكدس الشبكة ، وجوهر نظام التشغيل ، وأداء المعالج والنظام الأساسي ، وتزامن مؤشر الترابط الفعال. مهمتي هي شرح كل هذه الأشياء المعقدة مع مثال بسيط ومفهوم.
عمل المكتب
دعنا نستخدم القياس التالي. تخيل مجموعة من الأشخاص الذين يعملون في مكتب. تحدث الاتصالات من خلال تبادل الرسائل على الورق (الحروف). كل حرف يحتوي على المرسل إليه والمرسل والمهمة. توضع الحروف على طاولات معينة في المكتب. يوجد موظفون مهمتهم تلقي رسائل من العالم الخارجي ووضعها على الطاولات. يلتقط آخرون رسائل من الجداول ويمررونها إلى صانعي القرار. كل صانع قرار يعمل فقط مع نوع معين من الحروف (أو المهام).
يقرأ صانع القرار الرسائل المخصصة له ويقرر ما إذا كانت هذه المهمة ستكتمل أم تؤجل أم لا. مهام التنفيذ مكدسة على جدول منفصل. يلتقط العمال الخاصون رسائل من هذا الجدول ويوزعونها على المؤدين. يجب الرد على بعض الرسائل خارج المكتب ، على سبيل المثال ، إرسال تأكيد إلى المرسل الخارجي.
لتكون أقرب إلى الواقع ، دعنا نعقد الظروف أكثر من ذلك بقليل. على سبيل المثال ، المكتب عبارة عن شبكة معقدة من الغرف والممرات ، ولا يمكن لأنواع مختلفة من العمال الانتقال إلى أماكن معينة يمكنهم الوصول إليها. كما يقول علماء الرياضيات ، من دون فقدان التعميم ، افترض أن مكتبنا ، في ظل الظروف العادية ، يعالج 200 رسالة يوميًا بمتوسط وقت معالجة الرسالة يبلغ 5 دقائق.
لذلك ، مهمتنا هي تقليل وقت معالجة الرسائل. في هذه الحالة ، من المستحسن ألا يتجاوز الحد الأقصى لوقت المعالجة المتوسط أكثر من مرتين ، على سبيل المثال. وهذا يعني ، يجب التعامل مع رشقات نارية من النشاط بشكل فعال.
إذن من أين نبدأ؟ أسهل طريقة لتوظيف المزيد من الموظفين هي معالجة المزيد من الرسائل. من الجيد البحث عن عمال سريعين ، ثم يتم تقليل وقت المعالجة. دعنا نقول أننا استأجرنا يوسين بولت ونهائي الأولمبياد الآخرين. ربما انخفض وقت المعالجة إلى دقيقتين. ولكن من الواضح أنه لا يوجد مكان للمضي قدمًا في هذا الاتجاه. لا أحد يعمل بشكل أسرع. تم الوصول إلى الحد الأقصى. عند مقارنة هذه الطرق مع جهاز كمبيوتر ، فإن توظيف الأشخاص يشترون أجهزة إضافية (الخوادم ، والمعالجات ، والنوى) لزيادة عدد سلاسل عمليات التنفيذ. يشبه توظيف الرياضيين شراء أسرع حديد (الحد الأقصى للتردد في المقام الأول).
ربما تخطيط مكتبنا ليس الأمثل. يجب توفير مساحة كافية للعمال للعمل بكفاءة. ربما توسيع الممرات ، وإلا فإن الناس يجب أن تفسح المجال لبعضها البعض ، وفقدان الوقت الثمين؟ دعنا نوسع. لنقم أيضًا بزيادة الغرف قليلاً حتى لا يتجمع الناس عند الاقتراب من الطاولات. إنه يشبه شراء خادم به عدد أكبر من النوى ومزيد من الذاكرة وعرض النطاق الترددي I / O.
بالإضافة إلى ذلك ، يمكننا التبديل إلى الخدمة السريعة بدلاً من البريد العادي لتبادل الرسائل مع العالم الخارجي. من ناحية الكمبيوتر ، يشبه هذا اختيار وتحسين معدات الشبكة ومكدس الشبكة الخاص بنظام التشغيل. كل هذا هو تكلفة إضافية ، لكننا نفترض أنها ستؤتي ثمارها بالتأكيد.
لذلك ، بعد الابتكارات ، انخفض وقت معالجة الرسائل الخاص بنا إلى دقيقة واحدة. يمكن تدريب العمال أيضًا على تحسين عملية الاتصال والتنفيذ. ربما هذا سوف يعطي 15 في المئة مع الدافع الصحيح. إنه يعلم أننا وصلنا إلى 51 ثانية. هذا مشابه لتحسين البرامج.
والخطوة التالية هي محاولة تجنب الاصطدام بين عمالنا سريعة الحركة. عنق الزجاجة المحتمل هو النهج المتبع في الجداول. من المستحسن أن يحصل العمال على إمكانية الوصول الفوري والمتزامن إلى المكاتب التي يحتاجون إليها. يمكنك فرز الرسائل على الجداول عند وضع (وضع في مجلدات منفصلة) لتسريع الوصول. قد يكون للرسائل أيضًا أولويات مختلفة. في البرنامج ، هذا هو تناظرية تزامن الموضوع. يجب أن يكون للتيارات الوصول غير المحدود والمتوازي إلى البيانات. غالبًا ما يؤدي إصلاح مشكلات مزامنة مؤشر الترابط إلى زيادة هائلة في إنتاجية النظام ويساعد على تحسين أوقات الاستجابة. بمعنى معالجة رشقات النشاط ، يصعب المبالغة في تقدير تأثير خوارزمية المزامنة المثلى.
بالإضافة إلى ذلك ، قد يجد العمال أنفسهم في بعض الأحيان أمام باب مغلق. مشاكل بسيطة أخرى من هذا النوع يمكن أن تسبب إزعاج وتأخير. يُنصح بالوفاء بالشروط التالية: لا يتجاوز عدد الأشخاص في أي مبنى قدرته ، وسرعة الموظفين غير محدودة ، ولا يتم اتخاذ أي إجراءات لا تتعلق بالعمل الرئيسي ، ولا يدخل أي شخص خارجي في عملية العمل. في مصطلحات الكمبيوتر ، هذا يعني أن عدد مؤشرات الترابط لا يتجاوز أبدًا عدد النوى المتاحة ، حيث تم تكوين النظام للحصول على الحد الأقصى من التردد / الأداء ، يتم إيقاف تشغيل أوضاع الاقتصاد ، وضع Turbo قيد التشغيل ، ونواة نظام التشغيل والتطبيقات الأخرى معزولة ولا تؤثر (تقريبًا) على منصة التداول.
الآن حان الوقت للنظر بعناية أكبر في الظروف في المكتب. هل تفتح الأبواب بسهولة؟ هو الكلمة الانزلاق؟ هذا هو تقريبا نفس تحليل التفاعلات مع نظام التشغيل. إذا لم يكن هناك شيء للتحسن ، يمكنك محاولة تجنب استخدام أجزاء معينة. على سبيل المثال ، بدلاً من تسليم الرسائل عبر المكتب ، لماذا لا تحاول إلقاءها من نافذة إلى أخرى؟ أنت تقول غير مريحة؟ قد يكون غير مريح ، ولكن بسرعة. هذا مشابه لاستخدام نهج تجاوز kernel في مكدس الشبكة.
بدلاً من استخدام مكدس الشبكة لنظام التشغيل ، يقوم kernel bypass بتنفيذ مكدس الشبكة في مساحة المستخدم. يساعد هذا في التخلص من نسخ البيانات غير الضرورية بين النظام ومكدس المستخدم والتأخير في تنفيذ دفق استلام الرسائل. في تجاوز kernel ، عادةً ما ينتظر تدفق الاستلام بنشاط. لا يجلس على قفل نظام التشغيل ، لكنه يتحقق باستمرار من متغير القفل حتى يمنحه الإذن بالتنفيذ.
في الواقع ، إذا بدأنا في إلقاء الرسائل عبر النوافذ ، فلنفعل ذلك بكفاءة. الخيار الأكثر موثوقية هو المرور عبر النافذة من يد إلى يد. يستخدم هذا المبدأ في بروتوكول TCP. هذا ليس هو الخيار الأسرع. UDP يسمح لك ببساطة إسقاط رسالة دون اعتراف. إنه أسرع. لا أحد مطلوب للانتظار. أعتقد أن هذا هو الحد؟ لا ، لا يزال بإمكانك تعلم رمي النافذة من خلال سقوط الرسالة مباشرة على الجدول المرغوب وفي المجلد المرغوب. هذا النهج يسمى الوصول المباشر للذاكرة عن بعد (RDMA). أعتقد أننا قللنا وقت معالجة الثواني إلى 35.
أو ربما بناء مكتب من نقطة الصفر بدلا من تكييف المكتب الحالي لاحتياجاتنا؟ هذا يوفر ظروف عمل مثالية. ربما سيؤدي ذلك إلى تحسين وقت الاستجابة من الثواني إلى 20 ، أو حتى أقل. تصميم المكتب الخاص هو استخدام مجموعة بوابة المجال القابلة للبرمجة (FPGA). يشبه FPGA معالجًا مبرمجًا به الأجهزة لحل مشكلة معينة. يتم تشفير المعالج العادي لتنفيذ مجموعة محددة من الإرشادات حول أنواع معينة من البيانات كما يتم إصلاح مؤشر ترابط التنفيذ (يجب عدم الخلط بينه وبين مؤشر ترابط التطبيق). بخلاف المعالج ، فإن FPGAs غير مبرمجة مسبقًا لمجموعة من التعليمات وأنواع البيانات وتدفق التنفيذ. تتم برمجتها لمهمة محددة وفي هذه الحالة تكون قادرة على تنفيذها فقط (حتى إعادة البرمجة اللاحقة). البرمجة الفعالة FPGA ليست مهمة سهلة. قد يتطلب إجراء تغييرات على البرنامج أيضًا بذل الكثير من الجهد. على الرغم من أن FPGA لا يعني ضمنا توظيف Usain Bolt (الترددات أقل بكثير من ترددات المعالج) ، ولكن التوازي غير المحدود لتنفيذ التعليمات يتيح تحقيق أوقات معالجة أقل للرسائل من المعالج.
حسنًا ، في الختام ، سوف أوصي بأدوات تحليل الأداء للبرنامج. تساعدك تقنية Intel VTuneTM Amplifier وتقنية Intel Processor Trace في معرفة التفاصيل حول أين تهدر وقت وحدة المعالجة المركزية والسبب في ذلك.
إذا كنت مهتمًا بالموضوع ، يمكنك قراءة مقالاتي على Intel Developer Zone (باللغة الإنجليزية) ، والتي توفر أيضًا نصائح تقنية عملية حول تحسين وقت الاستجابة.
- https://software.intel.com/en-us/articles/optimizing-computer-applications-for-latency-part-1-configuring-the-hardware
- https://software.intel.com/en-us/articles/optimizing-computer-applications-for-latency-part-2-tuning-applications