כמה מילים על הדרייבר של nVidia ועל מסכים בעייתיים

Nvidia-logoישנו דרייבר אחד בלינוקס שיש לו היסטוריה ארוכה של בעיות "פוליטיות" והגדרות טכניות – זהו הדרייברים של כרטיסי המסך של nVidia. רבות כבר נכתב על הדרייברים של nVidia, כמה הם סגורים, מורכבים, לא תואמים תמיד, ו"עקשנים" בסירובם לרוץ בסביבות מסויימות.

לאלו החדשים בעולם הלינוקס, אתן היסטוריה קצרה (השאר יכולים לדלג כמה פיסקאות קדימה).

בלינוקס ישנם 2 סוגים של דרייברים לכרטיסים הגרפיים של nVidia ל-PC (ל-ARM זה סיפור אחר לגמרי). ישנו הדרייבר הפתוח בשם Nouveua. זהו דרייבר שנעשה ע"י "הנדסה לאחור" (Reverse Engineering) והוא בקוד פתוח. הדרייבר הזה נותן תמיכה טובה בגרפיקה דו/תלת מימד, וידאו, Boot גרפי ועוד. החל מפברואר חברת nVidia החלה גם לתרום קוד לדרייבר הזה (ולפני כן היא בשקט תרמה כרטיסים חדשים לפני יציאה רשמית כך שכרטיסים חדשים נתמכו ע"י הדרייבר ביום הראשון שהם יצאו לשוק). הדרייבר הזה יכול לשמש משתמשי לינוקס עם 1-2 מסכים בצורה די טובה אבל הוא חלש בביצועים בכל הקשור למשחקים, עריכת וידאו, תוכנות תלת מימד וכו'.

מהצד השני ישנו דרייבר בינארי רשמי של nVidia. הדרייבר הזה תומך בכל תכונה שיש לכרטיסי המסך מבוססי nVidia כולל תמיכה בדברים חדשים כמו Display Port, Thunderbolt (ללא "הכנסה חמה"), כרטיסים מרובים במחשב אחד, SLI, גרפיקה ווידאו מהיר (אותה מהירות כמו Windows). הדרייבר עצמו הוא סגור (הסיבות שהן סגור: הדרייברים של לינוקס, מק ו-Windows משתמשים באותו קוד בסיס ועקב שילוב של קוד מגורמים שונים מחוץ ל-nVidia – אין אפשרות לשחרר אותו), מה שגורם לו להיות בעייתי בעולם הלינוקס, עולם שבו גירסת הליבה משתנה תדיר והמשתמש גם יכול לשנות את הגירסה, ומכיוון שרוב הדרייבר הוא מודול ליבה (מפלצתי – 11.3 מגהבייט. שזה פי כמה וכמה יותר מכל מודול בליבה), יש צורך בקימפול מחדש בכל פעם שמשנים קרנל (ב-fedora יש את dkms ו-akmod שמטפלים בכך אוטומטית בעת הפעלת הלינוקס) – כך שמבחינת ביצועים הדרייבר יתן לך תוצאות טובות, אולם הדרך להגיע לשם היא לא תמיד קלה.

אחת הבעיות הגדולות עם הדרייבים הרשמיים של nVidia היא להסתדר עם ציוד בעייתי, וכשאני מדבר על ציוד בעייתי, אני מדבר על ציודים עלומי שם שלא ממש מחזירים מידע שהדרייבר מצפה לקבל. כך לדוגמא, הח"מ משתמש במסך IPS עם רזולוציית 2560X1440 מייצור קוריאני ללא שם (על המסך כתוב CrossOver אולם כשמנסים לקרוא דרך לינוקס וכרטיס המסך את הפרטים של הכרטיס, מקבלים תשובה של QHD270QHD270QHD270 וג'יבריש בכל הקשור לרזולוציות שהמסך תומך). כשהחלק הגרפי (Xorg) בלינוקס עולה, הדרייבר מיד נופל בטענה שהוא לא מכיר את המסך הזה. לעומתו הדרייבר החופשי Nouveau מבין שזהו עוד מסך עלום שם עם רזולוצייה של 2560X1440 והוא פשוט מתעלם ממה שהמסך אומר ומפעיל עליו את הרזולוציה הנ"ל – וזה עובד מצוין, רק שביצועי תלת מימד/משחקים וכו' לא תקבל.

