ما هو الخطأ في التوت بي



يعتبر Raspberry Pi جهازًا شهيرًا جدًا لا يُعرف عن قدرته على تحمل التكاليف ، والتنوع ، والقدرات ، والمجتمع النابض بالحياة. من السهل العثور على مواقع ومقالات من المعجبين ، لكن معظم الناس لا يعرفون نقاط ضعفها حتى يعانون هم أنفسهم ويبحثون عن معلومات في المنتديات.

سأحاول التحدث عن بعض المشكلات التي واجهتها شخصيًا ، فضلاً عن بعض المشكلات النموذجية التي تظهر غالبًا في الأشخاص الذين لا يشكون في أي شيء بشأنها. وأخيرًا ، لماذا لا أوصي Pi لبعض التطبيقات ، وخاصة خدمات NAS مثل NextCloudPi و Open Media Vault. آمل أن يوفر هذا الوقت لي حتى لا أكرر كل هذا في المنتديات.

لقد كان لدي العديد من التوت بي وقد تم استخدامها لسنوات عديدة. عندما ظهر النموذج الأول في عام 2012 ، أصبح معلمًا مهمًا في سوق اللوحات المفردة. على الرغم من وجود العديد من المجالس الجيدة بالفعل ، مثل Beagleboard و Odroid ، فقد كانت باهظة الثمن ، ولم يتمكن سوى المشجعين المتشددين من شرائها واختبارها.

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

ولكن الآن هو عام 2019 وحان الوقت للنظر من جديد. في رأيي ، هناك بدائل أكثر انفتاحًا وذات جودة أفضل بنفس السعر. سأحاول شرح.

الأداء




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

فيما يلي شريحة SMSC LAN9514 ، التي تتصل بـ SoC باستخدام قناة USB واحدة ، تعمل كمحول USB إلى Ethernet ولوحة وصل USB في نفس الوقت. وبالتالي ، فإن Ethernet و USB يجلسان على نفس القناة ويتنافسان مع بعضهما البعض ، مما يتناقض مع الاستخدام المعتاد لـ NAS ، عند تنزيل شيء عبر الشبكة وتخزينه على محرك أقراص USB ، ناهيك عن إضافة RAID هنا.

للسبب نفسه ، حتى عندما أصدروا أخيرًا نموذجًا بدعم Gigabit Ethernet في العام الماضي ، فإن أداء الشبكة الحقيقي لم يقترب أبدًا من جيجابت ، ويبلغ الحد الأقصى 40 ميجابايت / ثانية في صافي السرعة وبحد أقصى 20 ميجابايت / ثانية ، إذا نقل إلى جهاز USB . في ذلك الوقت ، كانت هناك بالفعل لوحات رخيصة مع شبكة جيجابت إيثرنت حقيقية و USB3.

في الواقع ، لا تمر Wi-Fi عبر SMSC ، ولكنها تتصل بشريحة BCM4343 عبر SDIO ، لذلك يمكن تجنب عنق الزجاجة بطريقة ما باستخدام Wi-Fi. ومع ذلك ، فإن شريحة Wi-Fi ليست كاملة القدرة ، بل يجب عليها التعامل مع التداخل المحيط ، لذلك ليس البديل المثالي.

لهذه الأسباب ، لا أوصي باستخدام Pi كـ NAS ، سواء كان Open Media Vault أو Nextcloud.

الدماغ الحقيقي بي - مصدر مغلق




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

توجد مشكلة مماثلة في Raspberry Pi ، حيث يتم دمج وحدة المعالجة المركزية CPU و GPU في شريحة BCM2837B0 نفسها. المعالج المركزي هو ARM A53 رباعي النواة 64 بت بسرعة 1400 ميجاهرتز (في Pi 3B) ، والمعالج الرسومي هو VideoCore IV 32 بت ثنائي النواة بتردد 400 ميجاهرتز. تكامل وحدة المعالجة المركزية CPU و GPU شائع في عالم الأجهزة المحمولة لأنه يقلل من استهلاك السعر والطاقة. يستخدم المنافسان NXP iMX و Allwinner مقاربة مماثلة.

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

في بداية التنزيل ، يتم تعطيل معالج Raspberry Pi تمامًا (تقنيًا في حالة إعادة الضبط ) وهو GPU الذي يقوم بتشغيل النظام. يمكنك إلقاء نظرة على المجلد /boot وستجد مقاطع ثنائية يبدأ بها GPU المعالج ونظام التشغيل ThreadX OS الخاص به ( bootcode.bin و start.elf ). اقرأ المزيد عن عملية التنزيل هنا .

