Geschwindigkeit der Profilerstellung der Datei über / dev / null?

597
719016

Ich zeige die Geschwindigkeit, mit der ein bestimmtes Linux-Programm eine bestimmte Eingabedatei mit einer unterschiedlichen Anzahl von Threads liest, indem Sie Folgendes tun:

time ~/src/myprogram -t $t inputfile 1>/dev/null 2>/dev/null 

Es scheint, egal wie viele Threads ich verwende, von 12 bis 1, die Zeit ist genau die gleiche. Gibt es eine andere Möglichkeit, dies zu testen, um sicherzustellen, dass es nicht von der Geschwindigkeit beeinflusst wird, an die Daten gesendet werden /dev/null?

0
Ich würde Ihr / src / mein -Programm betrachten, anstatt zu tun, was Sie Ihrer Meinung nach tun. / dev / null ist ein Kernelgerät, E / A-Vorgänge sind so schnell wie E / A auf Ihrem System. Bitte posten Sie Ihren Code, wenn Sie Hilfe benötigen. jim mcnamara vor 10 Jahren 2
Threads können Code nur dann schneller machen, wenn sie CPU-gebundene Vorgänge auf mehrere Kerne verteilen können. Wenn Ihr Code eine Datei von der Festplatte liest, wie sollen Threads es beschleunigen? Mike Dunlavey vor 10 Jahren 2

1 Antwort auf die Frage

1
LawrenceC

Der Kernel speichert E / A-Daten von eingehenden Blockgeräten im freien RAM. Wenn Ihre Datei nicht sehr groß ist, stoßen Sie wahrscheinlich auf die zwischengespeicherten Daten im RAM und verursachen keine E / A.

Eine sehr schnelle Suche und das Lesen dieser Stack Overflow-Antwort zeigt, dass dies möglicherweise dazu führt:

sync && echo 1 > /proc/sys/vm/drop_caches

Ich würde also versuchen, diesen Befehl vor dem Befehl auszugeben, der die E / A ausführt.