في الأنظمة الأبطأ (مثل النظام الخاص بي) ، يمكن أن تكون إعادة تجميع ZFS أثناء ترقيات kernel عملية طويلة للغاية ... أقوم حاليًا بإعادة التحويل البرمجي باستخدام DKMS وأنا نصف ساعة بلا نهاية في الأفق بعد.
في الماضي ، كنت قد اخترقت ملف dkms.conf لتمكين ذاكرة التخزين المؤقت وأضفت -j # إلى الأمر make وشهدت تحسينات كبيرة ولا أرى أي جانب سلبي من وجهة نظري للقيام بذلك. أتساءل عما إذا كان من الممكن ، أو من المرغوب فيه ، إضافة خيار لرقم المهمة والقدرة على استخدام ذاكرة التخزين المؤقت (إذا كان مثبتًا على جهاز المستخدم) إلى البرنامج النصي dkms.
بالنسبة إلى رقم الوظيفة ، أدرك أن هذا الأمر أكثر صعوبة لأنه أكثر من تفضيل المستخدم ... أفكر ربما في إنشاء ملف تكوين خارج zfs وأكثر من جزء من البرنامج النصي للتعبئة في توزيعة (ArchLinux PKGBUILD) التي يسمح لي بتعيين رقم الوظيفة دون القلق بشأن التحديث الذي يمحو إعداداتي.
ما رأيك؟
يبدو أنك تحاول إعادة تنفيذ 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
setMAKE[0]="make"
، يجب أن يقومdkms
بالفعل بتشغيل الأمرmake
بالتوازي.تم توثيق تمكين
ccache
في صفحتهman
. إذا كنت تستخدم طريقة الروابط الرمزية ، فطالما كان/usr/local/bin
في مسارك قبل/usr/bin
، فسيتم استخدامccache
تلقائيًا. إذا كنت ترغب في استخدام طريقة أمر البادئة ، فيجب إعادة تعريفCC
في بيئتك المحلية إلى شيء مثلccache gcc
.أظن أنك ستجد أن أيا من هذه التغييرات لا تحدث فرقًا كبيرًا. لا يوجد العديد من الملفات التي يجب تجميعها و
gcc
سريع جدًا (ويجب أن يعمل DKMS بالفعلmake
بالتوازي). كانت تجربتي أن خطوة البناء ليست الخطوة التي تستغرق وقتًا طويلاً. خطوات ما قبل الإنشاء (على سبيل المثال ،configure
) وخطوات ما بعد الإنشاء (على سبيل المثال ،dracut
) هي ما تستغرق وقتًا طويلاً على أجهزتي.أوصي بتحديد ملامح عملية الإنشاء على جهازك لمعرفة ما يستغرق وقتًا طويلاً بالفعل والتركيز على تحسين تلك الأجزاء.
cvoltz واو ، أشعر بالخجل من نشر طلب ميزة دون التعمق في ما قدمته ... أنت على حق ، هذان خياران قابلان للتطبيق يحافظان على الملكية بعيدًا عن ZFS وحتى جانب إدارة الحزمة من الأشياء (وهو المكان الذي اعتقدت أن هذا الخيط سيذهب إليه).
ونعم ، بعد الاطلاع على السجلات ... أنت على صواب ... تعد خطوة التكوين تخلفًا كبيرًا بالنسبة لي ، ناهيك عن جانب الترجمة.
على أي حال ، أنا أقدر ردك ، وكذلك جميع الآخرين ... سأغلق هذا ... آسف للضوضاء!
هتافات
كريس
التعليق الأكثر فائدة
في 14 أكتوبر / تشرين الأول 2019 الساعة 2:58 مساءً ، كتب كريستوفر فولتز:
لاحظ أيضًا أن الجزء الأكبر من خطوات ما قبل الإنشاء هو التحديد
ما هي واجهات النواة ، وكان ذلك (في الغالب)
يوازي في الماجستير. انخفض وقت التهيئة الخاص بنا من 2.5 دقيقة تقريبًا
إلى ~ 20 ثانية. كان الجزء الأكبر من بناء الوحدات و
مساحة المستخدمين. أظن أنه بمجرد أن جعل هذا التغيير الطريق إلى Debian ، DKMS
سيتم أيضًا تسريع بناء الوحدات النمطية بشكل كبير على الأنظمة التي تحتوي على أكثر من
قل 2 أو 4 نوى.