إنه GPU الذي يحمّل بطاقة SD ، ويقوم بتنزيل هذه النقاط ويقرأ التكوين من الملف النصي config.txt ، والذي نقوم بتحريره لضبط إعدادات الفيديو أو رفع تردد التشغيل على GPU. لينكس لا يشارك هنا.

عندما تسمح وحدة معالجة الرسومات (GPU) لوحدة المعالجة المركزية بتحميل نواة لينكس ، فإنها لا تترك المسرح فقط ، حيث تعمل فقط كمعالج رسومات . لا ، لا يزال GPU هو المفتاح الرئيسي. هل فكرت يومًا في من يعرض هذه الشعارات عندما يتصل Pi بـ HDMI؟ أم أن رموز البرق أو درجة الحرارة هذه في أيقونات التحذير؟ بالضبط ما يفعله ThreadX على GPU ، ولا يعرف Linux ما يجري على الإطلاق.

قد لا نعرف الوظائف الكاملة لوحدة معالجة الرسومات ، لكننا نعرف شيئًا ما يكون مسؤولًا عنه. بالنسبة لهذه المقالة ، من المهم أن يقوم ThreadX بمراقبة انخفاض الجهد - وهي مشكلة واسعة الانتشار ، كما سنرى لاحقًا ، وتقليل تردد المعالج لمنع فشل المعالج وتجميده. لذلك ، في البشر ، تعمل الأجهزة بتردد 600 MHz بدلاً من 1400 MHz ، في أحسن الأحوال. هذا الاختناق يبدأ من 4.65 فولت ويمكن أيضا أن يكون سببها درجة الحرارة. في الوقت نفسه ، لا يزال Linux يعتقد أن النظام يعمل بشكل طبيعي على تردد كامل.

هذا فقط ما نراه. نظرًا لأن نظام التشغيل الرئيسي مملوك ، فليس لدينا أي طريقة لمعرفة ما الذي يفعله أو الذي يمكنه فعله ، لذلك هناك دائمًا مشكلة خصوصية.

هناك براءة اختراع واحدة على الأقل مدرجة في النقطة مغلقة المصدر تحظر فتح الشفرة حتى عام 2025 على الأقل ، لكننا لا نعرف ما إذا كان سيتم ذلك حتى ذلك الحين. كانت هناك محاولات لعكس هندسة VideoCore IV وإنشاء برامج ثابتة مفتوحة المصدر لها. لسوء الحظ ، توفي المشروع قبل أن يخرج شيئا مفيدا. كما هو الحال مع Android blobs ، هذه مهمة صعبة للغاية.

مشاكل التغذية



هذا ليس خطأ تقنيًا في Raspberry Pi ، ولكنه خطأ مستخدم نموذجي.

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

تم تصميم الموصل microUSB في الأصل للحصول على 1.8 أمبير فقط ، وعلى الرغم من كونه معيارًا قديمًا ، يمكنك العثور على أجهزة شحن تعطي المزيد ، لذا يحاول الكثير من الناس استخدام أجهزة شحن الهاتف القديمة 1 أ أو شراء محولات رخيصة على الإنترنت لتشغيلها توت العليق. لكن Pi جهاز كمبيوتر ، وهو يتطلب مصدر طاقة عالي الجودة ومستقر يوفر 5 فولت ثابت عند الإدخال بقوة تصل إلى 2.5 أ. ليس فقط هناك حاجة إلى محول لائق ، ولكن أيضًا اتصال عالي الجودة (أو سيحدث انخفاض في الجهد) ، ولكن أكثر أهمية أنك تحتاج إلى كابل جيد ، وإلا فإن الجهد عبره سينخفض ​​إلى حد كبير. تعد الكابلات السيئة أكثر شيوعًا من مصادر الجهد غير المستقر ، لذا تأكد من استخدام كبل جيد: ربما 20AWG أو ما شابه ، أو مجرد شراء مصدر طاقة رسمي. الاستنتاج هو أنه لن يعمل كل شاحن USB بشكل صحيح ، حتى لو كان 2.5A 5V.

أضف هذا إلى ما ناقشناه في القسم الأخير ، وسوف تبدأ في فهم الصورة الكبيرة. يعمل معظم المستخدمين على أجهزتهم بتردد منخفض ، ويخفي GPU ذلك منهم ، لذلك فهم يعملون في الواقع بتردد مخفض قدره 600 ميجاهرتز: هو نفسه تقريباً ARMv6 على أول Pi.

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

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

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

تحقق من وجود مشاكل في الطاقة




