Skip to contentSkip to conversation

New package: cache-calibrator

PATCH New Stephan Hoffmann 4 participants 11 messages Jan 29, 2013 – Jan 30, 2013

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 New package: cache-calibrator

The Calibrator is a small C program that is supposed to analyze a computers (cache-) memory system and extract the following parameters:

number of cache levels
for each cache level:
its size
its linesize
its access/miss latency
main memory access latency
number of TLB levels
for each TLB level:
its capacity (i.e. number of entries)
the pagesize used
the TLB miss latency

http://homepages.cwi.nl/~manegold/Calibrator/

It is also recommended as a load generator for realtime testing in:

https://rt.wiki.kernel.org/index.php/RT_PREEMPT_HOWTO#Benchmarking

---
 package/Config.in                                  |    1 +
 package/cache-calibrator/Config.in                 |   13 +++
 ...calibrator-Fix-conflicting-round-function.patch |  108 ++++++++++++++++++++
 package/cache-calibrator/cache-calibrator.mk       |   21 ++++
 4 files changed, 143 insertions(+), 0 deletions(-)
 create mode 100644 package/cache-calibrator/Config.in
 create mode 100644 package/cache-calibrator/cache-calibrator-Fix-conflicting-round-function.patch
 create mode 100644 package/cache-calibrator/cache-calibrator.mk
package/Config.in +1 -0
index ebd9817..e6682fc 100644
@@ -19,6 +19,7 @@ endmenu
 
 menu "Debugging, profiling and benchmark"
 source "package/bonnie/Config.in"
+source "package/cache-calibrator/Config.in"
 source "package/dhrystone/Config.in"
 source "package/dstat/Config.in"
 source "package/dmalloc/Config.in"
package/cache-calibrator/Config.in new file +13 -0
new file mode 100644
index 0000000..6425cd0
@@ -0,0 +1,13 @@
+config BR2_PACKAGE_CACHE_CALIBRATOR
+	bool "cache-calibrator"
+	help
+	  Cache calibrator is a small C program that is
+	  supposed to analyze a computers (cache-) memory
+	  system and extract useful information
+
+	  http://homepages.cwi.nl/~manegold/Calibrator/
+
+	  It is also recommended as a load generator for
+	  realtime testing in:
+
+	  https://rt.wiki.kernel.org/index.php/RT_PREEMPT_HOWTO
package/cache-calibrator/cache-calibrator-Fix-conflicting-round-function.patch new file +108 -0

108 lines not on this page · raw message

package/cache-calibrator/cache-calibrator.mk new file +21 -0
new file mode 100644
index 0000000..8abc647
@@ -0,0 +1,21 @@
+#############################################################
+#
+# cache-calibrator
+#
+#############################################################
+
+CACHE_CALIBRATOR_SOURCE = calibrator.c
+CACHE_CALIBRATOR_SITE = http://homepages.cwi.nl/~manegold/Calibrator/src
+CACHE_CALIBRATOR_EXTRACT_CMDS = cp $(DL_DIR)/$(CACHE_CALIBRATOR_SOURCE) $(D)
+CACHE_CALIBRATOR_LICENSE = Cache calibrator license
+CACHE_CALIBRATOR_LICENSE_FILES = calibrator.c
+
+define CACHE_CALIBRATOR_BUILD_CMDS
+	$(TARGET_CC) $(TARGET_CFLAGS) $(TARGET_LDFLAGS) $(@D)/calibrator.c -o $(@D)/cache_calibrator -lm
+endef
+
+define CACHE_CALIBRATOR_INSTALL_TARGET_CMDS
+	$(INSTALL) -D -m 0755 $(@D)/cache_calibrator $(TARGET_DIR)/usr/bin/cache_calibrator
+endef
+
+$(eval $(generic-package))
Signature · 1 line
1.7.0.4
#1 lore raw

PATCH 1/1 New package: cache-calibrator

Dear Stephan Hoffmann,

package/cache-calibrator/cache-calibrator.mk line 9

Quoted 3 lines · Stephan Hoffmann
package/cache-calibrator/cache-calibrator.mk new file +3 -0
+CACHE_CALIBRATOR_SOURCE = calibrator.c
+CACHE_CALIBRATOR_SITE = http://homepages.cwi.nl/~manegold/Calibrator/src
+CACHE_CALIBRATOR_EXTRACT_CMDS = cp $(DL_DIR)/$(CACHE_CALIBRATOR_SOURCE) $(D)

I'd prefer to see this below, right before the BUILD_CMDS, as follows:

define CACHE_CALIBRATOR_EXTRACT_CMDS

	cp $(DL_DIR)/$(CACHE_CALIBRATOR_SOURCE) $(@D)

endef

Even though it doesn't change anything, we generally try to use:

VARIABLE = value

for things that are just "values". And:

define VARIABLE_CMDS

	...

endef

for variables that contain commands.

Thanks,

Thomas

Signature · 4 lines
Thomas Petazzoni, Free Electrons
Kernel, drivers, real-time and embedded Linux
development, consulting, training and support.
http://free-electrons.com
#2 lore raw

PATCH 1/1 New package: cache-calibrator

In reply to Stephan Hoffmann
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line

"Stephan" == Stephan Hoffmann <[email protected]> writes:

Stephan> The Calibrator is a small C program that is supposed to analyze Stephan> a computers (cache-) memory system and extract the following Stephan> parameters:

Could you please clearly state (E.G. by naming it PATCHv2) that this superseeds your early patch and note (under the --- line) what you have changed for future submissions, thanks.

Stephan> number of cache levels
Stephan> for each cache level:

 Stephan>         its size
 Stephan>         its linesize
 Stephan>         its access/miss latency
 Stephan>     main memory access latency
 Stephan>     number of TLB levels
 Stephan>     for each TLB level:
 Stephan>         its capacity (i.e. number of entries)
 Stephan>         the pagesize used
 Stephan>         the TLB miss latency

Stephan> http://homepages.cwi.nl/~manegold/Calibrator/

Stephan> It is also recommended as a load generator for realtime testing in:

Stephan> https://rt.wiki.kernel.org/index.php/RT_PREEMPT_HOWTO#Benchmarking

Stephan> Signed-off-by: Stephan Hoffmann <[email protected]> Stephan> ---

 Stephan>  package/Config.in                                  |    1 +
 Stephan>  package/cache-calibrator/Config.in                 |   13 +++
 Stephan>  ...calibrator-Fix-conflicting-round-function.patch |  108 ++++++++++++++++++++
 Stephan>  package/cache-calibrator/cache-calibrator.mk       |   21 ++++
 Stephan>  4 files changed, 143 insertions(+), 0 deletions(-)
 Stephan>  create mode 100644 package/cache-calibrator/Config.in
 Stephan>  create mode 100644 package/cache-calibrator/cache-calibrator-Fix-conflicting-round-function.patch
 Stephan>  create mode 100644 package/cache-calibrator/cache-calibrator.mk

Stephan> diff --git a/package/Config.in b/package/Config.in Stephan> index ebd9817..e6682fc 100644
Stephan> --- a/package/Config.in
Stephan> +++ b/package/Config.in
Stephan> @@ -19,6 +19,7 @@ endmenu

Stephan> menu "Debugging, profiling and benchmark" Stephan> source "package/bonnie/Config.in" Stephan> +source "package/cache-calibrator/Config.in"

 Stephan>  source "package/dhrystone/Config.in"
 Stephan>  source "package/dstat/Config.in"
 Stephan>  source "package/dmalloc/Config.in"
 Stephan> diff --git a/package/cache-calibrator/Config.in b/package/cache-calibrator/Config.in
 Stephan> new file mode 100644
 Stephan> index 0000000..6425cd0
 Stephan> --- /dev/null
 Stephan> +++ b/package/cache-calibrator/Config.in
 Stephan> @@ -0,0 +1,13 @@
 Stephan> +config BR2_PACKAGE_CACHE_CALIBRATOR
 Stephan> +	bool "cache-calibrator"
 Stephan> +	help
 Stephan> +	  Cache calibrator is a small C program that is
 Stephan> +	  supposed to analyze a computers (cache-) memory
 Stephan> +	  system and extract useful information
 Stephan> +
 Stephan> +	  http://homepages.cwi.nl/~manegold/Calibrator/
 Stephan> +
 Stephan> +	  It is also recommended as a load generator for
 Stephan> +	  realtime testing in:
 Stephan> +
 Stephan> +	  https://rt.wiki.kernel.org/index.php/RT_PREEMPT_HOWTO
 Stephan> diff --git a/package/cache-calibrator/cache-calibrator-Fix-conflicting-round-function.patch b/package/cache-calibrator/cache-calibrator-Fix-conflicting-round-function.patch
 Stephan> new file mode 100644
 Stephan> index 0000000..71181a6
 Stephan> --- /dev/null
 Stephan> +++ b/package/cache-calibrator/cache-calibrator-Fix-conflicting-round-function.patch
 Stephan> @@ -0,0 +1,108 @@
 Stephan> +From 39ac7268c4350040976005da98daf10edf676d3e Mon Sep 17 00:00:00 2001
 Stephan> +From: Stephan Hoffmann <[email protected]>
 Stephan> +Date: Mon, 28 Jan 2013 17:32:10 +0100
 Stephan> +Subject: [PATCH] Fix conflicting round() function
 Stephan> +
 Stephan> +calibrator.c defines a local round() function that conflicts
 Stephan> +with the one from the standard library.
 Stephan> +
 Stephan> +This is fixed by renaming the local function.
 Stephan> +
 Stephan> +Signed-off-by: Stephan Hoffmann <[email protected]>
 Stephan> +---
 Stephan> + calibrator.c |   30 +++++++++++++++---------------

Stephan> + 1 files changed, 15 insertions(+), 15 deletions(-)
Stephan> +
Stephan> +diff --git a/calibrator.c b/calibrator.c
Stephan> +index e045dfd..8471c04 100644
Stephan> +--- a/calibrator.c
Stephan> ++++ b/calibrator.c
Stephan> +@@ -128,7 +128,7 @@ void ErrXit(char *format, ...) {
Stephan> + exit(1);
Stephan> + }
Stephan> +
Stephan> +-lng round(dbl x)
Stephan> ++lng lng_round(dbl x)
Stephan> + {
Stephan> + return (lng)(x + 0.5);
Stephan> + }
Stephan> +@@ -890,16 +890,16 @@ void plotCache(cacheInfo *cache, lng **result, lng MHz, char *fn, FILE *fp, lng
Stephan> + fprintf(fp, ")\n");
Stephan> + fprintf(fp, "set y2tics");
Stephan> + for (l = 0, s = " ("; l <= cache->levels; l++, s = ", ") {
Stephan> +- if (!delay) fprintf(fp, "%s'(%ld)' %f", s, round(CYperIt(cache->latency1[l] - delay)), NSperIt(cache->latency1[l] - delay));
Stephan> +- else fprintf(fp, "%s'(%ld)' %f", s, round(CYperIt(cache->latency2[l] - delay)), NSperIt(cache->latency2[l] - delay));
Stephan> ++ if (!delay) fprintf(fp, "%s'(%ld)' %f", s, lng_round(CYperIt(cache->latency1[l] - delay)), NSperIt(cache->latency1[l] - delay));
Stephan> ++ else fprintf(fp, "%s'(%ld)' %f", s, lng_round(CYperIt(cache->latency2[l] - delay)), NSperIt(cache->latency2[l] - delay));
Stephan> + }
Stephan> + for (y = 1; y <= yh; y *= 10) {
Stephan> + fprintf(fp, "%s'%1.3g' %ld", s, (dbl)(y * MHz) / 1000.0, y);
Stephan> + }
Stephan> + fprintf(fp, ")\n");
Stephan> + for (l = 0; l <= cache->levels; l++) {
Stephan> +- if (!delay) z = (dbl)round(CYperIt(cache->latency1[l] - delay)) * 1000.0 / (dbl)MHz;
Stephan> +- else z = (dbl)round(CYperIt(cache->latency2[l] - delay)) * 1000.0 / (dbl)MHz;
Stephan> ++ if (!delay) z = (dbl)lng_round(CYperIt(cache->latency1[l] - delay)) * 1000.0 / (dbl)MHz;
Stephan> ++ else z = (dbl)lng_round(CYperIt(cache->latency2[l] - delay)) * 1000.0 / (dbl)MHz;
Stephan> + fprintf(fp, "set label %ld '(%1.3g) ' at %f,%f right\n", l + 1, z, xl, z);
Stephan> + fprintf(fp, "set arrow %ld from %f,%f to %f,%f nohead lt 0\n", l + 1, xl, z, xh, z);
Stephan> + }
Stephan> +@@ -986,16 +986,16 @@ void plotTLB(TLBinfo *TLB, lng **result, lng MHz, char *fn, FILE *fp, lng delay)
Stephan> + fprintf(fp, "%s'<L1>' %ld)\n", s, TLB->mincachelines);
Stephan> + fprintf(fp, "set y2tics");
Stephan> + for (l = 0, s = " ("; l <= TLB->levels; l++, s = ", ") {
Stephan> +- if (!delay) fprintf(fp, "%s'(%ld)' %f", s, round(CYperIt(TLB->latency1[l] - delay)), NSperIt(TLB->latency1[l] - delay));
Stephan> +- else fprintf(fp, "%s'(%ld)' %f", s, round(CYperIt(TLB->latency2[l] - delay)), NSperIt(TLB->latency2[l] - delay));
Stephan> ++ if (!delay) fprintf(fp, "%s'(%ld)' %f", s, lng_round(CYperIt(TLB->latency1[l] - delay)), NSperIt(TLB->latency1[l] - delay));
Stephan> ++ else fprintf(fp, "%s'(%ld)' %f", s, lng_round(CYperIt(TLB->latency2[l] - delay)), NSperIt(TLB->latency2[l] - delay));
Stephan> + }
Stephan> + for (y = 1; y <= yh; y *= 10) {
Stephan> + fprintf(fp, "%s'%1.3g' %ld", s, (dbl)(y * MHz) / 1000.0, y);
Stephan> + }
Stephan> + fprintf(fp, ")\n");
Stephan> + for (l = 0; l <= TLB->levels; l++) {
Stephan> +- if (!delay) z = (dbl)round(CYperIt(TLB->latency1[l] - delay)) * 1000.0 / (dbl)MHz;
Stephan> +- else z = (dbl)round(CYperIt(TLB->latency2[l] - delay)) * 1000.0 / (dbl)MHz;
Stephan> ++ if (!delay) z = (dbl)lng_round(CYperIt(TLB->latency1[l] - delay)) * 1000.0 / (dbl)MHz;
Stephan> ++ else z = (dbl)lng_round(CYperIt(TLB->latency2[l] - delay)) * 1000.0 / (dbl)MHz;
Stephan> + fprintf(fp, "set label %ld '(%1.3g) ' at %f,%f right\n", l + 1, z, xl, z);
Stephan> + fprintf(fp, "set arrow %ld from %f,%f to %f,%f nohead lt 0\n", l + 1, xl, z, xh, z);
Stephan> + }
Stephan> +@@ -1023,9 +1023,9 @@ void printCPU(cacheInfo *cache, lng MHz, lng delay)
Stephan> + FILE *fp = stdout;
Stephan> +
Stephan> + fprintf(fp, "CPU loop + L1 access: ");
Stephan> +- fprintf(fp, " %6.2f ns = %3ld cy\n", NSperIt(cache->latency1[0]), round(CYperIt(cache->latency1[0])));
Stephan> ++ fprintf(fp, " %6.2f ns = %3ld cy\n", NSperIt(cache->latency1[0]), lng_round(CYperIt(cache->latency1[0])));
Stephan> + fprintf(fp, " ( delay: ");
Stephan> +- fprintf(fp, " %6.2f ns = %3ld cy )\n", NSperIt(delay), round(CYperIt(delay)));
Stephan> ++ fprintf(fp, " %6.2f ns = %3ld cy )\n", NSperIt(delay), lng_round(CYperIt(delay)));
Stephan> + fprintf(fp, "\n");
Stephan> + fflush(fp);
Stephan> + }
Stephan> +@@ -1047,8 +1047,8 @@ void printCache(cacheInfo *cache, lng MHz)
Stephan> + fprintf(fp, " %3ld KB ", cache->size[l] / 1024);
Stephan> + }
Stephan> + fprintf(fp, " %3ld bytes ", cache->linesize[l + 1]);
Stephan> +- fprintf(fp, " %6.2f ns = %3ld cy " , NSperIt(cache->latency2[l + 1] - cache->latency2[l]), round(CYperIt(cache->latency2[l + 1] - cache->latency2[l])));
Stephan> +- fprintf(fp, " %6.2f ns = %3ld cy\n", NSperIt(cache->latency1[l + 1] - cache->latency1[l]), round(CYperIt(cache->latency1[l + 1] - cache->latency1[l])));
Stephan> ++ fprintf(fp, " %6.2f ns = %3ld cy " , NSperIt(cache->latency2[l + 1] - cache->latency2[l]), lng_round(CYperIt(cache->latency2[l + 1] - cache->latency2[l])));
Stephan> ++ fprintf(fp, " %6.2f ns = %3ld cy\n", NSperIt(cache->latency1[l + 1] - cache->latency1[l]), lng_round(CYperIt(cache->latency1[l + 1] - cache->latency1[l])));
Stephan> + }
Stephan> + fprintf(fp, "\n");
Stephan> + fflush(fp);
Stephan> +@@ -1075,9 +1075,9 @@ void printTLB(TLBinfo *TLB, lng MHz)
Stephan> + } else {
Stephan> + fprintf(fp, " %3ld KB ", TLB->pagesize[l + 1] / 1024);
Stephan> + }
Stephan> +- fprintf(fp, " %6.2f ns = %3ld cy ", NSperIt(TLB->latency2[l + 1] - TLB->latency2[l]), round(CYperIt(TLB->latency2[l + 1] - TLB->latency2[l])));
Stephan> ++ fprintf(fp, " %6.2f ns = %3ld cy ", NSperIt(TLB->latency2[l + 1] - TLB->latency2[l]), lng_round(CYperIt(TLB->latency2[l + 1] - TLB->latency2[l])));
Stephan> + /*
Stephan> +- fprintf(fp, " %6.2f ns = %3ld cy" , NSperIt(TLB->latency1[l + 1] - TLB->latency1[l]), round(CYperIt(TLB->latency1[l + 1] - TLB->latency1[l])));
Stephan> ++ fprintf(fp, " %6.2f ns = %3ld cy" , NSperIt(TLB->latency1[l + 1] - TLB->latency1[l]), lng_round(CYperIt(TLB->latency1[l + 1] - TLB->latency1[l])));
Stephan> + */
Stephan> + fprintf(fp, "\n");
Stephan> + }
Stephan> +--
Stephan> +1.7.0.4
Stephan> +
Stephan> diff --git a/package/cache-calibrator/cache-calibrator.mk b/package/cache-calibrator/cache-calibrator.mk Stephan> new file mode 100644
Stephan> index 0000000..8abc647
Stephan> --- /dev/null
Stephan> +++ b/package/cache-calibrator/cache-calibrator.mk
Stephan> @@ -0,0 +1,21 @@
Stephan> +#############################################################
Stephan> +#
Stephan> +# cache-calibrator
Stephan> +#
Stephan> +#############################################################
Stephan> +
Stephan> +CACHE_CALIBRATOR_SOURCE = calibrator.c
Stephan> +CACHE_CALIBRATOR_SITE = http://homepages.cwi.nl/~manegold/Calibrator/src
Stephan> +CACHE_CALIBRATOR_EXTRACT_CMDS = cp $(DL_DIR)/$(CACHE_CALIBRATOR_SOURCE) $(D)

Please use the normal define CACHE_CLIBRATOR_.. syntax. Have a look at package/devmem2 for an example.

Signature · 1 line
Bye, Peter Korsgaard
#3 lore raw

PATCH 1/1 New package: cache-calibrator

In reply to Stephan Hoffmann

The Calibrator is a small C program that is supposed to analyze a computers (cache-) memory system and extract the following parameters:

number of cache levels
for each cache level:
its size
its linesize
its access/miss latency
main memory access latency
number of TLB levels
for each TLB level:
its capacity (i.e. number of entries)
the pagesize used
the TLB miss latency

http://homepages.cwi.nl/~manegold/Calibrator/

It is also recommended as a load generator for realtime testing in:

https://rt.wiki.kernel.org/index.php/RT_PREEMPT_HOWTO#Benchmarking

---
v2: Review by Arnout Vandecappelle

	Fix License
	Use $(TARGET_CFLAGS) and $(TARGET_LDFLAGS)
	Fix Typo
	Remove $(CACHE_CALIBRATOR_DIR) 

v3: Review by Thomas Petazzoni
Fix CACHE_CALIBRATOR_EXTRACT_CMDS

 package/Config.in                                  |    1 +
 package/cache-calibrator/Config.in                 |   13 +++
 ...calibrator-Fix-conflicting-round-function.patch |  108 ++++++++++++++++++++
 package/cache-calibrator/cache-calibrator.mk       |   24 +++++
 4 files changed, 146 insertions(+), 0 deletions(-)
 create mode 100644 package/cache-calibrator/Config.in
 create mode 100644 package/cache-calibrator/cache-calibrator-Fix-conflicting-round-function.patch
 create mode 100644 package/cache-calibrator/cache-calibrator.mk
package/Config.in +1 -0
index ebd9817..e6682fc 100644
@@ -19,6 +19,7 @@ endmenu
 
 menu "Debugging, profiling and benchmark"
 source "package/bonnie/Config.in"
+source "package/cache-calibrator/Config.in"
 source "package/dhrystone/Config.in"
 source "package/dstat/Config.in"
 source "package/dmalloc/Config.in"
package/cache-calibrator/Config.in new file +13 -0
new file mode 100644
index 0000000..6425cd0
@@ -0,0 +1,13 @@
+config BR2_PACKAGE_CACHE_CALIBRATOR
+	bool "cache-calibrator"
+	help
+	  Cache calibrator is a small C program that is
+	  supposed to analyze a computers (cache-) memory
+	  system and extract useful information
+
+	  http://homepages.cwi.nl/~manegold/Calibrator/
+
+	  It is also recommended as a load generator for
+	  realtime testing in:
+
+	  https://rt.wiki.kernel.org/index.php/RT_PREEMPT_HOWTO
package/cache-calibrator/cache-calibrator-Fix-conflicting-round-function.patch new file +108 -0

108 lines not on this page · raw message

package/cache-calibrator/cache-calibrator.mk new file +24 -0
new file mode 100644
index 0000000..a36bb8a
@@ -0,0 +1,24 @@
+#############################################################
+#
+# cache-calibrator
+#
+#############################################################
+
+CACHE_CALIBRATOR_SOURCE = calibrator.c
+CACHE_CALIBRATOR_SITE = http://homepages.cwi.nl/~manegold/Calibrator/src
+CACHE_CALIBRATOR_LICENSE = Cache calibrator license
+CACHE_CALIBRATOR_LICENSE_FILES = calibrator.c
+
+define CACHE_CALIBRATOR_EXTRACT_CMDS
+	cp $(DL_DIR)/$(CACHE_CALIBRATOR_SOURCE) $(D)
+endef
+
+define CACHE_CALIBRATOR_BUILD_CMDS
+	$(TARGET_CC) $(TARGET_CFLAGS) $(TARGET_LDFLAGS) $(@D)/calibrator.c -o $(@D)/cache_calibrator -lm
+endef
+
+define CACHE_CALIBRATOR_INSTALL_TARGET_CMDS
+	$(INSTALL) -D -m 0755 $(@D)/cache_calibrator $(TARGET_DIR)/usr/bin/cache_calibrator
+endef
+
+$(eval $(generic-package))
Signature · 1 line
1.7.0.4
#4 lore raw

PATCH 1/1 New package: cache-calibrator

Hello all,

I tried to add a PATCHv3 to the header using "git send-email --subject-prefix PATCHv3", but this obviously did not work. Does anybody have an idea why?

Kind regards

Stephan

Am 29.01.2013 10:15, schrieb Stephan Hoffmann:

Quoted 216 lines

The Calibrator is a small C program that is supposed to analyze a computers (cache-) memory system and extract the following parameters:

number of cache levels
for each cache level:
its size
its linesize
its access/miss latency
main memory access latency
number of TLB levels
for each TLB level:
its capacity (i.e. number of entries)
the pagesize used
the TLB miss latency

http://homepages.cwi.nl/~manegold/Calibrator/

It is also recommended as a load generator for realtime testing in:

https://rt.wiki.kernel.org/index.php/RT_PREEMPT_HOWTO#Benchmarking

---
v2: Review by Arnout Vandecappelle

	Fix License
	Use $(TARGET_CFLAGS) and $(TARGET_LDFLAGS)
	Fix Typo
	Remove $(CACHE_CALIBRATOR_DIR) 

