Browse Source

Add option for hashing_threads, use 10 asyc IO threads

Add option for setting lt::settings_pack::hashing_threads
introduced by libtorrent 2.0. It has no effect for earlier
libtorrent versions.
Use 10 async IO threads, as per #11461.
Closes #11461.
adaptive-webui-19844
Anton Bershanskiy 4 years ago
parent
commit
b4bfdd6f7a
  1. 20
      src/base/bittorrent/session.cpp
  2. 3
      src/base/bittorrent/session.h
  3. 17
      src/gui/advancedsettings.cpp
  4. 2
      src/gui/advancedsettings.h
  5. 5
      src/webui/api/appcontroller.cpp
  6. 10
      src/webui/www/private/views/preferences.html

20
src/base/bittorrent/session.cpp

@ -329,7 +329,8 @@ Session::Session(QObject *parent)
, m_IPFilterFile(BITTORRENT_SESSION_KEY("IPFilter")) , m_IPFilterFile(BITTORRENT_SESSION_KEY("IPFilter"))
, m_announceToAllTrackers(BITTORRENT_SESSION_KEY("AnnounceToAllTrackers"), false) , m_announceToAllTrackers(BITTORRENT_SESSION_KEY("AnnounceToAllTrackers"), false)
, m_announceToAllTiers(BITTORRENT_SESSION_KEY("AnnounceToAllTiers"), true) , m_announceToAllTiers(BITTORRENT_SESSION_KEY("AnnounceToAllTiers"), true)
, m_asyncIOThreads(BITTORRENT_SESSION_KEY("AsyncIOThreadsCount"), 4) , m_asyncIOThreads(BITTORRENT_SESSION_KEY("AsyncIOThreadsCount"), 10)
, m_hashingThreads(BITTORRENT_SESSION_KEY("HashingThreadsCount"), 2)
, m_filePoolSize(BITTORRENT_SESSION_KEY("FilePoolSize"), 40) , m_filePoolSize(BITTORRENT_SESSION_KEY("FilePoolSize"), 40)
, m_checkingMemUsage(BITTORRENT_SESSION_KEY("CheckingMemUsageSize"), 32) , m_checkingMemUsage(BITTORRENT_SESSION_KEY("CheckingMemUsageSize"), 32)
#if (LIBTORRENT_VERSION_NUM >= 10206) #if (LIBTORRENT_VERSION_NUM >= 10206)
@ -1269,6 +1270,9 @@ void Session::loadLTSettings(lt::settings_pack &settingsPack)
settingsPack.set_int(lt::settings_pack::peer_turnover_interval, peerTurnoverInterval()); settingsPack.set_int(lt::settings_pack::peer_turnover_interval, peerTurnoverInterval());
settingsPack.set_int(lt::settings_pack::aio_threads, asyncIOThreads()); settingsPack.set_int(lt::settings_pack::aio_threads, asyncIOThreads());
#if (LIBTORRENT_VERSION_NUM >= 20000)
settingsPack.set_int(lt::settings_pack::hashing_threads, hashingThreads());
#endif
settingsPack.set_int(lt::settings_pack::file_pool_size, filePoolSize()); settingsPack.set_int(lt::settings_pack::file_pool_size, filePoolSize());
const int checkingMemUsageSize = checkingMemUsage() * 64; const int checkingMemUsageSize = checkingMemUsage() * 64;
@ -3030,6 +3034,20 @@ void Session::setAsyncIOThreads(const int num)
configureDeferred(); configureDeferred();
} }
int Session::hashingThreads() const
{
return qBound(1, m_hashingThreads.value(), 1024);
}
void Session::setHashingThreads(const int num)
{
if (num == m_hashingThreads)
return;
m_hashingThreads = num;
configureDeferred();
}
int Session::filePoolSize() const int Session::filePoolSize() const
{ {
return m_filePoolSize; return m_filePoolSize;

3
src/base/bittorrent/session.h

@ -342,6 +342,8 @@ namespace BitTorrent
void setPeerTurnoverInterval(int num); void setPeerTurnoverInterval(int num);
int asyncIOThreads() const; int asyncIOThreads() const;
void setAsyncIOThreads(int num); void setAsyncIOThreads(int num);
int hashingThreads() const;
void setHashingThreads(int num);
int filePoolSize() const; int filePoolSize() const;
void setFilePoolSize(int size); void setFilePoolSize(int size);
int checkingMemUsage() const; int checkingMemUsage() const;
@ -651,6 +653,7 @@ namespace BitTorrent
CachedSettingValue<bool> m_announceToAllTrackers; CachedSettingValue<bool> m_announceToAllTrackers;
CachedSettingValue<bool> m_announceToAllTiers; CachedSettingValue<bool> m_announceToAllTiers;
CachedSettingValue<int> m_asyncIOThreads; CachedSettingValue<int> m_asyncIOThreads;
CachedSettingValue<int> m_hashingThreads;
CachedSettingValue<int> m_filePoolSize; CachedSettingValue<int> m_filePoolSize;
CachedSettingValue<int> m_checkingMemUsage; CachedSettingValue<int> m_checkingMemUsage;
CachedSettingValue<int> m_diskCacheSize; CachedSettingValue<int> m_diskCacheSize;

17
src/gui/advancedsettings.cpp

@ -85,6 +85,9 @@ namespace
// libtorrent section // libtorrent section
LIBTORRENT_HEADER, LIBTORRENT_HEADER,
ASYNC_IO_THREADS, ASYNC_IO_THREADS,
#if (LIBTORRENT_VERSION_NUM >= 20000)
HASHING_THREADS,
#endif
FILE_POOL_SIZE, FILE_POOL_SIZE,
CHECKING_MEM_USAGE, CHECKING_MEM_USAGE,
#if (LIBTORRENT_VERSION_NUM < 20000) #if (LIBTORRENT_VERSION_NUM < 20000)
@ -187,6 +190,10 @@ void AdvancedSettings::saveAdvancedSettings()
#endif #endif
// Async IO threads // Async IO threads
session->setAsyncIOThreads(m_spinBoxAsyncIOThreads.value()); session->setAsyncIOThreads(m_spinBoxAsyncIOThreads.value());
#if (LIBTORRENT_VERSION_NUM >= 20000)
// Hashing threads
session->setHashingThreads(m_spinBoxHashingThreads.value());
#endif
// File pool size // File pool size
session->setFilePoolSize(m_spinBoxFilePoolSize.value()); session->setFilePoolSize(m_spinBoxFilePoolSize.value());
// Checking Memory Usage // Checking Memory Usage
@ -409,6 +416,16 @@ void AdvancedSettings::loadAdvancedSettings()
m_spinBoxAsyncIOThreads.setValue(session->asyncIOThreads()); m_spinBoxAsyncIOThreads.setValue(session->asyncIOThreads());
addRow(ASYNC_IO_THREADS, (tr("Asynchronous I/O threads") + ' ' + makeLink("https://www.libtorrent.org/reference-Settings.html#aio_threads", "(?)")) addRow(ASYNC_IO_THREADS, (tr("Asynchronous I/O threads") + ' ' + makeLink("https://www.libtorrent.org/reference-Settings.html#aio_threads", "(?)"))
, &m_spinBoxAsyncIOThreads); , &m_spinBoxAsyncIOThreads);
#if (LIBTORRENT_VERSION_NUM >= 20000)
// Hashing threads
m_spinBoxHashingThreads.setMinimum(1);
m_spinBoxHashingThreads.setMaximum(1024);
m_spinBoxHashingThreads.setValue(session->hashingThreads());
addRow(HASHING_THREADS, (tr("Hashing threads") + ' ' + makeLink("https://www.libtorrent.org/reference-Settings.html#hashing_threads", "(?)"))
, &m_spinBoxHashingThreads);
#endif
// File pool size // File pool size
m_spinBoxFilePoolSize.setMinimum(1); m_spinBoxFilePoolSize.setMinimum(1);
m_spinBoxFilePoolSize.setMaximum(std::numeric_limits<int>::max()); m_spinBoxFilePoolSize.setMaximum(std::numeric_limits<int>::max());

2
src/gui/advancedsettings.h

@ -77,6 +77,8 @@ private:
#if (LIBTORRENT_VERSION_NUM < 20000) #if (LIBTORRENT_VERSION_NUM < 20000)
QSpinBox m_spinBoxCache, m_spinBoxCacheTTL; QSpinBox m_spinBoxCache, m_spinBoxCacheTTL;
QCheckBox m_checkBoxCoalesceRW; QCheckBox m_checkBoxCoalesceRW;
#else
QSpinBox m_spinBoxHashingThreads;
#endif #endif
// OS dependent settings // OS dependent settings

5
src/webui/api/appcontroller.cpp

@ -277,6 +277,8 @@ void AppController::preferencesAction()
// libtorrent preferences // libtorrent preferences
// Async IO threads // Async IO threads
data["async_io_threads"] = session->asyncIOThreads(); data["async_io_threads"] = session->asyncIOThreads();
// Hashing threads
data["hashing_threads"] = session->hashingThreads();
// File pool size // File pool size
data["file_pool_size"] = session->filePoolSize(); data["file_pool_size"] = session->filePoolSize();
// Checking memory usage // Checking memory usage
@ -701,6 +703,9 @@ void AppController::setPreferencesAction()
// Async IO threads // Async IO threads
if (hasKey("async_io_threads")) if (hasKey("async_io_threads"))
session->setAsyncIOThreads(it.value().toInt()); session->setAsyncIOThreads(it.value().toInt());
// Hashing threads
if (hasKey("hashing_threads"))
session->setHashingThreads(it.value().toInt());
// File pool size // File pool size
if (hasKey("file_pool_size")) if (hasKey("file_pool_size"))
session->setFilePoolSize(it.value().toInt()); session->setFilePoolSize(it.value().toInt());

10
src/webui/www/private/views/preferences.html

@ -943,6 +943,14 @@
<input type="text" id="asyncIOThreads" style="width: 15em;" /> <input type="text" id="asyncIOThreads" style="width: 15em;" />
</td> </td>
</tr> </tr>
<tr>
<td>
<label for="hashingThreads">QBT_TR(Hashing threads (requires libtorrent >= 2.0):)QBT_TR[CONTEXT=OptionsDialog]&nbsp;<a href="https://www.libtorrent.org/reference-Settings.html#hashing_threads" target="_blank">(?)</a></label>
</td>
<td>
<input type="text" id="hashingThreads" style="width: 15em;" />
</td>
</tr>
<tr> <tr>
<td> <td>
<label for="filePoolSize">QBT_TR(File pool size:)QBT_TR[CONTEXT=OptionsDialog]&nbsp;<a href="https://www.libtorrent.org/reference-Settings.html#file_pool_size" target="_blank">(?)</a></label> <label for="filePoolSize">QBT_TR(File pool size:)QBT_TR[CONTEXT=OptionsDialog]&nbsp;<a href="https://www.libtorrent.org/reference-Settings.html#file_pool_size" target="_blank">(?)</a></label>
@ -1871,6 +1879,7 @@
$('resolvePeerCountries').setProperty('checked', pref.resolve_peer_countries); $('resolvePeerCountries').setProperty('checked', pref.resolve_peer_countries);
// libtorrent section // libtorrent section
$('asyncIOThreads').setProperty('value', pref.async_io_threads); $('asyncIOThreads').setProperty('value', pref.async_io_threads);
$('hashingThreads').setProperty('value', pref.hashing_threads);
$('filePoolSize').setProperty('value', pref.file_pool_size); $('filePoolSize').setProperty('value', pref.file_pool_size);
$('outstandMemoryWhenCheckingTorrents').setProperty('value', pref.checking_memory_use); $('outstandMemoryWhenCheckingTorrents').setProperty('value', pref.checking_memory_use);
$('diskCache').setProperty('value', pref.disk_cache); $('diskCache').setProperty('value', pref.disk_cache);
@ -2257,6 +2266,7 @@
// libtorrent section // libtorrent section
settings.set('async_io_threads', $('asyncIOThreads').getProperty('value')); settings.set('async_io_threads', $('asyncIOThreads').getProperty('value'));
settings.set('hashing_threads', $('hashingThreads').getProperty('value'));
settings.set('file_pool_size', $('filePoolSize').getProperty('value')); settings.set('file_pool_size', $('filePoolSize').getProperty('value'));
settings.set('checking_memory_use', $('outstandMemoryWhenCheckingTorrents').getProperty('value')); settings.set('checking_memory_use', $('outstandMemoryWhenCheckingTorrents').getProperty('value'));
settings.set('disk_cache', $('diskCache').getProperty('value')); settings.set('disk_cache', $('diskCache').getProperty('value'));

Loading…
Cancel
Save