استغرق الأمر وقتًا طويلاً ، لكننا تمكنا من تسجيل المشكلة على مستوى kernel. إذا رأيت هذه الرسالة في سجلات النظام:

  kern: crit: [1701.464833 2.116656] تم اكتشاف الجهد المنخفض!  (0x00050005)
 kern: info: [1707.668180 6.203347] تطبيع الجهد (0x00000000 

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

يمكن للأمر vcgencmd الحصول على معلومات النظام من البرامج الثابتة ThreadX.

 # vcgencmd get_config int arm_freq=1000 core_freq=500 sdram_freq=600 over_voltage=6 disable_overscan=1 force_pwm_open=1 

يمكنك استخدام vcgencmd measure_clock arm و vcgencmd measure_volts للتحقق من التردد والجهد الحقيقي. فيما يلي مثال على الإخراج من برنامج نصي لمراقبة tkaiser.

 # With a crappy PSU and/or Micro USB cable output looks like this # on a RPi 3: # # 44.0'C 600 MHz 1010000000000000000 1.2V # 44.5'C 600 MHz 1010000000000000000 1.2V # 44.0'C 600 MHz 1010000000000000101 1.2V # 44.0'C 600 MHz 1010000000000000101 1.2V # 44.0'C 600 MHz 1010000000000000101 1.2V # 44.5'C 600 MHz 1010000000000000000 1.2V # 45.1'C 600 MHz 1010000000000000101 1.2V # # With an ok-ish cable it looks like this (when running cpuburn-a53): # # 48.3'C 1200 MHz 0000000000000000000 1.3312V # 48.3'C 1200 MHz 0000000000000000000 1.3312V # 48.3'C 1200 MHz 0000000000000000000 1.3312V # 48.3'C 1200 MHz 0000000000000000000 1.3312V # 50.5'C 1200 MHz 0000000000000000000 1.3312V # 56.4'C 600 MHz 0000000000000000000 1.2V # 54.8'C 600 MHz 1010000000000000101 1.2V # 55.3'C 600 MHz 1010000000000000101 1.2V # 55.8'C 600 MHz 1010000000000000101 1.3312V # 53.7'C 600 MHz 1010000000000000101 1.2V # 51.5'C 600 MHz 1010000000000000101 1.2V # 51.0'C 600 MHz 1010000000000000101 1.2V # # And only by bypassing the crappy connector you can enjoy RPi 3 # performing as it should (please note, there's a heatsink on my RPi # -- without throttling would start and then reported clockspeed # numbers start to get funny): # # 75.2'C 1200 MHz 1010000000000000000 1.3250V # 75.8'C 1200 MHz 1010000000000000000 1.3250V # 75.8'C 1200 MHz 1010000000000000000 1.3250V # 76.3'C 1200 MHz 1010000000000000000 1.3250V # 76.3'C 1200 MHz 1010000000000000000 1.3250V # 73.6'C 1200 MHz 1010000000000000000 1.3250V # 72.0'C 1200 MHz 1010000000000000000 1.3250V # 70.4'C 1200 MHz 1010000000000000000 1.3250V # # Now with a pillow on top for some throttling: # # 82.2'C 1200/ 947 MHz 1110000000000000010 1.3250V # 82.7'C 1200/ 933 MHz 1110000000000000010 1.3250V # 82.7'C 1200/ 931 MHz 1110000000000000010 1.3250V # 82.7'C 1200/ 918 MHz 1110000000000000010 1.3250V # 82.2'C 1200/ 935 MHz 1110000000000000010 1.3250V # 79.9'C 1200/1163 MHz 1110000000000000000 1.3250V # 75.8'C 1200 MHz 1110000000000000000 1.3250V # # And here on RPi 2 with crappy USB cable and some load # # 50.8'C 900 MHz 1010000000000000000 1.3125V # 49.8'C 900 MHz 1010000000000000000 1.3125V # 49.8'C 900/ 600 MHz 1010000000000000101 1.2V # 49.8'C 900/ 600 MHz 1010000000000000101 1.2V # 48.7'C 900/ 600 MHz 1010000000000000101 1.2V # 49.2'C 900/ 600 MHz 1010000000000000101 1.2V # 48.7'C 900 MHz 1010000000000000000 1.3125V # 46.5'C 900 MHz 1010000000000000000 1.3125V # # The funny thing is that while the kernel thinks it's running # with 900 MHz (performance governor) in reality the 'firmware' # throttles down to 600 MHz but no one knows :) 


الخاتمة



أعتقد حقًا أن Raspberry Pi أصبح حدثًا مهمًا للغاية في تاريخ أجهزة الكمبيوتر ذات اللوحة المفردة ، ولكنه يتخلف اليوم من حيث الجودة والأداء والانفتاح. هناك بدائل بأسعار معقولة حيث دفع المطورين المزيد من الاهتمام لهذه القضايا.

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

Source: https://habr.com/ru/post/ar440584/


All Articles