מנהל ההתקן הפתוח nouveau היה הגורם להשהיית השמע שלי
זו הערה קצרה המתעדת אבחנה, מפני שלקח לי זמן להגיע אליה והסיבה לא הייתה במקום שבו חיפשתי.
הסימפטום
שמע בהשהיה נמוכה בלינוקס פירושו להריץ את JACK עם חוצץ קטן, כך שהזמן בין לחיצת מקש במקלדת MIDI לצליל שיוצא מהרמקולים הוא כמה אלפיות שנייה ולא עיכוב מורגש. כשהמכונה אינה עומדת בקצב, JACK מדווח על xrun: חוצץ שלא התמלא בזמן, שאותו שומעים כנקישה או כנפילה.
קיבלתי xruns. לא סופה שלהם, אלא טפטוף קבוע, וטפטוף מספיק כדי לעשות הקלטה בלתי אפשרית. כל החשודים
הרגילים נבדקו: קרנל עם יכולת זמן אמת, קבוצת השמע עם המגבלות הנכונות ב-/etc/security/limits.d/,
הגדרות המסגרות והמחזורים הנכונות ב-qjackctl, בלי החלפה לדיסק, בלי שינוי תדר מעבד. שום דבר לא
עזר.
מציאת האשם
הכלי שהצביע על הדרך היה latencytop, שמראה אילו נתיבים בקרנל מעכבים תהליכים וכמה זמן. הרצתו
כ-root בזמן ש-JACK רץ:
sudo latencytop
העבריין הראשי לא היה כרטיס הקול, הדיסק או הרשת. הוא היה מנהל ההתקן הגרפי. מנהל ההתקן בקוד פתוח
nouveau לכרטיסי NVIDIA בילה פרקי זמן ארוכים בתוך הקרנל כשהפסיקות חסומות בפועל, וחוט השמע חיכה
מאחוריו.
אפשר לראות את אותו דבר מהצד השני על ידי צפייה במונה ה-xrun ב-JACK בזמן שעושים דברים על המסך. הזזת חלונות או גלילת דף אינטרנט ייצרו נקישות. שולחן עבודה דומם לחלוטין לא. השמע היה בסדר; מנהל ההתקן הגרפי גנב את הזמן שהוא נזקק לו.
התיקון
להחליף את nouveau במנהל ההתקן הקנייני של NVIDIA. באובונטו של אותה תקופה זו חבילה אחת:
sudo apt-get install nvidia-current
sudo reboot
ודאו ש-nouveau אינו נטען אחר כך; החבילה אמורה להוסיף אותו לרשימה השחורה, אבל בדקו:
lsmod | grep nouveau
אם זה אינו מדפיס דבר, מנהל ההתקן הפתוח נעלם. ה-xruns נעלמו איתו. אותו קרנל, אותן הגדרות JACK, אותו כרטיס, אפס xruns במשך אחר צהריים של נגינה.
מה לקחת מזה
אני איש קוד פתוח והייתי מעדיף להריץ את מנהל ההתקן הפתוח. אבל למשימה המסוימת הזו, בשנה המסוימת הזו, מנהל ההתקן הקנייני היה ההבדל בין תחנת עבודה לשמע שאפשר להשתמש בה לצעצוע, ולהתיימר אחרת היה עולה לי בתחנת העבודה.
שתי נקודות כלליות יותר.
ראשית, כשתהליך זמן אמת מאחר, אל תניחו שהבעיה נמצאת בתת-המערכת שלו עצמו. כל דבר שמחזיק את הקרנל זמן רב מדי מעכב את כל השאר, ומנהל ההתקן הגרפי הוא מועמד מוביל מפני שהוא עושה עבודה רבה בהקשר של פסיקה ונכתב על ידי אנשים שאכפת להם מקצבי פריימים ולא מחוצץ השמע שלכם.
שנית, latencytop הוא הכלי בדיוק לשאלה הזו. הוא אינו אומר לכם שהתוכנית שלכם איטית; הוא אומר לכם
למה התוכנית שלכם חיכתה. זו השאלה שיש לכם באמת כשאתם רודפים אחרי xruns, והלוואי שהייתי מגיע אליו
ראשון.