v3: Review by Thomas Petazzoni
Fix CACHE_CALIBRATOR_EXTRACT_CMDS

 package/Config.in                                  |    1 +
 package/cache-calibrator/Config.in                 |   13 +++
 ...calibrator-Fix-conflicting-round-function.patch |  108 ++++++++++++++++++++
 package/cache-calibrator/cache-calibrator.mk       |   24 +++++
 4 files changed, 146 insertions(+), 0 deletions(-)
 create mode 100644 package/cache-calibrator/Config.in
 create mode 100644 package/cache-calibrator/cache-calibrator-Fix-conflicting-round-function.patch
 create mode 100644 package/cache-calibrator/cache-calibrator.mk
package/Config.in +1 -0
index ebd9817..e6682fc 100644
@@ -19,6 +19,7 @@ endmenu
 
 menu "Debugging, profiling and benchmark"
 source "package/bonnie/Config.in"
+source "package/cache-calibrator/Config.in"
 source "package/dhrystone/Config.in"
 source "package/dstat/Config.in"
 source "package/dmalloc/Config.in"
package/cache-calibrator/Config.in new file +13 -0
new file mode 100644
index 0000000..6425cd0
@@ -0,0 +1,13 @@
+config BR2_PACKAGE_CACHE_CALIBRATOR
+	bool "cache-calibrator"
+	help
+	  Cache calibrator is a small C program that is
+	  supposed to analyze a computers (cache-) memory
+	  system and extract useful information
+
+	  http://homepages.cwi.nl/~manegold/Calibrator/
+
+	  It is also recommended as a load generator for
+	  realtime testing in:
+
+	  https://rt.wiki.kernel.org/index.php/RT_PREEMPT_HOWTO
package/cache-calibrator/cache-calibrator-Fix-conflicting-round-function.patch new file +108 -0
new file mode 100644
index 0000000..71181a6
@@ -0,0 +1,108 @@
+From 39ac7268c4350040976005da98daf10edf676d3e Mon Sep 17 00:00:00 2001
+From: Stephan Hoffmann <[email protected]>
+Date: Mon, 28 Jan 2013 17:32:10 +0100
+Subject: [PATCH] Fix conflicting round() function
+
+calibrator.c defines a local round() function that conflicts
+with the one from the standard library.
+
+This is fixed by renaming the local function.
+
+Signed-off-by: Stephan Hoffmann <[email protected]>
+---
+ calibrator.c |   30 +++++++++++++++---------------
+ 1 files changed, 15 insertions(+), 15 deletions(-)
+
+diff --git a/calibrator.c b/calibrator.c
+index e045dfd..8471c04 100644
+--- a/calibrator.c
++++ b/calibrator.c
+@@ -128,7 +128,7 @@ void ErrXit(char *format, ...) {
+ 	exit(1);
+ }
+ 
+-lng round(dbl x)
++lng lng_round(dbl x)
+ {
+ 	return (lng)(x + 0.5);
+ }
+@@ -890,16 +890,16 @@ void plotCache(cacheInfo *cache, lng **result, lng MHz, char *fn, FILE *fp, lng
+ 	fprintf(fp, ")\n");
+ 	fprintf(fp, "set y2tics");
+ 	for (l = 0, s = " ("; l <= cache->levels; l++, s = ", ") {
+-		if (!delay)	fprintf(fp, "%s'(%ld)' %f", s, round(CYperIt(cache->latency1[l] - delay)), NSperIt(cache->latency1[l] - delay));
+-			else	fprintf(fp, "%s'(%ld)' %f", s, round(CYperIt(cache->latency2[l] - delay)), NSperIt(cache->latency2[l] - delay));
++		if (!delay)	fprintf(fp, "%s'(%ld)' %f", s, lng_round(CYperIt(cache->latency1[l] - delay)), NSperIt(cache->latency1[l] - delay));
++			else	fprintf(fp, "%s'(%ld)' %f", s, lng_round(CYperIt(cache->latency2[l] - delay)), NSperIt(cache->latency2[l] - delay));
+ 	}
+ 	for (y = 1; y <= yh; y *= 10) {
+ 		fprintf(fp, "%s'%1.3g' %ld", s, (dbl)(y * MHz) / 1000.0, y);
+ 	}
+ 	fprintf(fp, ")\n");
+ 	for (l = 0; l <= cache->levels; l++) {
+-		if (!delay)	z = (dbl)round(CYperIt(cache->latency1[l] - delay)) * 1000.0 / (dbl)MHz;
+-			else	z = (dbl)round(CYperIt(cache->latency2[l] - delay)) * 1000.0 / (dbl)MHz;
++		if (!delay)	z = (dbl)lng_round(CYperIt(cache->latency1[l] - delay)) * 1000.0 / (dbl)MHz;
++			else	z = (dbl)lng_round(CYperIt(cache->latency2[l] - delay)) * 1000.0 / (dbl)MHz;
+ 		fprintf(fp, "set label %ld '(%1.3g)  ' at %f,%f right\n", l + 1, z, xl, z);
+ 		fprintf(fp, "set arrow %ld from %f,%f to %f,%f nohead lt 0\n", l + 1, xl, z, xh, z);
+ 	}
+@@ -986,16 +986,16 @@ void plotTLB(TLBinfo *TLB, lng **result, lng MHz, char *fn, FILE *fp, lng delay)
+ 	fprintf(fp, "%s'<L1>' %ld)\n", s, TLB->mincachelines);
+ 	fprintf(fp, "set y2tics");
+ 	for (l = 0, s = " ("; l <= TLB->levels; l++, s = ", ") {
+-		if (!delay)	fprintf(fp, "%s'(%ld)' %f", s, round(CYperIt(TLB->latency1[l] - delay)), NSperIt(TLB->latency1[l] - delay));
+-			else	fprintf(fp, "%s'(%ld)' %f", s, round(CYperIt(TLB->latency2[l] - delay)), NSperIt(TLB->latency2[l] - delay));
++		if (!delay)	fprintf(fp, "%s'(%ld)' %f", s, lng_round(CYperIt(TLB->latency1[l] - delay)), NSperIt(TLB->latency1[l] - delay));
++			else	fprintf(fp, "%s'(%ld)' %f", s, lng_round(CYperIt(TLB->latency2[l] - delay)), NSperIt(TLB->latency2[l] - delay));
+ 	}
+ 	for (y = 1; y <= yh; y *= 10) {
+ 		fprintf(fp, "%s'%1.3g' %ld", s, (dbl)(y * MHz) / 1000.0, y);
+ 	}
+ 	fprintf(fp, ")\n");
+ 	for (l = 0; l <= TLB->levels; l++) {
+-		if (!delay)	z = (dbl)round(CYperIt(TLB->latency1[l] - delay)) * 1000.0 / (dbl)MHz;
+-			else	z = (dbl)round(CYperIt(TLB->latency2[l] - delay)) * 1000.0 / (dbl)MHz;
++		if (!delay)	z = (dbl)lng_round(CYperIt(TLB->latency1[l] - delay)) * 1000.0 / (dbl)MHz;
++			else	z = (dbl)lng_round(CYperIt(TLB->latency2[l] - delay)) * 1000.0 / (dbl)MHz;
+ 		fprintf(fp, "set label %ld '(%1.3g)  ' at %f,%f right\n", l + 1, z, xl, z);
+ 		fprintf(fp, "set arrow %ld from %f,%f to %f,%f nohead lt 0\n", l + 1, xl, z, xh, z);
+ 	}
+@@ -1023,9 +1023,9 @@ void printCPU(cacheInfo *cache, lng MHz, lng delay)
+ 	FILE	*fp = stdout;
+ 		
+ 	fprintf(fp, "CPU loop + L1 access:    ");
+-	fprintf(fp, " %6.2f ns = %3ld cy\n", NSperIt(cache->latency1[0]), round(CYperIt(cache->latency1[0])));
++	fprintf(fp, " %6.2f ns = %3ld cy\n", NSperIt(cache->latency1[0]), lng_round(CYperIt(cache->latency1[0])));
+ 	fprintf(fp, "             ( delay:    ");
+-	fprintf(fp, " %6.2f ns = %3ld cy )\n", NSperIt(delay),            round(CYperIt(delay)));
++	fprintf(fp, " %6.2f ns = %3ld cy )\n", NSperIt(delay),            lng_round(CYperIt(delay)));
+ 	fprintf(fp, "\n");
+ 	fflush(fp);
+ }
+@@ -1047,8 +1047,8 @@ void printCache(cacheInfo *cache, lng MHz)
+ 			fprintf(fp, " %3ld KB ", cache->size[l] / 1024);
+ 		}
+ 		fprintf(fp, " %3ld bytes ", cache->linesize[l + 1]);
+-		fprintf(fp, " %6.2f ns = %3ld cy " , NSperIt(cache->latency2[l + 1] - cache->latency2[l]), round(CYperIt(cache->latency2[l + 1] - cache->latency2[l])));
+-		fprintf(fp, " %6.2f ns = %3ld cy\n", NSperIt(cache->latency1[l + 1] - cache->latency1[l]), round(CYperIt(cache->latency1[l + 1] - cache->latency1[l])));
++		fprintf(fp, " %6.2f ns = %3ld cy " , NSperIt(cache->latency2[l + 1] - cache->latency2[l]), lng_round(CYperIt(cache->latency2[l + 1] - cache->latency2[l])));
++		fprintf(fp, " %6.2f ns = %3ld cy\n", NSperIt(cache->latency1[l + 1] - cache->latency1[l]), lng_round(CYperIt(cache->latency1[l + 1] - cache->latency1[l])));
+ 	}
+ 	fprintf(fp, "\n");
+ 	fflush(fp);
+@@ -1075,9 +1075,9 @@ void printTLB(TLBinfo *TLB, lng MHz)
+ 		} else {
+ 			fprintf(fp, "  %3ld KB  ", TLB->pagesize[l + 1] / 1024);
+ 		}
+-		fprintf(fp, " %6.2f ns = %3ld cy ", NSperIt(TLB->latency2[l + 1] - TLB->latency2[l]), round(CYperIt(TLB->latency2[l + 1] - TLB->latency2[l])));
++		fprintf(fp, " %6.2f ns = %3ld cy ", NSperIt(TLB->latency2[l + 1] - TLB->latency2[l]), lng_round(CYperIt(TLB->latency2[l + 1] - TLB->latency2[l])));
+ /*
+-		fprintf(fp, " %6.2f ns = %3ld cy" , NSperIt(TLB->latency1[l + 1] - TLB->latency1[l]), round(CYperIt(TLB->latency1[l + 1] - TLB->latency1[l])));
++		fprintf(fp, " %6.2f ns = %3ld cy" , NSperIt(TLB->latency1[l + 1] - TLB->latency1[l]), lng_round(CYperIt(TLB->latency1[l + 1] - TLB->latency1[l])));
+ */
+ 		fprintf(fp, "\n");
+ 	}
+-- 
+1.7.0.4
+
package/cache-calibrator/cache-calibrator.mk new file +24 -0
new file mode 100644
index 0000000..a36bb8a
@@ -0,0 +1,24 @@
+#############################################################
+#
+# cache-calibrator
+#
+#############################################################
+
+CACHE_CALIBRATOR_SOURCE = calibrator.c
+CACHE_CALIBRATOR_SITE = http://homepages.cwi.nl/~manegold/Calibrator/src
+CACHE_CALIBRATOR_LICENSE = Cache calibrator license
+CACHE_CALIBRATOR_LICENSE_FILES = calibrator.c
+
+define CACHE_CALIBRATOR_EXTRACT_CMDS
+	cp $(DL_DIR)/$(CACHE_CALIBRATOR_SOURCE) $(D)
+endef
+
+define CACHE_CALIBRATOR_BUILD_CMDS
+	$(TARGET_CC) $(TARGET_CFLAGS) $(TARGET_LDFLAGS) $(@D)/calibrator.c -o $(@D)/cache_calibrator -lm
+endef
+
+define CACHE_CALIBRATOR_INSTALL_TARGET_CMDS
+	$(INSTALL) -D -m 0755 $(@D)/cache_calibrator $(TARGET_DIR)/usr/bin/cache_calibrator
+endef
+
+$(eval $(generic-package))
Signature · 4 lines
reLinux     -    Stephan Hoffmann
Am Schmidtgrund 124    50765 K?ln
Tel. +49.221.95595-19    Fax: -64
www.reLinux.de     sho at reLinux.de
#5 lore raw

