From: "Jan-Jonas Sämann" <sprinterfreak@binary-kitchen.de>
To: pve-devel@lists.proxmox.com
Subject: [pve-devel] [PATCH v2 storage] Diskmanage: Use S.M.A.R.T. attributes for SSDs wearout lookup
Date: Sat, 24 Oct 2020 21:27:09 +0200 [thread overview]
Message-ID: <20201024192709.27324-2-sprinterfreak@binary-kitchen.de> (raw)
In-Reply-To: <20201024192709.27324-1-sprinterfreak@binary-kitchen.de>
This replaces a locally maintained hardware map in
get_wear_leveling_info() by commonly used register names of
smartmontool. Smartmontool maintains a labeled register database that
contains a majority of drives (including versions). The current lookup
produces false estimates, this approach hopefully provides more reliable
data.
Signed-off-by: Jan-Jonas Sämann <sprinterfreak@binary-kitchen.de>
---
PVE/Diskmanage.pm | 58 +++++++++++++++++++++++------------------------
1 file changed, 28 insertions(+), 30 deletions(-)
diff --git a/PVE/Diskmanage.pm b/PVE/Diskmanage.pm
index 79aafcc..20dbeeb 100644
--- a/PVE/Diskmanage.pm
+++ b/PVE/Diskmanage.pm
@@ -396,7 +396,7 @@ sub get_sysdir_info {
}
sub get_wear_leveling_info {
- my ($smartdata, $model) = @_;
+ my ($smartdata) = @_;
my $attributes = $smartdata->{attributes};
if (defined($smartdata->{wearout})) {
@@ -405,37 +405,35 @@ sub get_wear_leveling_info {
my $wearout;
- my $vendormap = {
- 'kingston' => 231,
- 'samsung' => 177,
- 'intel' => 233,
- 'sandisk' => 233,
- 'crucial' => 202,
- 'default' => 233,
- };
-
- # find target attr id
-
- my $attrid;
-
- foreach my $vendor (keys %$vendormap) {
- if ($model =~ m/$vendor/i) {
- $attrid = $vendormap->{$vendor};
- # found the attribute
- last;
+ # Common register names that represent percentage values of potential
+ # failure indicators used in drivedb.h of smartmontool's. Order matters,
+ # as some drives may have multiple definitions
+ my @wearoutregisters = (
+ "SSD_Life_Left",
+ "Wear_Leveling_Count",
+ "Perc_Write\/Erase_Ct_BC",
+ "Perc_Rated_Life_Remain",
+ "Remaining_Lifetime_Perc",
+ "Percent_Lifetime_Remain",
+ "Lifetime_Left",
+ "PCT_Life_Remaining",
+ "Lifetime_Remaining",
+ "Percent_Life_Remaining",
+ "Percent_Lifetime_Used",
+ "Perc_Rated_Life_Used"
+ );
+
+ # Search for S.M.A.R.T. attributes for known register
+ foreach my $register (@wearoutregisters) {
+ last if defined $wearout;
+ foreach my $attr (@$attributes) {
+ next if $attr->{name} !~ m/$register/;
+ # Store wearout value, invert value if register matches "Used"
+ $wearout = ($attr->{name} =~ /Used/) ? 100 - $attr->{value} : $attr->{value};
+ last;
}
}
- if (!$attrid) {
- $attrid = $vendormap->{default};
- }
-
- foreach my $attr (@$attributes) {
- next if $attr->{id} != $attrid;
- $wearout = $attr->{value};
- last;
- }
-
return $wearout;
}
@@ -559,7 +557,7 @@ sub get_disks {
if (is_ssdlike($type)) {
# if we have an ssd we try to get the wearout indicator
- my $wearval = get_wear_leveling_info($smartdata, $data->{model} || $sysdata->{model});
+ my $wearval = get_wear_leveling_info($smartdata);
$wearout = $wearval if defined($wearval);
}
};
--
2.25.1
next prev parent reply other threads:[~2020-10-24 19:27 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-10-19 22:53 [pve-devel] [PATCH] disk management: Add support for additional Crucial SSDs Jan-Jonas Sämann
2020-10-22 13:30 ` Dominik Csapak
2020-10-24 19:27 ` [pve-devel] New routine get_wear_leveling_info() Jan-Jonas Sämann
2020-10-24 19:27 ` Jan-Jonas Sämann [this message]
2020-10-27 8:08 ` [pve-devel] [PATCH v2 storage] Diskmanage: Use S.M.A.R.T. attributes for SSDs wearout lookup Thomas Lamprecht
2020-10-27 19:06 ` Jan-Jonas Sämann
2020-10-29 18:21 ` Thomas Lamprecht
2020-10-30 3:31 ` [pve-devel] Updated patch and test data Jan-Jonas Sämann
2020-10-30 3:31 ` [pve-devel] [PATCH storage v3 1/2] Update disk_tests/ssd_smart/sde data Jan-Jonas Sämann
2020-10-30 3:57 ` [pve-devel] Commit fixup Jan-Jonas Sämann
2020-10-30 3:57 ` [pve-devel] [PATCH storage v4 1/2] Update disk_tests/ssd_smart/sde data Jan-Jonas Sämann
2020-10-30 14:32 ` [pve-devel] applied: " Thomas Lamprecht
2020-10-30 3:57 ` [pve-devel] [PATCH storage v4 2/2] Diskmanage: Use S.M.A.R.T. attributes for SSDs wearout lookup Jan-Jonas Sämann
2020-10-30 14:32 ` [pve-devel] applied: " Thomas Lamprecht
2020-10-30 3:31 ` [pve-devel] [PATCH storage v3 " Jan-Jonas Sämann
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20201024192709.27324-2-sprinterfreak@binary-kitchen.de \
--to=sprinterfreak@binary-kitchen.de \
--cc=pve-devel@lists.proxmox.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.