FreeBSD 12.2 erschienen

  • Virtualisierung:
    • Auf Intel-CPUs ohne APICv wird TLP Shadowing genutzt. Dies beschleunigt Windows-Gäste um bis zu Faktor 7.
Ich weiß nicht, was APICv ist, aber da mein T530 schon 8 Jahre alt ist, nehme ich an, dass dieser Laptop darunter fällt. Ich habe gestern zum ersten Mal nach dem Upgrade wieder Win10 gestartet und - wow! - man kann wieder damit arbeiten. Nach all den Intel-Mitigations war das eigentlich nur noch Lösung in allergrößter Not. Sehr schön.
 
Intels VT-x Hardwarevirtualisierung virtualisiert zwar die CPU, aber nicht den Interruptcontroller. Es funktioniert sehr grob so, dass der Hypervisor die Hardwarevirtualisierung einschaltet und damit zum sogenannten VT-x Root wird. Es kann nur einen VT-x Root geben, weshalb immer nur einer Hypervisor parallel laufen kann. Der Hypervisor lässt sich per VT-x virtuelle CPUs geben und baut aus denen virtuelle Maschinen. Aber da der Interruptcontroller, also der PIC oder APIC, nicht virtualisiert ist, muss der Hypervisor das in Software übernehmen. Jedes Mal, wenn der Gast in die entsprechenden Register schreibt, springt die Kontrolle an den Hypervisor zurück. Der Hypervisor reagiert auf die Veränderung und springt anschließend wieder in den Gast. Jeder dieser Sprünge (VMEXIT und VMENTRY in VT-x Sprache) ist extrem teuer, es liegt im Bereich von Millionen CPU-Zyklen. Für die meisten Gäste ist das kein Problem, denn sie konfigurieren den Interruptcontroller einmal beim Boot und lassen ihn hinterher in Ruhe. Die ganze Windows-Familie und Solaris nutzen aber sehr exzessiv Interrupt Prioritäten und nehmen daher hunderte bis tausende Male die Sekunde Änderung an der Interruptcontroler-Konfiguration vor. Das führt dazu, dass die Sprünge zwischen Gast und Hypervisor einen Großteil der verfügbaren CPU-Leistung auffressen.

Intel wäre nun nicht Intel, wenn sie das nicht für eine Chance zur Produktdifferenzierung genutzt hätten:
  • Man führte recht schnell TLP Shadowing ein. Damit wird nur das Prioritätsregister virtualisiert, was das Problem für Windows und Solaris löst. Änderungen der Interruptpriorität verlangen damit keinen Sprung aus dem Gast in der Hypervisor mehr, es wird nicht mehr sinnlos CPU-Leistung verbrannt und alle sind glücklich. Bis auf die allerersten CPUs mit VT-x unterstützen alle Intel-CPUs TLP Shadowing.
  • Mit Ivy Bridge SP kam dann APICv. Es virtualisiert den ganzen Interruptcontroller, der Hypervisor muss nichts mehr selbst implementieren. Das vereinfacht den Code des Hypervisors und bringt in interruptlastigen Workloads noch mal einen merklichen Effizienzsprung. Aber Es blieb den größeren Xeons - E5 Serie und aufwärts - vorbehalten.
Bhyve implementierte bisher zwar APICv, aber kein TLP Shadowing. EInfach, da Bhyves Entwickler den Hypervisor es nur auf größeren Server-CPUs selbst nutzten. Ich war dann letztes Jahr über Weihnachten so nett endlich TLP Shadowing zu implementieren, da ich eine Reihe Windows-VMs auf Xeon E3 laufen lassen wollte. Das Projekt hat sich letztendlich nicht realisiert, aber sozusagen als Abfallprodukt ist Windows in Bhyve auf Intel Desktop und Xeon E3 CPUs nun bedeutend schneller. :)

AMD war davon übrigens nie betroffen. Bis auf frühe CPUs mit der ersten Generation Hardwarevirtualisierung (auf denen Bhyve eh nicht läuft) unterstützen alle AMD CPUs einen virtualisierten Interruptcontroller.
 
Seit 12.2 habe ich auf meinem ThinkPad das Problem, dass Klicks mit dem TrackPoint/TouchPad-Tasten nur sehr unzuverlässig funktionieren. Obwohl das TouchPad im BIOS deaktiviert ist, wird es von 12.2 erkannt. Als workaround habe ich in /etc/sysctl.conf eingetragen:

Code:
# Disable Tap to Click
hw.psm.tap_timeout=0
# "Disable" TrackPad
hw.psm.synaptics.min_pressure=220

xinput:

Code:
$ xinput --list
⎡ Virtual core pointer                        id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                    id=4    [slave  pointer  (2)]
⎜   ↳ System mouse                                  id=6    [slave  pointer  (2)]
⎜   ↳ SynPS/2 Synaptics TouchPad                    id=10   [slave  pointer  (2)]
⎜   ↳ TPPS/2 IBM TrackPoint                         id=11   [slave  pointer  (2)]
⎣ Virtual core keyboard                       id=3    [master keyboard (2)]
    ↳ Virtual core XTEST keyboard                     id=5    [slave  keyboard (3)]
    ↳ System keyboard multiplexer                     id=7    [slave  keyboard (3)]
    ↳ Sleep Button                                    id=8    [slave  keyboard (3)]
    ↳ AT keyboard                                     id=9    [slave  keyboard (3)]

Code:
$ xinput list-props 10                                   
Device 'SynPS/2 Synaptics TouchPad':
        Device Enabled (143):   1
        Coordinate Transformation Matrix (144): 1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000
        libinput Tapping Enabled (300): 0
        libinput Tapping Enabled Default (301): 0
        libinput Tapping Drag Enabled (302):    1
        libinput Tapping Drag Enabled Default (303):    1
        libinput Tapping Drag Lock Enabled (304):       0
        libinput Tapping Drag Lock Enabled Default (305):       0
        libinput Tapping Button Mapping Enabled (306):  1, 0
        libinput Tapping Button Mapping Default (307):  1, 0
        libinput Natural Scrolling Enabled (266):       0
        libinput Natural Scrolling Enabled Default (267):       0
        libinput Disable While Typing Enabled (308):    1
        libinput Disable While Typing Enabled Default (309):    1
        libinput Scroll Methods Available (268):        1, 1, 0
        libinput Scroll Method Enabled (269):   1, 0, 0
        libinput Scroll Method Enabled Default (270):   1, 0, 0
        libinput Click Methods Available (310): 1, 1
        libinput Click Method Enabled (311):    1, 0
        libinput Click Method Enabled Default (312):    1, 0
        libinput Middle Emulation Enabled (275):        0
        libinput Middle Emulation Enabled Default (276):        0
        libinput Accel Speed (277):     0.000000
        libinput Accel Speed Default (278):     0.000000
        libinput Accel Profiles Available (279):        1, 1
        libinput Accel Profile Enabled (280):   1, 0
        libinput Accel Profile Enabled Default (281):   1, 0
        libinput Left Handed Enabled (282):     0
        libinput Left Handed Enabled Default (283):     0
        libinput Send Events Modes Available (284):     1, 1
        libinput Send Events Mode Enabled (285):        0, 0
        libinput Send Events Mode Enabled Default (286):        0, 0
        Device Node (287):      "/dev/input/event5"
        Device Product ID (288):        2, 7
        libinput Drag Lock Buttons (289):       <no items>
        libinput Horizontal Scroll Enabled (290):       1

Zuvor hatte der TrackPoint die id 9. Lässt sich das alte Verhalten wieder herstellen?

Edit: 12.2 scheint den synaptics-Treiber wohl automatisch zu laden. Ein Eintrag in /boot/loader.conf ändert das:
Code:
hw.psm.synaptics_support=0
hw.psm.trackpoint_support=1
 
Achja. Intel und die Hardwarevirtualisierung.
Bei manchen Postings vermisse ich ja die Möglichkeit 2 oder 3 Mal auf "Gefällt mir" klicken zu können.
 
AMD ist mit Hardvirtualisierung schon fast am Markt! Können wir nicht irgendwie die Hardwarevirtualisierungstechnologie des Itanium auf x86 rüberfrickeln?!
*lol*
Ja. Vermutlich war Intel noch geschockt davon, das sie quasi AMD64 übernehmen mussten. Dann wieder was von AMD zu übernehmen kam daher wohl nicht in Frage.

Es war mir übrigens gar nicht mehr bewusst, das AMD da gegenüber Intel nen gewissen Vorsprung hatte.

Womit ich Dir aber uneingeschränkt recht geben muss ist, das es bei Intel nervig ist, das man neue Features (also auch abseits von Virtualisierung) nicht automatisch in allen CPUs landen, sondern das man da aus marketingtechnischen Gründen bei unterschiedlichen CPU-Modellen differenziert.

Ich glaube ja, das man sich im Grunde damit auch ein stückweit selbst ins Bein schießt, weil dann Softwareentwickler eher zurückhaltend sind dann solche Features auch benutzt und die dann zum Großteil auch ungenutzt bleibt.

Was ich an AMD schlecht finde ist, das die da teilweise die ganzen miesen Dinge die Intel in ihre CPUs einbauen dann auch übernehmen wie z.B. die Intel Management Engine.

Überhaupt ist das ja ein Trend, das die Komplexität steigt und steigt. Also nicht nur bei Software, sondern auch bei Hardware. Die negativen Auswirkungen sieht man dann schön an solchen Sachen wie Meltdown/Spectre.

Offenbar verkauft sich semisinnvoller Featurebloat besser als einfache aber dafür solide Sachen.
 
Nicht ohne Grund baut Apple seine Prozessoren selber, nicht nur fürs iPhone sondern demnächst für seine Macs...
 
Naja. Ob die Apple-ARM-Chips dann tatsächlich so schlank sein werden wird man sehen (immerhin haben sie ja so ein Quatsch wie die Secure-Enclave drin). :-)
Möglicherweise läuft es ja auch nur darauf hinaus das man mehr auf Cloud setzt zugunsten lokaler Rechenleistung. Das würde das Grundproblem nicht lösen, sondern allenfalls verlagern.
 
In den Release Notes für 12.2 steht geschrieben, dass cron nun zusätzliche Optionen vor dem Befehl versteht. -n und -q um das Logging und den Mailversand zu steuern. Ich habe nun hier zwei Computer, die ich beide mittels freebsd-update von 12.1 aktualisiert habe. Aber mein cron versteht diese neuen Optionen nicht. Die man-page gibt auch nichts dazu her. Kann das hier jemand nachvollziehen?
 
"man 5 crontab" schaut hier bei mir auf 12.2 gleich aus wie auf einem anderen 12.1 System. Wenn ich die beiden vergleiche, ist das der einzige Unterschied:
Code:
christoph@tunnel:~ % diff -u crontab_5_11 crontab_5_12
--- crontab_5_11     2020-11-09 11:16:54.376754000 +0000
+++ crontab_5_12     2020-11-09 11:17:50.831981000 +0000
@@ -186,4 +186,4 @@
      local time.  For others, the output of the zdump(8) program's verbose
      (-v) option can be used to determine the moment of time shift.
 
-FreeBSD 12.1-RELEASE-p10        April 19, 2019        FreeBSD 12.1-RELEASE-p10
+FreeBSD 12.2-RELEASE            April 19, 2019            FreeBSD 12.2-RELEASE
 
crontab(5) schrieb:
-n No mail is sent after a successful run. The execution output
will only be mailed if the command exits with a non-zero exit
code. The -n option is an attempt to cure potentially copious
volumes of mail coming from cron(8).

-q Execution will not be logged.
Dein Datum unten ist mE auch falsch: FreeBSD 12.2-RELEASE September 24, 2019 FreeBSD 12.2-RELEASE
 
Ja, da ist etwas durcheinander gekommen. Bevor ich da jetzt weiterschreibe, untersuche ich einmal meine Installation.

Hab es: Falsches Userland in der Jail. Aus einem mir noch unbekannten Grund installiert "bsdinstall jail /usr/local/jail/NNN" ein 12.1 Release.
 
Zuletzt bearbeitet:
Aus einem mir noch unbekannten Grund installiert "bsdinstall jail /usr/local/jail/NNN" ein 12.1 Release.
Notfalls machst Du es halt "zu Fuß":
Code:
fetch ftp://ftp.freebsd.org/pub/FreeBSD/releases/amd64/amd64/12.2-RELEASE/base.txz -o /tmp/base.txz
tar -xvf /tmp/base.txz -C /usr/local/jail/NNN
 
Kannst die Jail auch upgraden:

Code:
# freebsd-update -b /usr/local/jails/<jail> --currently-running 12.1-RELEASE -r 12.2-RELEASE upgrade
 
Aus einem mir noch unbekannten Grund installiert "bsdinstall jail /usr/local/jail/NNN" ein 12.1 Release.
Ist das immer noch gefixt? *seufz* Es liegt daran, dass stumpf die Daten aus /usr/freebsd-dist genommen werden. Ohne zu schauen, ob sie noch aktuell sind. Lösche sie einfach einmal, dann lädt er die aktuelle Version neu runter.
 
Zurück
Oben