PATCH 1/1 New package: cache-calibrator

Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line

"Stephan" == Stephan Hoffmann <[email protected]> writes:

Stephan> Hello all, I tried to add a PATCHv3 to the header using "git Stephan> send-email --subject-prefix PATCHv3", but this obviously did Stephan> not work. Does anybody have an idea why?

The easiest is afaik to use --annotate which will open the email up in a text editor so you can tweak subject / add your changelog.

Signature · 1 line
Bye, Peter Korsgaard
#6 lore raw

PATCH 1/1 New package: cache-calibrator

In reply to Stephan Hoffmann

Dear Stephan Hoffmann,

Quoted 3 lines · Stephan Hoffmann

I tried to add a PATCHv3 to the header using "git send-email --subject-prefix PATCHv3", but this obviously did not work. Does anybody have an idea why?

I routinely use --subject-prefix="PATCH v3" and it works perfectly fine here.

Thanks,

Thomas

Signature · 4 lines
Thomas Petazzoni, Free Electrons
Kernel, drivers, real-time and embedded Linux
development, consulting, training and support.
http://free-electrons.com
#7 lore raw

PATCH v3 1/1 New package: cache-calibrator

In reply to Stephan Hoffmann

The Calibrator is a small C program that is supposed to analyze a computers (cache-) memory system and extract the following parameters:

number of cache levels
for each cache level:
its size
its linesize
its access/miss latency
main memory access latency
number of TLB levels
for each TLB level:
its capacity (i.e. number of entries)
the pagesize used
the TLB miss latency

http://homepages.cwi.nl/~manegold/Calibrator/

It is also recommended as a load generator for realtime testing in:

https://rt.wiki.kernel.org/index.php/RT_PREEMPT_HOWTO#Benchmarking

---
v2: Review by Arnout Vandecappelle

	Fix License
	Use $(TARGET_CFLAGS) and $(TARGET_LDFLAGS)
	Fix Typo
	Remove $(CACHE_CALIBRATOR_DIR) 

v3: Review by Thomas Petazzoni
Fix CACHE_CALIBRATOR_EXTRACT_CMDS

 package/Config.in                                  |    1 +
 package/cache-calibrator/Config.in                 |   13 +++
 ...calibrator-Fix-conflicting-round-function.patch |  108 ++++++++++++++++++++
 package/cache-calibrator/cache-calibrator.mk       |   24 +++++
 4 files changed, 146 insertions(+), 0 deletions(-)
 create mode 100644 package/cache-calibrator/Config.in
 create mode 100644 package/cache-calibrator/cache-calibrator-Fix-conflicting-round-function.patch
 create mode 100644 package/cache-calibrator/cache-calibrator.mk
package/Config.in +1 -0
index ebd9817..e6682fc 100644
@@ -19,6 +19,7 @@ endmenu
 
 menu "Debugging, profiling and benchmark"
 source "package/bonnie/Config.in"
+source "package/cache-calibrator/Config.in"
 source "package/dhrystone/Config.in"
 source "package/dstat/Config.in"
 source "package/dmalloc/Config.in"
package/cache-calibrator/Config.in new file +13 -0
new file mode 100644
index 0000000..6425cd0
@@ -0,0 +1,13 @@
+config BR2_PACKAGE_CACHE_CALIBRATOR
+	bool "cache-calibrator"
+	help
+	  Cache calibrator is a small C program that is
+	  supposed to analyze a computers (cache-) memory
+	  system and extract useful information
+
+	  http://homepages.cwi.nl/~manegold/Calibrator/
+
+	  It is also recommended as a load generator for
+	  realtime testing in:
+
+	  https://rt.wiki.kernel.org/index.php/RT_PREEMPT_HOWTO
package/cache-calibrator/cache-calibrator-Fix-conflicting-round-function.patch new file +108 -0

108 lines not on this page · raw message

package/cache-calibrator/cache-calibrator.mk new file +24 -0
new file mode 100644
index 0000000..a36bb8a
@@ -0,0 +1,24 @@
+#############################################################
+#
+# cache-calibrator
+#
+#############################################################
+
+CACHE_CALIBRATOR_SOURCE = calibrator.c
+CACHE_CALIBRATOR_SITE = http://homepages.cwi.nl/~manegold/Calibrator/src
+CACHE_CALIBRATOR_LICENSE = Cache calibrator license
+CACHE_CALIBRATOR_LICENSE_FILES = calibrator.c
+
+define CACHE_CALIBRATOR_EXTRACT_CMDS
+	cp $(DL_DIR)/$(CACHE_CALIBRATOR_SOURCE) $(D)
+endef
+
+define CACHE_CALIBRATOR_BUILD_CMDS
+	$(TARGET_CC) $(TARGET_CFLAGS) $(TARGET_LDFLAGS) $(@D)/calibrator.c -o $(@D)/cache_calibrator -lm
+endef
+
+define CACHE_CALIBRATOR_INSTALL_TARGET_CMDS
+	$(INSTALL) -D -m 0755 $(@D)/cache_calibrator $(TARGET_DIR)/usr/bin/cache_calibrator
+endef
+
+$(eval $(generic-package))
Signature · 1 line
1.7.0.4
#8 lore raw

PATCH v3 1/1 New package: cache-calibrator

Quoted 16 lines · Stephan Hoffmann

The Calibrator is a small C program that is supposed to analyze a computers (cache-) memory system and extract the following parameters:

number of cache levels
for each cache level:
its size
its linesize
its access/miss latency
main memory access latency
number of TLB levels
for each TLB level:
its capacity (i.e. number of entries)
the pagesize used
the TLB miss latency

Quoted 7 lines

http://homepages.cwi.nl/~manegold/Calibrator/

It is also recommended as a load generator for realtime testing in:

https://rt.wiki.kernel.org/index.php/RT_PREEMPT_HOWTO#Benchmarking

(untested)

Quoted 3 lines

---
v2: Review by Arnout Vandecappelle
Fix License

Now I've looked at the license, it turns out to be _almost_ a BSD-3c.
But not exactly, so 'Cache calibrator license' is a good approximation.

Quoted 5 lines
	Use $(TARGET_CFLAGS) and $(TARGET_LDFLAGS)
	Fix Typo
	Remove $(CACHE_CALIBRATOR_DIR)

v3: Review by Thomas Petazzoni
Fix CACHE_CALIBRATOR_EXTRACT_CMDS

Signature · 6 lines
Arnout Vandecappelle                          arnout at mind be
Senior Embedded Software Architect            +32-16-286500
Essensium/Mind                                http://www.mind.be
G.Geenslaan 9, 3001 Leuven, Belgium           BE 872 984 063 RPR Leuven
LinkedIn profile: http://www.linkedin.com/in/arnoutvandecappelle
GPG fingerprint:  7CB5 E4CC 6C2E EFD4 6E3D A754 F963 ECAB 2450 2F1F
#9 lore raw

PATCH v3 1/1 New package: cache-calibrator

In reply to Stephan Hoffmann
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line

"Stephan" == Stephan Hoffmann <[email protected]> writes:

Stephan> The Calibrator is a small C program that is supposed to analyze Stephan> a computers (cache-) memory system and extract the following Stephan> parameters:

Stephan> number of cache levels
Stephan> for each cache level:

 Stephan>         its size
 Stephan>         its linesize
 Stephan>         its access/miss latency
 Stephan>     main memory access latency
 Stephan>     number of TLB levels
 Stephan>     for each TLB level:
 Stephan>         its capacity (i.e. number of entries)
 Stephan>         the pagesize used
 Stephan>         the TLB miss latency

Stephan> http://homepages.cwi.nl/~manegold/Calibrator/

Stephan> It is also recommended as a load generator for realtime testing in:

Stephan> https://rt.wiki.kernel.org/index.php/RT_PREEMPT_HOWTO#Benchmarking

Stephan> Signed-off-by: Stephan Hoffmann <[email protected]> Stephan> ---
Stephan> v2: Review by Arnout Vandecappelle
Stephan> Fix License
Stephan> Use $(TARGET_CFLAGS) and $(TARGET_LDFLAGS)
Stephan> Fix Typo
Stephan> Remove $(CACHE_CALIBRATOR_DIR)
Stephan> v3: Review by Thomas Petazzoni
Stephan> Fix CACHE_CALIBRATOR_EXTRACT_CMDS

Stephan> @@ -0,0 +1,13 @@
Stephan> +config BR2_PACKAGE_CACHE_CALIBRATOR
Stephan> + bool "cache-calibrator"
Stephan> + help

 Stephan> +	  Cache calibrator is a small C program that is
 Stephan> +	  supposed to analyze a computers (cache-) memory
 Stephan> +	  system and extract useful information

Stephan> +
Stephan> + http://homepages.cwi.nl/~manegold/Calibrator/
Stephan> +
Stephan> + It is also recommended as a load generator for
Stephan> + realtime testing in:

We normally wrap help text around col 70, not 50. I've reformatted this to better fit menuconfig.

Stephan> +++ b/package/cache-calibrator/cache-calibrator.mk
Stephan> @@ -0,0 +1,24 @@
Stephan> +############################################################# Stephan> +#
Stephan> +# cache-calibrator
Stephan> +#
Stephan> +############################################################# Stephan> +
Stephan> +CACHE_CALIBRATOR_SOURCE = calibrator.c
Stephan> +CACHE_CALIBRATOR_SITE = http://homepages.cwi.nl/~manegold/Calibrator/src
Stephan> +CACHE_CALIBRATOR_LICENSE = Cache calibrator license Stephan> +CACHE_CALIBRATOR_LICENSE_FILES = calibrator.c
Stephan> +
Stephan> +define CACHE_CALIBRATOR_EXTRACT_CMDS
Stephan> + cp $(DL_DIR)/$(CACHE_CALIBRATOR_SOURCE) $(D)

Did you test this? It is $(@D) not $(D) (which expands to the empty string)

Committed with these fixes, thanks.

Signature · 1 line
Bye, Peter Korsgaard
#10 lore raw

PATCH v3 1/1 New package: cache-calibrator

Am 29.01.2013 21:33, schrieb Peter Korsgaard:

Quoted 66 lines
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line

"Stephan" == Stephan Hoffmann <[email protected]> writes:

Stephan> The Calibrator is a small C program that is supposed to analyze Stephan> a computers (cache-) memory system and extract the following Stephan> parameters:

Stephan> number of cache levels
Stephan> for each cache level:

 Stephan>         its size
 Stephan>         its linesize
 Stephan>         its access/miss latency
 Stephan>     main memory access latency
 Stephan>     number of TLB levels
 Stephan>     for each TLB level:
 Stephan>         its capacity (i.e. number of entries)
 Stephan>         the pagesize used
 Stephan>         the TLB miss latency

Stephan> http://homepages.cwi.nl/~manegold/Calibrator/

Stephan> It is also recommended as a load generator for realtime testing in:

Stephan> https://rt.wiki.kernel.org/index.php/RT_PREEMPT_HOWTO#Benchmarking

Stephan> Signed-off-by: Stephan Hoffmann <[email protected]> Stephan> ---
Stephan> v2: Review by Arnout Vandecappelle
Stephan> Fix License
Stephan> Use $(TARGET_CFLAGS) and $(TARGET_LDFLAGS)
Stephan> Fix Typo
Stephan> Remove $(CACHE_CALIBRATOR_DIR)
Stephan> v3: Review by Thomas Petazzoni
Stephan> Fix CACHE_CALIBRATOR_EXTRACT_CMDS

Stephan> @@ -0,0 +1,13 @@
Stephan> +config BR2_PACKAGE_CACHE_CALIBRATOR
Stephan> + bool "cache-calibrator"
Stephan> + help

 Stephan> +	  Cache calibrator is a small C program that is
 Stephan> +	  supposed to analyze a computers (cache-) memory
 Stephan> +	  system and extract useful information

Stephan> +
Stephan> + http://homepages.cwi.nl/~manegold/Calibrator/
Stephan> +
Stephan> + It is also recommended as a load generator for
Stephan> + realtime testing in:

We normally wrap help text around col 70, not 50. I've reformatted this to better fit menuconfig.

Stephan> +++ b/package/cache-calibrator/cache-calibrator.mk
Stephan> @@ -0,0 +1,24 @@
Stephan> +############################################################# Stephan> +#
Stephan> +# cache-calibrator
Stephan> +#
Stephan> +############################################################# Stephan> +
Stephan> +CACHE_CALIBRATOR_SOURCE = calibrator.c
Stephan> +CACHE_CALIBRATOR_SITE = http://homepages.cwi.nl/~manegold/Calibrator/src
Stephan> +CACHE_CALIBRATOR_LICENSE = Cache calibrator license Stephan> +CACHE_CALIBRATOR_LICENSE_FILES = calibrator.c
Stephan> +
Stephan> +define CACHE_CALIBRATOR_EXTRACT_CMDS
Stephan> + cp $(DL_DIR)/$(CACHE_CALIBRATOR_SOURCE) $(D)

Quoted 2 lines

Did you test this? It is $(@D) not $(D) (which expands to the empty string)

You're right, I did not. Thanx for the fix.

Stephan

Quoted 3 lines

Committed with these fixes, thanks.