Zfs: طلب الميزة: DKMS مخبأ ومتوازي

تم إنشاؤها على ١٠ أكتوبر ٢٠١٩  ·  4تعليقات  ·  مصدر: openzfs/zfs

في الأنظمة الأبطأ (مثل النظام الخاص بي) ، يمكن أن تكون إعادة تجميع ZFS أثناء ترقيات kernel عملية طويلة للغاية ... أقوم حاليًا بإعادة التحويل البرمجي باستخدام DKMS وأنا نصف ساعة بلا نهاية في الأفق بعد.

في الماضي ، كنت قد اخترقت ملف dkms.conf لتمكين ذاكرة التخزين المؤقت وأضفت -j # إلى الأمر make وشهدت تحسينات كبيرة ولا أرى أي جانب سلبي من وجهة نظري للقيام بذلك. أتساءل عما إذا كان من الممكن ، أو من المرغوب فيه ، إضافة خيار لرقم المهمة والقدرة على استخدام ذاكرة التخزين المؤقت (إذا كان مثبتًا على جهاز المستخدم) إلى البرنامج النصي dkms.

بالنسبة إلى رقم الوظيفة ، أدرك أن هذا الأمر أكثر صعوبة لأنه أكثر من تفضيل المستخدم ... أفكر ربما في إنشاء ملف تكوين خارج zfs وأكثر من جزء من البرنامج النصي للتعبئة في توزيعة (ArchLinux PKGBUILD) التي يسمح لي بتعيين رقم الوظيفة دون القلق بشأن التحديث الذي يمحو إعداداتي.

ما رأيك؟

التعليق الأكثر فائدة

في 14 أكتوبر / تشرين الأول 2019 الساعة 2:58 مساءً ، كتب كريستوفر فولتز:

أظن أنك ستجد أن أيا من هذه التغييرات لا تحدث فرقًا كبيرًا. لا يوجد العديد من الملفات التي يجب تجميعها و gcc سريع جدًا (ويجب أن يعمل DKMS بالفعل make بالتوازي). كانت تجربتي أن خطوة البناء ليست الخطوة التي تستغرق وقتًا طويلاً. خطوات ما قبل الإنشاء (على سبيل المثال ، configure ) وخطوات ما بعد الإنشاء (على سبيل المثال ، dracut ) هي ما تستغرق وقتًا طويلاً على أجهزتي.

أوصي بتحديد ملامح عملية الإنشاء على جهازك لمعرفة ما يستغرق وقتًا طويلاً بالفعل والتركيز على تحسين تلك الأجزاء.

لاحظ أيضًا أن الجزء الأكبر من خطوات ما قبل الإنشاء هو التحديد
ما هي واجهات النواة ، وكان ذلك (في الغالب)
يوازي في الماجستير. انخفض وقت التهيئة الخاص بنا من 2.5 دقيقة تقريبًا
إلى ~ 20 ثانية. كان الجزء الأكبر من بناء الوحدات و
مساحة المستخدمين. أظن أنه بمجرد أن جعل هذا التغيير الطريق إلى Debian ، DKMS
سيتم أيضًا تسريع بناء الوحدات النمطية بشكل كبير على الأنظمة التي تحتوي على أكثر من
قل 2 أو 4 نوى.

ال 4 كومينتر

يبدو أنك تحاول إعادة تنفيذ gentoo / funtoo (أو التوزيعات المشابهة القائمة على الكود المصدري) والتي حلت بالفعل معالجة أعلام التجميع على مستوى النظام (سواء كان ذلك فقط مقدار عمل دول مجلس التعاون الخليجي بالتوازي).

IMHO ليس من الجيد التدخل في إعدادات النظام فيما يتعلق بالمترجم. في حالة ما إذا كانت أوقات الإنشاء الطويلة تمثل مشكلة بالنسبة لمستخدم DKMS ... فإن إضافة howto ("تسريع التجميع") سيكون هو الأسلوب المعقول.

يمكنك بالفعل القيام بما تطلبه من خلال إنشاء ملف تكوين DKMS. انظر إلى صفحة man لـ dkms تحت _DKMS.CONF_ و _DKMS.CONF OVERRIDES_ للحصول على معلومات حول كيفية تحديد التوجيهات لتجاوز الخيارات المحددة في dkms.conf التي تأتي مع حزمة DKMS .

على سبيل المثال ، بالنسبة لـ RHEL / CentOS / Fedora و ZFS 0.7.13 ، إذا نظرت إلى ملف dkms.conf الذي يتم توفيره مع RPMs (على سبيل المثال ، /var/lib/dkms/spl/0.7.13/source/dkms.conf و /var/lib/zfs/0.7.13/source/dkms.conf ) ، يمكنك أن ترى أن تصميمات SPL و ZFS تستخدم فقط MAKE[0]="make" . لتجاوز ذلك ، أنشئ الملفات /etc/dkms/spl.conf و /etc/dkms/zfs.conf . في الملفات ، يمكنك تحديد الأمر MAKE لاستخدامه. فقط لتمكين البناء المتوازي ، استخدم:

MAKE[0]="make --jobs"

سيؤدي هذا إلى تشغيل جميع الوظائف بالتوازي ولن يحد من العدد الذي يتم تشغيله. الخيار الأفضل هو قصره على عدد المعالجات على الجهاز:

MAKE[0]="make --jobs $(nproc)"

ومع ذلك ، لا ينبغي أن يكون أي مما سبق ضروريًا كإصدارات حديثة من DKMS افتراضيًا لتشغيل make بالتوازي مع عدد الوظائف المحددة على عدد المعالجات على النظام. انظر إلى /usr/sbin/dkms على نظامك. لدي خطوط مثل هذه:

get_num_cpus()
{
   # use nproc(1) from coreutils 8.1-1+ if available, otherwise single job
   if [ -x /usr/bin/nproc ]; then
        nproc
   else
        echo "1"
  fi
}
...
do_build()
{
    ...
    local the_make_command="${make_command/#make/make -j$parallel_jobs KERNELRELEASE=$kernelver}"

    invoke_command "{ $the_make_command; } >> $dkms_tree/$module/$module_version/build/make.log 2>&1" "$the_make_command" background || \
        report_build_problem 10 $"Bad return status for module build on kernel: $kernelver ($arch)" \
        $"Consult $dkms_tree/$module/$module_version/build/make.log for more information."
...
parallel_jobs=${parallel_jobs:-$(get_num_cpus)}

# Make sure we're not passing -j0 to make; treat -j0 as just "-j"
[[ "$parallel_jobs" = 0 ]] && parallel_jobs=""

نظرًا لأن spl.dkms و zfs.dkms set MAKE[0]="make" ، يجب أن يقوم dkms بالفعل بتشغيل الأمر make بالتوازي.

تم توثيق تمكين ccache في صفحته man . إذا كنت تستخدم طريقة الروابط الرمزية ، فطالما كان /usr/local/bin في مسارك قبل /usr/bin ، فسيتم استخدام ccache تلقائيًا. إذا كنت ترغب في استخدام طريقة أمر البادئة ، فيجب إعادة تعريف CC في بيئتك المحلية إلى شيء مثل ccache gcc .

أظن أنك ستجد أن أيا من هذه التغييرات لا تحدث فرقًا كبيرًا. لا يوجد العديد من الملفات التي يجب تجميعها و gcc سريع جدًا (ويجب أن يعمل DKMS بالفعل make بالتوازي). كانت تجربتي أن خطوة البناء ليست الخطوة التي تستغرق وقتًا طويلاً. خطوات ما قبل الإنشاء (على سبيل المثال ، configure ) وخطوات ما بعد الإنشاء (على سبيل المثال ، dracut ) هي ما تستغرق وقتًا طويلاً على أجهزتي.

أوصي بتحديد ملامح عملية الإنشاء على جهازك لمعرفة ما يستغرق وقتًا طويلاً بالفعل والتركيز على تحسين تلك الأجزاء.

في 14 أكتوبر / تشرين الأول 2019 الساعة 2:58 مساءً ، كتب كريستوفر فولتز:

أظن أنك ستجد أن أيا من هذه التغييرات لا تحدث فرقًا كبيرًا. لا يوجد العديد من الملفات التي يجب تجميعها و gcc سريع جدًا (ويجب أن يعمل DKMS بالفعل make بالتوازي). كانت تجربتي أن خطوة البناء ليست الخطوة التي تستغرق وقتًا طويلاً. خطوات ما قبل الإنشاء (على سبيل المثال ، configure ) وخطوات ما بعد الإنشاء (على سبيل المثال ، dracut ) هي ما تستغرق وقتًا طويلاً على أجهزتي.

أوصي بتحديد ملامح عملية الإنشاء على جهازك لمعرفة ما يستغرق وقتًا طويلاً بالفعل والتركيز على تحسين تلك الأجزاء.

لاحظ أيضًا أن الجزء الأكبر من خطوات ما قبل الإنشاء هو التحديد
ما هي واجهات النواة ، وكان ذلك (في الغالب)
يوازي في الماجستير. انخفض وقت التهيئة الخاص بنا من 2.5 دقيقة تقريبًا
إلى ~ 20 ثانية. كان الجزء الأكبر من بناء الوحدات و
مساحة المستخدمين. أظن أنه بمجرد أن جعل هذا التغيير الطريق إلى Debian ، DKMS
سيتم أيضًا تسريع بناء الوحدات النمطية بشكل كبير على الأنظمة التي تحتوي على أكثر من
قل 2 أو 4 نوى.

يمكنك بالفعل القيام بما تطلبه من خلال إنشاء ملف تكوين DKMS. انظر إلى صفحة man لـ dkms تحت _DKMS.CONF_ و _DKMS.CONF OVERRIDES_ للحصول على معلومات حول كيفية تحديد التوجيهات لتجاوز الخيارات المحددة في dkms.conf التي تأتي مع حزمة DKMS .

على سبيل المثال ، بالنسبة لـ RHEL / CentOS / Fedora و ZFS 0.7.13 ، إذا نظرت إلى ملف dkms.conf الذي يتم توفيره مع RPMs (على سبيل المثال ، /var/lib/dkms/spl/0.7.13/source/dkms.conf و /var/lib/zfs/0.7.13/source/dkms.conf ) ، يمكنك أن ترى أن تصميمات SPL و ZFS تستخدم فقط MAKE[0]="make" . لتجاوز ذلك ، أنشئ الملفات /etc/dkms/spl.conf و /etc/dkms/zfs.conf . في الملفات ، يمكنك تحديد الأمر MAKE لاستخدامه. فقط لتمكين البناء المتوازي ، استخدم:

MAKE[0]="make --jobs"

سيؤدي هذا إلى تشغيل جميع الوظائف بالتوازي ولن يحد من العدد الذي يتم تشغيله. الخيار الأفضل هو قصره على عدد المعالجات على الجهاز:

MAKE[0]="make --jobs $(nproc)"

ومع ذلك ، لا ينبغي أن يكون أي مما سبق ضروريًا كإصدارات حديثة من DKMS افتراضيًا لتشغيل make بالتوازي مع عدد الوظائف المحددة على عدد المعالجات على النظام. انظر إلى /usr/sbin/dkms على نظامك. لدي خطوط مثل هذه:

get_num_cpus()
{
   # use nproc(1) from coreutils 8.1-1+ if available, otherwise single job
   if [ -x /usr/bin/nproc ]; then
        nproc
   else
        echo "1"
  fi
}
...
do_build()
{
    ...
    local the_make_command="${make_command/#make/make -j$parallel_jobs KERNELRELEASE=$kernelver}"

    invoke_command "{ $the_make_command; } >> $dkms_tree/$module/$module_version/build/make.log 2>&1" "$the_make_command" background || \
        report_build_problem 10 $"Bad return status for module build on kernel: $kernelver ($arch)" \
        $"Consult $dkms_tree/$module/$module_version/build/make.log for more information."
...
parallel_jobs=${parallel_jobs:-$(get_num_cpus)}

# Make sure we're not passing -j0 to make; treat -j0 as just "-j"
[[ "$parallel_jobs" = 0 ]] && parallel_jobs=""

نظرًا لأن spl.dkms و zfs.dkms set MAKE[0]="make" ، يجب أن يقوم dkms بالفعل بتشغيل الأمر make بالتوازي.

تم توثيق تمكين ccache في صفحته man . إذا كنت تستخدم طريقة الروابط الرمزية ، فطالما كان /usr/local/bin في مسارك قبل /usr/bin ، فسيتم استخدام ccache تلقائيًا. إذا كنت ترغب في استخدام طريقة أمر البادئة ، فيجب إعادة تعريف CC في بيئتك المحلية إلى شيء مثل ccache gcc .

أظن أنك ستجد أن أيا من هذه التغييرات لا تحدث فرقًا كبيرًا. لا يوجد العديد من الملفات التي يجب تجميعها و gcc سريع جدًا (ويجب أن يعمل DKMS بالفعل make بالتوازي). كانت تجربتي أن خطوة البناء ليست الخطوة التي تستغرق وقتًا طويلاً. خطوات ما قبل الإنشاء (على سبيل المثال ، configure ) وخطوات ما بعد الإنشاء (على سبيل المثال ، dracut ) هي ما تستغرق وقتًا طويلاً على أجهزتي.

أوصي بتحديد ملامح عملية الإنشاء على جهازك لمعرفة ما يستغرق وقتًا طويلاً بالفعل والتركيز على تحسين تلك الأجزاء.

cvoltz واو ، أشعر بالخجل من نشر طلب ميزة دون التعمق في ما قدمته ... أنت على حق ، هذان خياران قابلان للتطبيق يحافظان على الملكية بعيدًا عن ZFS وحتى جانب إدارة الحزمة من الأشياء (وهو المكان الذي اعتقدت أن هذا الخيط سيذهب إليه).

ونعم ، بعد الاطلاع على السجلات ... أنت على صواب ... تعد خطوة التكوين تخلفًا كبيرًا بالنسبة لي ، ناهيك عن جانب الترجمة.

على أي حال ، أنا أقدر ردك ، وكذلك جميع الآخرين ... سأغلق هذا ... آسف للضوضاء!

هتافات
كريس

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات