Commit 15754020524a56517df082799f07de880f4b29e2

Authored by Kent Overstreet
1 parent 7159b1ad3d

bcache: Improve priority_stats

Break down data into clean data/dirty data/metadata.

Signed-off-by: Kent Overstreet <kmo@daterainc.com>

Showing 1 changed file with 20 additions and 6 deletions Side-by-side Diff

drivers/md/bcache/sysfs.c
... ... @@ -761,7 +761,9 @@
761 761 int cmp(const void *l, const void *r)
762 762 { return *((uint16_t *) r) - *((uint16_t *) l); }
763 763  
764   - size_t n = ca->sb.nbuckets, i, unused, btree;
  764 + struct bucket *b;
  765 + size_t n = ca->sb.nbuckets, i;
  766 + size_t unused = 0, available = 0, dirty = 0, meta = 0;
765 767 uint64_t sum = 0;
766 768 /* Compute 31 quantiles */
767 769 uint16_t q[31], *p, *cached;
... ... @@ -772,6 +774,17 @@
772 774 return -ENOMEM;
773 775  
774 776 mutex_lock(&ca->set->bucket_lock);
  777 + for_each_bucket(b, ca) {
  778 + if (!GC_SECTORS_USED(b))
  779 + unused++;
  780 + if (GC_MARK(b) == GC_MARK_RECLAIMABLE)
  781 + available++;
  782 + if (GC_MARK(b) == GC_MARK_DIRTY)
  783 + dirty++;
  784 + if (GC_MARK(b) == GC_MARK_METADATA)
  785 + meta++;
  786 + }
  787 +
775 788 for (i = ca->sb.first_bucket; i < n; i++)
776 789 p[i] = ca->buckets[i].prio;
777 790 mutex_unlock(&ca->set->bucket_lock);
778 791  
... ... @@ -786,11 +799,8 @@
786 799  
787 800 while (cached < p + n &&
788 801 *cached == BTREE_PRIO)
789   - cached++;
  802 + cached++, n--;
790 803  
791   - btree = cached - p;
792   - n -= btree;
793   -
794 804 for (i = 0; i < n; i++)
795 805 sum += INITIAL_PRIO - cached[i];
796 806  
797 807  
... ... @@ -805,12 +815,16 @@
805 815  
806 816 ret = scnprintf(buf, PAGE_SIZE,
807 817 "Unused: %zu%%\n"
  818 + "Clean: %zu%%\n"
  819 + "Dirty: %zu%%\n"
808 820 "Metadata: %zu%%\n"
809 821 "Average: %llu\n"
810 822 "Sectors per Q: %zu\n"
811 823 "Quantiles: [",
812 824 unused * 100 / (size_t) ca->sb.nbuckets,
813   - btree * 100 / (size_t) ca->sb.nbuckets, sum,
  825 + available * 100 / (size_t) ca->sb.nbuckets,
  826 + dirty * 100 / (size_t) ca->sb.nbuckets,
  827 + meta * 100 / (size_t) ca->sb.nbuckets, sum,
814 828 n * ca->sb.bucket_size / (ARRAY_SIZE(q) + 1));
815 829  
816 830 for (i = 0; i < ARRAY_SIZE(q); i++)