sysutils/libsysstat Update to 0.4.4

No upstream changes.
  Patch improvements:
  Report cpu freq also on small load.
  Never report more than 100% freq use.
This commit is contained in:
Jesper Schmitz Mouridsen 2020-11-21 11:35:51 +00:00
parent ba84925501
commit f8085e57ce
Notes: svn2git 2021-03-31 03:12:20 +00:00
svn path=/head/; revision=555950
5 changed files with 76 additions and 32 deletions

View File

@ -2,7 +2,7 @@
# $FreeBSD$
PORTNAME= libsysstat
PORTVERSION= 0.4.3
PORTVERSION= 0.4.4
CATEGORIES= sysutils
MASTER_SITES= LXQT/${PORTNAME}

View File

@ -1,3 +1,3 @@
TIMESTAMP = 1588434445
SHA256 (lxqt/libsysstat-0.4.3.tar.xz) = 67dc786a4aca4b6ce142a2355ac6dd4c873c1e03f978676926500fffa73ebae8
SIZE (lxqt/libsysstat-0.4.3.tar.xz) = 17520
TIMESTAMP = 1605119504
SHA256 (lxqt/libsysstat-0.4.4.tar.xz) = 3997d17692d2ea467d384517aedb8fcc4050f2f66114a1405d42cef0adaafa6b
SIZE (lxqt/libsysstat-0.4.4.tar.xz) = 17532

View File

