سؤال

لدي حاليا بشكل كبير متعدد الخيوط تطبيق الملقم وأنا التسوق في جميع أنحاء جيدة متعددة الخيوط مخصص الذاكرة.

حتى الآن أنا ممزقة بين:

  • الشمس umem
  • جوجل tcmalloc
  • إنتل خيوط بناء كتل مخصص
  • إيمري بيرغر الكنز

من ما كنت قد وجدت الكنز قد يكون أسرع ، ولكن لم أسمع به قبل اليوم ، لذلك أنا أشك إذا كان حقا جيدة كما يبدو.أي شخص لديه تجربة شخصية تحاول هذه allocators?

هل كانت مفيدة؟

المحلول

لقد استعملت tcmalloc وقرأت عن الكنز.سواء مماثلة تطبيقات و يحقق كل خطية تقريبا أداء القياس فيما يتعلق بعدد من المواضيع/وحدات المعالجة المركزية (وفقا البيانية في مواقعهم الخاصة).

لذلك:إذا كان الأداء هو حقا لا يصدق حاسمة ، ثم القيام الأداء/اختبار الحمل.وإلا مجرد لفة النرد واختيار واحد من المذكورة (مرجحة سهولة الاستخدام على الهدف الخاص بك منصة).

و من trshiv الرابط, يبدو الكنز ، tcmalloc ، ptmalloc كل مقاربا السرعة.عموما, tt يبدو ptmalloc هو الأمثل أخذ غرفة صغيرة ممكن, الكنز هو الأمثل المفاضلة من سرعة + استخدام الذاكرة ، tcmalloc هو الأمثل نقية السرعة.

نصائح أخرى

الطريقة الوحيدة أن أقول حقا وهو مخصص الذاكرة هو الصحيح للتطبيق الخاص بك هو محاولة بعض.كل allocators ذكرها كانت مكتوبة من قبل الناس الذكية و سوف تغلب الآخرين على واحد معين microbenchmark أو آخر.إذا كان كل التطبيق الخاص بك يعمل طوال اليوم malloc واحد 8 بايت قطعة في الخيط مجانا في موضوع ب ، و لا تحتاج إلى التعامل مع أي شيء آخر على الإطلاق ، ربما يمكن كتابة مخصص الذاكرة أن يدق السراويل قبالة أي من تلك المدرجة حتى الآن.انها فقط لن تكون مفيدة جدا من ذلك بكثير.:)

لدي بعض الخبرة في استخدام الكنز حيث أعمل (ما فيه الكفاية حتى أن واحدة من أكثر غموضا معالجة الخلل في الآونة الأخيرة 3.8 الإفراج وجد نتيجة هذه التجربة).انها جيدة جدا مخصص - ولكن كيف جيدة بالنسبة لك يعتمد على عبء العمل الخاص بك.وكنت لا تضطر إلى دفع ثمن الكنز (على الرغم من انها ليست مكلفة للغاية) من أجل استخدامها في مشروع تجاري دون GPL التعرف على التعليمات البرمجية الخاصة بك.

جدا تكييفها قليلا ptmalloc2 كان مخصص وراء سي العمومية هو malloc لبعض الوقت الآن, وهو لا يصدق على نطاق واسع واختبارها.إذا كان الاستقرار هو المهم فوق كل شيء, قد يكون خيار جيد, ولكن لم تذكر في القائمة الخاصة بك ، لذا سأفترض أنه خارج.بعض أعباء العمل, انه رهيب لكن نفس الشيء ينطبق على أي الغرض العام malloc.

إذا كنت على استعداد لدفع ثمنها (و هو سعر معقول في التجربة) ، SmartHeap SMP هو أيضا خيارا جيدا.أكثر من غيرها من allocators المذكورة مصممة قطرة في malloc/حرة جديد/حذف البدائل التي يمكن LD_PRELOAD تريد.SmartHeap يمكن استخدامها بهذه الطريقة أيضا ، ولكنه يشمل أيضا كامل المخصصات المتصلة API التي تمكنك من ضبط allocators إلى ومضمون قلبك.في الاختبارات التي قمنا به (مرة أخرى ، محددة جدا لتطبيق معين), SmartHeap كان عن نفس الكنز الأداء عندما تكون بمثابة قطرة في malloc الاستبدال ؛ الفرق الحقيقي بين اثنين هو درجة من التخصيص.يمكنك الحصول على أفضل أداء وأقل الأغراض العامة تحتاج الخاص بك مخصص أن يكون.

و اعتمادا على استخدامك الحالة العامة الغرض مؤشرات مخصص قد لا يكون ما تريد استخدامه في كل شيء ؛ إذا كنت باستمرار malloc & مجانا التعرف على الأجسام التي هي كلها نفس الحجم ، قد ترغب في مجرد كتابة بسيطة لوح مخصص.لوح تخصيص يستخدم في العديد من الأماكن في نواة لينكس التي تناسب هذا الوصف.(أود أن أعطيك بعض الروابط المفيدة لكن انا مستخدم جديد و تجاوز سعة مكدس قررت أن المستخدمين الجدد لا يسمح أيضا مفيدة كل واحد في الإجابة.جوجل يمكن أن تساعد بها جيدا بما فيه الكفاية ، على الرغم من.)

أنا شخصيا أفضل والتوصية ptmalloc كما مؤشرات مخصص.الكنز هو جيد ، ولكن في تقييم فريقي هل بين الكنز و ptmalloc قبل بضع سنوات ، ptmalloc كان أفضل.ما أعرف ptmalloc قد حول لعدة سنوات و هو على نطاق واسع جدا تستخدم مؤشرات مخصص.

قد تجد هذه المقارنة مفيدا.

ربما هذا هو الطريق الخطأ إلى نهج ما كنت طالبا ، ولكن ربما تكتيك مختلف يمكن استخدامها تماما.إذا كنت تبحث حقا سريع مخصص الذاكرة ربما يجب عليك أن تسأل لماذا تحتاج إلى إنفاق كل هذا الوقت تخصيص الذاكرة عندما كنت قد مجرد الحصول على بعيدا مع تخصيص مكدس من المتغيرات.تخصيص مكدس ، في حين أن أكثر مزعج ، الحق في القيام به يمكن أن يوفر لك الكثير في الطريق من مزامنة الخلاف ، وكذلك حفظ غريبة الذاكرة قضايا الفساد من التعليمات البرمجية الخاصة بك.أيضا من المحتمل أن تكون أقل التشرذم التي يمكن أن تساعد.

كنا يبخلون على المشروع حيث عملت منذ بضع سنوات.بدا العمل العظيم.لدي خبرة ويؤته أخرى allocators.وينبغي أن يكون من السهل جدا في محاولة منها مختلفة و هل اختبار الحمل ؟

على locklessinc مخصص جيدة جدا و المطور هو استجابة إذا كان لديك أسئلة.هناك مقال كتب عن بعض التحسين الحيل المستخدمة قراءة مثيرة للاهتمام: http://locklessinc.com/articles/allocator_tricks/.لقد استعملت في الماضي مع نتائج ممتازة.

enter image description here

وربما التأخر في الرد على سؤالك , ولكن

لماذا لا mallocs إذا كان لديك الأداء هيك ups ؟

أفضل طريقة للقيام malloc من ذاكرة كبيرة نافذة في التهيئة ثم تأتي light weight Memory manager التي من شأنها أن lease out the memory chunks at run time.

هذا يتجنب أي إمكانية نظام المكالمات إذا كان الخاص بك كومة التوسع.

يمكنك محاولة ltalloc (الغرض العام العالمي مخصص الذاكرة مع سرعة سريعة حمام سباحة مخصص).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top