We were almost always saying there was too much dirty data that needed to
be flushed. Now, also print out debugging messages when memory pressure is
detected stating what we have found, exactly.
if (g_atomic_int_get(&fs->cache_dirty)
+ g_atomic_int_get(&fs->cache_log_dirty)
> bluesky_watermark_high_dirty)
if (g_atomic_int_get(&fs->cache_dirty)
+ g_atomic_int_get(&fs->cache_log_dirty)
> bluesky_watermark_high_dirty)
+ {
+ g_print("pressure: too much dirty data (2)\n");
/* Too much uncommitted data in the journal on disk, not yet flushed to the
* cloud? */
/* Too much uncommitted data in the journal on disk, not yet flushed to the
* cloud? */
dirty_limit = bluesky_options.cache_size / (LOG_SEGMENT_SIZE / 1024) / 2;
int dirty_journals = fs->log->seq_num - fs->log->journal_watermark + 1;
if (dirty_journals > 1 && dirty_journals >= dirty_limit) {
dirty_limit = bluesky_options.cache_size / (LOG_SEGMENT_SIZE / 1024) / 2;
int dirty_journals = fs->log->seq_num - fs->log->journal_watermark + 1;
if (dirty_journals > 1 && dirty_journals >= dirty_limit) {
- printf("Too many dirty journals (%d >= %d)\n",
+ printf("pressure: too many dirty journals (%d >= %d) (2)\n",
dirty_journals, dirty_limit);
return 2;
}
/* LEVEL 1 */
dirty_journals, dirty_limit);
return 2;
}
/* LEVEL 1 */
- if (g_atomic_int_get(&fs->cache_dirty) < bluesky_watermark_medium_dirty)
+ if (g_atomic_int_get(&fs->cache_dirty) > bluesky_watermark_medium_dirty) {
+ g_print("pressure: too much dirty data (1)\n");
if (dirty_journals > 1 && dirty_journals > dirty_limit / 2) {
if (dirty_journals > 1 && dirty_journals > dirty_limit / 2) {
- printf("Many dirty journals (%d), should start writeback\n",
+ printf("pressure: many dirty journals (%d), should start writeback (1)\n",
dirty_journals);
return 1;
}
dirty_journals);
return 1;
}