@ -1,6 +1,6 @@
--- cpustat.cpp.orig 2019-01-24 21:43:32 UTC
--- cpustat.cpp.orig 2020-11-03 14:45:02 UTC
+++ cpustat.cpp
@@ -27,11 +27,62 @@
@@ -27,11 +27,64 @@
#include <unistd.h>
#include "cpustat.h"
@ -48,13 +48,15 @@
+}
+
+/* Frequence is in MHz */
+ulong CurrentFreq(void)
+ulong CpuStatPrivate::CurrentFreq(void)
+{
+ ulong freq=0;
+ size_t len = sizeof(freq);
+
+ if (sysctlbyname("dev.cpu.0.freq", &freq, &len, NULL, 0) < 0) // man cpufreq BUGS section all cores have the same frequency.
+ if (sysctl(mib2,4,&freq, &len, NULL, 0) < 0) { // man cpufreq BUGS section all cores have the same frequency.
+ perror("sysctl");
+ return 0;
+}
+ else
+ return freq;
+
@ -63,20 +65,22 @@
CpuStatPrivate::CpuStatPrivate(CpuStat *parent)
: BaseStatPrivate(parent)
, mMonitoring(CpuStat::LoadAndFrequency)
@@ -39,7 +90,11 @@ CpuStatPrivate::CpuStatPrivate(CpuStat *parent)
@@ -39,7 +92,13 @@ CpuStatPrivate::CpuStatPrivate(CpuStat *parent)
mSource = defaultSource();
connect(mTimer, SIGNAL(timeout()), SLOT(timeout()));
-
+#ifdef HAVE_SYSCTL_H
+ size_t flen=2;
+ size_t alen=4;
+ sysctlnametomib("kern.cp_times",mib0,&flen);
+ sysctlnametomib("kern.cp_time",mib1,&flen);
+ sysctlnametomib("dev.cpu.0.freq",mib2,&alen);
+#endif
mUserHz = sysconf(_SC_CLK_TCK);
updateSources();
@@ -47,6 +102,49 @@ CpuStatPrivate::CpuStatPrivate(CpuStat *parent)
@@ -47,6 +106,51 @@ CpuStatPrivate::CpuStatPrivate(CpuStat *parent)
void CpuStatPrivate::addSource(const QString &source)
{
@ -98,7 +102,6 @@
+ free(t);
+ return;
+ }
+
+ while ((tokens = strsep(&t, " ")) != NULL)
+ {
+ char *freq;
@ -117,7 +120,10 @@
+ if ((min == 0) || (res < min))
+ min = res;
+ }
+ }
+ if (res + 1 == max)
+ max--;
+ }
+
+ }
+
+ free(t);
@ -126,7 +132,7 @@
bool ok;
uint min = readAllFile(qPrintable(QString::fromLatin1("/sys/devices/system/cpu/%1/cpufreq/scaling_min_freq").arg(source))).toUInt(&ok);
@@ -56,12 +154,27 @@ void CpuStatPrivate::addSource(const QString &source)
@@ -56,12 +160,27 @@ void CpuStatPrivate::addSource(const QString &source)
if (ok)
mBounds[source] = qMakePair(min, max);
}
@ -154,7 +160,7 @@
const QStringList rows = readAllFile("/proc/stat").split(QLatin1Char('\n'), QString::SkipEmptyParts);
for (const QString &row : rows)
{
@@ -99,6 +212,7 @@ void CpuStatPrivate::updateSources()
@@ -99,6 +218,7 @@ void CpuStatPrivate::updateSources()
addSource(QString::fromLatin1("cpu%1").arg(number));
}
}
@ -162,7 +168,7 @@
}
CpuStatPrivate::~CpuStatPrivate()
@@ -127,6 +241,88 @@ void CpuStatPrivate::recalculateMinMax()
@@ -127,6 +247,107 @@ void CpuStatPrivate::recalculateMinMax()
void CpuStatPrivate::timeout()
{
@ -193,28 +199,47 @@
+ current.total = current.user + current.nice + current.system+current.idle+current.other;
+
+ float sumDelta = static_cast<float>(current.total - mPrevious.total);
+
+ if ((mPrevious.total != 0) && ((sumDelta < mIntervalMin) || (sumDelta > mIntervalMax)))
+ {
+ if (mMonitoring == CpuStat::LoadAndFrequency)
+ emit update(0.0, 0.0, 0.0, 0.0, 0.0, 0);
+ else
+ if (mMonitoring == CpuStat::LoadAndFrequency)
+ {
+ float freqRate = 1.0;
+ ulong freq = CurrentFreq();
+
+ if (freq > 0)
+ {
+ if (mSource == QLatin1String("cpu"))
+ mSource = QLatin1String("cpu0");
+ //do not report more than 100%
+ if (freq > mBounds[mSource].second) {
+ freq = mBounds[mSource].second;
+ }
+ freqRate = static_cast<float>(freq) / static_cast<float>(mBounds[mSource].second);
+ emit update(0.0, 0.0, 0.0, 0.0, static_cast<float>(freqRate), freq);
+ }
+ }
+ else {
+ emit update(0.0, 0.0, 0.0, 0.0);
+
+ }
+ mPrevious.clear();
+ }
+ else
+
+ {
+ if (mMonitoring == CpuStat::LoadAndFrequency)
+ {
+ float freqRate = 1.0;
+ ulong freq = CurrentFreq();
+
+ if (freq > 0)
+ {
+ if(mSource==QLatin1String("cpu"))
+ freqRate = static_cast<float>(freq) / static_cast<float>(mBounds[QStringLiteral("cpu0")].second);// use max cpu0 for this case
+ else
+ freqRate = static_cast<float>(freq) / static_cast<float>(mBounds[mSource].second);
+ if (mSource == QLatin1String("cpu"))
+ mSource = QLatin1String("cpu0");
+ //do not report more than 100%
+ if (freq > mBounds[mSource].second) {
+ freq = mBounds[mSource].second;
+ }
+ freqRate = static_cast<float>(freq) / static_cast<float>(mBounds[mSource].second);
+ emit update(
+ static_cast<float>(current.user - mPrevious.user ) / sumDelta,
+ static_cast<float>(current.nice - mPrevious.nice ) / sumDelta,
@ -251,7 +276,16 @@
if ( (mMonitoring == CpuStat::LoadOnly)
|| (mMonitoring == CpuStat::LoadAndFrequency) )
{
@@ -261,6 +457,7 @@ void CpuStatPrivate::timeout()
@@ -229,7 +450,7 @@ void CpuStatPrivate::timeout()
mPrevious = current;
}
}
- }
+ //}
}
else
{
@@ -261,6 +482,7 @@ void CpuStatPrivate::timeout()
}
emit update(freq);
}

View File

@ -1,6 +1,6 @@
--- cpustat.h.orig 2019-01-30 19:27:42 UTC
--- cpustat.h.orig 2020-11-03 14:45:02 UTC
+++ cpustat.h
@@ -27,14 +27,20 @@
@@ -27,14 +27,19 @@
#ifndef LIBSYSSTAT__CPU_STAT__INCLUDED
#define LIBSYSSTAT__CPU_STAT__INCLUDED
@ -18,8 +18,15 @@
+#ifdef HAVE_SYSCTL_H
+ char *GetFirstFragment(char *string, const char *delim);
+ int GetCpu(void);
+ ulong CurrentFreq(void);
+#endif
class CpuStatPrivate;
class SYSSTATSHARED_EXPORT CpuStat : public BaseStat
@@ -54,7 +59,6 @@ class SYSSTATSHARED_EXPORT CpuStat : public BaseStat (
uint minFreq(const QString &source) const;
uint maxFreq(const QString &source) const;
-
signals:
void update(float user, float nice, float system, float other, float frequencyRate, uint frequency);
void update(float user, float nice, float system, float other);

View File

@ -1,4 +1,4 @@
--- cpustat_p.h.orig 2019-01-30 19:24:29 UTC
--- cpustat_p.h.orig 2020-11-03 14:45:02 UTC
+++ cpustat_p.h
@@ -27,6 +27,9 @@
#ifndef LIBSYSSTAT__CPU_STAT__PRIVATE__INCLUDED
@ -10,13 +10,15 @@
#include <QtCore/QObject>
#include <QtCore/QtGlobal>
@@ -52,8 +55,13 @@ class CpuStatPrivate : public BaseStatPrivate (public)
@@ -52,8 +55,15 @@ class CpuStatPrivate : public BaseStatPrivate (public)
CpuStat::Monitoring monitoring() const;
void setMonitoring(CpuStat::Monitoring value);
+#ifdef HAVE_SYSCTL_H
+ ulong minFreq(const QString &source) const;
+ ulong maxFreq(const QString &source) const;
+ ulong CurrentFreq(void);
+
+#else
uint minFreq(const QString &source) const;
uint maxFreq(const QString &source) const;
@ -24,7 +26,7 @@
signals:
void update(float user, float nice, float system, float other);
@@ -74,12 +82,21 @@ private slots: (private)
@@ -74,12 +84,21 @@ private slots: (private)
{
Values();
@ -46,7 +48,7 @@
void sum();
@@ -89,7 +106,13 @@ private slots: (private)
@@ -89,7 +108,14 @@ private slots: (private)
CpuStat::Monitoring mMonitoring;
@ -54,6 +56,7 @@
+ typedef QMap<QString, QPair<ulong, ulong> > Bounds;
+ int mib0[2];
+ int mib1[2];
+ int mib2[4];
+#else
typedef QMap<QString, QPair<uint, uint> > Bounds;
+#endif