mirror of
https://github.com/matrix-construct/construct
synced 2024-09-28 11:48:54 +02:00
ircd::fs::dev: Fix device size calculation; cleanup constants; improve cmd output.
This commit is contained in:
parent
7f377d6072
commit
d42126693b
3 changed files with 97 additions and 12 deletions
|
@ -14,6 +14,7 @@
|
||||||
namespace ircd::fs::dev
|
namespace ircd::fs::dev
|
||||||
{
|
{
|
||||||
struct blk;
|
struct blk;
|
||||||
|
|
||||||
using major_minor = std::pair<ulong, ulong>;
|
using major_minor = std::pair<ulong, ulong>;
|
||||||
using blk_closure = std::function<bool (const ulong &id, const blk &)>;
|
using blk_closure = std::function<bool (const ulong &id, const blk &)>;
|
||||||
|
|
||||||
|
@ -42,16 +43,26 @@ namespace ircd::fs::dev
|
||||||
|
|
||||||
struct ircd::fs::dev::blk
|
struct ircd::fs::dev::blk
|
||||||
{
|
{
|
||||||
|
static const size_t SECTOR_SIZE;
|
||||||
|
static const string_view BASE_PATH;
|
||||||
|
|
||||||
static string_view devtype(const mutable_buffer &, const ulong &id);
|
static string_view devtype(const mutable_buffer &, const ulong &id);
|
||||||
|
|
||||||
std::string type;
|
std::string type;
|
||||||
std::string vendor;
|
std::string vendor;
|
||||||
std::string model;
|
std::string model;
|
||||||
std::string rev;
|
std::string rev;
|
||||||
size_t size {0};
|
size_t sector_size {0};
|
||||||
|
size_t physical_block {0};
|
||||||
|
size_t logical_block {0};
|
||||||
|
size_t minimum_io {0};
|
||||||
|
size_t optimal_io {0};
|
||||||
|
size_t sectors {0};
|
||||||
size_t queue_depth {0};
|
size_t queue_depth {0};
|
||||||
size_t nr_requests {0};
|
size_t nr_requests {0};
|
||||||
|
std::string scheduler;
|
||||||
bool rotational {false};
|
bool rotational {false};
|
||||||
|
bool merges {false};
|
||||||
|
|
||||||
blk(const ulong &id);
|
blk(const ulong &id);
|
||||||
blk() = default;
|
blk() = default;
|
||||||
|
|
|
@ -20,7 +20,7 @@ bool
|
||||||
ircd::fs::dev::for_each(const string_view &type,
|
ircd::fs::dev::for_each(const string_view &type,
|
||||||
const blk_closure &closure)
|
const blk_closure &closure)
|
||||||
{
|
{
|
||||||
for(const auto &dir : fs::ls("/sys/dev/block")) try
|
for(const auto &dir : fs::ls(blk::BASE_PATH)) try
|
||||||
{
|
{
|
||||||
const auto &[major, minor]
|
const auto &[major, minor]
|
||||||
{
|
{
|
||||||
|
@ -64,7 +64,8 @@ try
|
||||||
{
|
{
|
||||||
const string_view path{fmt::sprintf
|
const string_view path{fmt::sprintf
|
||||||
{
|
{
|
||||||
path_scratch, "/sys/dev/block/%s/%s",
|
path_scratch, "%s/%s/%s",
|
||||||
|
blk::BASE_PATH,
|
||||||
sysfs_id(name_scratch, id),
|
sysfs_id(name_scratch, id),
|
||||||
relpath
|
relpath
|
||||||
}};
|
}};
|
||||||
|
@ -142,6 +143,18 @@ ircd::fs::dev::id(const ulong &id)
|
||||||
// dev::blk
|
// dev::blk
|
||||||
//
|
//
|
||||||
|
|
||||||
|
decltype(ircd::fs::dev::blk::SECTOR_SIZE)
|
||||||
|
ircd::fs::dev::blk::SECTOR_SIZE
|
||||||
|
{
|
||||||
|
512
|
||||||
|
};
|
||||||
|
|
||||||
|
decltype(ircd::fs::dev::blk::BASE_PATH)
|
||||||
|
ircd::fs::dev::blk::BASE_PATH
|
||||||
|
{
|
||||||
|
"/sys/dev/block"
|
||||||
|
};
|
||||||
|
|
||||||
ircd::fs::dev::blk::blk(const ulong &id)
|
ircd::fs::dev::blk::blk(const ulong &id)
|
||||||
:type
|
:type
|
||||||
{
|
{
|
||||||
|
@ -175,7 +188,27 @@ ircd::fs::dev::blk::blk(const ulong &id)
|
||||||
return sysfs(buf, id, "device/rev");
|
return sysfs(buf, id, "device/rev");
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
,size
|
,sector_size
|
||||||
|
{
|
||||||
|
sysfs(id, "queue/hw_sector_size")
|
||||||
|
}
|
||||||
|
,physical_block
|
||||||
|
{
|
||||||
|
sysfs(id, "queue/physical_block_size")
|
||||||
|
}
|
||||||
|
,logical_block
|
||||||
|
{
|
||||||
|
sysfs(id, "queue/logical_block_size")
|
||||||
|
}
|
||||||
|
,minimum_io
|
||||||
|
{
|
||||||
|
sysfs(id, "queue/minimum_io_size")
|
||||||
|
}
|
||||||
|
,optimal_io
|
||||||
|
{
|
||||||
|
sysfs(id, "queue/optimal_io_size")
|
||||||
|
}
|
||||||
|
,sectors
|
||||||
{
|
{
|
||||||
sysfs(id, "size")
|
sysfs(id, "size")
|
||||||
}
|
}
|
||||||
|
@ -187,10 +220,22 @@ ircd::fs::dev::blk::blk(const ulong &id)
|
||||||
{
|
{
|
||||||
sysfs(id, "queue/nr_requests")
|
sysfs(id, "queue/nr_requests")
|
||||||
}
|
}
|
||||||
|
,scheduler
|
||||||
|
{
|
||||||
|
ircd::string(64, [&id]
|
||||||
|
(const mutable_buffer &buf)
|
||||||
|
{
|
||||||
|
return sysfs(buf, id, "queue/scheduler");
|
||||||
|
})
|
||||||
|
}
|
||||||
,rotational
|
,rotational
|
||||||
{
|
{
|
||||||
sysfs<bool>(id, "queue/rotational", false)
|
sysfs<bool>(id, "queue/rotational", false)
|
||||||
}
|
}
|
||||||
|
,merges
|
||||||
|
{
|
||||||
|
!sysfs<bool>(id, "queue/nomerges", true)
|
||||||
|
}
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -926,21 +926,51 @@ console_cmd__fs__dev(opt &out, const string_view &line)
|
||||||
param["type"]
|
param["type"]
|
||||||
};
|
};
|
||||||
|
|
||||||
|
out
|
||||||
|
<< std::setw(3) << std::right << "maj" << ':'
|
||||||
|
<< std::setw(3) << std::left << "min" << ' '
|
||||||
|
<< std::setw(10) << std::right << "TYPE" << ' '
|
||||||
|
<< std::setw(12) << std::left << " " << ' '
|
||||||
|
<< std::setw(6) << std::right << "NR_REQ" << ' '
|
||||||
|
<< std::setw(6) << std::right << "DEPTH" << ' '
|
||||||
|
<< std::setw(5) << std::right << "MERGE" << ' '
|
||||||
|
<< std::setw(5) << std::right << "OPTSZ" << ' '
|
||||||
|
<< std::setw(5) << std::right << "MINSZ" << ' '
|
||||||
|
<< std::setw(5) << std::right << "LOGSZ" << ' '
|
||||||
|
<< std::setw(5) << std::right << "PHYSZ" << ' '
|
||||||
|
<< std::setw(6) << std::right << "SECTSZ" << ' '
|
||||||
|
<< std::setw(14) << std::right << "SECTORS" << ' '
|
||||||
|
<< std::setw(26) << "SIZE" << ' '
|
||||||
|
<< std::setw(10) << std::right << "REV" << ' '
|
||||||
|
<< std::setw(20) << std::left << "MODEL" << ' '
|
||||||
|
<< std::setw(16) << std::left << "VENDOR" << ' '
|
||||||
|
<< std::setw(24) << std::left << "SCHED" << ' '
|
||||||
|
<< std::endl;
|
||||||
|
|
||||||
fs::dev::for_each(type, [&out]
|
fs::dev::for_each(type, [&out]
|
||||||
(const ulong &id, const fs::dev::blk &dev)
|
(const ulong &id, const fs::dev::blk &dev)
|
||||||
{
|
{
|
||||||
const auto mm(fs::dev::id(id));
|
const auto mm(fs::dev::id(id));
|
||||||
char pbuf[48];
|
char pbuf[48];
|
||||||
out
|
out
|
||||||
<< std::setw(16) << dev.type << ' '
|
|
||||||
<< std::setw(3) << std::right << std::get<0>(mm) << ':'
|
<< std::setw(3) << std::right << std::get<0>(mm) << ':'
|
||||||
<< std::setw(3) << std::left << std::get<1>(mm) << ' '
|
<< std::setw(3) << std::left << std::get<1>(mm) << ' '
|
||||||
<< std::setw(16) << dev.vendor << ' '
|
<< std::setw(10) << std::right << dev.type << ' '
|
||||||
<< std::setw(20) << dev.model << ' '
|
<< std::setw(12) << std::left << (dev.rotational? "rotating"_sv : string_view{}) << ' '
|
||||||
<< std::setw(10) << dev.rev << ' '
|
<< std::setw(6) << std::right << dev.nr_requests << ' '
|
||||||
<< "qd:" << std::setw(3) << dev.queue_depth << ' '
|
<< std::setw(6) << std::right << dev.queue_depth << ' '
|
||||||
<< "nr:" << std::setw(3) << dev.nr_requests << ' '
|
<< std::setw(5) << std::right << (dev.merges? 'Y' : 'N') << ' '
|
||||||
<< pretty(pbuf, iec(dev.size)) << ' '
|
<< std::setw(5) << std::right << dev.optimal_io << ' '
|
||||||
|
<< std::setw(5) << std::right << dev.minimum_io << ' '
|
||||||
|
<< std::setw(5) << std::right << dev.logical_block << ' '
|
||||||
|
<< std::setw(5) << std::right << dev.physical_block << ' '
|
||||||
|
<< std::setw(6) << std::right << dev.sector_size << ' '
|
||||||
|
<< std::setw(14) << std::right << dev.sectors << ' '
|
||||||
|
<< std::setw(26) << pretty(pbuf, iec(dev.sectors * dev.sector_size)) << ' '
|
||||||
|
<< std::setw(10) << std::right << dev.rev << ' '
|
||||||
|
<< std::setw(20) << std::left << dev.model << ' '
|
||||||
|
<< std::setw(16) << std::left << dev.vendor << ' '
|
||||||
|
<< std::setw(24) << std::left << dev.scheduler << ' '
|
||||||
<< std::endl;
|
<< std::endl;
|
||||||
return true;
|
return true;
|
||||||
});
|
});
|
||||||
|
@ -948,7 +978,6 @@ console_cmd__fs__dev(opt &out, const string_view &line)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool
|
bool
|
||||||
console_cmd__ls(opt &out, const string_view &line)
|
console_cmd__ls(opt &out, const string_view &line)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue