Make System Devices page more responsive

This commit is contained in:
bergware
2017-10-14 16:09:58 +02:00
parent e4eacbcb6f
commit b51488d321
2 changed files with 78 additions and 25 deletions

View File

@@ -14,6 +14,21 @@ Tag="list"
* all copies or substantial portions of the Software.
*/
?>
<style>
table.pre{margin-top:0}
table.pre td:first-child{width:144px}
table tr td{padding:0 0 3px 0;margin:0}
table tr td.thin{line-height:8px;height:8px}
</style>
<script>
$(function(){
$.get('/webGui/include/SysDevs.php',{table:'t1'},function(data){$('#t1').html(data)});
$.get('/webGui/include/SysDevs.php',{table:'t2'},function(data){$('#t2').html(data)});
$.get('/webGui/include/SysDevs.php',{table:'t3'},function(data){$('#t3').html(data)});
$.get('/webGui/include/SysDevs.php',{table:'t4'},function(data){$('#t4').html(data)});
});
</script>
**PCI Devices and IOMMU Groups**
> This displays a list of IOMMU groups available on your system along with the output of the `lspci` command for each IOMMU group. The numeric identifiers are used to configure PCI pass-through.
@@ -21,40 +36,20 @@ Tag="list"
<?if (strpos(file_get_contents('/proc/cmdline'), 'pcie_acs_override=') !== false):?>
<p class="notice">Warning: Your system has booted with the PCIe ACS Override setting enabled. The below list doesn't not reflect the way IOMMU would naturally group devices. To see natural IOMMU groups for your hardware, go to the <b><a href="/Settings/VMSettings">VM Settings</a></b> page and set the <b>PCIe ACS Override</b> setting to <b>No</b>.</p>
<?endif;?>
<?
echo "<pre><table>";
$iommu_groups = shell_exec('for iommu_group in $(ls /sys/kernel/iommu_groups/ -1|sort -n);do echo "IOMMU group $iommu_group"; for device in $(ls -1 "/sys/kernel/iommu_groups/$iommu_group"/devices/); do echo -n $\'\t\';lspci -ns "$device"|awk \'BEGIN{ORS=" "}{print "["$3"]"}\';lspci -s "$device"; done; done');
if (empty($iommu_groups)) {
$iommu_groups = explode("\n", shell_exec("lspci -n|awk '{print \"[\"\$3\"]\"}'"));
$i = 0;
foreach (explode("\n", shell_exec("lspci")) as $strDesc) {
echo "<tr><td>".$iommu_groups[$i++]." ".$strDesc."</td></tr>";
}
} else {
foreach (explode("\n", $iommu_groups) as $iommu_group) {
if ($iommu_group[0]=='I') {
echo "<tr><td colspan='2'>&nbsp;</td></tr><tr><td>$iommu_group</td><td>";
$append = true;
} else {
echo preg_replace("/^\t/",$append?"":"<tr><td></td><td>",$iommu_group)."</td></tr>";
$append = false;
}
}
}
echo "</table></pre>";
?>
<pre><table id='t1' class='pre'><tr><td><i class='fa fa-spinner fa-spin'></i>&nbsp;Please wait... retrieving information!</td></tr></table></pre><br>
**CPU Thread Pairings**
> This displays a list of CPU thread pairings.
<pre><?=preg_replace(['/(\d+)[-,](\d+)/','/(\d+)\b/'], ['$1 / $2','cpu $1'], shell_exec("cat /sys/devices/system/cpu/*/topology/thread_siblings_list|sort -nu"))?></pre>
<pre><table id='t2' class='pre'><tr><td><i class='fa fa-spinner fa-spin'></i>&nbsp;Please wait... retrieving information!</td></tr></table></pre><br>
**USB Devices**
> This displays the output of the `lsusb` command. The numeric identifiers are used to configure PCI pass-through.
<pre><?=shell_exec("lsusb|sort")?></pre>
<pre><table id='t3' class='pre'><tr><td><i class='fa fa-spinner fa-spin'></i>&nbsp;Please wait... retrieving information!</td></tr></table></pre><br>
**SCSI Devices**
@@ -62,5 +57,5 @@ echo "</table></pre>";
>
> Note that linux groups ATA, SATA and SAS devices with true SCSI devices.
<pre><?=shell_exec("lsscsi -s")?></pre>
<pre><table id='t4' class='pre'><tr><td><i class='fa fa-spinner fa-spin'></i>&nbsp;Please wait... retrieving information!</td></tr></table></pre>
<input type="button" value="Done" onclick="done()">

View File

@@ -0,0 +1,58 @@
<?PHP
/* Copyright 2005-2017, Lime Technology
* Copyright 2012-2017, Bergware International.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License version 2,
* as published by the Free Software Foundation.
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*/
?>
<?
switch ($_GET['table']) {
case 't1':
$groups = shell_exec('for group in $(ls /sys/kernel/iommu_groups/ -1|sort -n);do echo "IOMMU group $group"; for device in $(ls -1 "/sys/kernel/iommu_groups/$group"/devices/); do echo -n $\'\t\';lspci -ns "$device"|awk \'BEGIN{ORS=" "}{print "["$3"]"}\';lspci -s "$device"; done; done');
if (empty($groups)) {
$iommu = explode("\n", shell_exec("lspci -n|awk '{print \"[\"\$3\"]\"}'"));
$i = 0;
foreach (explode("\n", shell_exec("lspci")) as $line) {
echo "<tr><td>".$iommu[$i++]."</td><td>$line</td></tr>";
}
} else {
foreach (explode("\n", $groups) as $line) {
if (!$line) continue;
if ($line[0]=='I') {
if ($spacer) echo "<tr><td colspan='2' class='thin'></td>"; else $spacer = true;
echo "</tr><tr><td>$line:</td><td>";
$append = true;
} else {
echo preg_replace("/^\t/",$append?"":"<tr><td></td><td>",$line)."</td></tr>";
$append = false;
}
}
}
break;
case 't2':
$i = 1;
foreach (explode("\n", preg_replace(['/(\d+)[-,](\d+)/','/(\d+)\b/'], ['$1 / $2','cpu $1'], shell_exec("cat /sys/devices/system/cpu/*/topology/thread_siblings_list|sort -nu"))) as $line) {
if (!$line) continue;
echo "<tr><td>".(strpos($line,'/')!==false?"Pair ".$i++:"Single").":</td><td>$line</td></tr>";
}
break;
case 't3':
foreach (explode("\n", shell_exec("lsusb|sort")) as $line) {
if (!$line) continue;
list($bus,$id) = explode(':', $line, 2);
echo "<tr><td>$bus:</td><td>".trim($id)."</td></tr>";
}
break;
case 't4':
foreach (explode("\n", shell_exec("lsscsi -s")) as $line) {
if (!$line || strpos($line,'/dev/')===false) continue;
echo "<tr><td>".preg_replace('/\] +/',']</td><td>',$line)."</td></tr>";
}
break;
}
?>