log CPU usage of network thread
This commit is contained in:
parent
8b6522a763
commit
7d20c0b0c4
|
@ -94,7 +94,7 @@ POSSIBILITY OF SUCH DAMAGE.
|
||||||
#include <boost/asio/ssl/context.hpp>
|
#include <boost/asio/ssl/context.hpp>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if TORRENT_STATS && defined __MACH__
|
#ifdef TORRENT_STATS && defined __MACH__
|
||||||
#include <mach/vm_statistics.h>
|
#include <mach/vm_statistics.h>
|
||||||
#include <mach/mach_init.h>
|
#include <mach/mach_init.h>
|
||||||
#include <mach/host_info.h>
|
#include <mach/host_info.h>
|
||||||
|
@ -145,18 +145,24 @@ namespace libtorrent
|
||||||
struct session_impl;
|
struct session_impl;
|
||||||
|
|
||||||
#if defined TORRENT_STATS && !defined __MACH__
|
#if defined TORRENT_STATS && !defined __MACH__
|
||||||
struct vm_statistics_data_t
|
struct vm_statistics_data_t
|
||||||
{
|
{
|
||||||
boost::uint64_t active_count;
|
boost::uint64_t active_count;
|
||||||
boost::uint64_t inactive_count;
|
boost::uint64_t inactive_count;
|
||||||
boost::uint64_t wire_count;
|
boost::uint64_t wire_count;
|
||||||
boost::uint64_t free_count;
|
boost::uint64_t free_count;
|
||||||
boost::uint64_t pageins;
|
boost::uint64_t pageins;
|
||||||
boost::uint64_t pageouts;
|
boost::uint64_t pageouts;
|
||||||
boost::uint64_t faults;
|
boost::uint64_t faults;
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
struct thread_cpu_usage
|
||||||
|
{
|
||||||
|
ptime user_time;
|
||||||
|
ptime system_time;
|
||||||
|
};
|
||||||
|
|
||||||
#if defined TORRENT_VERBOSE_LOGGING || defined TORRENT_LOGGING || defined TORRENT_ERROR_LOGGING
|
#if defined TORRENT_VERBOSE_LOGGING || defined TORRENT_LOGGING || defined TORRENT_ERROR_LOGGING
|
||||||
struct tracker_logger;
|
struct tracker_logger;
|
||||||
#endif
|
#endif
|
||||||
|
@ -942,6 +948,7 @@ namespace libtorrent
|
||||||
int m_num_banned_peers;
|
int m_num_banned_peers;
|
||||||
int m_banned_for_hash_failure;
|
int m_banned_for_hash_failure;
|
||||||
vm_statistics_data_t m_last_vm_stat;
|
vm_statistics_data_t m_last_vm_stat;
|
||||||
|
thread_cpu_usage m_network_thread_cpu_usage;
|
||||||
sliding_average<20> m_read_ops;
|
sliding_average<20> m_read_ops;
|
||||||
sliding_average<20> m_write_ops;;
|
sliding_average<20> m_write_ops;;
|
||||||
enum
|
enum
|
||||||
|
|
|
@ -150,6 +150,7 @@ reports = [
|
||||||
('system memory', '', '', 'virtual memory page count', ['active resident pages', 'inactive resident pages', 'pinned resident pages', 'free pages']),
|
('system memory', '', '', 'virtual memory page count', ['active resident pages', 'inactive resident pages', 'pinned resident pages', 'free pages']),
|
||||||
('memory paging', '', '', 'vm disk activity', ['pageins', 'pageouts']),
|
('memory paging', '', '', 'vm disk activity', ['pageins', 'pageouts']),
|
||||||
('page faults', '', '', '', ['page faults']),
|
('page faults', '', '', '', ['page faults']),
|
||||||
|
('CPU usage', '%', '', '', ['network thread system time', 'network thread user+system time']),
|
||||||
('boost.asio messages', 'events/s', '', 'number of messages posted per second', [ \
|
('boost.asio messages', 'events/s', '', 'number of messages posted per second', [ \
|
||||||
'read_counter', 'write_counter', 'tick_counter', 'lsd_counter', \
|
'read_counter', 'write_counter', 'tick_counter', 'lsd_counter', \
|
||||||
'lsd_peer_counter', 'udp_counter', 'accept_counter', 'disk_queue_counter', \
|
'lsd_peer_counter', 'udp_counter', 'accept_counter', 'disk_queue_counter', \
|
||||||
|
|
|
@ -82,6 +82,10 @@ POSSIBILITY OF SUCH DAMAGE.
|
||||||
#include "libtorrent/extensions.hpp"
|
#include "libtorrent/extensions.hpp"
|
||||||
#include "libtorrent/random.hpp"
|
#include "libtorrent/random.hpp"
|
||||||
|
|
||||||
|
#ifdef TORRENT_STATS && defined __MACH__
|
||||||
|
#include <mach/task.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifndef TORRENT_WINDOWS
|
#ifndef TORRENT_WINDOWS
|
||||||
#include <sys/resource.h>
|
#include <sys/resource.h>
|
||||||
#endif
|
#endif
|
||||||
|
@ -1058,6 +1062,8 @@ namespace aux {
|
||||||
":disk_write_counter"
|
":disk_write_counter"
|
||||||
":up 8:up 16:up 32:up 64:up 128:up 256:up 512:up 1024:up 2048:up 4096:up 8192:up 16384:up 32768:up 65536:up 131072:up 262144:up 524288:up 1048576"
|
":up 8:up 16:up 32:up 64:up 128:up 256:up 512:up 1024:up 2048:up 4096:up 8192:up 16384:up 32768:up 65536:up 131072:up 262144:up 524288:up 1048576"
|
||||||
":down 8:down 16:down 32:down 64:down 128:down 256:down 512:down 1024:down 2048:down 4096:down 8192:down 16384:down 32768:down 65536:down 131072:down 262144:down 524288:down 1048576"
|
":down 8:down 16:down 32:down 64:down 128:down 256:down 512:down 1024:down 2048:down 4096:down 8192:down 16384:down 32768:down 65536:down 131072:down 262144:down 524288:down 1048576"
|
||||||
|
":network thread system time"
|
||||||
|
":network thread user+system time"
|
||||||
"\n\n", m_stats_logger);
|
"\n\n", m_stats_logger);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -3199,6 +3205,32 @@ namespace aux {
|
||||||
// TOOD: windows?
|
// TOOD: windows?
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void get_thread_cpu_usage(thread_cpu_usage* tu)
|
||||||
|
{
|
||||||
|
#if defined __MACH__
|
||||||
|
task_thread_times_info t_info;
|
||||||
|
mach_msg_type_number_t t_info_count = TASK_THREAD_TIMES_INFO_COUNT;
|
||||||
|
task_info(mach_task_self(), TASK_THREAD_TIMES_INFO, (task_info_t)&t_info, &t_info_count);
|
||||||
|
|
||||||
|
tu->user_time = min_time()
|
||||||
|
+ seconds(t_info.user_time.seconds)
|
||||||
|
+ microsec(t_info.user_time.microseconds);
|
||||||
|
tu->system_time = min_time()
|
||||||
|
+ seconds(t_info.system_time.seconds)
|
||||||
|
+ microsec(t_info.system_time.microseconds);
|
||||||
|
#elif defined TORRENT_LINUX
|
||||||
|
struct rusage ru;
|
||||||
|
getrusage(RUSAGE_THREAD, &ru);
|
||||||
|
tu->user_time = min_time()
|
||||||
|
+ seconds(ru.ru_utime.tv_sec)
|
||||||
|
+ microsec(ru.ru_utime.tv_usec);
|
||||||
|
tu->system_time = min_time()
|
||||||
|
+ seconds(ru.ru_stime.tv_sec)
|
||||||
|
+ microsec(ru.ru_stime.tv_usec);
|
||||||
|
#elif defined TORRENT_WINDOWS
|
||||||
|
// GetThreadTimes
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
void session_impl::enable_stats_logging(bool s)
|
void session_impl::enable_stats_logging(bool s)
|
||||||
{
|
{
|
||||||
|
@ -3215,6 +3247,7 @@ namespace aux {
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
rotate_stats_log();
|
rotate_stats_log();
|
||||||
|
get_thread_cpu_usage(&m_network_thread_cpu_usage);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3407,6 +3440,8 @@ namespace aux {
|
||||||
// system memory stats
|
// system memory stats
|
||||||
vm_statistics_data_t vm_stat;
|
vm_statistics_data_t vm_stat;
|
||||||
get_vm_stats(&vm_stat);
|
get_vm_stats(&vm_stat);
|
||||||
|
thread_cpu_usage cur_cpu_usage;
|
||||||
|
get_thread_cpu_usage(&cur_cpu_usage);
|
||||||
|
|
||||||
if (m_stats_logger)
|
if (m_stats_logger)
|
||||||
{
|
{
|
||||||
|
@ -3562,12 +3597,21 @@ namespace aux {
|
||||||
STAT_LOG(d, m_recv_buffer_sizes[i]);
|
STAT_LOG(d, m_recv_buffer_sizes[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
STAT_LOG(f, total_milliseconds(cur_cpu_usage.user_time
|
||||||
|
- m_network_thread_cpu_usage.user_time) * 100.0 / double(tick_interval_ms));
|
||||||
|
STAT_LOG(f, (total_milliseconds(cur_cpu_usage.system_time
|
||||||
|
- m_network_thread_cpu_usage.system_time)
|
||||||
|
+ total_milliseconds(cur_cpu_usage.user_time
|
||||||
|
- m_network_thread_cpu_usage.user_time)) * 100.0
|
||||||
|
/ double(tick_interval_ms));
|
||||||
|
|
||||||
fprintf(m_stats_logger, "\n");
|
fprintf(m_stats_logger, "\n");
|
||||||
|
|
||||||
#undef STAT_LOG
|
#undef STAT_LOG
|
||||||
|
|
||||||
m_last_cache_status = cs;
|
m_last_cache_status = cs;
|
||||||
m_last_vm_stat = vm_stat;
|
m_last_vm_stat = vm_stat;
|
||||||
|
m_network_thread_cpu_usage = cur_cpu_usage;
|
||||||
m_last_failed = m_total_failed_bytes;
|
m_last_failed = m_total_failed_bytes;
|
||||||
m_last_redundant = m_total_redundant_bytes;
|
m_last_redundant = m_total_redundant_bytes;
|
||||||
m_last_uploaded = m_stat.total_upload();
|
m_last_uploaded = m_stat.total_upload();
|
||||||
|
|
Loading…
Reference in New Issue