cpu

Compiler Zeit Openssl 1.1.1 Pre7

Written by  on Juni 8, 2018

Auf Quadcore Intel(R) Core(TM) i5-3427U CPU @ 1.80GHz mit Virenscanner

./config no-async && time make
real    1h 36m 37s
user    5m 9.02s
sys     1h 22m 34s

Auf Quadcore Intel(R) Core(TM) i7-7500U CPU @ 2.70GHz mit Windows Defender

./config no-async && time make
real    11m 16.66s
user    3m 13.19s
sys     4m 27.34s

So gefühlt, rechnet der i5 also 5 Minuten statt 3 Minuten. Aber die System-Time scheint vom Virenscanner zu kommen.

Danke Microsoft

Written by  on November 30, 2016

danke_microsoft

Context Switching

Written by  on März 9, 2014

Zuerst muss man sehen, was ein Context Switch überhaupt ist. Ganz einfach gesprochen ist es das, was auch mit nur einer CPU im System Multitasking ermöglicht.

Die Wikipedia definiert das ausführlicher:

Kontextwechsel oder Taskswitching (englischcontext switch) nennt man den Vorgang in einem Betriebssystem, bei dem die Bearbeitung des aktuellen Prozesses (oder auch ThreadsTasksoder Programms) unterbrochen wird (z. B. nach einer festgelegten Zeitspanne durch einen Timer-Interrupt oder bei Systemaufrufen) und zu einer anderen Routine gewechselt wird. Dabei wird derKontext (im Wesentlichen die Prozessor-Register) des aktuellen Prozesses/Threads/Tasks gesichert und der Kontext des neuen restauriert. Durch diesen Vorgang wird Multitasking ermöglicht, da sich so mehrere Prozesse im Zeit-Multiplexverfahren auf einem einzelnen CPU-Kern mehr oder weniger gleichzeitig ausführen lassen.

Wie aufwändig ist jetzt ein Context Switch? Dieser Frage wird ein einem Blogartikel nachgegangen: Also im Worst case 4500 ns. Schon klar, das kann deutlich besser aussehen, je nach verwendetem System oder auch der verwendeten CPU.

Wie viele Context switches passieren denn so auf einem System? Am einfachsten eniemal mit dem SAR command nachsehen:

# sar -w 1 10000
Linux 2.6.34.10-0.6-default (ServerWalterschlag) 03/09/14 _i686_ (1 CPU)
10:37:57 proc/s cswch/s
10:37:58 0.00 157.00
10:37:59 0.00 158.00
10:38:00 0.00 319.80
10:38:02 0.00 161.00
10:38:03 0.00 159.41
10:38:04 0.00 165.35
10:38:05 0.00 150.00
10:38:06 0.00 199.00
10:38:07 0.00 184.16
10:38:08 0.00 275.76
10:38:09 0.00 190.10
10:38:10 0.00 154.90
10:38:11 0.00 273.00
10:38:12 0.00 1380.20
10:38:13 0.00 2915.00
10:38:14 0.00 2785.00
10:38:15 0.00 3614.00
10:38:16 0.00 3548.00
10:38:17 0.00 2745.00
10:38:18 0.00 2072.28
10:38:19 0.00 2262.38

Das kann ganz schön Schwanken, je nachdem wie viele Prozesse da aktuell laufen. Aber ausgehend von den 2200 context switches jede Sekunde und 4500 ns pro context switch würde das 9,9ms allein für context switche ergeben. Das System würde also ca. 1% seiner Zeit mit der Prozessverwaltung verbringen. Das ist so gut wie zu vernachlässigen. Steigt aber die Prozessanzahl und die Contextswitches weiter an, um etwa einen Faktor 10, dann wird die Anzahl der Switches interessant.

Weitere Betrachtungen wären nötig, für Systeme mit mehreren CPUs – für eine erste Näherung würde ich einfach die Anzahl der Context Switche durch die Anzahl der vorhandenen CPUs dividieren, da die Prozessorkerne ja gleichzeitig die Switches durchführen können.

A Crash Course in Modern Hardware

Written by  on Januar 16, 2010

In dieser Präsentation (passt übrigens zur Vorlesung in Rechnerarchitektur) von der JVM Languages Summit 2009, erzählt Cliff Click über die Von Neumann Architektur, CISC & RISC, den Aufstieg von Multicore, Instruction-Level Parallelism (ILP), Pipelining, Out-of-order Dispatch, Static & Dynamic ILP, Performance Einflüsse von Cache Misses, Memory Performance, Memory & CPU Caching, Beispiele für Speicher / CPU Cache Wechselwirkungen, and Tipps für verbesserte Performance.

Das ganze findet sich in Englischer Sprache hier:

http://www.infoq.com/presentations/click-crash-course-modern-hardware