הפתרון עם הדרייבר הסגור לבעיה זו היא לעקוף את המסך הבעייתי (אם יש לך יותר ממסך אחד), אך לפני כן אנו צריכים להבין איך הדרייבר מזהה את המסכים המחוברים אליו.

בעקרון יש מספר סוגי חיבורים שהדרייבר מתייחס אליהם. אני אתעלם כרגע מחיבורים פנימיים (LVDS – זה מתאים למערכות משובצות ומערכות אחרות שאינן חלק מהפוסט הזה) ונתייחס לחיבורים חיצוניים:

  • חיבור VGA נחשב עבור הכרטיס הגרפי כחיבור למסך CRT ישן (כן, מסכי LCD עם חיבור VGA משתמשים במעגלים פנימיים להדמיית מסך אנלוגי) ולפיכך אם תחבר מסך ב-VGA, הדרייבר יציין לעצמו שיש CRT
  • חיבורים כמו DVI, DVI-DL, Thunderbold, DisplayPort, HDMI הם חיבורים דיגיטליים ולפיכך הדרייבר ממפה אותם כחיבורי DFP (ר"ת Digital Flat Panel) ונותן להם מספרים, כך שאם יש לך מסך עם אחד מהחיבורים שציינתי לעיל, הוא ימפה אותם לפי סדר מספרי DFP-0, DFP-1 וכו'. קישוריות כזו כוללת תקשורת דו כיוונית מלאה והמסך נותן הרבה יותר מידע על עצמו לכרטיס המסך. הוא נותן לכרטיס הגרפי פרטים כמו גודל פיזי של הפאנל, כל האזולוציות שהוא תומך בהן, קצבי רענון מסך שהוא תומך בהם, נקודות לאינצ' (ככל שיש יותר נקודות – האותיות יהיו יותר קטנות ולכן אם אתה רואה את הטקסט באותיות מאוד קטנות – כדאי שתעלה את ה-DPI ל-128 לדוגמא במקום 96 שהוא ברירת המחדל), והאם המסך תומך בכיבוי, צריכת חשמל נמוכה ועוד.

לפיכך, אם המסך הבעייתי הוא בחיבור DFP-1 לדוגמא (כמו במקרה שלי), נצטרך להזין לו שורת ModeLine שתגדיר לו את הרזולוציה והרענון בצורה ידנית (כלומר ספציפית) או שנשתמש בקובץ בינארי פשוט ונבקש מהדרייבר שיתייחס לקובץ הבינארי במקום לנסות לקרוא את פרטי המסך. במידה ויש לך מספר מסכים בעייתיים, תוכל להשתמש בקבצים בינאריים שונים שנמצאים באינטרנט או שפשוט תוכל להזין את ה-ModeLine בתוך קובץ etc/xorg.cong/ כפי שזה מופיע ההרחבה בפוסט הזה.

חשוב לזכור: מכיוון שרוב הפצות הלינוקס מפעילות את עצמן במצב גרפי, אם התקנת את הדרייבר הבינארי, סביר להניח שתקבל סמן מהבהב ותו לא. לחץ על מקשים ALT F2 והתחבר כ-root ולאחר מכן הפעל פקודת: telinit 3 כדי שהלינוקס יעבור למצב טקסטואלי. לאחר שהגדרת את השינויים, תוכל לנסות אותם ע"י הפעלת פקודת startx (כדאי למחוק את קבצי var/log/Xorg*log/ לפני כן כדי שאם תהיה תקלה – תוכל לראות בקובץ החדש שנוצר היכן התקלה, סביר להניח שתראה זאת בסוף הקובץ ה-log). לאחר שתצליח להיכנס למצב גרפי, צא ממנו ע"י בחירה ב-logout או בחירת reboot.

עוד עניין חשוב: מחשבים ניידים רבים כיום נמכרים עם 2 מעבדים גרפיים: האחד הוא מה שמגיע במעבד (של אינטל) והשני הוא של nVidia. המעבדים של nVidia במחשבים ניידים כמובן שאינן כמו המעבדים בכרטיסים יעודיים, אבל הם יכולים להאיץ דברים מסויימים שצריך, דברים שהמעבד הגרפי של אינטל אין לו שום סיכוי להאיץ בצורה רצינית. השיטה שהמעבד של nVidia עובד במחשבים ניידים כאלו, הואיל ואין יציאת מסך נפרדת, היא להפנות את פלט הצ'יפ הגרפי – לתוך אזור זכרון שהמעבד הגרפי האינטלי נותן לו. תחשבו על זה כמו מסך ירוק או כחול בסרטים: מצלמים את הסרט עם מסך ירוק או כחול ברקע ולאחר מכן מחליפים את המסך הירוק או הכחול בגרפיקה ממוחשבת.

בלינוקס, בשביל להשתמש בכל הטרראם הזה, יש צורך בדרייבר משולב שנקרא BumbleBee (כן, כמו ההוא מ-Transformers). הדרייבר (הוא לא בדיוק דרייבר, זה יותר ערכת סקריפטים וספריות) לאחר ההתקנה אינו מספיק, ויש לבצע alias או לכתוב 2 שורות סקריפט ב-Bash כדי לגרום לאפליקציות להכיר בצ'יפ של nVidia ולרוץ על אותו צ'יפ גרפי. עוד פרטים בדף הבית של BumbleBee.

אם רוצים ביצועים יותר גבוהים מאותם מחשבים ניידיים ועם הצ'יפ של nVidia, אז תכירו את פרויקט Primus והחבילה primus נמצאת בכל גירסת לינוקס נפוצה. ב-Fedora אפשר להתקין בפשטות עם yum install primus

הרצת אפליקציה עם primus: כל מה שצריך זה לאמר למערכת להשתמש במנוע primus הוא להוסיף את הפרמטרים b primus- כלומר אם אני רוצה להריץ glxgears לדוגמא, אז הפקודה תהיה:

optirun -b primus glxgears

בהצלחה

כמה מילים על ספקי אינטרנט, ביטורנט, והאטת מהירות

לאחרונה פורסמו מספר כתבות, הן בוואלה, הן ב-YNET ובמקומות אחרים על ה”טריקים” של ספקיות אינטרנט, ואף הועלו סברות (בלי בדל הוכחה) שהספקיות בודקות את הפאקטים שנכנסים וברגע שהן רואות תכנים כמו טורנטים, הן מאיטות את קצב ההעברה בכוונה. או כפי שהמושג נקרא בשפה הטכנית: DPI (ראשי תיבות של Deep Packet Inspection).

מהיכרות עם המערכות שיש בבזק בינלאומי ובנטויז’ן אני יכול להצהיר כי יכול להיות שיש להם ציוד המאפשר DPI אבל אין בכך שימוש אצל אותן ספקיות (האמינו לי, אני ותיק בתחום ומכיר רבים אצל הספקיות, גם בדרגים בכירים).

מה שכן יש ובהחלט יש בו שימוש הוא דבר שנקרא QoS (ראשי תיבות של Quality of Service) וברשותכם אסביר בקצרה מה זה.

רשת האינטרנט עובדת בפרוטוקול שנקרא TCP/IP והוא מעין “פרוטוקול על” שקובע איך שרת (ולא חשוב אם זה שרת יעודי, שרת וירטואלי, או סתם קופסא קטנה ביתית המעבירה שידורים – היא גם שרת) “ידבר” אל ציוד קצה, בין אם מדובר במחשב אישי, טאבלט, טלפון חכם, או בין שרת לשרת, ציוד קצה לציוד קצה. ב-TCP/IP יש “תת הגדרות” שונות ובין השאר יש:

  • פורטים (Ports) – שמספרם מתחיל ב-1 עד 65535. זה נקרא בעברית “ערוצים”
  • TCP – העברת נתונים ממקום אחד לשני הלוך וחזור
  • UDP – העברת נתונים חד כיוונית מציוד אחד לציוד אחר
  • ויש עוד…

כל אפליקציה משתמשת בפורט מסוים. כך לדוגמא, כאשר אתם גולשים אל הבלוג הזה, המחשב שלכם מתחבר לשרת שלי בפורט 80, הוא פותח מספר חיבורים (בעקרון ברירת המחדל היא 4 חיבורים במקביל) והוא מבקש מהשרת את הדפים לפי הכתובת של הבלוג. השרת שלי נותן את הדפים למחשב שלכם, הדפדפן “מצייר” את הבלוג אצלכם לפי ההוראות שניתנו לו וכך אתם קוראים את הטקסט הזה.

אפליקציה אחרת פופולרית היא FTP שמשתמשת במספר פורטים: 21 זה הפורט הראשי שדרכו התוכנה משוחחת עם שרת FTP, יש ביניהן “דיאלוג” של החלפת שם משתמש וסיסמא, מיקום תיקיה וקבצים, ואז ישנה החלפת קבצים/הורדת קבצים (כאשר בנוסף לפורט 21 יש לעיתים שימוש בפורט 20 בנוסף, כאשר פורט 21 משמש לבקרה והתעבורה עצמה עוברת בפורט 20).

ישנם אפליקציות שמשתמשות בפורטים שונים מרובים, כמו ביטורנט שבמקור עובר עם פורט 6881, אבל ההמלצה היא לתת לו לעבוד עם פורטים 6881-6888. כיום תוכנות הטורנטים מספיק חכמות לעבוד עם טורנטים תחת כל פורט.

עד כאן על קצה המזלג לגבי פורטים ואפליקציות.

כאן נכנס לתמונה ספק האינטרנט ו-QoS.

בעקרון, ספק האינטרנט קונה רוחב פס מסוים בגדלים מסויימים מספק הולכה. בארץ לדוגמא זה Med-1 שיש להם את הקו תת ימי בין ישראל לאיטליה (זה מחולק לכמה סיבים, אחד עובר לחיפה, אחד לתל אביב וכו’). כל הספקים בארץ קונים ממנו רוחב פס מסויים עם כמות מסויימת של תעבורת מידע (הקצאה כמותית). ישנם כל מיני חישובים של מידע יוצא ומידע נכנס, זיכוי וחיוב ועוד דברים – אבל מה שחשוב לדעת: ספק האינטרנט צריך לשלם לא רק על רוחב הפס, אלא גם על כמות המידע שעוברת בו.

עד לאחרונה, Med-1 (מד נאוטילוס) היו הספקים היחידים שיש להם את התשתית בין ישראל לחו”ל (אני ממליץ להסתכל בלינק, יש מפה והסבר בוויקיפדיה העברית), ומכיוון שהם היו (עד לעוד מספר חודשים) מונופול, הם קבעו את הכל מבחינת מחירים. אפס תחרות = מחירים מופקעים ב-ט-י-ר-ו-ף. כל ספקית אינטרנט גדולה קונה בערך רוחב פס של 50 ג’יגהביט – ועם זה הספקית צריכה לעשות ביזנס.

אם ספקית האינטרנט תפתח את כל הקו שרכשה באופן שיוויוני ללקוחות, היא תמצא את עצמה מהר מאוד בפשיטת רגל מסיבה פשוטה: הצרכן הישראלי שותה בקשית רוחב פס ותעבורה, לא חשוב כמה תתן לו, הוא ירצה עוד, וחיוב של 50-300 שקל בחודש פשוט לא מכסה את העלות של רוחב הפס + כמות התעבורה, אז ספקיות האינטרנט החלו להשתמש ב-QoS:

מה זה QoS? זו שיטה שבה בעצם מדרגים תעבורה לפי רמות שונות. כך לדוגמא, רוב הגולשים גולשים וצורכים מידע דרך הדפדפן, כך שפורט 80 מתועדף בצורה גבוהה מאוד. FTP בדרגות יותר נמוכות, SSH יותר נמוך וכך הלאה.

מה אותן רמות אומרות בעצם? יצירת השהיה בין העברת חבילות נתונים (Packets), כלומר אם אני מעביר קובץ בגודל 10 מגהבייט דרך HTTP, הוא יעבור יותר מהר ב-HTTP מאשר ב-FTP.

זה QoS לפי פורטים, דבר שאפשרי לעשות בכל ראוטר (גם בבית אצלכם, אם לדוגמא האח הקטן כל היום מוריד טורנטים, אפשר לתעדף את הטורנט במיקום נמוך ולאפשר לשאר דיירי הבית לגלוש ברשת בצורה נורמלית).

יש עוד שיטה ל-QoS והיא הולכת לפי כתובות IP. בשיטה זו כל הכתובות בהתחלה מתועדפות בצורה נמוכה. כך אם תוריד טורנט של הפרק האחרון בסידרה האהובה עליך, אתה תקבל את הנתונים בצורה איטית (אלא אם יש משתפים בישראל ואז תקבל את זה בצורה מהירה) וכל הגלישה עצמה תהיה בינונית (נסו פעם לשבת בארה”ב או במיוחד באירופה ולראות גלישה מהירה). אם לעומת זאת, תפנה לספק ותבקש לרכוש תעדוף על כתובות ה-IP של העסק שלך (עניין של כמה אלפי שקלים לחודש כמדומני), הכתובות שלך יקבלו תעדוף גבוה, ומהירות תעבורת הנתונים תהיה טובה בהרבה מהמצב הקודם. (זה מה שקורה לדוגמא כיום ב-בזק בי
נלאומי עם ה-Private NGN שלהם).

אז מדוע חברות מוכרות בארץ חיבורים של עד 100 (ובקרוב 200) מגה חיבור אינטרנט “במהירות טיל” כשכל מה שאתה מקבל זה זרזוף במהירות של סוסיתא? כי ככה השיווק בארץ עובד: מבטיחים לך עץ, אתה תקבל עלה, (ולכן המלצתי בעבר לא לרכוש את החבילות הגדולות).

כעת המונופול מסתיים, Med-1 חותכים מחירים על ימין ועל שמאל. בזק בינלאומי סללה סיב (לדאבוני בדיוק אותו מסלולים של Med-1, כך שבשורה לא ממש תגיע משם) ועוד חברה סוללת בימים אלו סיבים מישראל לעולם, כך שכבר השנה (או עד אמצע שנה הבאה) יהיו יותר סיבים המחברים בין ישראל לעולם, מה שאומר שסוף סוף תהיה תחרות.

בערך..

מדוע בערך? כי הריאליסט שבי “צועק” משהו: הרגלים ישנים מתים לאט. לספקיות יהיה יותר רוחב פס מצד אחד, אבל מצד שני לא בטוח שהן יפתחו אותו בצורה משמעותית לציבור הצרכנים הפרטי.

לסיכום: לא, אין DPI. יש QoS ולא רק ספקיות בארץ עושים זאת, גם בארה”ב, אירופה ובכל העולם עושים זאת. ההבדל הענק בינן לבין הספקיות בארץ זה שהספקיות בארץ סוחטות את המיץ עם QoS לצרכנים הפרטיים לטובת רווחים מלקוחות עסקיים שמשלמים הרבה יותר. הצרכנים בארץ לא כל כך מתלהבים מהרעיון לשלם יותר על קבלת מהירות גבוהה יותר (אם זה היה שוס היסטרי, הספקיות בארץ היו מעתיקות מ-בזק בינלאומי, ועד היום הן לא), מה שאומר שהספקיות יצטרכו לשבור את הראש איך למכור לצרכנים חבילות יותר “שוות” ברגע שהן ירכשו את רוחב הפס החדש.