Nice work. Patch applies cleanly to ubuntu 12.10 packaged version. I
will run with this for a while to see what it does for me.
(Note I'm not affiliated with this project, so my attention is in no way
official.)
Seth
On 01/30/2013 09:05 PM, Richard Braun wrote:
> Monitoring the amount of dirty memory helps understanding how memory and
> I/O behave depending on the workload. This can in turn be used (mostly
> by system administrators and advanced users) to tune some VM parameters,
> such as vm.dirty_background_ratio and vm.dirty_ratio.
>
> The new "dirty" value reported in the memory meter actually includes
> both the Dirty (waiting to be written back) and Writeback (being written
> back) counters of the meminfo procfs file. In order to avoid consuming
> too much screen space, the previous "buffers" and "cache" values are
> merged in the latter, which now stands for clean cached memory. Total
> memory is then divided between "used", "dirty", "cached" (clean), and
> unused.
> ---
> CRT.c | 14 +++++++-------
> CRT.h | 2 +-
> MemoryMeter.c | 19 ++++++++++---------
> ProcessList.c | 10 ++++++++++
> ProcessList.h | 2 ++
> htop.c | 2 +-
> 6 files changed, 31 insertions(+), 18 deletions(-)
>
> diff --git a/CRT.c b/CRT.c
> index 3a1eb91..00e95f2 100644
> --- a/CRT.c
> +++ b/CRT.c
> @@ -83,7 +83,7 @@ typedef enum ColorElements_ {
> GRAPH_8,
> GRAPH_9,
> MEMORY_USED,
> - MEMORY_BUFFERS,
> + MEMORY_DIRTY,
> MEMORY_CACHE,
> LOAD,
> LOAD_AVERAGE_FIFTEEN,
> @@ -281,7 +281,7 @@ void CRT_setColors(int colorScheme) {
> CRT_colors[GRAPH_8] = A_DIM;
> CRT_colors[GRAPH_9] = A_DIM;
> CRT_colors[MEMORY_USED] = A_BOLD;
> - CRT_colors[MEMORY_BUFFERS] = A_NORMAL;
> + CRT_colors[MEMORY_DIRTY] = A_NORMAL;
> CRT_colors[MEMORY_CACHE] = A_NORMAL;
> CRT_colors[LOAD_AVERAGE_FIFTEEN] = A_DIM;
> CRT_colors[LOAD_AVERAGE_FIVE] = A_NORMAL;
> @@ -342,7 +342,7 @@ void CRT_setColors(int colorScheme) {
> CRT_colors[GRAPH_8] = ColorPair(Yellow,White);
> CRT_colors[GRAPH_9] = ColorPair(Yellow,White);
> CRT_colors[MEMORY_USED] = ColorPair(Green,White);
> - CRT_colors[MEMORY_BUFFERS] = ColorPair(Cyan,White);
> + CRT_colors[MEMORY_DIRTY] = ColorPair(Cyan,White);
> CRT_colors[MEMORY_CACHE] = ColorPair(Yellow,White);
> CRT_colors[LOAD_AVERAGE_FIFTEEN] = ColorPair(Black,White);
> CRT_colors[LOAD_AVERAGE_FIVE] = ColorPair(Black,White);
> @@ -403,7 +403,7 @@ void CRT_setColors(int colorScheme) {
> CRT_colors[GRAPH_8] = ColorPair(Yellow,Black);
> CRT_colors[GRAPH_9] = ColorPair(Yellow,Black);
> CRT_colors[MEMORY_USED] = ColorPair(Green,Black);
> - CRT_colors[MEMORY_BUFFERS] = ColorPair(Cyan,Black);
> + CRT_colors[MEMORY_DIRTY] = ColorPair(Cyan,Black);
> CRT_colors[MEMORY_CACHE] = ColorPair(Yellow,Black);
> CRT_colors[LOAD_AVERAGE_FIFTEEN] = ColorPair(Black,Black);
> CRT_colors[LOAD_AVERAGE_FIVE] = ColorPair(Black,Black);
> @@ -464,7 +464,7 @@ void CRT_setColors(int colorScheme) {
> CRT_colors[GRAPH_8] = A_BOLD | ColorPair(Yellow,Blue);
> CRT_colors[GRAPH_9] = A_BOLD | ColorPair(Yellow,Blue);
> CRT_colors[MEMORY_USED] = A_BOLD | ColorPair(Green,Blue);
> - CRT_colors[MEMORY_BUFFERS] = A_BOLD | ColorPair(Cyan,Blue);
> + CRT_colors[MEMORY_DIRTY] = A_BOLD | ColorPair(Cyan,Blue);
> CRT_colors[MEMORY_CACHE] = A_BOLD | ColorPair(Yellow,Blue);
> CRT_colors[LOAD_AVERAGE_FIFTEEN] = A_BOLD | ColorPair(Black,Blue);
> CRT_colors[LOAD_AVERAGE_FIVE] = A_NORMAL | ColorPair(White,Blue);
> @@ -525,7 +525,7 @@ void CRT_setColors(int colorScheme) {
> CRT_colors[GRAPH_8] = ColorPair(Blue,Black);
> CRT_colors[GRAPH_9] = A_BOLD | ColorPair(Black,Black);
> CRT_colors[MEMORY_USED] = ColorPair(Green,Black);
> - CRT_colors[MEMORY_BUFFERS] = ColorPair(Blue,Black);
> + CRT_colors[MEMORY_DIRTY] = ColorPair(Blue,Black);
> CRT_colors[MEMORY_CACHE] = ColorPair(Yellow,Black);
> CRT_colors[LOAD_AVERAGE_FIFTEEN] = ColorPair(Green,Black);
> CRT_colors[LOAD_AVERAGE_FIVE] = ColorPair(Green,Black);
> @@ -587,7 +587,7 @@ void CRT_setColors(int colorScheme) {
> CRT_colors[GRAPH_8] = ColorPair(Blue,Black);
> CRT_colors[GRAPH_9] = A_BOLD | ColorPair(Black,Black);
> CRT_colors[MEMORY_USED] = ColorPair(Green,Black);
> - CRT_colors[MEMORY_BUFFERS] = ColorPair(Blue,Black);
> + CRT_colors[MEMORY_DIRTY] = ColorPair(Blue,Black);
> CRT_colors[MEMORY_CACHE] = ColorPair(Yellow,Black);
> CRT_colors[LOAD_AVERAGE_FIFTEEN] = A_BOLD | ColorPair(Black,Black);
> CRT_colors[LOAD_AVERAGE_FIVE] = A_NORMAL;
> diff --git a/CRT.h b/CRT.h
> index f7d4d72..22125e2 100644
> --- a/CRT.h
> +++ b/CRT.h
> @@ -75,7 +75,7 @@ typedef enum ColorElements_ {
> GRAPH_8,
> GRAPH_9,
> MEMORY_USED,
> - MEMORY_BUFFERS,
> + MEMORY_DIRTY,
> MEMORY_CACHE,
> LOAD,
> LOAD_AVERAGE_FIFTEEN,
> diff --git a/MemoryMeter.c b/MemoryMeter.c
> index eca0442..0f59808 100644
> --- a/MemoryMeter.c
> +++ b/MemoryMeter.c
> @@ -22,17 +22,18 @@ in the source distribution for its full text.
> }*/
>
> int MemoryMeter_attributes[] = {
> - MEMORY_USED, MEMORY_BUFFERS, MEMORY_CACHE
> + MEMORY_USED, MEMORY_DIRTY, MEMORY_CACHE
> };
>
> static void MemoryMeter_setValues(Meter* this, char* buffer, int size) {
> long int usedMem = this->pl->usedMem;
> - long int buffersMem = this->pl->buffersMem;
> - long int cachedMem = this->pl->cachedMem;
> - usedMem -= buffersMem + cachedMem;
> + long int dirtyMem = this->pl->dirtyMem + this->pl->writebackMem;
> + long int cachedMem = this->pl->buffersMem + this->pl->cachedMem;
> + usedMem -= cachedMem;
> + cachedMem -= dirtyMem;
> this->total = this->pl->totalMem;
> this->values[0] = usedMem;
> - this->values[1] = buffersMem;
> + this->values[1] = dirtyMem;
> this->values[2] = cachedMem;
> snprintf(buffer, size, "%ld/%ldMB", (long int) usedMem / 1024, (long
> int) this->total / 1024);
> }
> @@ -43,7 +44,7 @@ static void MemoryMeter_display(Object* cast, RichString*
> out) {
> int k = 1024; const char* format = "%ldM ";
> long int totalMem = this->total / k;
> long int usedMem = this->values[0] / k;
> - long int buffersMem = this->values[1] / k;
> + long int dirtyMem = this->values[1] / k;
> long int cachedMem = this->values[2] / k;
> RichString_write(out, CRT_colors[METER_TEXT], ":");
> sprintf(buffer, format, totalMem);
> @@ -51,9 +52,9 @@ static void MemoryMeter_display(Object* cast, RichString*
> out) {
> sprintf(buffer, format, usedMem);
> RichString_append(out, CRT_colors[METER_TEXT], "used:");
> RichString_append(out, CRT_colors[MEMORY_USED], buffer);
> - sprintf(buffer, format, buffersMem);
> - RichString_append(out, CRT_colors[METER_TEXT], "buffers:");
> - RichString_append(out, CRT_colors[MEMORY_BUFFERS], buffer);
> + sprintf(buffer, format, dirtyMem);
> + RichString_append(out, CRT_colors[METER_TEXT], "dirty:");
> + RichString_append(out, CRT_colors[MEMORY_DIRTY], buffer);
> sprintf(buffer, format, cachedMem);
> RichString_append(out, CRT_colors[METER_TEXT], "cache:");
> RichString_append(out, CRT_colors[MEMORY_CACHE], buffer);
> diff --git a/ProcessList.c b/ProcessList.c
> index 99a6512..94a9a5e 100644
> --- a/ProcessList.c
> +++ b/ProcessList.c
> @@ -127,6 +127,8 @@ typedef struct ProcessList_ {
> unsigned long long int sharedMem;
> unsigned long long int buffersMem;
> unsigned long long int cachedMem;
> + unsigned long long int dirtyMem;
> + unsigned long long int writebackMem;
> unsigned long long int totalSwap;
> unsigned long long int usedSwap;
> unsigned long long int freeSwap;
> @@ -788,6 +790,14 @@ void ProcessList_scan(ProcessList* this) {
> if (String_startsWith(buffer, "Cached:"))
> sscanf(buffer, "Cached: %llu kB", &this->cachedMem);
> break;
> + case 'D':
> + if (String_startsWith(buffer, "Dirty:"))
> + sscanf(buffer, "Dirty: %llu kB", &this->dirtyMem);
> + break;
> + case 'W':
> + if (String_startsWith(buffer, "Writeback:"))
> + sscanf(buffer, "Writeback: %llu kB", &this->writebackMem);
> + break;
> case 'S':
> if (String_startsWith(buffer, "SwapTotal:"))
> sscanf(buffer, "SwapTotal: %llu kB", &this->totalSwap);
> diff --git a/ProcessList.h b/ProcessList.h
> index e410ae2..cdc4c4e 100644
> --- a/ProcessList.h
> +++ b/ProcessList.h
> @@ -110,6 +110,8 @@ typedef struct ProcessList_ {
> unsigned long long int sharedMem;
> unsigned long long int buffersMem;
> unsigned long long int cachedMem;
> + unsigned long long int dirtyMem;
> + unsigned long long int writebackMem;
> unsigned long long int totalSwap;
> unsigned long long int usedSwap;
> unsigned long long int freeSwap;
> diff --git a/htop.c b/htop.c
> index cdee8ee..220aa8e 100644
> --- a/htop.c
> +++ b/htop.c
> @@ -102,7 +102,7 @@ static void showHelp(ProcessList* pl) {
> mvaddstr(4, 0, "Memory bar: ");
> addattrstr(CRT_colors[BAR_BORDER], "[");
> addattrstr(CRT_colors[MEMORY_USED], "used"); addstr("/");
> - addattrstr(CRT_colors[MEMORY_BUFFERS], "buffers"); addstr("/");
> + addattrstr(CRT_colors[MEMORY_DIRTY], "dirty"); addstr("/");
> addattrstr(CRT_colors[MEMORY_CACHE], "cache");
> addattrstr(CRT_colors[BAR_SHADOW], "
> used/total");
> addattrstr(CRT_colors[BAR_BORDER], "]");
> -- 1.7.2.5
------------------------------------------------------------------------------
Everyone hates slow websites. So do we.
Make your web apps faster with AppDynamics
Download AppDynamics Lite for free today:
http://p.sf.net/sfu/appdyn_d2d_jan
_______________________________________________
htop-general mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/htop-general