exposed read cache info as well as write cache
This commit is contained in:
parent
535aaf8182
commit
9c9c13c7bb
|
@ -793,6 +793,8 @@ struct cached_piece_info
|
||||||
int piece;
|
int piece;
|
||||||
std::vector<bool> blocks;
|
std::vector<bool> blocks;
|
||||||
ptime last_use;
|
ptime last_use;
|
||||||
|
enum kind_t { read_cache = 0, write_cache = 1 };
|
||||||
|
kind_t kind;
|
||||||
};
|
};
|
||||||
</pre>
|
</pre>
|
||||||
</blockquote>
|
</blockquote>
|
||||||
|
@ -801,6 +803,7 @@ struct cached_piece_info
|
||||||
the data for that block being in the disk cache and <tt class="docutils literal"><span class="pre">false</span></tt> means it's not.</p>
|
the data for that block being in the disk cache and <tt class="docutils literal"><span class="pre">false</span></tt> means it's not.</p>
|
||||||
<p><tt class="docutils literal"><span class="pre">last_use</span></tt> is the time when a block was last written to this piece. The older
|
<p><tt class="docutils literal"><span class="pre">last_use</span></tt> is the time when a block was last written to this piece. The older
|
||||||
a piece is, the more likely it is to be flushed to disk.</p>
|
a piece is, the more likely it is to be flushed to disk.</p>
|
||||||
|
<p><tt class="docutils literal"><span class="pre">kind</span></tt> specifies if this piece is part of the read cache or the write cache.</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="section">
|
<div class="section">
|
||||||
<h2><a id="is-listening-listen-port-listen-on" name="is-listening-listen-port-listen-on">is_listening() listen_port() listen_on()</a></h2>
|
<h2><a id="is-listening-listen-port-listen-on" name="is-listening-listen-port-listen-on">is_listening() listen_port() listen_on()</a></h2>
|
||||||
|
@ -2852,6 +2855,7 @@ struct session_settings
|
||||||
bool upnp_ignore_nonrouters;
|
bool upnp_ignore_nonrouters;
|
||||||
int send_buffer_watermark;
|
int send_buffer_watermark;
|
||||||
bool auto_upload_slots;
|
bool auto_upload_slots;
|
||||||
|
bool use_parole_mode;
|
||||||
int cache_size;
|
int cache_size;
|
||||||
int cache_expiry;
|
int cache_expiry;
|
||||||
std::pair<int, int> outgoing_ports;
|
std::pair<int, int> outgoing_ports;
|
||||||
|
@ -3018,6 +3022,11 @@ slot is opened. If the upload rate has been saturated for an extended period
|
||||||
of time, on upload slot is closed. The number of upload slots will never be
|
of time, on upload slot is closed. The number of upload slots will never be
|
||||||
less than what has been set by <tt class="docutils literal"><span class="pre">session::set_max_uploads()</span></tt>. To query the
|
less than what has been set by <tt class="docutils literal"><span class="pre">session::set_max_uploads()</span></tt>. To query the
|
||||||
current number of upload slots, see <tt class="docutils literal"><span class="pre">session_status::allowed_upload_slots</span></tt>.</p>
|
current number of upload slots, see <tt class="docutils literal"><span class="pre">session_status::allowed_upload_slots</span></tt>.</p>
|
||||||
|
<p><tt class="docutils literal"><span class="pre">use_parole_mode</span></tt> specifies if parole mode should be used. Parole mode means
|
||||||
|
that peers that participate in pieces that fail the hash check are put in a mode
|
||||||
|
where they are only allowed to download whole pieces. If the whole piece a peer
|
||||||
|
in parole mode fails the hash check, it is banned. If a peer participates in a
|
||||||
|
piece that passes the hash check, it is taken out of parole mode.</p>
|
||||||
<p><tt class="docutils literal"><span class="pre">cache_size</span></tt> is the disk write cache. It is specified in units of 16 KiB blocks.
|
<p><tt class="docutils literal"><span class="pre">cache_size</span></tt> is the disk write cache. It is specified in units of 16 KiB blocks.
|
||||||
It defaults to 512 (= 8 MB).</p>
|
It defaults to 512 (= 8 MB).</p>
|
||||||
<p><tt class="docutils literal"><span class="pre">cache_expiry</span></tt> is the number of seconds from the last cached write to a piece
|
<p><tt class="docutils literal"><span class="pre">cache_expiry</span></tt> is the number of seconds from the last cached write to a piece
|
||||||
|
|
|
@ -625,6 +625,8 @@ specified info-hash (``ih``).
|
||||||
int piece;
|
int piece;
|
||||||
std::vector<bool> blocks;
|
std::vector<bool> blocks;
|
||||||
ptime last_use;
|
ptime last_use;
|
||||||
|
enum kind_t { read_cache = 0, write_cache = 1 };
|
||||||
|
kind_t kind;
|
||||||
};
|
};
|
||||||
|
|
||||||
``piece`` is the piece index for this cache entry.
|
``piece`` is the piece index for this cache entry.
|
||||||
|
@ -635,6 +637,8 @@ the data for that block being in the disk cache and ``false`` means it's not.
|
||||||
``last_use`` is the time when a block was last written to this piece. The older
|
``last_use`` is the time when a block was last written to this piece. The older
|
||||||
a piece is, the more likely it is to be flushed to disk.
|
a piece is, the more likely it is to be flushed to disk.
|
||||||
|
|
||||||
|
``kind`` specifies if this piece is part of the read cache or the write cache.
|
||||||
|
|
||||||
is_listening() listen_port() listen_on()
|
is_listening() listen_port() listen_on()
|
||||||
----------------------------------------
|
----------------------------------------
|
||||||
|
|
||||||
|
|
|
@ -1344,7 +1344,7 @@ int main(int ac, char* av[])
|
||||||
if (print_peers && !peers.empty())
|
if (print_peers && !peers.empty())
|
||||||
print_peer_info(out, peers);
|
print_peer_info(out, peers);
|
||||||
|
|
||||||
if (print_downloads && s.state != torrent_status::seeding)
|
if (print_downloads)
|
||||||
{
|
{
|
||||||
h.get_download_queue(queue);
|
h.get_download_queue(queue);
|
||||||
std::sort(queue.begin(), queue.end(), bind(&partial_piece_info::piece_index, _1)
|
std::sort(queue.begin(), queue.end(), bind(&partial_piece_info::piece_index, _1)
|
||||||
|
@ -1398,6 +1398,24 @@ int main(int ac, char* av[])
|
||||||
out << "\n";
|
out << "\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (std::vector<cached_piece_info>::iterator i = pieces.begin()
|
||||||
|
, end(pieces.end()); i != end; ++i)
|
||||||
|
{
|
||||||
|
if (i->kind != cached_piece_info::read_cache) continue;
|
||||||
|
out << to_string(i->piece, 4) << ": [";
|
||||||
|
for (std::vector<bool>::iterator k = i->blocks.begin()
|
||||||
|
, end(i->blocks.end()); k != end; ++k)
|
||||||
|
{
|
||||||
|
#ifdef ANSI_TERMINAL_COLORS
|
||||||
|
if (*k) out << esc("33;7") << " " << esc("0");
|
||||||
|
else out << " ";
|
||||||
|
#else
|
||||||
|
if (*k) out << "#";
|
||||||
|
else out << " ";
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
out << "]\n";
|
||||||
|
}
|
||||||
out << "___________________________________\n";
|
out << "___________________________________\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -58,6 +58,8 @@ namespace libtorrent
|
||||||
int piece;
|
int piece;
|
||||||
std::vector<bool> blocks;
|
std::vector<bool> blocks;
|
||||||
ptime last_use;
|
ptime last_use;
|
||||||
|
enum kind_t { read_cache = 0, write_cache = 1 };
|
||||||
|
kind_t kind;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct disk_io_job
|
struct disk_io_job
|
||||||
|
|
|
@ -101,6 +101,22 @@ namespace libtorrent
|
||||||
cached_piece_info info;
|
cached_piece_info info;
|
||||||
info.piece = i->piece;
|
info.piece = i->piece;
|
||||||
info.last_use = i->last_use;
|
info.last_use = i->last_use;
|
||||||
|
info.kind = cached_piece_info::write_cache;
|
||||||
|
int blocks_in_piece = (ti.piece_size(i->piece) + (m_block_size) - 1) / m_block_size;
|
||||||
|
info.blocks.resize(blocks_in_piece);
|
||||||
|
for (int b = 0; b < blocks_in_piece; ++b)
|
||||||
|
if (i->blocks[b]) info.blocks[b] = true;
|
||||||
|
ret.push_back(info);
|
||||||
|
}
|
||||||
|
for (cache_t::const_iterator i = m_read_pieces.begin()
|
||||||
|
, end(m_read_pieces.end()); i != end; ++i)
|
||||||
|
{
|
||||||
|
torrent_info const& ti = *i->storage->info();
|
||||||
|
if (ti.info_hash() != ih) continue;
|
||||||
|
cached_piece_info info;
|
||||||
|
info.piece = i->piece;
|
||||||
|
info.last_use = i->last_use;
|
||||||
|
info.kind = cached_piece_info::read_cache;
|
||||||
int blocks_in_piece = (ti.piece_size(i->piece) + (m_block_size) - 1) / m_block_size;
|
int blocks_in_piece = (ti.piece_size(i->piece) + (m_block_size) - 1) / m_block_size;
|
||||||
info.blocks.resize(blocks_in_piece);
|
info.blocks.resize(blocks_in_piece);
|
||||||
for (int b = 0; b < blocks_in_piece; ++b)
|
for (int b = 0; b < blocks_in_piece; ++b)
|
||||||
|
|
Loading…
Reference in New Issue