Commit 15754020524a56517df082799f07de880f4b29e2
1 parent
7159b1ad3d
Exists in
master
and in
13 other branches
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++) |