|
@@ -1,21 +1,27 @@
|
|
|
#include <ccan/lbalance/lbalance.h>
|
|
#include <ccan/lbalance/lbalance.h>
|
|
|
#include <ccan/lbalance/lbalance.c>
|
|
#include <ccan/lbalance/lbalance.c>
|
|
|
#include <ccan/time/time.h>
|
|
#include <ccan/time/time.h>
|
|
|
-#include <ccan/jmap/jmap_type.h>
|
|
|
|
|
|
|
+#include <ccan/jmap/jmap.h>
|
|
|
#include <stdio.h>
|
|
#include <stdio.h>
|
|
|
#include <err.h>
|
|
#include <err.h>
|
|
|
|
|
+#include <sys/types.h>
|
|
|
|
|
+#include <sys/time.h>
|
|
|
|
|
+#include <sys/resource.h>
|
|
|
|
|
+#include <sys/wait.h>
|
|
|
|
|
|
|
|
-/* Defines struct jmap_task. */
|
|
|
|
|
-JMAP_DEFINE_UINTIDX_TYPE(struct lbalance_task, task);
|
|
|
|
|
|
|
+struct jmap_task {
|
|
|
|
|
+ JMAP_MEMBERS(unsigned int, struct lbalance_task *);
|
|
|
|
|
+};
|
|
|
|
|
|
|
|
/* Figure out how many loops we need to run for about 1 second. */
|
|
/* Figure out how many loops we need to run for about 1 second. */
|
|
|
static unsigned long burn_count;
|
|
static unsigned long burn_count;
|
|
|
|
|
|
|
|
static void calibrate_burn_cpu(void)
|
|
static void calibrate_burn_cpu(void)
|
|
|
{
|
|
{
|
|
|
- struct timeval start = time_now();
|
|
|
|
|
|
|
+ struct timeabs start = time_now();
|
|
|
|
|
|
|
|
- while (time_less(time_now(), time_add(start, time_from_msec(1000))))
|
|
|
|
|
|
|
+ while (time_before(time_now(),
|
|
|
|
|
+ timeabs_add(start, time_from_msec(1000))))
|
|
|
burn_count++;
|
|
burn_count++;
|
|
|
printf("Burn count = %lu\n", burn_count);
|
|
printf("Burn count = %lu\n", burn_count);
|
|
|
}
|
|
}
|
|
@@ -23,12 +29,12 @@ static void calibrate_burn_cpu(void)
|
|
|
static void burn_cpu(void)
|
|
static void burn_cpu(void)
|
|
|
{
|
|
{
|
|
|
unsigned int i, after = 0;
|
|
unsigned int i, after = 0;
|
|
|
- struct timeval start = time_now();
|
|
|
|
|
|
|
+ struct timeabs start = time_now();
|
|
|
|
|
|
|
|
/* We do a loop similar to the calibrate_burn_cpu loop. */
|
|
/* We do a loop similar to the calibrate_burn_cpu loop. */
|
|
|
for (i = 0; i < burn_count; i++) {
|
|
for (i = 0; i < burn_count; i++) {
|
|
|
- after += time_less(time_now(),
|
|
|
|
|
- time_add(start, time_from_msec(1000)));
|
|
|
|
|
|
|
+ after += time_before(time_now(),
|
|
|
|
|
+ timeabs_add(start, time_from_msec(1000)));
|
|
|
}
|
|
}
|
|
|
/* We use the result so the compiler can't discard it. */
|
|
/* We use the result so the compiler can't discard it. */
|
|
|
exit(after);
|
|
exit(after);
|
|
@@ -51,9 +57,9 @@ static pid_t spawn(char *args[])
|
|
|
|
|
|
|
|
int main(int argc, char *argv[])
|
|
int main(int argc, char *argv[])
|
|
|
{
|
|
{
|
|
|
- unsigned int i, num, fixed_target = 0, num_done = 0, num_running = 0;
|
|
|
|
|
|
|
+ unsigned int num, fixed_target = 0, num_done = 0, num_running = 0;
|
|
|
struct lbalance *lb;
|
|
struct lbalance *lb;
|
|
|
- struct jmap_task *tasks = jmap_task_new();
|
|
|
|
|
|
|
+ struct jmap_task *tasks = jmap_new(struct jmap_task);
|
|
|
|
|
|
|
|
if (argc < 2) {
|
|
if (argc < 2) {
|
|
|
fprintf(stderr,
|
|
fprintf(stderr,
|
|
@@ -80,7 +86,7 @@ int main(int argc, char *argv[])
|
|
|
calibrate_burn_cpu();
|
|
calibrate_burn_cpu();
|
|
|
|
|
|
|
|
while (num_done < num) {
|
|
while (num_done < num) {
|
|
|
- unsigned int j, target = fixed_target;
|
|
|
|
|
|
|
+ unsigned int target = fixed_target;
|
|
|
struct lbalance_task *task;
|
|
struct lbalance_task *task;
|
|
|
struct rusage ru;
|
|
struct rusage ru;
|
|
|
pid_t pid;
|
|
pid_t pid;
|
|
@@ -96,14 +102,14 @@ int main(int argc, char *argv[])
|
|
|
task = lbalance_task_new(lb);
|
|
task = lbalance_task_new(lb);
|
|
|
else
|
|
else
|
|
|
task = (void *)1;
|
|
task = (void *)1;
|
|
|
- jmap_task_add(tasks, pid, task);
|
|
|
|
|
|
|
+ jmap_add(tasks, pid, task);
|
|
|
num_running++;
|
|
num_running++;
|
|
|
printf("+"); fflush(stdout);
|
|
printf("+"); fflush(stdout);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/* Now wait for something to die! */
|
|
/* Now wait for something to die! */
|
|
|
pid = wait3(NULL, 0, &ru);
|
|
pid = wait3(NULL, 0, &ru);
|
|
|
- task = jmap_task_get(tasks, pid);
|
|
|
|
|
|
|
+ task = jmap_get(tasks, pid);
|
|
|
if (lb)
|
|
if (lb)
|
|
|
lbalance_task_free(task, &ru);
|
|
lbalance_task_free(task, &ru);
|
|
|
num_done++;
|
|
num_done++;
|