diff options
author | Matthias Wachs <wachs@net.in.tum.de> | 2014-05-09 18:03:03 +0000 |
---|---|---|
committer | Matthias Wachs <wachs@net.in.tum.de> | 2014-05-09 18:03:03 +0000 |
commit | 380d6d885e12803bd972d47812e093f78ee859f8 (patch) | |
tree | a550ca50a4d42512c6b0d883ca4d33fdd82589ca /src/ats/gnunet-service-ats_addresses.c | |
parent | db718fae66b0f4093730cac19b5d19d026ebf46e (diff) | |
download | gnunet-380d6d885e12803bd972d47812e093f78ee859f8.tar.gz gnunet-380d6d885e12803bd972d47812e093f78ee859f8.zip |
clean up for addresses and modification to perf to get values in averaging
Diffstat (limited to 'src/ats/gnunet-service-ats_addresses.c')
-rw-r--r-- | src/ats/gnunet-service-ats_addresses.c | 307 |
1 files changed, 0 insertions, 307 deletions
diff --git a/src/ats/gnunet-service-ats_addresses.c b/src/ats/gnunet-service-ats_addresses.c index 8b5413b92..6b8f13a1b 100644 --- a/src/ats/gnunet-service-ats_addresses.c +++ b/src/ats/gnunet-service-ats_addresses.c | |||
@@ -1355,312 +1355,6 @@ GAS_addresses_handle_backoff_reset (struct GAS_Addresses_Handle *handle, | |||
1355 | } | 1355 | } |
1356 | 1356 | ||
1357 | 1357 | ||
1358 | static int | ||
1359 | eval_count_active_it (void *cls, | ||
1360 | const struct GNUNET_PeerIdentity *id, | ||
1361 | void *obj) | ||
1362 | { | ||
1363 | int *request_fulfilled = cls; | ||
1364 | struct ATS_Address *addr = obj; | ||
1365 | |||
1366 | if (GNUNET_YES == addr->active) | ||
1367 | (*request_fulfilled) = GNUNET_YES; | ||
1368 | |||
1369 | if (*request_fulfilled == GNUNET_YES) | ||
1370 | return GNUNET_NO; | ||
1371 | else | ||
1372 | return GNUNET_YES; | ||
1373 | } | ||
1374 | |||
1375 | |||
1376 | /** | ||
1377 | * Summary context | ||
1378 | */ | ||
1379 | struct SummaryContext | ||
1380 | { | ||
1381 | /** | ||
1382 | * Sum of the utilized inbound bandwidth per network | ||
1383 | */ | ||
1384 | unsigned long long bandwidth_in_assigned[GNUNET_ATS_NetworkTypeCount]; | ||
1385 | |||
1386 | /** | ||
1387 | * Sum of the utilized outbound bandwidth per network | ||
1388 | */ | ||
1389 | unsigned long long bandwidth_out_assigned[GNUNET_ATS_NetworkTypeCount]; | ||
1390 | |||
1391 | /** | ||
1392 | * Sum addresses within a network | ||
1393 | */ | ||
1394 | unsigned int addresses_in_network[GNUNET_ATS_NetworkTypeCount]; | ||
1395 | }; | ||
1396 | |||
1397 | |||
1398 | static int | ||
1399 | eval_sum_bw_used (void *cls, const struct GNUNET_PeerIdentity *id, void *obj) | ||
1400 | { | ||
1401 | struct SummaryContext *ctx = cls; | ||
1402 | struct ATS_Address *addr = obj; | ||
1403 | int networks[GNUNET_ATS_NetworkTypeCount] = GNUNET_ATS_NetworkType; | ||
1404 | int net; | ||
1405 | int c; | ||
1406 | |||
1407 | if (GNUNET_YES == addr->active) | ||
1408 | { | ||
1409 | net = get_performance_info (addr, GNUNET_ATS_NETWORK_TYPE); | ||
1410 | for (c = 0; c < GNUNET_ATS_NetworkTypeCount; c++) | ||
1411 | { | ||
1412 | if (net == networks[c]) | ||
1413 | { | ||
1414 | ctx->addresses_in_network[c] ++; | ||
1415 | ctx->bandwidth_in_assigned[c] += ntohl (addr->assigned_bw_in.value__); | ||
1416 | ctx->bandwidth_out_assigned[c] += ntohl (addr->assigned_bw_out.value__); | ||
1417 | } | ||
1418 | } | ||
1419 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, | ||
1420 | "Active address in %s with (in/out) %u/%u Bps\n", | ||
1421 | GNUNET_ATS_print_network_type (net), | ||
1422 | (unsigned int) ntohl (addr->assigned_bw_in.value__), | ||
1423 | (unsigned int) ntohl (addr->assigned_bw_out.value__)); | ||
1424 | } | ||
1425 | return GNUNET_OK; | ||
1426 | } | ||
1427 | |||
1428 | |||
1429 | /** | ||
1430 | * Summary context | ||
1431 | */ | ||
1432 | struct RelativityContext | ||
1433 | { | ||
1434 | |||
1435 | struct GAS_Addresses_Handle *ah; | ||
1436 | }; | ||
1437 | |||
1438 | |||
1439 | static int | ||
1440 | find_active_address (void *cls, const struct GNUNET_PeerIdentity *id, void *obj) | ||
1441 | { | ||
1442 | struct ATS_Address **res = cls; | ||
1443 | struct ATS_Address *addr = obj; | ||
1444 | |||
1445 | if (GNUNET_YES == addr->active) | ||
1446 | (*res) = addr; | ||
1447 | |||
1448 | if (NULL != (*res)) | ||
1449 | return GNUNET_NO; | ||
1450 | else | ||
1451 | return GNUNET_YES; | ||
1452 | } | ||
1453 | |||
1454 | /** | ||
1455 | * Evaluate current bandwidth assignment | ||
1456 | * | ||
1457 | * @param ah address handle | ||
1458 | */ | ||
1459 | void | ||
1460 | GAS_addresses_evaluate_assignment (struct GAS_Addresses_Handle *ah) | ||
1461 | { | ||
1462 | #if 0 | ||
1463 | struct GAS_Addresses_Suggestion_Requests *cur; | ||
1464 | struct GAS_Addresses_Preference_Clients *pcur; | ||
1465 | int c; | ||
1466 | |||
1467 | float quality_requests_fulfilled = 0.0; | ||
1468 | float quality_bandwidth_utilization[GNUNET_ATS_NetworkTypeCount]; | ||
1469 | float quality_bandwidth_utilization_total = 0.0; | ||
1470 | float quality_application_requirements = 0.0; | ||
1471 | float guq = 0.0; | ||
1472 | |||
1473 | int include_requests; | ||
1474 | int include_utilization; | ||
1475 | int include_requirements; | ||
1476 | |||
1477 | /* Variable related to requests */ | ||
1478 | unsigned int requests_pending; | ||
1479 | unsigned int requests_fulfilled; | ||
1480 | unsigned int request_active; | ||
1481 | |||
1482 | /* Variable related to utilization */ | ||
1483 | struct SummaryContext sum; | ||
1484 | struct ATS_Address *active_address; | ||
1485 | int network_count; | ||
1486 | |||
1487 | /* Variables for preferences */ | ||
1488 | int prefs[GNUNET_ATS_PreferenceCount] = GNUNET_ATS_PreferenceType; | ||
1489 | double pref_val; | ||
1490 | double prop_val; | ||
1491 | const double *norm_values; | ||
1492 | double prefs_fulfill[GNUNET_ATS_PreferenceCount]; | ||
1493 | int prefs_clients[GNUNET_ATS_PreferenceCount]; | ||
1494 | int rels; | ||
1495 | |||
1496 | GNUNET_assert (NULL != ah); | ||
1497 | GNUNET_assert (NULL != ah->addresses); | ||
1498 | |||
1499 | requests_pending = 0; | ||
1500 | requests_fulfilled = 0; | ||
1501 | /* 1) How many requests could be fulfilled? */ | ||
1502 | for (cur = ah->pending_requests_head; NULL != cur; cur = cur->next) | ||
1503 | { | ||
1504 | request_active = GNUNET_NO; | ||
1505 | GNUNET_CONTAINER_multipeermap_get_multiple (ah->addresses, | ||
1506 | &cur->id, &eval_count_active_it, &request_active); | ||
1507 | if (GNUNET_YES == request_active) | ||
1508 | requests_fulfilled ++; | ||
1509 | requests_pending ++; | ||
1510 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Peer `%s': %u pending requests, %s\n", | ||
1511 | GNUNET_i2s (&cur->id), | ||
1512 | requests_pending, | ||
1513 | (GNUNET_YES == request_active) ? "active adress" : "no active address"); | ||
1514 | |||
1515 | } | ||
1516 | if (requests_pending > 0) | ||
1517 | { | ||
1518 | quality_requests_fulfilled = (float) requests_fulfilled / requests_pending; | ||
1519 | include_requests = GNUNET_YES; | ||
1520 | } | ||
1521 | else | ||
1522 | { | ||
1523 | quality_requests_fulfilled = 0.0; | ||
1524 | include_requests = GNUNET_NO; | ||
1525 | } | ||
1526 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "%u pending requests, %u requests fullfilled\n", | ||
1527 | requests_pending, requests_fulfilled); | ||
1528 | |||
1529 | /* 2) How well is bandwidth utilized? */ | ||
1530 | network_count = 0; | ||
1531 | for (c = 0; c < GNUNET_ATS_NetworkTypeCount; c++) | ||
1532 | { | ||
1533 | quality_bandwidth_utilization[c] = 0.0; | ||
1534 | sum.addresses_in_network[c] = 0; | ||
1535 | sum.bandwidth_in_assigned[c] = 0; | ||
1536 | sum.bandwidth_out_assigned[c] = 0; | ||
1537 | } | ||
1538 | GNUNET_CONTAINER_multipeermap_iterate(ah->addresses, | ||
1539 | &eval_sum_bw_used, &sum); | ||
1540 | for (c = 0; c < GNUNET_ATS_NetworkTypeCount; c++) | ||
1541 | { | ||
1542 | quality_bandwidth_utilization[c] = (((float)sum.bandwidth_out_assigned[c] / ah->env.out_quota[c]) + | ||
1543 | ((float)sum.bandwidth_in_assigned[c] / ah->env.in_quota[c])) / 2; | ||
1544 | |||
1545 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Utilization for network `%s': %f\n", | ||
1546 | GNUNET_ATS_print_network_type(ah->env.networks[c]), | ||
1547 | quality_bandwidth_utilization[c]); | ||
1548 | if (sum.addresses_in_network[c] > 0) | ||
1549 | { | ||
1550 | quality_bandwidth_utilization_total += quality_bandwidth_utilization[c]; | ||
1551 | network_count ++; | ||
1552 | } | ||
1553 | } | ||
1554 | if (0 < network_count) | ||
1555 | { | ||
1556 | quality_bandwidth_utilization_total /= network_count; | ||
1557 | include_utilization = GNUNET_YES; | ||
1558 | } | ||
1559 | else | ||
1560 | { | ||
1561 | quality_bandwidth_utilization_total = 0.0; | ||
1562 | include_utilization = GNUNET_NO; | ||
1563 | } | ||
1564 | |||
1565 | /* 3) How well does selection match application requirements */ | ||
1566 | if (0 == ah->pref_clients) | ||
1567 | { | ||
1568 | include_requirements = 0; | ||
1569 | } | ||
1570 | else | ||
1571 | { | ||
1572 | for (c = 0; c < GNUNET_ATS_PreferenceCount; c++) | ||
1573 | { | ||
1574 | prefs_fulfill[c] = 0.0; | ||
1575 | prefs_clients[c] = 0; | ||
1576 | } | ||
1577 | |||
1578 | for (cur = ah->pending_requests_head; NULL != cur; cur = cur->next) | ||
1579 | { | ||
1580 | active_address = NULL; | ||
1581 | GNUNET_CONTAINER_multipeermap_get_multiple (ah->addresses, | ||
1582 | &cur->id, &find_active_address, &active_address); | ||
1583 | |||
1584 | for (pcur = ah->preference_clients_head; NULL != pcur; pcur = pcur->next) | ||
1585 | { | ||
1586 | for (c = 0; c < GNUNET_ATS_PreferenceCount; c++) | ||
1587 | { | ||
1588 | if (prefs[c] == GNUNET_ATS_PREFERENCE_END) | ||
1589 | continue; | ||
1590 | pref_val = GAS_normalization_get_preferences_by_client (pcur->client, &cur->id, prefs[c]); | ||
1591 | if (-1.0 == pref_val) | ||
1592 | { | ||
1593 | GNUNET_break (0); | ||
1594 | continue; | ||
1595 | } | ||
1596 | |||
1597 | if (DEFAULT_REL_PREFERENCE == pref_val) | ||
1598 | { | ||
1599 | /* Default preference value */ | ||
1600 | continue; | ||
1601 | } | ||
1602 | |||
1603 | if (NULL != active_address) | ||
1604 | { | ||
1605 | norm_values = GAS_normalization_get_properties (active_address); | ||
1606 | prop_val = norm_values[c]; | ||
1607 | if ((norm_values[c] <= 1.0) || (norm_values[c] >= 2.0)) | ||
1608 | prop_val = DEFAULT_REL_QUALITY; | ||
1609 | } | ||
1610 | else | ||
1611 | { | ||
1612 | prop_val = DEFAULT_REL_QUALITY; | ||
1613 | } | ||
1614 | |||
1615 | /* We now have preference values [1..2] and properties [1..2] */ | ||
1616 | |||
1617 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "%u Client %p, Peer %s Property %s: pref: %.3f prop %.3f \n", | ||
1618 | c, | ||
1619 | pcur->client, | ||
1620 | GNUNET_i2s (&cur->id), | ||
1621 | GNUNET_ATS_print_preference_type(prefs[c]), | ||
1622 | pref_val, | ||
1623 | prop_val); | ||
1624 | |||
1625 | prefs_fulfill[c] += (pref_val * prop_val) / 2; | ||
1626 | prefs_clients[c] ++; | ||
1627 | } | ||
1628 | } | ||
1629 | } | ||
1630 | rels = 0; | ||
1631 | for (c = 0; c < GNUNET_ATS_PreferenceCount; c++) | ||
1632 | { | ||
1633 | if (0 < prefs_clients[c]) | ||
1634 | { | ||
1635 | prefs_fulfill[c] /= prefs_clients[c]; | ||
1636 | rels ++; | ||
1637 | quality_application_requirements += prefs_fulfill[c]; | ||
1638 | } | ||
1639 | } | ||
1640 | if (rels > 0) | ||
1641 | quality_application_requirements /= rels; | ||
1642 | else | ||
1643 | quality_application_requirements = 0.0; | ||
1644 | |||
1645 | include_requirements = 1; | ||
1646 | } | ||
1647 | /* GUQ */ | ||
1648 | |||
1649 | if (include_requests + include_utilization + include_requirements > 0) | ||
1650 | guq = (quality_requests_fulfilled + quality_bandwidth_utilization_total + quality_application_requirements) / | ||
1651 | (include_requests + include_utilization + include_requirements); | ||
1652 | else | ||
1653 | guq = 0.0; | ||
1654 | |||
1655 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | ||
1656 | "Requests fulfilled %.3f bandwidth utilized %.3f application preferences met %.3f => %.3f\n", | ||
1657 | quality_requests_fulfilled, | ||
1658 | quality_bandwidth_utilization_total, | ||
1659 | quality_application_requirements, | ||
1660 | guq); | ||
1661 | #endif | ||
1662 | } | ||
1663 | |||
1664 | /** | 1358 | /** |
1665 | * Solver information callback | 1359 | * Solver information callback |
1666 | * | 1360 | * |
@@ -1753,7 +1447,6 @@ solver_info_cb (void *cls, | |||
1753 | GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, | 1447 | GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, |
1754 | "Solver notifies `%s' with result `%s'\n", "GAS_OP_SOLVE_UPDATE_NOTIFICATION_STOP", | 1448 | "Solver notifies `%s' with result `%s'\n", "GAS_OP_SOLVE_UPDATE_NOTIFICATION_STOP", |
1755 | (GAS_STAT_SUCCESS == stat) ? "SUCCESS" : "FAIL"); | 1449 | (GAS_STAT_SUCCESS == stat) ? "SUCCESS" : "FAIL"); |
1756 | GAS_addresses_evaluate_assignment (cls); | ||
1757 | return; | 1450 | return; |
1758 | default: | 1451 | default: |
1759 | break; | 1452 | break; |