Compare commits

...

201 Commits

Author SHA1 Message Date
Michael Larabel
b5981d5250 Merge branch 'master' of github.com:phoronix-test-suite/phoronix-test-suite 2019-01-19 18:45:31 -06:00
Michael Larabel
b4633c3414 Prep for Phoronix Test Suite 8.6 Milestone 2 2019-01-19 18:45:17 -06:00
Michael Larabel
1c2864df81 pts-core: Cleanups on the Windows downloader 2019-01-18 19:48:04 -06:00
Michael Larabel
4eabcf3dd3 pts-core: OpenMandriva Lx 4.0 updates 2019-01-18 14:28:00 -05:00
Michael Larabel
1c2f697c1a pts-core: Formatting cleanup 2019-01-18 11:49:20 -06:00
Michael Larabel
4744ba344f pts-core: Fix alignment of result highlights 2019-01-16 09:42:05 -06:00
Michael Larabel
66a6578e9d pts-core: Fix from commit last night 2019-01-16 04:46:53 -06:00
Michael Larabel
66e0cb4bec pts-core: Highlight run identifier on geometric/harmonic mean graphs 2019-01-16 04:21:08 -06:00
Michael Larabel
e2d23b0069 pts-core: PHP 7.3 warning fix 2019-01-15 19:17:59 -06:00
Michael Larabel
ee93f50b14 pts-core: PHP 7.3 warning fix 2019-01-15 17:42:58 -06:00
Michael Larabel
7bc9916d58 pts-core: Text table improvements 2019-01-15 14:40:07 -06:00
Michael Larabel
e3c4f2a647 Merge branch 'master' of github.com:phoronix-test-suite/phoronix-test-suite 2019-01-15 13:16:58 -06:00
Michael Larabel
85e633e712 phodevi: Report Windows Subsystem for Linux (WSL) to the system layer string 2019-01-15 13:16:30 -06:00
Michael Larabel
01c94ee0a0 Merge pull request #331 from liam-middlebrook/fix-loop-reporting
pts-core: Fix Loop 'Test i of n' Reporting
2019-01-14 18:22:08 -06:00
Liam Middlebrook
ee92e4ae0b pts-core: Fix Loop 'Test i of n' Reporting
This change adds a new variable loop_run_pos for tracking the current loop that the
test run manager is on. It then uses this new variable in
get_test_run_position() so that different pts display modes will be able
to accurately report how far into a run utilizing TOTAL_LOOP_COUNT the
test run manager is.
2019-01-14 14:40:47 -08:00
Michael Larabel
10a227a316 pts-core: Improved formatting of file download text user interface for downloading of dependencies on Microsoft Windows 2019-01-14 07:24:39 -06:00
Michael Larabel
d52f7cce38 pts-core: Improved formatting of file download text user interface for downloading of dependencies on Microsoft Windows 2019-01-14 07:22:54 -06:00
Michael Larabel
8444b1abee pts-core: ex dep updates 2019-01-14 07:17:07 -06:00
Michael Larabel
dcb73373da pts-core: Minor cleaning 2019-01-12 08:13:52 -06:00
Michael Larabel
061c2702a1 small tweaks 2019-01-11 08:45:50 -06:00
Michael Larabel
44dc6854b3 pts-core: Tighter python checking on Ubuntu 2019-01-09 18:52:01 -06:00
Michael Larabel
6f71005e3e pts-core: Some polishing for the commits earlier today around result analysis 2019-01-09 18:48:57 -06:00
Michael Larabel
a4e184d3e6 pts-core: More stats work on previous commit 2019-01-09 14:22:35 -06:00
Michael Larabel
6d62e7399c pts-core: Add result-file-stats sub-command to show more test result statistics
pts-core: Show geometric mean and harmonic mean data at end of benchmarking process when relevant as part of post-run stats
2019-01-09 14:04:34 -06:00
Michael Larabel
cbbbc374a1 Update note about Fedora state in documentation/stubs/ and then do the release phoronix-test-suite dump-documentation rebuild
https://github.com/phoronix-test-suite/phoronix-test-suite/pull/330
2019-01-09 04:24:02 -06:00
Michael Larabel
e2311cda3d pts-core: Wins and loss analyzer tweaks 2019-01-08 14:42:09 -06:00
Michael Larabel
9c128102cd phodevi: Cleanup some Intel Ethernet connection strings 2019-01-07 07:18:08 -06:00
Michael Larabel
bb5579125d phodevi: Cleanup some Intel Ethernet connection strings 2019-01-07 07:17:37 -06:00
Michael Larabel
2fb50776e3 pts-core: Update Mac OS X to macOS references Per https://github.com/phoronix-test-suite/phoronix-test-suite/pull/325 2019-01-07 06:52:40 -06:00
Michael Larabel
6859349ffa pts-core: Fix extra line break 2019-01-07 06:13:51 -06:00
Michael Larabel
16cb6b4f51 Phoronix Test Suite 8.6 Milestone 1 2019-01-07 04:39:20 -06:00
Michael Larabel
64eeb16aa4 Prepping for 8.6 M1 2019-01-07 04:19:38 -06:00
Michael Larabel
223b982f21 pts-core: More line graph / box plot CLI output formatting work 2019-01-06 20:14:25 -06:00
Michael Larabel
3ee52f05d1 pts-core: More line graph / box plot CLI output formatting work 2019-01-06 20:13:29 -06:00
Michael Larabel
3bf1b1eb87 pts-core: More line graph / box plot CLI output formatting work 2019-01-06 20:05:55 -06:00
Michael Larabel
b8deb67d6b phodevi: Drop wireless from network names 2019-01-06 19:14:42 -06:00
Michael Larabel
6bf5e66148 pts-core: Add pts_arrays::array_to_cleansed_item_string 2019-01-06 19:05:52 -06:00
Michael Larabel
f662ba06e3 phodevi: Improve Linux multiple network device reporting 2019-01-06 18:54:17 -06:00
Michael Larabel
461ab86712 phodevi: Improve Linux multiple network device reporting 2019-01-06 18:53:20 -06:00
Michael Larabel
8060219473 phodevi: system info display improvements for multi-part lines 2019-01-06 16:27:59 -06:00
Michael Larabel
07117dacfc Minor tweak 2019-01-05 17:59:48 -06:00
Michael Larabel
f6951e081a Minor tweak 2019-01-05 17:49:59 -06:00
Michael Larabel
973995b48e pts-core: better line graph detection, more uniform than per run 2019-01-05 17:31:26 -06:00
Michael Larabel
c40a740556 Minor tweak 2019-01-05 11:56:01 -06:00
Michael Larabel
002461378c Minor tweak 2019-01-05 11:43:40 -06:00
Michael Larabel
2a56f62e07 Minor tweak 2019-01-05 11:36:49 -06:00
Michael Larabel
4f8f117259 Minor tweak 2019-01-05 11:18:43 -06:00
Michael Larabel
a9811c3c9b Minor tweak 2019-01-05 10:53:01 -06:00
Michael Larabel
295e130871 phodevi: Drop Unknown from memory strings 2019-01-05 10:40:10 -06:00
Michael Larabel
31b9534706 pts-core: Title handling for inline graphs 2019-01-05 08:27:29 -06:00
Michael Larabel
362c39a8e4 system_monitor: Allow outputting system monitor graphs to terminal interface inline 2019-01-05 08:12:59 -06:00
Michael Larabel
82662be6b8 pts-core: More wins and losses cleaning 2019-01-04 17:52:39 -06:00
Michael Larabel
0003dbf4e3 pts-core: Allow outputting line graphs to terminal interface as basic box plot graphs 2019-01-04 16:35:49 -06:00
Michael Larabel
77f9ce6d8e pts-core: Allow outputting line graphs to terminal interface as basic box plot graphs 2019-01-04 16:31:05 -06:00
Michael Larabel
08c9933529 pts-core: Small cleanup 2019-01-04 13:54:06 -06:00
Michael Larabel
2f9d47d2c0 pts-core: Small cleanup 2019-01-04 13:49:07 -06:00
Michael Larabel
baf0f7739c pts-core: Tweaks for earlier commits 2019-01-04 11:48:31 -06:00
Michael Larabel
eb890889f5 pts-core: Tweaks for earlier commits 2019-01-04 11:44:42 -06:00
Michael Larabel
5fdb6c25d3 pts-core: Add recently-added-tests sub-command to show newly added test profiles / alternative to openbenchmarking-changes/recently-updated-tests 2019-01-04 11:22:05 -06:00
Michael Larabel
a16c5597ad pts-core: Warning fix for earlier commit 2019-01-04 09:54:16 -06:00
Michael Larabel
e6bb62d362 pts-core: Add ShowPostRunStatistics user configuration XML option to toggle whether various test statistics are printed at the end of testing 2019-01-04 09:48:54 -06:00
Michael Larabel
9cb64d8227 pts-core: Stop wordwrapping the user agreement text arbitrarily 2019-01-04 09:40:50 -06:00
Michael Larabel
204c4d2466 pts-core: Result comparison analyzer improvements 2019-01-04 09:38:48 -06:00
Michael Larabel
f75b627ced pts-core: Show wins and losses summary after testing on large result files 2019-01-04 08:53:10 -06:00
Michael Larabel
93d0d75ad7 pts-core: Restrcture winners-and-losers as wins-and-losses 2019-01-04 08:47:23 -06:00
Michael Larabel
3b90098dac pts-core: Restrcture winners-and-losers as wins-and-losses 2019-01-04 08:19:42 -06:00
Michael Larabel
46780545b0 pts-core: Drop 'gigabit connection' from strings 2019-01-03 14:45:44 -06:00
Michael Larabel
2e7773d3c5 pts-core: Fix table printing alignment 2019-01-03 11:00:46 -06:00
Michael Larabel
fcac72a562 pts-core: Fix table printing alignment 2019-01-03 10:59:29 -06:00
Michael Larabel
3eb47951c6 pts-core: Fix table printing alignment 2019-01-03 10:58:16 -06:00
Michael Larabel
cf9d258806 Small tweaks 2019-01-03 09:13:53 -06:00
Michael Larabel
866525e0ab pts-core: Add compare-results-to-baseline sub-command for comparing one result file (baseline) against a set of results for text look at relative perf 2019-01-02 09:47:02 -06:00
Michael Larabel
6c4ad0668b Prep work for compare-results-to-baseline option 2019-01-02 09:34:14 -06:00
Michael Larabel
408bc912a4 Hello 2019 2019-01-01 08:32:46 -06:00
Michael Larabel
e3c6ad0636 phodevi: LXQt desktop version reporting 2018-12-29 15:07:28 -06:00
Michael Larabel
e0df079101 pts-core: Fix for test profile (re)generation where <Value>0</Value> would be cleared on test profile XML 2018-12-27 16:49:28 -06:00
Michael Larabel
b290788913 TODO update 2018-12-26 17:57:19 -06:00
Michael Larabel
db794375c2 pts-core: Minor updates 2018-12-21 11:22:03 -06:00
Michael Larabel
022c8193ca phodevi: Windows tweaks 2018-12-18 19:54:39 -06:00
Michael Larabel
c691b19641 phodevi: Windows tweaks 2018-12-18 19:41:36 -06:00
Michael Larabel
3e4526905a phodevi: Windows tweaks 2018-12-18 19:38:38 -06:00
Michael Larabel
4d058991d1 pts-core: Windows external dependency updates 2018-12-18 17:52:08 -06:00
Michael Larabel
14ca2576d2 phodevi: better Microsoft Windows filesystem detection 2018-12-18 17:32:36 -06:00
Michael Larabel
4814c5cbc9 phodevi: Typo fix 2018-12-18 17:29:17 -06:00
Michael Larabel
d3d9afc01a Bump for PTS 8.6 Spydeberg development 2018-12-18 16:40:15 -06:00
Michael Larabel
7be38ee32b pts-core: No longer clear test profile identifiers on secondary saved results 2018-12-18 11:12:36 -05:00
Michael Larabel
2d58d8e053 Prepare for Phoronix Test Suite 8.4.1 2018-12-09 13:17:49 -06:00
Michael Larabel
57f2f985ca Merge branch 'master' of github.com:phoronix-test-suite/phoronix-test-suite 2018-12-07 11:01:06 -06:00
Michael Larabel
20e87f7738 phodevi: Another NV GPU reporting improvement 2018-12-07 11:00:58 -06:00
Michael Larabel
094e1b8abb Merge pull request #318 from loader-bsd/pkg-config
Add pkgconf to dragonfly-packages only, remove it from generic-packages
2018-12-07 09:32:09 -05:00
loader
82823ad1c9 Add pkgconf to dragonfly-packages only, remove it from generic-packages 2018-12-07 14:26:13 +00:00
Michael Larabel
8ae57801c8 Merge pull request #317 from loader-bsd/pkg-config
Add pkg-config to external test dependencies
2018-12-07 08:52:54 -05:00
Michael Larabel
90fb1ddada phodevi: Minor GPU string reporting improvement 2018-12-07 06:47:12 -06:00
loader
b80825290c Add pkg-config to external test dependencies 2018-12-07 03:19:45 +00:00
Michael Larabel
1dd29eee20 phodevi: Don't report console devices as disks on BSD 2018-12-06 08:32:23 -06:00
Michael Larabel
1c48032568 phodevi: Don't report console devices as disks on BSD 2018-12-06 08:31:57 -06:00
Michael Larabel
667ff28134 phodevi: Don't report console devices as disks on BSD 2018-12-06 08:31:17 -06:00
Michael Larabel
52dd9c7e4e phodevi: Improved multi-disk reporting for non-Linux operating systems 2018-12-06 08:29:50 -06:00
Michael Larabel
ff2f6659bc pts-core: Whoops, inverted the logic in the previous commit 2018-12-06 05:52:36 -06:00
Michael Larabel
2c07a48dad pts-core: Workaround for RHEL 7.6 PHP having buggy CURL that is causing seg faults 2018-12-06 05:50:52 -06:00
Michael Larabel
3c0a070663 phodevi: Revert 2018-12-06 05:45:08 -06:00
Michael Larabel
afa3efa604 phoronix-test-suite maintenance updates 2018-12-05 06:20:19 -06:00
Michael Larabel
7d603bff85 phoronix-test-suite maintenance updates 2018-12-05 06:19:34 -06:00
Michael Larabel
fe6991a9f9 phoronix-test-suite maintenance updates 2018-12-05 06:19:02 -06:00
Michael Larabel
ef35e7f06e phodevi: Allow using NUM_CPU_CORES to override the number of exposed CPU threads/cores to tests (alternative to PTS_NPROC / NUMBER_OF_PROCESSORS) 2018-12-04 18:47:05 -06:00
Michael Larabel
6bb8dbca7f phodevi: Cleanup cpu_core_count() 2018-12-04 18:44:54 -06:00
Michael Larabel
c7c2dec295 phodevi: Cleanup cpu_core_count() 2018-12-04 18:43:33 -06:00
Michael Larabel
d703559f39 phodevi: Fix for CPU frequency reporting when running within a VM 2018-12-04 12:03:28 -06:00
Michael Larabel
355e107382 phodevi: Improved Spectre detection on DragonFlyBSD 5.4 2018-12-04 08:25:20 -06:00
Michael Larabel
a74f7eb6e0 phodevi: Improved physical CPU core detection on DragonFlyBSD 5.4 2018-12-04 08:22:56 -06:00
Michael Larabel
3f90403975 phodevi: Improved physical CPU core detection on DragonFlyBSD 5.4 2018-12-04 08:20:51 -06:00
Michael Larabel
0a41974c80 phodevi: More robust AMDGPU GPU voltage 2018-12-04 07:35:22 -06:00
Michael Larabel
caa2329926 phodevi: More robust AMDGPU GPU voltage 2018-12-04 07:34:01 -06:00
Michael Larabel
29b94c8dd2 phodevi: Fix for previous commit 2018-12-04 07:32:02 -06:00
Michael Larabel
805885a58e phodevi: Fix for previous commit 2018-12-04 07:31:31 -06:00
Michael Larabel
fbc96a8bdf phodevi: More robust AMDGPU fan speed detection 2018-12-04 07:29:26 -06:00
Michael Larabel
d1e1dd8c03 phodevi: Updated gpu_freq sensor for AMDGPU driver 2018-12-04 07:22:47 -05:00
Michael Larabel
cb09c5e508 phodevi: Updated gpu_fanspeed sensor for AMDGPU driver 2018-12-04 07:11:08 -05:00
Michael Larabel
9490bc9721 pts-core: Fix display_text_table warning in some scenarios 2018-12-04 07:04:49 -05:00
Michael Larabel
f36f8db8ba phodevi: Updated gpu_power sensor for AMDGPU driver 2018-12-04 07:01:49 -05:00
Michael Larabel
2e24e720e4 phodevi: Updated gpu_voltage sensor for AMDGPU driver 2018-12-04 06:54:58 -05:00
Michael Larabel
793f76c6d7 phodevi: Add support for reading GPU usage sensor with AMDGPU gpu_busy_percent sysfs interface 2018-12-03 17:27:26 -06:00
Michael Larabel
4c9001a1dc phodevi: Improved Radeon AMDGPU frequency detection/reporting 2018-12-03 13:09:46 -05:00
Michael Larabel
d4152606c9 pts-core: Make Debian EC2 happy for ex dep package installs 2018-12-03 09:24:50 -06:00
Michael Larabel
ad28eadc4a Fix for previous commit 2018-12-01 13:59:47 -06:00
Michael Larabel
835f3e6868 pts-core: Fix for previous commit 2018-12-01 11:58:40 -06:00
Michael Larabel
c6e5e54088 pts-core: Fix for previous commit 2018-12-01 11:54:43 -06:00
Michael Larabel
c6c8f9261a pts-core: Add PRESET_OPTIONS_VALUES 2018-12-01 11:48:40 -06:00
Michael Larabel
9435ebd78f pts-core: Allow PRESET_OPTIONS env var to be used when in batch mode 2018-12-01 10:02:15 -06:00
Michael Larabel
1bd6e6f952 pts-core: For previous commit, first make sure sed is present on the system (it should be....) 2018-12-01 08:56:41 -06:00
Michael Larabel
e3f5ec1c0a Merge pull request #309 from herbierobinson/master
Make sure the current directory, "." isn't in PATH.
2018-12-01 09:54:59 -05:00
Michael Larabel
452d9ed04c Merge pull request #299 from loader-bsd/freebsd
Fix test option: <DefaultEntry>0</DefaultEntry>
2018-12-01 08:35:52 -05:00
Herbie Robinson
05b3fdf890 Make sure the current directory isn't in PATH. 2018-11-30 19:07:18 -05:00
Michael Larabel
a7fab960a1 Update some links to HTTPS 2018-11-26 06:52:44 -06:00
Michael Larabel
6b5e8df4e3 Update some links to HTTPS 2018-11-26 06:52:29 -06:00
Michael Larabel
f6356c4a27 Prep for Phoronix Test Suite 8.4.0 2018-11-26 06:43:14 -06:00
Michael Larabel
027f7e84bb phodevi: Another string fix 2018-11-26 06:12:32 -06:00
Michael Larabel
eaa7431823 phodevi: Remove duplicate words from strings 2018-11-24 12:09:39 -06:00
Michael Larabel
088a710bcd phodevi: x86_64 default frequency reporting tweak 2018-11-24 11:59:31 -06:00
Michael Larabel
b717fa9582 pts-core: Another info tweak 2018-11-24 05:48:59 -06:00
Michael Larabel
f456fcb084 pts-core: Drop change-log reporting from info command as during debug-self-test skews timing 2018-11-24 05:47:07 -06:00
Michael Larabel
12f3d80f39 pts-core: Via info command report large system counts on result files for easy interpretation 2018-11-22 19:09:04 -06:00
Michael Larabel
0bd0dee4d4 Prep for Phoronix Test Suite 8.4 Milestone 3 2018-11-20 06:06:00 -06:00
Michael Larabel
5df5624c2a pts-core: Fix for compacting system table in more cases of GPU driver comparisons 2018-11-17 18:38:31 -06:00
Michael Larabel
571102774c pts-core: Add RemoveInstallDirectoryOnReinstall to toggle test re-installation behavior 2018-11-17 14:57:44 -06:00
Michael Larabel
1554c1804c pts-core: Continued POWER9 support improvements 2018-11-15 16:48:58 -06:00
Michael Larabel
146fff9de6 pts-core: More TUI graph stylization work 2018-11-13 16:57:40 -06:00
Michael Larabel
2f183c8100 pts-core: Only TUI graph brand colors when more than one line to color per result 2018-11-13 16:11:00 -06:00
Michael Larabel
be85bb3466 pts-core: Fix warning introduced in earlier commit 2018-11-13 15:33:40 -06:00
Michael Larabel
ffbe0513e9 pts-core: Provide a cache for identifier_to_brand_color 2018-11-13 15:27:34 -06:00
Michael Larabel
4bf1a781b7 pts-core: Allow branded colors to work in the terminal/CLI text graphs 2018-11-13 14:23:34 -06:00
Michael Larabel
41759ab9ef phoronix-test-suite: Basic helper updates 2018-11-13 14:22:13 -06:00
Michael Larabel
02f4d29d16 pts-core: Fix possible situation of openbenchmarking-refresh not updating when IndexCacheTTL is set to 0
https://github.com/phoronix-test-suite/phoronix-test-suite/issues/306
2018-11-12 08:32:56 -06:00
Michael Larabel
d286f89f92 pts-core: Fix bool input handling on invalid input 2018-11-11 18:09:54 -06:00
Michael Larabel
cf8e834598 pts_Graph: Fix for sometimes tick marker text overlapping 2018-11-11 15:50:05 -06:00
Michael Larabel
3902d680be pts-core: Ubuntu package updates 2018-11-09 18:01:45 -06:00
Fatima Sheremetyeva
1ec7a10523 Merge branch 'master' of https://github.com/phoronix-test-suite/phoronix-test-suite 2018-11-09 16:06:54 -06:00
Fatima Sheremetyeva
8afd4eb3ce pts-core: Fix behavior of AppendToArguments sometimes double appending when running against an existing result file of that test 2018-11-09 16:06:41 -06:00
Michael Larabel
f01ba250c2 pts-core: Expose NUM_CPU_PHYSICAL_CORES 2018-11-09 11:36:08 -06:00
Michael Larabel
56ca809504 pts-core: Frame timing parser fix from earlier commit 2018-11-06 09:23:18 -06:00
Michael Larabel
8331cf461e phodevi: Improved CPU cache size detection 2018-11-05 19:12:34 -06:00
Michael Larabel
eb4e073f80 phodevi: More work on previous commit 2018-11-05 19:09:26 -06:00
Michael Larabel
1f10bf12e3 phodevi: Improved physical CPU core detection for architectures like POWER 2018-11-05 19:03:41 -06:00
Michael Larabel
568bbf124a pts-core: Drop "and subsidiaries" from strings 2018-11-05 10:03:42 -06:00
Michael Larabel
7955d58335 Merge branch 'master' of github.com:phoronix-test-suite/phoronix-test-suite 2018-11-05 06:31:27 -06:00
Michael Larabel
b74049cbf4 Rebuild for 8.4 M2 2018-11-05 06:31:21 -06:00
Michael Larabel
a60d870932 Prep for 8.4 M2 2018-11-05 06:30:33 -06:00
Fatima Sheremetyeva
38f0f3eb6b CSV parsing for F1 2018 format 2018-11-05 03:33:53 -06:00
Fatima Sheremetyeva
655100774f CSGO per-frame time reporting 2018-11-03 11:11:43 -05:00
Michael Larabel
1f6c7b7fa4 phodevi: Another BSD core count fix 2018-10-29 07:01:46 -05:00
Michael Larabel
f410ada612 phodevi: Vulkan driver reporting fix 2018-10-26 14:57:08 -05:00
Michael Larabel
ba3203de8d Fix nodejs external dependency on openSUSE 2018-10-23 06:44:33 -05:00
Michael Larabel
68f34c22ff phodevi: Another fix for X server version detection 2018-10-20 15:27:09 -05:00
Michael Larabel
6c8067a20b phodevi: Fix for previous commit 2018-10-20 15:22:30 -05:00
Michael Larabel
50d8cdc3fb phodevi: Fix X Version detection 2018-10-20 15:21:24 -05:00
Michael Larabel
93325244c4 phodevi: CPU core detection fix on DragonFlyBSD depending upon topology 2018-10-16 17:19:51 -05:00
loader
257ed8b89f Fix test option: <DefaultEntry>0</DefaultEntry> 2018-10-14 02:48:30 +00:00
Michael Larabel
3ad38b6939 phodevi: Ampere eMAG CPU detection 2018-10-09 09:44:48 -05:00
Michael Larabel
f575d21074 phodevi: Typo fix for ARMv8 2018-10-09 09:43:13 -05:00
Michael Larabel
049b759f10 phodevi: Pick up 0x50 implementer for AArch64 2018-10-09 09:42:37 -05:00
Michael Larabel
c6f48b95c5 pts-core: Add dry-run test option 2018-10-08 13:20:12 -05:00
Michael Larabel
ee04d64563 pts-core: Allow passing PTS environment variables as arguments to PTS and then just have PTS set them in the environment 2018-10-08 11:34:39 -05:00
Michael Larabel
0a645235a6 Prep Phoronix Test Suite 8.4 Milestone 1 2018-10-07 15:05:34 -05:00
Michael Larabel
95e6d0d01b pts-core: Tweak italic line on non-verified tests 2018-10-07 12:21:14 -05:00
Michael Larabel
ae9b7b1621 system_monitor: Only save per-run if the run was successful 2018-10-07 11:53:33 -05:00
Michael Larabel
3b7e3c7e70 pts-core: Fix typo from previous commit 2018-10-05 09:06:35 -05:00
Michael Larabel
e54b418ef2 pts_Graph: Highlight AMD red "Athlon " 2018-10-05 07:20:17 -05:00
Michael Larabel
9bafbd7195 phodevi: Drop information reporting support for the long ago Catalyst/fglrx driver stack that hasn't been supported/maintained in many years 2018-10-04 17:28:33 -05:00
Michael Larabel
87a90709f7 pts-core: Ubuntu ex dep file check fix for numpy 2018-10-03 07:01:03 -05:00
Michael Larabel
30eb45846a pts-core: Fix for previous commit 2018-10-02 16:40:49 -05:00
Michael Larabel
2b93102268 pts-core: At run-time also report if test is deprecated/broken 2018-10-02 14:16:00 -05:00
Michael Larabel
03029d5be5 pts-core: Cleanup ubuntu install ex dep script
https://github.com/phoronix-test-suite/phoronix-test-suite/issues/293
2018-10-02 13:57:32 -05:00
Michael Larabel
19914d4577 pts-core: Add pts_client::get_path_separator() 2018-10-02 11:24:45 -05:00
Michael Larabel
78de8c6b7b pts-core: CHange ; to : for separators in DEBUG_PATH 2018-10-02 11:15:19 -05:00
Michael Larabel
e77df95389 pts-core: Add DEBUG_PATH 2018-10-02 11:14:25 -05:00
Michael Larabel
b016dd899b pts-core: Add some more possible Windows dependencies 2018-10-02 10:09:48 -05:00
Michael Larabel
79d8fcd41e pts-core: Add "node-npm" as an external dependency for Node.js + NPM 2018-10-01 12:35:00 -05:00
Michael Larabel
a5f28439e6 phodevi: Report vRAM size on GPU model string in GB when over 1GB 2018-10-01 06:26:38 -05:00
Michael Larabel
3747113313 pts-core: Fix warning in make-download-cache 2018-09-25 16:30:09 -05:00
Michael Larabel
c01a9b010e phodevi: Improved resolution exposure 2018-09-19 20:05:04 -05:00
Michael Larabel
56aa7199c3 phodevi: Check if "/root" writable as an alternative to username check, might fix some issues when running as crontab 2018-09-18 11:35:42 -05:00
96 changed files with 1926 additions and 1137 deletions

View File

@@ -1,4 +1,4 @@
Copyright 2008 - 2018 by Phoronix Media.
Copyright 2008 - 2019 by Phoronix Media.
Lead Architects:

View File

@@ -1,5 +1,87 @@
PHORONIX TEST SUITE CHANGE-LOG
Phoronix Test Suite 8.6.0 Milestone 2
19 January 2019
pts-core: Update Mac OS X to macOS references
pts-core: Add result-file-stats sub-command to show more test result statistics
pts-core: Show geometric mean and harmonic mean data at end of benchmarking process when relevant as part of post-run stats
pts-core: Improved formatting of file download text user interface for downloading of dependencies on Microsoft Windows
pts-core: Fix Loop 'Test i of n' Reporting
pts-core: A few warning fixes for PHP 7.3+
pts-core: External dependency handling support for OpenMandriva Lx 4.0 (transitioned from urpmi to DNF)
phodevi: Report Windows Subsystem for Linux (WSL) to the system layer string
Phoronix Test Suite 8.6.0 Milestone 1
7 January 2019
pts-core: No longer clear test profile identifiers on secondary saved results
pts-core: Add compare-results-to-baseline sub-command for comparing one result file (baseline) against a set of results for text look at relative perf
pts-core: Minor fixes
pts-core: Show wins and losses summary after testing on large result files
pts-core: On two-way result files, after test completion show comparison of current result against previous result (baseline)
pts-core: Add ShowPostRunStatistics user configuration XML option to toggle whether various test statistics are printed at the end of testing
pts-core: Add recently-added-tests sub-command to show newly added test profiles / alternative to openbenchmarking-changes/recently-updated-tests
pts-core: Allow outputting line graphs to terminal interface as basic box plot graphs
phodevi: Improve Linux multiple network device reporting
phodevi: LXQt desktop version reporting
phodevi: Update for Microsoft Windows Server 2019
system_monitor: Allow outputting system monitor graphs to terminal interface inline
Phoronix Test Suite 8.4.1-Skiptvet
9 December 2018
pts-core: Workaround for RHEL 7.6 PHP having buggy CURL that is causing seg faults
pts-core: Ensure "." doesn't get set in PATH when launching phoronix-test-suite
pts-core: Allow PRESET_OPTIONS env var to be used when in batch mode
pts-core: FreeBSD updates
pts-core: Add PRESET_OPTIONS_VALUES environment variable that is similar to PRESET_OPTIONS but for explicit values
phodevi: Improved Radeon AMDGPU frequency detection/reporting
phodevi: Add support for reading GPU usage sensor with AMDGPU gpu_busy_percent sysfs interface
phodevi: Updated gpu_voltage sensor for AMDGPU driver
phodevi: Updated gpu_power sensor for AMDGPU driver
phodevi: Updated gpu_fanspeed sensor for AMDGPU driver
phodevi: Updated gpu_freq sensor for AMDGPU driver
phodevi: Improved physical CPU core detection on DragonFlyBSD 5.4
phodevi: Improved Spectre detection on DragonFlyBSD 5.4
phodevi: Allow using NUM_CPU_CORES to override the number of exposed CPU threads/cores to tests (alternative to PTS_NPROC / NUMBER_OF_PROCESSORS)
phodevi: Improved multi-disk reporting for non-Linux operating systems
phodevi: Minor GPU string reporting improvement
Phoronix Test Suite 8.4.0-Skiptvet
26 November 2018
phodevi: Various minor tweaks
Phoronix Test Suite 8.4.0 Milestone 3
20 November 2018
pts-core: Various external dependency updates
pts-core: Expose NUM_CPU_PHYSICAL_CORES to test profiles as alternative to NUM_CPU_CORES (logical count)
pts-core: Fix possible situation of openbenchmarking-refresh not updating when IndexCacheTTL is set to 0
pts-core: Allow branded colors to work in the terminal/CLI text graphs
pts-core: Continued POWER9 support improvements
pts-core: Add RemoveInstallDirectoryOnReinstall to toggle test re-installation behavior
pts_Graph: Fix for sometimes tick marker text overlapping
phodevi: Improved physical CPU core detection for architectures like POWER
phodevi: Improved CPU cache size detection
Phoronix Test Suite 8.4.0 Milestone 2
5 November 2018
pts-core: Allow passing PTS environment variables as arguments to PTS and then just have PTS set them in the environment
pts-core: Add dry-run test option
pts-core: Various result parser additions to help parsing of CSV frame-time data for more test profiles (games)
phodevi: Vulkan driver reporting fix
Phoronix Test Suite 8.4.0 Milestone 1
8 October 2018
phodevi: Report vRAM size on GPU model string in GB when over 1GB
pts-core: At run-time also report if test is deprecated/broken
pts-core: Add "node-npm" as an external dependency for Node.js + NPM
phodevi: Drop information reporting support for the long ago Catalyst/fglrx driver stack that hasn't been supported/maintained in many years
Phoronix Test Suite 8.2.0-Rakkestad
11 September 2018

View File

@@ -1,13 +1,13 @@
# Phoronix Test Suite 8.2.0
http://www.phoronix-test-suite.com/
# Phoronix Test Suite 8.6.0m2
https://www.phoronix-test-suite.com/
The **Phoronix Test Suite** is the most comprehensive testing and benchmarking
platform available for Linux, Solaris, OS X, and BSD operating systems. The
Phoronix Test Suite allows for carrying out tests in a fully automated manner
from test installation to execution and reporting. All tests are meant to be
easily reproducible, easy-to-use, and support fully automated execution. The
Phoronix Test Suite is open-source under the GNU GPLv3 license and is developed
by Phoronix Media in cooperation with partners.
platform available for Linux, Solaris, macOS, Windows, and BSD operating
systems. The Phoronix Test Suite allows for carrying out tests in a fully
automated manner from test installation to execution and reporting. All tests
are meant to be easily reproducible, easy-to-use, and support fully automated
execution. The Phoronix Test Suite is open-source under the GNU GPLv3 license
and is developed by Phoronix Media in cooperation with partners.
The Phoronix Test Suite itself is an open-source framework for conducting
automated tests along with reporting of test results, detection of installed
@@ -50,13 +50,12 @@ the Phoronix Test Suite website.
## Installation & Setup
The Phoronix Test Suite is supported on Linux, *BSD, Solaris, Mac OS X, and
Windows systems. However, the most full-featured and well supported operating
system for conducting the tests is Linux with some non-basic functionality not
being available under all platforms. The Phoronix Test Suite software/framework
is compatible with all major CPU architectures (e.g. i686, x86_64, ARM,
PowerPC), but not all of the test profiles/suites are compatible with all
architectures.
The Phoronix Test Suite is supported on Linux, *BSD, Solaris, macOS, and Windows
systems. However, the most full-featured and well supported operating system for
conducting the tests is Linux with some non-basic functionality not being
available under all platforms. The Phoronix Test Suite software/framework is
compatible with all major CPU architectures (e.g. i686, x86_64, ARM, PowerPC),
but not all of the test profiles/suites are compatible with all architectures.
The Phoronix Test Suite can be installed for system-wide usage or run locally
without installation from the extracted tar.gz/zip package. The only hard

View File

@@ -36,7 +36,6 @@ PHORONIX TEST SUITE PUBLIC TODO LIST:
- SIPP [http://sipp.sourceforge.net/]
- oclGaussCrack [https://hashcat.net/oclGaussCrack/]
- http://hashcat.net/oclhashcat/
- Handbrake [http://handbrake.fr/]
- libMicro [https://github.com/portante/libMicro]
- http://markjstock.org/pages/rad_bench.html
- https://code.google.com/p/pyrit/
@@ -60,6 +59,23 @@ PHORONIX TEST SUITE PUBLIC TODO LIST:
- suitesparse http://faculty.cse.tamu.edu/davis/suitesparse.html
- ospray/ospray
- Microsoft/X-Mem
- https://www2.mrc-lmb.cam.ac.uk/relion/index.php?title=Benchmarks_%26_computer_hardware
- kripke
- nekbone
- https://github.com/u39kun/deep-learning-benchmark
- AMG
- CORAL-2 benchmarks
- CompuBench (Windows)
https://github.com/cart/amethyst-bunnymark
rav1e (not yet multithreaded as of Oct 2018)
gnzlbg/aobench
https://github.com/mpicbg-scicomp/gearshifft
https://github.com/hyperledger/caliper
dav1d
RedShift demo
https://wiki.fysik.dtu.dk/gpaw/devel/benchmarks.html
- More AV1 IVF sample files: http://download.opencontent.netflix.com/?prefix=AV1/Chimera/
SPECFEM3D https://www.nvidia.com/en-us/data-center/gpu-accelerated-applications/specfem3d-globe/
### WEB SOCKET / HTML5 USER INTERFACE WORK ###

View File

@@ -1,4 +1,4 @@
.TH phoronix-test-suite 1 "www.phoronix-test-suite.com" "8.2.0"
.TH phoronix-test-suite 1 "www.phoronix-test-suite.com" "8.6.0m2"
.SH NAME
phoronix-test-suite \- The Phoronix Test Suite is an extensible open-source platform for performing testing and performance evaluation.
.SH SYNOPSIS
@@ -6,7 +6,7 @@ phoronix-test-suite \- The Phoronix Test Suite is an extensible open-source plat
.br
.B phoronix-test-suite benchmark [test | suite]
.SH DESCRIPTION
The **Phoronix Test Suite** is the most comprehensive testing and benchmarking platform available for Linux, Solaris, OS X, and BSD operating systems. The Phoronix Test Suite allows for carrying out tests in a fully automated manner from test installation to execution and reporting. All tests are meant to be easily reproducible, easy-to-use, and support fully automated execution. The Phoronix Test Suite is open-source under the GNU GPLv3 license and is developed by Phoronix Media in cooperation with partners.
The **Phoronix Test Suite** is the most comprehensive testing and benchmarking platform available for Linux, Solaris, macOS, Windows, and BSD operating systems. The Phoronix Test Suite allows for carrying out tests in a fully automated manner from test installation to execution and reporting. All tests are meant to be easily reproducible, easy-to-use, and support fully automated execution. The Phoronix Test Suite is open-source under the GNU GPLv3 license and is developed by Phoronix Media in cooperation with partners.
.SH OPTIONS
.TP
.SH SYSTEM
@@ -88,6 +88,9 @@ This option will install the selected test(s) (if needed) and will proceed to ru
.B default-run [Test | Suite | OpenBenchmarking ID | Test Result] ...
This option will run the selected test(s). The name of the test or suite must be supplied or the OpenBenchmarking.org ID or saved local file name. Multiple arguments can be supplied to run additional tests at the same time and save the results in a suite-like fashion. Unlike the normal run option, the default-run will not prompt the user to select from the available test options but will instead use the default options as automatically set by pts-core or the test profile. Use batch-run to automatically test all of the available options.
.TP
.B dry-run [Test | Suite | OpenBenchmarking ID | Test Result] ...
This option and its arguments pre-set the Phoronix Test Suite batch run mode with enforcing of defaults to not save any results and other behavior intended for a dry/test run. This option is primarily intended for testing/evaluation purposes.
.TP
.B internal-run [Test | Suite | OpenBenchmarking ID | Test Result] ...
This option and its arguments pre-set the Phoronix Test Suite batch run mode with sane values for carrying out benchmarks in a semi-automated manner and without uploading any of the result data to the public OpenBenchmarking.org.
.TP
@@ -116,6 +119,9 @@ This option will list the OpenBenchmarking.org repositories currently linked to
.B openbenchmarking-uploads
This option will list any recent test result uploads from the system's IP address to OpenBenchmarking.org.
.TP
.B recently-added-tests
This option will list the most recently added (newest) test profiles.
.TP
.B upload-result [Test Result]
This option is used for uploading a test result to OpenBenchmarking.org.
.TP
@@ -218,6 +224,9 @@ This option will generate a candlestick graph showing the distribution of result
.B auto-sort-result-file [Test Result]
This option is used if you wish to automatically attempt to sort the results by their result identifier string.
.TP
.B compare-results-to-baseline [Test Result] [Test Result]
This option will allows you to specify a result as a baseline (first parameter) and a second result file (second parameter) that will offer some analysis for showing how the second result compares to the first in matching tests.
.TP
.B edit-result-file [Test Result]
This option is used if you wish to edit the title and description of an existing result file.
.TP
@@ -245,6 +254,9 @@ This option is used if you wish to change the name of the saved name of a result
.B reorder-result-file [Test Result]
This option is used if you wish to manually change the order in which test results are shown in the Phoronix Test Suite Results Viewer and the contained graphs. The user must specify a saved results file and then they will be prompted to select the results identifiers one at a time in the order they would like them to be displayed from left to right.
.TP
.B result-file-stats [Test Result]
This option is used if you wish to analyze a result file by seeing various statistics on the result data for result files containing at least two sets of data.
.TP
.B result-file-to-csv [Test Result]
This option will read a saved test results file and output the system hardware and software information along with the results to a CSV output. The CSV (Comma Separated Values) output can then be loaded into a spreadsheet for easy viewing.
.TP
@@ -260,7 +272,7 @@ This option will read a saved test results file and output the system hardware a
.B show-result [Test Result]
Open up the test results in the Phoronix Test Suite Result Viewer or on OpenBenchmarking.org.
.TP
.B winners-and-losers [Test Result]
.B wins-and-losses [Test Result]
This option is used if you wish to analyze a result file to see which runs produced the most wins/losses of those result identifiers in the saved file.
.TP
.SH OTHER
@@ -328,15 +340,15 @@ _
.SH SEE ALSO
.B Websites:
.br
http://www.phoronix-test-suite.com/
https://www.phoronix-test-suite.com/
.br
http://commercial.phoronix-test-suite.com/
https://commercial.phoronix-test-suite.com/
.br
http://www.openbenchmarking.org/
https://www.openbenchmarking.org/
.br
http://www.phoronix.com/
https://www.phoronix.com/
.br
http://www.phoronix.com/forums/
https://www.phoronix.com/forums/
.SH AUTHORS
Copyright 2008 - 2018 by Phoronix Media, Michael Larabel.
Copyright 2008 - 2019 by Phoronix Media, Michael Larabel.
.TP

File diff suppressed because one or more lines are too long

View File

@@ -2,7 +2,7 @@
# Getting Started
## Overview
The Phoronix Test Suite is the most comprehensive testing and benchmarking platform available for Linux, Solaris, Mac OS X, and BSD operating systems. The Phoronix Test Suite allows for carrying out tests in a fully automated manner from test installation to execution and reporting. All tests are meant to be easily reproducible, easy-to-use, and support fully automated execution. The Phoronix Test Suite is open-source under the GNU GPLv3 license and is developed by Phoronix Media in cooperation with partners. Version 1.0 of the Phoronix Test Suite was publicly released in 2008.
The Phoronix Test Suite is the most comprehensive testing and benchmarking platform available for Linux, Solaris, macOS, Windows, and BSD operating systems. The Phoronix Test Suite allows for carrying out tests in a fully automated manner from test installation to execution and reporting. All tests are meant to be easily reproducible, easy-to-use, and support fully automated execution. The Phoronix Test Suite is open-source under the GNU GPLv3 license and is developed by Phoronix Media in cooperation with partners. Version 1.0 of the Phoronix Test Suite was publicly released in 2008.
The Phoronix Test Suite client itself is a test framework for providing seamless execution of test profiles and test suites. There are more than 200 tests available by default, which are transparently available via [OpenBenchmarking.org](http://openbenchmarking.org/) integration. Of these default test profiles there is a range of sub-systems that can be tested and a range of hardware from mobile devices to desktops and worksrtations/servers. New tests can be easily introduced via the Phoronix Test Suite's extensible test architecture, with test profiles consisting of XML files and shell scripts. Test profiles can produce a quantitative result or other qualitative/abstract results like image quality comparisons and pass/fail. Using Phoronix Test Suite modules, other data can also be automatically collected at run-time such as the system power consumption, disk usage, and other software/hardware sensors. Test suites contain references to test profiles to execute as part of a set or can also reference other test suites. Test suites are defined via an XML schema.
Running the Phoronix Test Suite for the first time can be as simple as issuing a command such as *phoronix-test-suite benchmark c-ray* , which would proceed to install a simple CPU test, execute the test, and report the results. Along with the results, the system's hardware/software information is collected in a detailed manner, relevant system logs, and other important system attributes such as compiler flags and system state. Users can optionally upload their results to OpenBenchmarking.org for sharing results with others, comparing results against other systems, and to carry out further analysis.
@@ -77,6 +77,8 @@ This option is used to configure the batch mode options for the Phoronix Test Su
This option will install the selected test(s) (if needed) and will proceed to run the test(s) in the defaults mode. This option is equivalent to running phoronix-test-suite with the install option followed by the default-run option.
#### default-run [Test | Suite | OpenBenchmarking ID | Test Result] ...
This option will run the selected test(s). The name of the test or suite must be supplied or the OpenBenchmarking.org ID or saved local file name. Multiple arguments can be supplied to run additional tests at the same time and save the results in a suite-like fashion. Unlike the normal run option, the default-run will not prompt the user to select from the available test options but will instead use the default options as automatically set by pts-core or the test profile. Use batch-run to automatically test all of the available options.
#### dry-run [Test | Suite | OpenBenchmarking ID | Test Result] ...
This option and its arguments pre-set the Phoronix Test Suite batch run mode with enforcing of defaults to not save any results and other behavior intended for a dry/test run. This option is primarily intended for testing/evaluation purposes.
#### internal-run [Test | Suite | OpenBenchmarking ID | Test Result] ...
This option and its arguments pre-set the Phoronix Test Suite batch run mode with sane values for carrying out benchmarks in a semi-automated manner and without uploading any of the result data to the public OpenBenchmarking.org.
@@ -97,6 +99,8 @@ This option is used for refreshing the stored OpenBenchmarking.org repostory inf
This option will list the OpenBenchmarking.org repositories currently linked to this Phoronix Test Suite client instance.
#### openbenchmarking-uploads
This option will list any recent test result uploads from the system's IP address to OpenBenchmarking.org.
#### recently-added-tests
This option will list the most recently added (newest) test profiles.
#### upload-result [Test Result]
This option is used for uploading a test result to OpenBenchmarking.org.
#### upload-test-profile
@@ -169,6 +173,8 @@ This option can be used for validating a Phoronix Test Suite test suite as being
This option will generate a candlestick graph showing the distribution of results from all trial runs. The candlestick graph is similar to the Japanese candlestick charts used by the financial industry, except instead of representing stock data it is numerical result data from all trial runs.\n\nThe tip of the upper-wick represents the highest value of the test runs with the tip of the lower-wick representing the lowest value of all test runs. The upper-edge of the candle body represents the first or last run value and the lower-edge represents the first or last run value. Lastly, if the last run value is less than the first run value, the candle body is the same color as the graph background, otherwise the last run value is greater.
#### auto-sort-result-file [Test Result]
This option is used if you wish to automatically attempt to sort the results by their result identifier string.
#### compare-results-to-baseline [Test Result] [Test Result]
This option will allows you to specify a result as a baseline (first parameter) and a second result file (second parameter) that will offer some analysis for showing how the second result compares to the first in matching tests.
#### edit-result-file [Test Result]
This option is used if you wish to edit the title and description of an existing result file.
#### extract-from-result-file [Test Result]
@@ -187,6 +193,8 @@ This option is used if you wish to change the name of the identifier in a test r
This option is used if you wish to change the name of the saved name of a result file.
#### reorder-result-file [Test Result]
This option is used if you wish to manually change the order in which test results are shown in the Phoronix Test Suite Results Viewer and the contained graphs. The user must specify a saved results file and then they will be prompted to select the results identifiers one at a time in the order they would like them to be displayed from left to right.
#### result-file-stats [Test Result]
This option is used if you wish to analyze a result file by seeing various statistics on the result data for result files containing at least two sets of data.
#### result-file-to-csv [Test Result]
This option will read a saved test results file and output the system hardware and software information along with the results to a CSV output. The CSV (Comma Separated Values) output can then be loaded into a spreadsheet for easy viewing.
#### result-file-to-json [Test Result]
@@ -197,7 +205,7 @@ This option will read a saved test results file and output the system hardware a
This option will read a saved test results file and output the system hardware and software information to the terminal. The test results are also outputted.
#### show-result [Test Result]
Open up the test results in the Phoronix Test Suite Result Viewer or on OpenBenchmarking.org.
#### winners-and-losers [Test Result]
#### wins-and-losses [Test Result]
This option is used if you wish to analyze a result file to see which runs produced the most wins/losses of those result identifiers in the saved file.
## Other
@@ -356,7 +364,7 @@ This module utilizes the following environmental variables: WATCHDOG_SENSOR, WAT
# Installation Instructions
## Setup Overview
The Phoronix Test Suite supports Linux, Apple Mac OS X, Microsoft Windows, Solaris, Hurd, BSD, and other operating system environments. The only Linux distribution-specific code deals with the external dependencies support feature that are set by individual test profiles. If you are not running one of the supported Linux distributions, Solaris, BSD, or Mac OS X, you may need to install a package manually (as instructed by the Phoronix Test Suite) in order for a test to run. An example of an external dependency would be GCC and the OpenGL Utility Toolkit being needed for test profiles that build an OpenGL benchmark from source-code.
The Phoronix Test Suite supports Linux, Apple macOS, Microsoft Windows, Solaris, Hurd, BSD, and other operating system environments. The only Linux distribution-specific code deals with the external dependencies support feature that are set by individual test profiles. If you are not running one of the supported Linux distributions, Solaris, BSD, or macOS, you may need to install a package manually (as instructed by the Phoronix Test Suite) in order for a test to run. An example of an external dependency would be GCC and the OpenGL Utility Toolkit being needed for test profiles that build an OpenGL benchmark from source-code.
Among the distributions where the Phoronix Test Suite has been officially tested include Ubuntu, Fedora, Mandriva / Mageia, Gentoo, PCLinuxOS, Arch Linux, Pardus, OpenSuSE, Optware, webOS, Zenwalk, CentOS, Red Hat Enterprise Linux, Oracle Linux, Scientific Linux, Debian, Mint, MEPIS, Alpine Linux, Void Linux, Intel Clear Linux, and Amazon Linux EC2.
Among the tested BSD distributions are FreeBSD, PC-BSD, NetBSD, OpenBSD, Debian GNU/kFreeBSD, and DragonflyBSD. Tested Solaris distributions include OpenSolaris, Solaris Express 11, Oracle Solaris 11, OpenIndiana, Illumos, and Nexenta.
@@ -405,11 +413,10 @@ Running *install-sh* from the root directory of the Phoronix Test Suite will ins
### Debian/Ubuntu Installation
Debian/Ubuntu users are able to follow the Generic Installation instructions or can obtain a Debian Package from the Phoronix Test Suite web-site. The package contains the *phoronix-test-suite* executable in */usr/bin/* , the Phoronix Test Suite files in */usr/share/phoronix-test-suite/* , and the documentation in */usr/share/doc/phoronix-test-suite/* .
A phoronix-test-suite package can also be found in the official Ubuntu universe repository beginning with the Ubuntu 9.04 (Jaunty) release, but it may be out of date compared to the latest upstream version.
On Ubuntu 13.04 and newer if you experience an issue of system sensor monitoring not working, other multi-process tasks, or related issues reported as PHP PCNTL missing, the pcntl functions need to be removed from the *disable_functions* line within the */etc/php5/cli/php.ini* file. This may also affect other Linux distribution support too if the vendor disables access to the PCNTL functions.
### Fedora / Red Hat Installation
The Phoronix Test Suite can be installed on Fedora, Red Hat Enterprise Linux, and CentOS systems using the generic installation method. Alternatively, a *phoronix-test-suite* package is available in recent versions of the Fedora repository and in the EPEL (Extra Packages for Enterprise Linux) repository for Red Hat Enterprise Linux. At this time, however, the Fedora-supplied package is vastly out of date.
The Phoronix Test Suite can be installed on Fedora, Red Hat Enterprise Linux, and CentOS systems using the generic installation method. Alternatively, a *phoronix-test-suite* package is available in recent versions of the Fedora repository and in the EPEL (Extra Packages for Enterprise Linux) repository for Red Hat Enterprise Linux. However, at times this package may be out-of-date compared to upstream stable.
### Gentoo Installation
Gentoo ebuild's for the Phoronix Test Suite have been created by users and can be currently found in the [Gentoo BugZilla](http://bugs.gentoo.org/show_bug.cgi?id=216656) .
@@ -424,8 +431,8 @@ The Phoronix Test Suite core (pts-core) is supported on Solaris and OpenSolaris
The Phoronix Test Suite also supports *BSD operating systems. However, like the Solaris support, not all test profiles are compatible with BSD operating systems, but pts-core has been tested against FreeBSD 7.x/8.x/9.x, NetBSD, PC-BSD 7/8/9, DragonFlyBSD 3.0/3.2/3.4/3.6/4.2, and OpenBSD 4.4/4.6. The Phoronix Test Suite will also work with Debian GNU/kFreeBSD.
For DragonFlyBSD, it's a matter of just using *pkg_radd* with php5, php5-json, php5-dom, and php5-zip or *pkgsrc* . With DragonFlyBSD using dports, the command is *pkg install php5 php5-dom php5-zip php5-json php5-simplexml* . Under FreeBSD/PC-BSD, PHP can be obtained from the *php5* and *php5-extensions* Ports collection.
### Mac OS X Installation
The Phoronix Test Suite is fully supported on Apple's Mac OS X operating system as of Mac OS X 10.5 with improved support under Mac OS X 10.6. PHP ships with Mac OS X by default so it's simply a matter of downloading the Phoronix Test Suite package, extracting it, and running the executable. For tests that rely upon a compiler, Apple's XCode with GCC and LLVM can be utilized.
### MacOS Installation
The Phoronix Test Suite is fully supported on Apple's macOS operating system. PHP ships with macOS by default so it's simply a matter of downloading the Phoronix Test Suite package, extracting it, and running the executable. For tests that rely upon a compiler, Apple's XCode with GCC and LLVM can be utilized.
### Windows Installation
The Phoronix Test Suite support on Microsoft Windows is in development and will function just fine, but is not yet feature complete compared to the other operating systems support. Only a small subset of test profiles, mostly related to graphics, are supported. In terms of the version support, right now the Phoronix Test Suite is developed and tested solely against Microsoft Windows 7 x64 and Microsoft Windows 8 x64.
@@ -621,14 +628,14 @@ This is a collection of test profiles found within the specified OpenBenchmarkin
This is a collection of test profiles found within the specified OpenBenchmarking.org repository where the test profile is specified via an internal tag as testing smp.
#### Cuda Tests pts/cuda
This is a collection of test profiles found within the specified OpenBenchmarking.org repository where the test profile is specified via an internal tag as testing cuda.
#### Openmp Tests pts/openmp
This is a collection of test profiles found within the specified OpenBenchmarking.org repository where the test profile is specified via an internal tag as testing openmp.
#### Python Tests pts/python
This is a collection of test profiles found within the specified OpenBenchmarking.org repository where the test profile is specified via an internal tag as testing python.
#### Go Tests pts/go
This is a collection of test profiles found within the specified OpenBenchmarking.org repository where the test profile is specified via an internal tag as testing go.
#### Mpi Tests pts/mpi
This is a collection of test profiles found within the specified OpenBenchmarking.org repository where the test profile is specified via an internal tag as testing mpi.
#### Openmp Tests pts/openmp
This is a collection of test profiles found within the specified OpenBenchmarking.org repository where the test profile is specified via an internal tag as testing openmp.
#### Vdpau Tests pts/vdpau
This is a collection of test profiles found within the specified OpenBenchmarking.org repository where the test profile is specified via an internal tag as testing vdpau.
#### Video Tests pts/video
@@ -723,14 +730,14 @@ This is a collection of test profiles found within the specified OpenBenchmarkin
This is a collection of test profiles found within the specified OpenBenchmarking.org repository where the test profile is specified via an internal tag as testing smp.
#### Cuda Tests pts/cuda
This is a collection of test profiles found within the specified OpenBenchmarking.org repository where the test profile is specified via an internal tag as testing cuda.
#### Openmp Tests pts/openmp
This is a collection of test profiles found within the specified OpenBenchmarking.org repository where the test profile is specified via an internal tag as testing openmp.
#### Python Tests pts/python
This is a collection of test profiles found within the specified OpenBenchmarking.org repository where the test profile is specified via an internal tag as testing python.
#### Go Tests pts/go
This is a collection of test profiles found within the specified OpenBenchmarking.org repository where the test profile is specified via an internal tag as testing go.
#### Mpi Tests pts/mpi
This is a collection of test profiles found within the specified OpenBenchmarking.org repository where the test profile is specified via an internal tag as testing mpi.
#### Openmp Tests pts/openmp
This is a collection of test profiles found within the specified OpenBenchmarking.org repository where the test profile is specified via an internal tag as testing openmp.
#### Vdpau Tests pts/vdpau
This is a collection of test profiles found within the specified OpenBenchmarking.org repository where the test profile is specified via an internal tag as testing vdpau.
#### Video Tests pts/video

View File

@@ -4,7 +4,7 @@
</head>
<body>
<h1>Overview</h1>
<p>The Phoronix Test Suite is the most comprehensive testing and benchmarking platform available for Linux, Solaris, Mac OS X, and BSD operating systems. The Phoronix Test Suite allows for carrying out tests in a fully automated manner from test installation to execution and reporting. All tests are meant to be easily reproducible, easy-to-use, and support fully automated execution. The Phoronix Test Suite is open-source under the GNU GPLv3 license and is developed by Phoronix Media in cooperation with partners. Version 1.0 of the Phoronix Test Suite was publicly released in 2008.</p>
<p>The Phoronix Test Suite is the most comprehensive testing and benchmarking platform available for Linux, Solaris, macOS, Windows, and BSD operating systems. The Phoronix Test Suite allows for carrying out tests in a fully automated manner from test installation to execution and reporting. All tests are meant to be easily reproducible, easy-to-use, and support fully automated execution. The Phoronix Test Suite is open-source under the GNU GPLv3 license and is developed by Phoronix Media in cooperation with partners. Version 1.0 of the Phoronix Test Suite was publicly released in 2008.</p>
<p>The Phoronix Test Suite client itself is a test framework for providing seamless execution of test profiles and test suites. There are more than 200 tests available by default, which are transparently available via <a href="http://openbenchmarking.org/">OpenBenchmarking.org</a> integration. Of these default test profiles there is a range of sub-systems that can be tested and a range of hardware from mobile devices to desktops and worksrtations/servers. New tests can be easily introduced via the Phoronix Test Suite's extensible test architecture, with test profiles consisting of XML files and shell scripts. Test profiles can produce a quantitative result or other qualitative/abstract results like image quality comparisons and pass/fail. Using Phoronix Test Suite modules, other data can also be automatically collected at run-time such as the system power consumption, disk usage, and other software/hardware sensors. Test suites contain references to test profiles to execute as part of a set or can also reference other test suites. Test suites are defined via an XML schema.</p>
<p>Running the Phoronix Test Suite for the first time can be as simple as issuing a command such as <em>phoronix-test-suite benchmark c-ray</em>, which would proceed to install a simple CPU test, execute the test, and report the results. Along with the results, the system's hardware/software information is collected in a detailed manner, relevant system logs, and other important system attributes such as compiler flags and system state. Users can optionally upload their results to OpenBenchmarking.org for sharing results with others, comparing results against other systems, and to carry out further analysis.</p>
<h1>OpenBenchmarking.org</h1>

View File

@@ -84,6 +84,9 @@
<h3>default-run<em> [Test | Suite | OpenBenchmarking ID | Test Result] ...</em>
</h3>
<p>This option will run the selected test(s). The name of the test or suite must be supplied or the OpenBenchmarking.org ID or saved local file name. Multiple arguments can be supplied to run additional tests at the same time and save the results in a suite-like fashion. Unlike the normal run option, the default-run will not prompt the user to select from the available test options but will instead use the default options as automatically set by pts-core or the test profile. Use batch-run to automatically test all of the available options.</p>
<h3>dry-run<em> [Test | Suite | OpenBenchmarking ID | Test Result] ...</em>
</h3>
<p>This option and its arguments pre-set the Phoronix Test Suite batch run mode with enforcing of defaults to not save any results and other behavior intended for a dry/test run. This option is primarily intended for testing/evaluation purposes.</p>
<h3>internal-run<em> [Test | Suite | OpenBenchmarking ID | Test Result] ...</em>
</h3>
<p>This option and its arguments pre-set the Phoronix Test Suite batch run mode with sane values for carrying out benchmarks in a semi-automated manner and without uploading any of the result data to the public OpenBenchmarking.org.</p>
@@ -112,6 +115,9 @@
<h3>openbenchmarking-uploads<em> </em>
</h3>
<p>This option will list any recent test result uploads from the system's IP address to OpenBenchmarking.org.</p>
<h3>recently-added-tests<em> </em>
</h3>
<p>This option will list the most recently added (newest) test profiles.</p>
<h3>upload-result<em> [Test Result]</em>
</h3>
<p>This option is used for uploading a test result to OpenBenchmarking.org.</p>
@@ -214,6 +220,9 @@
<h3>auto-sort-result-file<em> [Test Result]</em>
</h3>
<p>This option is used if you wish to automatically attempt to sort the results by their result identifier string.</p>
<h3>compare-results-to-baseline<em> [Test Result] [Test Result]</em>
</h3>
<p>This option will allows you to specify a result as a baseline (first parameter) and a second result file (second parameter) that will offer some analysis for showing how the second result compares to the first in matching tests.</p>
<h3>edit-result-file<em> [Test Result]</em>
</h3>
<p>This option is used if you wish to edit the title and description of an existing result file.</p>
@@ -241,6 +250,9 @@
<h3>reorder-result-file<em> [Test Result]</em>
</h3>
<p>This option is used if you wish to manually change the order in which test results are shown in the Phoronix Test Suite Results Viewer and the contained graphs. The user must specify a saved results file and then they will be prompted to select the results identifiers one at a time in the order they would like them to be displayed from left to right.</p>
<h3>result-file-stats<em> [Test Result]</em>
</h3>
<p>This option is used if you wish to analyze a result file by seeing various statistics on the result data for result files containing at least two sets of data.</p>
<h3>result-file-to-csv<em> [Test Result]</em>
</h3>
<p>This option will read a saved test results file and output the system hardware and software information along with the results to a CSV output. The CSV (Comma Separated Values) output can then be loaded into a spreadsheet for easy viewing.</p>
@@ -256,7 +268,7 @@
<h3>show-result<em> [Test Result]</em>
</h3>
<p>Open up the test results in the Phoronix Test Suite Result Viewer or on OpenBenchmarking.org.</p>
<h3>winners-and-losers<em> [Test Result]</em>
<h3>wins-and-losses<em> [Test Result]</em>
</h3>
<p>This option is used if you wish to analyze a result file to see which runs produced the most wins/losses of those result identifiers in the saved file.</p>
<h1>Other</h1>

View File

@@ -4,7 +4,7 @@
</head>
<body>
<h1>Setup Overview</h1>
<p>The Phoronix Test Suite supports Linux, Apple Mac OS X, Microsoft Windows, Solaris, Hurd, BSD, and other operating system environments. The only Linux distribution-specific code deals with the external dependencies support feature that are set by individual test profiles. If you are not running one of the supported Linux distributions, Solaris, BSD, or Mac OS X, you may need to install a package manually (as instructed by the Phoronix Test Suite) in order for a test to run. An example of an external dependency would be GCC and the OpenGL Utility Toolkit being needed for test profiles that build an OpenGL benchmark from source-code.</p>
<p>The Phoronix Test Suite supports Linux, Apple macOS, Microsoft Windows, Solaris, Hurd, BSD, and other operating system environments. The only Linux distribution-specific code deals with the external dependencies support feature that are set by individual test profiles. If you are not running one of the supported Linux distributions, Solaris, BSD, or macOS, you may need to install a package manually (as instructed by the Phoronix Test Suite) in order for a test to run. An example of an external dependency would be GCC and the OpenGL Utility Toolkit being needed for test profiles that build an OpenGL benchmark from source-code.</p>
<p>Among the distributions where the Phoronix Test Suite has been officially tested include Ubuntu, Fedora, Mandriva / Mageia, Gentoo, PCLinuxOS, Arch Linux, Pardus, OpenSuSE, Optware, webOS, Zenwalk, CentOS, Red Hat Enterprise Linux, Oracle Linux, Scientific Linux, Debian, Mint, MEPIS, Alpine Linux, Void Linux, Intel Clear Linux, and Amazon Linux EC2.</p>
<p>Among the tested BSD distributions are FreeBSD, PC-BSD, NetBSD, OpenBSD, Debian GNU/kFreeBSD, and DragonflyBSD. Tested Solaris distributions include OpenSolaris, Solaris Express 11, Oracle Solaris 11, OpenIndiana, Illumos, and Nexenta.</p>
<h1>Dependencies</h1>
@@ -37,10 +37,9 @@
<p>Running <em>install-sh</em> from the root directory of the Phoronix Test Suite will install the software for system-wide access. By default the <em>phoronix-test-suite</em> executable is in <em>/usr/bin/</em>, the Phoronix Test Suite files in <em>/usr/share/phoronix-test-suite/</em>, and the documentation in /<em>usr/share/doc/phoronix-test-suite/</em>. Root access is required. The default installation prefix is /usr/ but can be adjusted as the first argument (example: <em>install-sh /home/user/</em> to install the Phoronix Test Suite in your home directory).</p>
<h2>Debian/Ubuntu Installation</h2>
<p>Debian/Ubuntu users are able to follow the Generic Installation instructions or can obtain a Debian Package from the Phoronix Test Suite web-site. The package contains the <em>phoronix-test-suite</em> executable in <em>/usr/bin/</em>, the Phoronix Test Suite files in <em>/usr/share/phoronix-test-suite/</em>, and the documentation in <em>/usr/share/doc/phoronix-test-suite/</em>.</p>
<p>A phoronix-test-suite package can also be found in the official Ubuntu universe repository beginning with the Ubuntu 9.04 (Jaunty) release, but it may be out of date compared to the latest upstream version.</p>
<p>On Ubuntu 13.04 and newer if you experience an issue of system sensor monitoring not working, other multi-process tasks, or related issues reported as PHP PCNTL missing, the pcntl functions need to be removed from the <em>disable_functions</em> line within the <em>/etc/php5/cli/php.ini</em> file. This may also affect other Linux distribution support too if the vendor disables access to the PCNTL functions.</p>
<h2>Fedora / Red Hat Installation</h2>
<p>The Phoronix Test Suite can be installed on Fedora, Red Hat Enterprise Linux, and CentOS systems using the generic installation method. Alternatively, a <em>phoronix-test-suite</em> package is available in recent versions of the Fedora repository and in the EPEL (Extra Packages for Enterprise Linux) repository for Red Hat Enterprise Linux. At this time, however, the Fedora-supplied package is vastly out of date.</p>
<p>The Phoronix Test Suite can be installed on Fedora, Red Hat Enterprise Linux, and CentOS systems using the generic installation method. Alternatively, a <em>phoronix-test-suite</em> package is available in recent versions of the Fedora repository and in the EPEL (Extra Packages for Enterprise Linux) repository for Red Hat Enterprise Linux. However, at times this package may be out-of-date compared to upstream stable.</p>
<h2>Gentoo Installation</h2>
<p>Gentoo ebuild's for the Phoronix Test Suite have been created by users and can be currently found in the <a href="http://bugs.gentoo.org/show_bug.cgi?id=216656">Gentoo BugZilla</a>.</p>
<h2>Mandriva Installation</h2>
@@ -50,8 +49,8 @@
<h2>BSD Installation</h2>
<p>The Phoronix Test Suite also supports *BSD operating systems. However, like the Solaris support, not all test profiles are compatible with BSD operating systems, but pts-core has been tested against FreeBSD 7.x/8.x/9.x, NetBSD, PC-BSD 7/8/9, DragonFlyBSD 3.0/3.2/3.4/3.6/4.2, and OpenBSD 4.4/4.6. The Phoronix Test Suite will also work with Debian GNU/kFreeBSD.</p>
<p>For DragonFlyBSD, it's a matter of just using <em>pkg_radd</em> with php5, php5-json, php5-dom, and php5-zip or <em>pkgsrc</em>. With DragonFlyBSD using dports, the command is <em>pkg install php5 php5-dom php5-zip php5-json php5-simplexml</em>. Under FreeBSD/PC-BSD, PHP can be obtained from the <em>php5</em> and <em>php5-extensions</em> Ports collection.</p>
<h2>Mac OS X Installation</h2>
<p>The Phoronix Test Suite is fully supported on Apple's Mac OS X operating system as of Mac OS X 10.5 with improved support under Mac OS X 10.6. PHP ships with Mac OS X by default so it's simply a matter of downloading the Phoronix Test Suite package, extracting it, and running the executable. For tests that rely upon a compiler, Apple's XCode with GCC and LLVM can be utilized.</p>
<h2>MacOS Installation</h2>
<p>The Phoronix Test Suite is fully supported on Apple's macOS operating system. PHP ships with macOS by default so it's simply a matter of downloading the Phoronix Test Suite package, extracting it, and running the executable. For tests that rely upon a compiler, Apple's XCode with GCC and LLVM can be utilized.</p>
<h2>Windows Installation</h2>
<p>The Phoronix Test Suite support on Microsoft Windows is in development and will function just fine, but is not yet feature complete compared to the other operating systems support. Only a small subset of test profiles, mostly related to graphics, are supported. In terms of the version support, right now the Phoronix Test Suite is developed and tested solely against Microsoft Windows 7 x64 and Microsoft Windows 8 x64.</p>
<p>At this time the Phoronix Test Suite client is dependent upon the <em>php.exe</em> executable being installed to <em>C:\Program Files (x86)\PHP\ </em> or one of its subdirectories (see PHP installation notes above). Once this requirement is met, simply download the Phoronix Test Suite package, extract it to a directory of your choice, and run <em>phoronix-test-suite.bat</em></p>

File diff suppressed because one or more lines are too long

View File

@@ -10,7 +10,7 @@ Full details on the Phoronix Test Suite setup and usage is available from the in
## Installation & Setup
The Phoronix Test Suite is supported on Linux, *BSD, Solaris, Mac OS X, and Windows systems. However, the most full-featured and well supported operating system for conducting the tests is Linux with some non-basic functionality not being available under all platforms. The Phoronix Test Suite software/framework is compatible with all major CPU architectures (e.g. i686, x86_64, ARM, PowerPC), but not all of the test profiles/suites are compatible with all architectures.
The Phoronix Test Suite is supported on Linux, *BSD, Solaris, macOS, and Windows systems. However, the most full-featured and well supported operating system for conducting the tests is Linux with some non-basic functionality not being available under all platforms. The Phoronix Test Suite software/framework is compatible with all major CPU architectures (e.g. i686, x86_64, ARM, PowerPC), but not all of the test profiles/suites are compatible with all architectures.
The Phoronix Test Suite can be installed for system-wide usage or run locally without installation from the extracted tar.gz/zip package. The only hard dependency on the Phoronix Test Suite is having command-line support for PHP (PHP 5.3+) installed. A complete PHP stack (e.g. with web server) is **not** needed, but merely the PHP command-line support, which is widely available from operating system package managers under the name `php`, `php5-cli`, or `php5`.

View File

@@ -2,7 +2,7 @@
# Phoronix Test Suite
# URLs: http://www.phoronix.com, http://www.phoronix-test-suite.com/
# Copyright (C) 2008 - 2018, Phoronix Media
# Copyright (C) 2008 - 2019, Phoronix Media
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by

View File

@@ -3,8 +3,8 @@
#
# Phoronix Test Suite
# URLs: http://www.phoronix.com, http://www.phoronix-test-suite.com/
# Copyright (C) 2008 - 2018, Phoronix Media
# Copyright (C) 2008 - 2018, Michael Larabel
# Copyright (C) 2008 - 2019, Phoronix Media
# Copyright (C) 2008 - 2019, Michael Larabel
# phoronix-test-suite: The Phoronix Test Suite is an extensible open-source testing / benchmarking platform
#
# This program is free software; you can redistribute it and/or modify
@@ -21,6 +21,12 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
if which sed >/dev/null 2>&1 ;
then
# Remove the current dir from PATH if present, as it causes infinitely resursive shell scripts.
PATH="`echo $PATH | sed -e s/:[\.]:/:/g -e s/:[\.]// -e s/[\.]://`"
fi
# Full path to root directory of the actual Phoronix Test Suite code
# export PTS_DIR=$(readlink -f `dirname $0`)
export PTS_DIR=`pwd`
@@ -113,9 +119,9 @@ if [ "X$PHP_BIN" = "X" ]
then
cat <<'EOT'
PHP 5.3 or newer or PHP 7 must be installed for the Phoronix Test Suite
The PHP command-line package is commonly called php-cli, php5-cli, or php.
For more information visit: http://www.phoronix-test-suite.com/
PHP must be installed for the Phoronix Test Suite
The PHP command-line package is commonly called php-cli, php7-cli, or php.
For more information visit: https://www.phoronix-test-suite.com/
EOT
@@ -135,7 +141,7 @@ elif [ -x /usr/bin/dnf ]
then
# Modern Fedora
echo "The command to likely run for your operating system is: "
echo "# dnf install php-cli php-xml"
echo "# dnf install php-cli php-xml php-json"
echo " "
elif [ -x /usr/bin/yum ]
then
@@ -161,7 +167,7 @@ then
echo "The command to likely run for your operating system is: "
echo "# pkg install php72 php72-dom php72-zip php72-json php72-simplexml php72-openssl"
echo " "
elif [ -x /usr/local/swupd ]
elif [ -x /usr/bin/swupd ]
then
# Clear Linux
echo "The command to likely run for your operating system is: "
@@ -213,7 +219,7 @@ elif [ -x /usr/sbin/mport ]
then
# MidnightBSD
echo "The command to likely run for your operating system is: "
echo "# mport install php70 php70-dom php70-zip php70-json php70-simplexml"
echo "# mport install php71 php71-dom php71-zip php71-json php71-simplexml"
echo " "
elif [ -x /bin/opkg ]
then
@@ -249,7 +255,7 @@ then
cat <<'EOT'
To run the Phoronix Test Suite locally you must first change directories to phoronix-test-suite/
or install the program using the install-sh script. For support visit: http://www.phoronix-test-suite.com/
or install the program using the install-sh script. For support visit: https://www.phoronix-test-suite.com/
EOT
exit

View File

@@ -1,7 +1,7 @@
:: Phoronix Test Suite
:: URLs: http://www.phoronix.com, http://www.phoronix-test-suite.com/
:: Copyright (C) 2008 - 2018, Phoronix Media
:: Copyright (C) 2008 - 2018, Michael Larabel
:: Copyright (C) 2008 - 2019, Phoronix Media
:: Copyright (C) 2008 - 2019, Michael Larabel
:: phoronix-test-suite: The Phoronix Test Suite is an extensible open-source testing / benchmarking platform
::
:: This program is free software; you can redistribute it and/or modify

View File

@@ -0,0 +1,65 @@
<?php
/*
Phoronix Test Suite
URLs: http://www.phoronix.com, http://www.phoronix-test-suite.com/
Copyright (C) 2008 - 2019, Phoronix Media
Copyright (C) 2008 - 2019, Michael Larabel
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
class compare_results_to_baseline implements pts_option_interface
{
const doc_section = 'Result Management';
const doc_description = 'This option will allows you to specify a result as a baseline (first parameter) and a second result file (second parameter) that will offer some analysis for showing how the second result compares to the first in matching tests.';
public static function argument_checks()
{
return array(
new pts_argument_check(0, array('pts_types', 'is_result_file'), null),
new pts_argument_check(1, array('pts_types', 'is_result_file'), null)
);
}
public static function run($r)
{
if(count($r) != 2)
{
echo PHP_EOL . 'Two results must be specified: phoronix-test-suite compare-results-to-baseline <baseline result file> <compare result file>' . PHP_EOL;
return false;
}
$baseline = new pts_result_file($r[0]);
echo 'Baseline: ' . $baseline->get_identifier() . PHP_EOL;
if(count($baseline->get_system_identifiers()) != 1)
{
echo PHP_EOL . 'This feature requires only one system/result to be present in the result file.' . PHP_EOL;
return false;
}
$baseline->rename_run(null, 'Baseline');
$result = new pts_result_file($r[1]);
echo 'Result: ' . $result->get_identifier() . PHP_EOL;
if(count($result->get_system_identifiers()) != 1)
{
echo PHP_EOL . 'This feature requires only one system/result to be present in the result file.' . PHP_EOL;
return false;
}
$result->rename_run(null, 'Result');
$baseline->add_to_result_file($result, true);
echo pts_result_file_analyzer::display_results_baseline_two_way_compare($baseline, false, true);
}
}
?>

View File

@@ -0,0 +1,51 @@
<?php
/*
Phoronix Test Suite
URLs: http://www.phoronix.com, http://www.phoronix-test-suite.com/
Copyright (C) 2013 - 2018, Phoronix Media
Copyright (C) 2013 - 2018, Michael Larabel
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
class dry_run implements pts_option_interface
{
const doc_section = 'Batch Testing';
const doc_description = 'This option and its arguments pre-set the Phoronix Test Suite batch run mode with enforcing of defaults to not save any results and other behavior intended for a dry/test run. This option is primarily intended for testing/evaluation purposes.';
public static function argument_checks()
{
return array(
new pts_argument_check('VARIABLE_LENGTH', array('pts_types', 'identifier_to_object'), null)
);
}
public static function run($r)
{
pts_test_installer::standard_install($r);
$test_run_manager = new pts_test_run_manager(array(
'UploadResults' => false,
'SaveResults' => false,
'PromptForTestDescription' => false,
'RunAllTestCombinations' => false,
'PromptSaveName' => false,
'PromptForTestIdentifier' => false,
'OpenBrowser' => false
));
$test_run_manager->standard_run($r);
}
}
?>

View File

@@ -28,9 +28,9 @@ class dump_documentation implements pts_option_interface
$html_doc = new pts_html_template(pts_core::program_title(false), 'Test Client Documentation');
$pdf->AddPage();
$pdf->Image(PTS_CORE_STATIC_PATH . 'images/pts-308x160.png', 69, 85, 73, 38, 'PNG', 'http://www.phoronix-test-suite.com/');
$pdf->Image(PTS_CORE_STATIC_PATH . 'images/pts-308x160.png', 69, 85, 73, 38, 'PNG', 'https://www.phoronix-test-suite.com/');
$pdf->Ln(120);
$pdf->WriteStatement('www.phoronix-test-suite.com', 'C', 'http://www.phoronix-test-suite.com/');
$pdf->WriteStatement('www.phoronix-test-suite.com', 'C', 'https://www.phoronix-test-suite.com/');
$pdf->Ln(15);
$pdf->WriteBigHeaderCenter(pts_core::program_title(true));
$pdf->WriteHeaderCenter('User Manual');
@@ -250,7 +250,7 @@ class dump_documentation implements pts_option_interface
$man_page .= '.B ' . trim($option[0] . ' ' . (!empty($option[1]) && is_array($option[1]) ? implode(' ', $option[1]) : null)) . PHP_EOL . $option[2] . PHP_EOL . '.TP' . PHP_EOL;
}
}
$man_page .= '.SH SEE ALSO' . PHP_EOL . '.B Websites:' . PHP_EOL . '.br' . PHP_EOL . 'http://www.phoronix-test-suite.com/' . PHP_EOL . '.br' . PHP_EOL . 'http://commercial.phoronix-test-suite.com/' . PHP_EOL . '.br' . PHP_EOL . 'http://www.openbenchmarking.org/' . PHP_EOL . '.br' . PHP_EOL . 'http://www.phoronix.com/' . PHP_EOL . '.br' . PHP_EOL . 'http://www.phoronix.com/forums/' . PHP_EOL;
$man_page .= '.SH SEE ALSO' . PHP_EOL . '.B Websites:' . PHP_EOL . '.br' . PHP_EOL . 'https://www.phoronix-test-suite.com/' . PHP_EOL . '.br' . PHP_EOL . 'https://commercial.phoronix-test-suite.com/' . PHP_EOL . '.br' . PHP_EOL . 'https://www.openbenchmarking.org/' . PHP_EOL . '.br' . PHP_EOL . 'https://www.phoronix.com/' . PHP_EOL . '.br' . PHP_EOL . 'https://www.phoronix.com/forums/' . PHP_EOL;
$man_page .= '.SH AUTHORS' . PHP_EOL . 'Copyright 2008 - ' . date('Y') . ' by Phoronix Media, Michael Larabel.' . PHP_EOL . '.TP' . PHP_EOL;
file_put_contents(PTS_PATH . 'documentation/man-pages/phoronix-test-suite.1', $man_page);
@@ -258,7 +258,7 @@ class dump_documentation implements pts_option_interface
// simple README
$readme = '# Phoronix Test Suite ' . PTS_VERSION . PHP_EOL . 'http://www.phoronix-test-suite.com/' . PHP_EOL . PHP_EOL;
$readme = '# Phoronix Test Suite ' . PTS_VERSION . PHP_EOL . 'https://www.phoronix-test-suite.com/' . PHP_EOL . PHP_EOL;
$readme .= pts_documentation::basic_description() . PHP_EOL . PHP_EOL;
$readme .= pts_file_io::file_get_contents(PTS_PATH . 'documentation/stubs/readme-basics.txt') . PHP_EOL . PHP_EOL;
$readme = wordwrap($readme, 80, PHP_EOL);
@@ -269,12 +269,12 @@ class dump_documentation implements pts_option_interface
$html_doc = new pts_html_template(pts_core::program_title(false), 'Phoromatic Documentation');
$pdf->AddPage();
$pdf->Image(PTS_CORE_STATIC_PATH . 'images/pts-308x160.png', 69, 85, 73, 38, 'PNG', 'http://www.phoronix-test-suite.com/');
$pdf->Image(PTS_CORE_STATIC_PATH . 'images/pts-308x160.png', 69, 85, 73, 38, 'PNG', 'https://www.phoronix-test-suite.com/');
$pdf->Ln(120);
$pdf->WriteStatement('www.phoronix-test-suite.com', 'C', 'http://www.phoronix-test-suite.com/');
$pdf->WriteStatement('www.phoronix-test-suite.com', 'C', 'https://www.phoronix-test-suite.com/');
$pdf->Ln(15);
$pdf->Image(PTS_CORE_STATIC_PATH . 'images/phoromatic-390x56.png', 55, 250, 0, 0, 'PNG', 'http://www.phoronix-test-suite.com/');
//$pdf->Image(PTS_CORE_STATIC_PATH . 'images/phoromatic-390x56.png', 69, 85, 73, 38, 'PNG', 'http://www.phoromatic.com/');
$pdf->Image(PTS_CORE_STATIC_PATH . 'images/phoromatic-390x56.png', 55, 250, 0, 0, 'PNG', 'https://www.phoronix-test-suite.com/');
//$pdf->Image(PTS_CORE_STATIC_PATH . 'images/phoromatic-390x56.png', 69, 85, 73, 38, 'PNG', 'https://www.phoromatic.com/');
$pdf->WriteBigHeaderCenter(pts_core::program_title(true));
$pdf->WriteHeaderCenter('Phoromatic User Manual');
$pdf->html_to_pdf(PTS_PATH . 'documentation/phoromatic.html');

View File

@@ -175,7 +175,7 @@ class info implements pts_option_interface
// OpenBenchmarking.org Change-Log
if(stripos($o->get_identifier(), 'local/') === false)
if(stripos($o->get_identifier(), 'local/') === false && !defined('PHOROMATIC_PROCESS'))
{
$change_log = pts_openbenchmarking_client::fetch_repository_test_profile_changelog($o->get_identifier(false));
@@ -193,24 +193,27 @@ class info implements pts_option_interface
}
// Recent Test Results With This Test
$o_identifier = $o->get_identifier(false);
$table = array();
foreach(pts_client::saved_test_results() as $saved_results_identifier)
if(!defined('PHOROMATIC_PROCESS'))
{
$result_file = new pts_result_file($saved_results_identifier);
foreach($result_file->get_result_objects() as $result_object)
$o_identifier = $o->get_identifier(false);
$table = array();
foreach(pts_client::saved_test_results() as $saved_results_identifier)
{
if($result_object->test_profile->get_identifier(false) == $o_identifier)
$result_file = new pts_result_file($saved_results_identifier);
foreach($result_file->get_result_objects() as $result_object)
{
$table[] = array(pts_client::cli_just_bold($result_file->get_identifier()), $result_file->get_title());
break;
if($result_object->test_profile->get_identifier(false) == $o_identifier)
{
$table[] = array(pts_client::cli_just_bold($result_file->get_identifier()), $result_file->get_title());
break;
}
}
}
}
if(!empty($table))
{
echo PHP_EOL . pts_client::cli_just_bold('Results Containing This Test') . PHP_EOL;
echo pts_user_io::display_text_table($table);
if(!empty($table))
{
echo PHP_EOL . pts_client::cli_just_bold('Results Containing This Test') . PHP_EOL;
echo pts_user_io::display_text_table($table);
}
}
}
else if($o instanceof pts_result_file)
@@ -218,6 +221,11 @@ class info implements pts_option_interface
echo pts_client::cli_just_bold('Title: ') . $o->get_title() . PHP_EOL . pts_client::cli_just_bold('Identifier: ') . $o->get_identifier() . PHP_EOL;
echo PHP_EOL . pts_client::cli_just_bold('Test Result Identifiers:') . PHP_EOL;
echo pts_user_io::display_text_list($o->get_system_identifiers());
$system_count = count($o->get_system_identifiers());
if($system_count > 8)
{
echo pts_client::cli_just_italic($system_count . ' Systems') . PHP_EOL;
}
$test_titles = array();
foreach($o->get_result_objects() as $result_object)

View File

@@ -56,7 +56,7 @@ class make_openbenchmarking_cache implements pts_option_interface
echo $i . '/' . $total_count . ': ' . ($repo_index['tests'][$test]['title'] != null ? $repo_index['tests'][$test]['title'] . ' [' . $repo_index['tests'][$test]['test_type'] . ']' : null) . PHP_EOL;
$versions = $repo_index['tests'][$test]['versions'];
if($r[0] == 'lean')
if(isset($r[0]) && $r[0] == 'lean')
{
$versions = array(array_shift($versions));
}

View File

@@ -3,8 +3,8 @@
/*
Phoronix Test Suite
URLs: http://www.phoronix.com, http://www.phoronix-test-suite.com/
Copyright (C) 2011 - 2018, Phoronix Media
Copyright (C) 2011 - 2018, Michael Larabel
Copyright (C) 2011 - 2019, Phoronix Media
Copyright (C) 2011 - 2019, Michael Larabel
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -25,6 +25,10 @@ class openbenchmarking_changes implements pts_option_interface
const doc_section = 'OpenBenchmarking.org';
const doc_description = 'This option will list recent changes to test profiles of enabled OpenBenchmarking.org repositories.';
public static function command_aliases()
{
return array('recently_updated_tests');
}
public static function run($r)
{
pts_client::$display->generic_heading('Recently Updated OpenBenchmarking.org Tests');

View File

@@ -0,0 +1,45 @@
<?php
/*
Phoronix Test Suite
URLs: http://www.phoronix.com, http://www.phoronix-test-suite.com/
Copyright (C) 2011 - 2019, Phoronix Media
Copyright (C) 2011 - 2019, Michael Larabel
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
class recently_added_tests implements pts_option_interface
{
const doc_section = 'OpenBenchmarking.org';
const doc_description = 'This option will list the most recently added (newest) test profiles.';
public static function command_aliases()
{
return array('newest_tests');
}
public static function run($r)
{
pts_client::$display->generic_heading('Recently Added OpenBenchmarking.org Tests');
foreach(pts_openbenchmarking_client::recently_added_tests(20) as $added => $test_identifier)
{
$test_profile = new pts_test_profile($test_identifier);
echo sprintf('%-36ls - %-35ls', pts_client::cli_just_bold($test_profile->get_identifier(false)), $test_profile->get_title()) . PHP_EOL;
echo sprintf('%-36ls %-35ls', pts_client::cli_just_italic(date('d F Y', $added)), $test_profile->get_test_hardware_type() . ' Test') . PHP_EOL . PHP_EOL;
}
echo PHP_EOL;
}
}
?>

View File

@@ -0,0 +1,54 @@
<?php
/*
Phoronix Test Suite
URLs: http://www.phoronix.com, http://www.phoronix-test-suite.com/
Copyright (C) 2019, Phoronix Media
Copyright (C) 2019, Michael Larabel
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
class result_file_stats implements pts_option_interface
{
const doc_section = 'Result Management';
const doc_description = 'This option is used if you wish to analyze a result file by seeing various statistics on the result data for result files containing at least two sets of data.';
public static function command_aliases()
{
return array('winners_and_losers', 'result_stats');
}
public static function argument_checks()
{
return array(
new pts_argument_check(0, array('pts_types', 'is_result_file'), null)
);
}
public static function run($args)
{
$result_file = new pts_result_file($args[0]);
echo ' ' . pts_client::cli_colored_text($result_file->get_title(), 'gray', true) . PHP_EOL . PHP_EOL;
if($result_file->get_system_count() < 2)
{
echo PHP_EOL . 'There are not multiple test runs in this result file.' . PHP_EOL;
return false;
}
echo pts_result_file_analyzer::display_results_wins_losses($result_file);
echo pts_result_file_analyzer::display_result_file_stats_pythagorean_means($result_file);
}
}
?>

View File

@@ -34,7 +34,7 @@ class result_file_to_text implements pts_option_interface
public static function run($r)
{
$result_file = new pts_result_file($r[0]);
$result_output = pts_result_file_output::result_file_to_text($result_file, pts_client::terminal_width());
$result_output = pts_result_file_output::result_file_to_text($result_file, pts_client::terminal_width(), true);
echo $result_output;
}
}

View File

@@ -1,102 +0,0 @@
<?php
/*
Phoronix Test Suite
URLs: http://www.phoronix.com, http://www.phoronix-test-suite.com/
Copyright (C) 2017 - 2018, Phoronix Media
Copyright (C) 2017 - 2018, Michael Larabel
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
class winners_and_losers implements pts_option_interface
{
const doc_section = 'Result Management';
const doc_description = 'This option is used if you wish to analyze a result file to see which runs produced the most wins/losses of those result identifiers in the saved file.';
public static function argument_checks()
{
return array(
new pts_argument_check(0, array('pts_types', 'is_result_file'), null)
);
}
public static function run($args)
{
$result_file = new pts_result_file($args[0]);
$result_file_identifiers = $result_file->get_system_identifiers();
if(count($result_file_identifiers) < 2)
{
echo PHP_EOL . 'There are not multiple test runs in this result file.' . PHP_EOL;
return false;
}
echo pts_client::cli_colored_text($result_file->get_title(), 'gray', true) . PHP_EOL;
echo pts_client::cli_colored_text('RESULT COUNT: ', 'cyan', true) . $result_file->get_test_count() . PHP_EOL . PHP_EOL;
$winners = array();
$losers = array();
$tests_counted = 0;
foreach($result_file->get_result_objects() as $result)
{
if($result->test_result_buffer->get_count() < 2)
{
continue;
}
$tests_counted++;
$winner = $result->get_result_first();
$loser = $result->get_result_last();
if(!isset($winners[$winner]))
{
$winners[$winner] = 1;
}
else
{
$winners[$winner]++;
}
if(!isset($losers[$loser]))
{
$losers[$loser] = 1;
}
else
{
$losers[$loser]++;
}
}
arsort($winners);
arsort($losers);
echo pts_client::cli_colored_text('WINS:', 'green', true) . PHP_EOL;
$table = array();
foreach($winners as $identifier => $count)
{
$table[] = array($identifier . ': ', $count, ' [' . pts_math::set_precision($count / $tests_counted * 100, 1) . '%]');
}
echo pts_user_io::display_text_table($table) . PHP_EOL;
echo PHP_EOL . pts_client::cli_colored_text('LOSSES: ', 'red', true) . PHP_EOL;
$table = array();
foreach($losers as $identifier => $count)
{
$table[] = array($identifier . ': ', $count, ' [' . pts_math::set_precision($count / $tests_counted * 100, 1) . '%]');
}
echo pts_user_io::display_text_table($table) . PHP_EOL;
echo PHP_EOL;
}
}
?>

View File

@@ -0,0 +1,53 @@
<?php
/*
Phoronix Test Suite
URLs: http://www.phoronix.com, http://www.phoronix-test-suite.com/
Copyright (C) 2017 - 2019, Phoronix Media
Copyright (C) 2017 - 2019, Michael Larabel
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
class wins_and_losses implements pts_option_interface
{
const doc_section = 'Result Management';
const doc_description = 'This option is used if you wish to analyze a result file to see which runs produced the most wins/losses of those result identifiers in the saved file.';
public static function command_aliases()
{
return array('winners_and_losers');
}
public static function argument_checks()
{
return array(
new pts_argument_check(0, array('pts_types', 'is_result_file'), null)
);
}
public static function run($args)
{
$result_file = new pts_result_file($args[0]);
echo ' ' . pts_client::cli_colored_text($result_file->get_title(), 'gray', true) . PHP_EOL . PHP_EOL;
if($result_file->get_system_count() < 2)
{
echo PHP_EOL . 'There are not multiple test runs in this result file.' . PHP_EOL;
return false;
}
echo pts_result_file_analyzer::display_results_wins_losses($result_file);
}
}
?>

View File

@@ -123,17 +123,19 @@ class microsoft_dependency_handler implements pts_dependency_handler
foreach($files_to_download as $url)
{
$download_destination = $download_location . basename($url);
echo $url . PHP_EOL . ' - ' . $download_destination . PHP_EOL;
// echo ' ' . $url . ' - ' . $download_destination . PHP_EOL;
if(is_file($download_destination))
{
echo 'File Already Present' . PHP_EOL;
}
else
{
echo 'Downloading...' . PHP_EOL;
//echo 'Downloading...' . PHP_EOL;
$download_package = new pts_test_file_download($url);
pts_client::$display->test_install_download_file('DOWNLOAD', $download_package);
pts_network::download_file($url, $download_destination);
}
echo 'Executing...' . PHP_EOL;
//echo 'Executing...' . PHP_EOL;
shell_exec(basename($url));
}
}

View File

@@ -4,6 +4,9 @@ if [ -x /usr/bin/aptitude ]; then
# aptitude is nice since it doesn't fail if a non-existant package is hit
# See: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=503215
su -c "aptitude -y install $*"
elif [ `whoami` = "admin" ] && [ -x /usr/bin/sudo ]; then
# Amazon EC2 is admin user, sudo works
sudo apt-get -y --ignore-missing install $*
else
su -c "apt-get -y --ignore-missing install $*"
fi

View File

@@ -3,5 +3,11 @@
# Mandriva package installation
echo "Please enter your root password below:" 1>&2
su - root -c "urpmi --auto $*"
if which dnf >/dev/null 2>&1 ;
then
su - root -c "dnf -y install $*"
elif
su - root -c "urpmi --auto $*"
fi
exit

View File

@@ -9,6 +9,7 @@ elif [ `whoami` != "root" ] && [ ! -z "$DISPLAY" ]; then
elif [ -x /usr/bin/sudo ]; then
ROOT="/usr/bin/sudo"
fi
$ROOT -- su -c "apt-get -y --ignore-missing install $*"
elif [ -z "$DISPLAY" ]; then
sudo -- apt-get -y --ignore-missing install $*
else
@@ -20,6 +21,4 @@ fi
# aptitude is nice since it doesn't fail if a non-existant package is hit
# See: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=503215
# $ROOT -- "aptitude -y install $*"
#else
$ROOT -- su -c "apt-get -y --ignore-missing install $*"
#fi

View File

@@ -208,11 +208,12 @@
</Package>
<Package>
<GenericName>python</GenericName>
<PackageName>python</PackageName>
<PackageName>python python-pip</PackageName>
<FileCheck>pip3</FileCheck>
</Package>
<Package>
<GenericName>yasm</GenericName>
<PackageName>yasm</PackageName>
<PackageName>yasm nasm</PackageName>
</Package>
<Package>
<GenericName>lib3ds</GenericName>
@@ -302,5 +303,9 @@
<GenericName>mongodb</GenericName>
<PackageName>mongodb</PackageName>
</Package>
<Package>
<GenericName>node-npm</GenericName>
<PackageName>npm</PackageName>
</Package>
</ExternalDependencies>
</PhoronixTestSuite>

View File

@@ -258,5 +258,9 @@
<GenericName>mongodb</GenericName>
<PackageName>mongodb</PackageName>
</Package>
<Package>
<GenericName>node-npm</GenericName>
<PackageName>npm</PackageName>
</Package>
</ExternalDependencies>
</PhoronixTestSuite>

View File

@@ -50,8 +50,8 @@
</Package>
<Package>
<GenericName>build-utilities</GenericName>
<PackageName>autoconf automake gmake bash</PackageName>
<FileCheck>autoconf, gmake, bash</FileCheck>
<PackageName>autoconf automake gmake bash pkgconf</PackageName>
<FileCheck>autoconf, gmake, bash, pkgconf</FileCheck>
</Package>
<Package>
<GenericName>nasm</GenericName>
@@ -220,5 +220,13 @@
<GenericName>mongodb</GenericName>
<PackageName>mongodb</PackageName>
</Package>
<Package>
<GenericName>node-npm</GenericName>
<PackageName>npm</PackageName>
</Package>
<Package>
<GenericName>rust</GenericName>
<PackageName>rust</PackageName>
</Package>
</ExternalDependencies>
</PhoronixTestSuite>

View File

@@ -336,5 +336,9 @@
<GenericName>mongodb</GenericName>
<PackageName>mongodb</PackageName>
</Package>
<Package>
<GenericName>node-npm</GenericName>
<PackageName>npm</PackageName>
</Package>
</ExternalDependencies>
</PhoronixTestSuite>

View File

@@ -354,7 +354,7 @@
<GenericName>python</GenericName>
<Title>Python</Title>
<PossibleNames>python</PossibleNames>
<FileCheck>python</FileCheck>
<FileCheck>python OR python3 OR python2</FileCheck>
</Package>
<Package>
<GenericName>python-boost-development</GenericName>
@@ -524,5 +524,11 @@
<PossibleNames>mongodb</PossibleNames>
<FileCheck>mongo</FileCheck>
</Package>
<Package>
<GenericName>node-npm</GenericName>
<Title>Node.js + NPM</Title>
<PossibleNames>npm, nodejs</PossibleNames>
<FileCheck>npm</FileCheck>
</Package>
</ExternalDependencies>
</PhoronixTestSuite>

View File

@@ -188,5 +188,9 @@
<GenericName>git</GenericName>
<PackageName>git-core</PackageName>
</Package>
<Package>
<GenericName>node-npm</GenericName>
<PackageName>npm</PackageName>
</Package>
</ExternalDependencies>
</PhoronixTestSuite>

View File

@@ -4,7 +4,7 @@
<ExternalDependencies>
<Information>
<Name>Mandriva</Name>
<Aliases>Mageia, OpenMandriva</Aliases>
<Aliases>Mageia, OpenMandriva, OpenMandrivaLinux</Aliases>
<PackageManager>urpmi</PackageManager>
</Information>
<Package>
@@ -53,8 +53,8 @@
</Package>
<Package>
<GenericName>build-utilities</GenericName>
<PackageName>task-c-devel task-c++-devel</PackageName>
<FileCheck>/usr/bin/gcc, /usr/bin/bison, /usr/bin/flex</FileCheck>
<PackageName>clang automake autoconf bison flex</PackageName>
<FileCheck>/usr/bin/clang, /usr/bin/bison, /usr/bin/flex</FileCheck>
</Package>
<Package>
<GenericName>xorg-development</GenericName>
@@ -267,5 +267,9 @@
<GenericName>wine</GenericName>
<PackageName>wine</PackageName>
</Package>
<Package>
<GenericName>node-npm</GenericName>
<PackageName>npm</PackageName>
</Package>
</ExternalDependencies>
</PhoronixTestSuite>

View File

@@ -18,17 +18,17 @@
</Package>
<Package>
<GenericName>java</GenericName>
<PackageName>https://github.com/ojdkbuild/ojdkbuild/releases/download/10.0.1-1/java-10-openjdk-10.0.1-1.b10.ojdkbuild.windows.x86_64.msi</PackageName>
<PackageName>https://github.com/ojdkbuild/ojdkbuild/releases/download/11.0.1-1/java-11-openjdk-11.0.1.13-1.ojdkbuild.windows.x86_64.msi</PackageName>
<FileCheck>C:\Program Files\ojdkbuild OR C:\Program Files\Java</FileCheck>
</Package>
<Package>
<GenericName>golang</GenericName>
<PackageName>https://dl.google.com/go/go1.10.windows-amd64.msi</PackageName>
<PackageName>https://dl.google.com/go/go1.11.4.windows-amd64.msi</PackageName>
<FileCheck>C:\Go</FileCheck>
</Package>
<Package>
<GenericName>perl</GenericName>
<PackageName>http://strawberryperl.com/download/5.28.0.1/strawberry-perl-5.28.0.1-64bit.msi</PackageName>
<PackageName>http://strawberryperl.com/download/5.28.1.1/strawberry-perl-5.28.1.1-64bit.msi</PackageName>
<FileCheck>C:\Strawberry\perl\bin</FileCheck>
</Package>
<Package>
@@ -38,12 +38,12 @@
</Package>
<Package>
<GenericName>python</GenericName>
<PackageName>https://www.python.org/ftp/python/3.7.0/python-3.7.0-amd64.exe https://www.python.org/ftp/python/2.7.15/python-2.7.15.amd64.msi python2</PackageName>
<PackageName>https://www.python.org/ftp/python/3.7.1/python-3.7.1-amd64.exe https://www.python.org/ftp/python/2.7.15/python-2.7.15.amd64.msi python2 python3-pip</PackageName>
<FileCheck>C:\Python27</FileCheck>
</Package>
<Package>
<GenericName>git</GenericName>
<PackageName>https://github.com/git-for-windows/git/releases/download/v2.18.0.windows.1/Git-2.18.0-64-bit.exe</PackageName>
<PackageName>https://github.com/git-for-windows/git/releases/download/v2.20.1.windows.1/Git-2.20.1-64-bit.exe</PackageName>
<FileCheck>C:\Program Files\Git</FileCheck>
</Package>
<Package>
@@ -61,5 +61,24 @@
<PackageName>cmake</PackageName>
<FileCheck>C:\cygwin64\bin\cmake.exe</FileCheck>
</Package>
<Package>
<GenericName>node-npm</GenericName>
<PackageName>https://nodejs.org/dist/latest-v11.x/node-v11.5.0-x64.msi</PackageName>
<FileCheck>C:\Program Files\nodejs</FileCheck>
</Package>
<Package>
<GenericName>tesseract</GenericName>
<PackageName>https://digi.bib.uni-mannheim.de/tesseract/tesseract-ocr-w64-setup-v4.0.0.20181030.exe</PackageName>
<FileCheck>C:\Program Files (x86)\Tesseract-OCR</FileCheck>
</Package>
<Package>
<GenericName>rust</GenericName>
<PackageName>https://static.rust-lang.org/dist/rust-beta-x86_64-pc-windows-msvc.msi</PackageName>
<FileCheck>rustc.exe</FileCheck>
</Package>
<Package>
<GenericName>opencv</GenericName>
<PackageName>https://github.com/opencv/opencv/releases/download/3.4.3/opencv-3.4.3-vc14_vc15.exe</PackageName>
</Package>
</ExternalDependencies>
</PhoronixTestSuite>

View File

@@ -318,5 +318,9 @@
<GenericName>mongodb</GenericName>
<PackageName>mongodb</PackageName>
</Package>
<Package>
<GenericName>node-npm</GenericName>
<PackageName>nodejs</PackageName>
</Package>
</ExternalDependencies>
</PhoronixTestSuite>

View File

@@ -222,7 +222,7 @@
</Package>
<Package>
<GenericName>blas-development</GenericName>
<PackageName>libblas-dev</PackageName>
<PackageName>libblas-dev libopenblas-base libopenblas-dev</PackageName>
</Package>
<Package>
<GenericName>lapack-development</GenericName>
@@ -269,7 +269,8 @@
</Package>
<Package>
<GenericName>python</GenericName>
<PackageName>python python3-pip</PackageName>
<PackageName>python python-pip python3-pip</PackageName>
<FileCheck>pip3, python, python3</FileCheck>
</Package>
<Package>
<GenericName>python-boost-development</GenericName>
@@ -282,11 +283,11 @@
<Package>
<GenericName>python-numpy</GenericName>
<PackageName>python-numpy</PackageName>
<FileCheck>/usr/share/pyshared/numpy/version.py</FileCheck>
<FileCheck>/usr/share/pyshared/numpy/version.py OR /usr/lib/python2.7/dist-packages/numpy/version.py</FileCheck>
</Package>
<Package>
<GenericName>yasm</GenericName>
<PackageName>yasm</PackageName>
<PackageName>yasm nasm</PackageName>
</Package>
<Package>
<GenericName>gmp-library</GenericName>
@@ -386,5 +387,9 @@
<GenericName>mongodb</GenericName>
<PackageName>mongodb</PackageName>
</Package>
<Package>
<GenericName>node-npm</GenericName>
<PackageName>npm</PackageName>
</Package>
</ExternalDependencies>
</PhoronixTestSuite>

View File

@@ -50,18 +50,9 @@ class graphics_override extends pts_module_interface
shell_exec("nvidia-settings --assign " . $attribute . "=" . $value . " 2>&1");
}
}
public static function set_amd_pcsdb($attribute, $value)
{
// Sets a value for AMD's PCSDB, Persistent Configuration Store Database
if(phodevi::is_ati_graphics() && phodevi::is_linux() && !empty($value))
{
$DISPLAY = substr(pts_client::read_env("DISPLAY"), 1, 1);
$info = shell_exec("DISPLAY=:" . $DISPLAY . " aticonfig --set-pcs-val=" . $attribute . "," . $value . " 2>&1");
}
}
public static function __pre_run_process()
{
if(!(phodevi::is_nvidia_graphics() || (phodevi::is_ati_graphics() && phodevi::is_linux())))
if(!phodevi::is_nvidia_graphics())
{
echo "\nNo supported driver found for graphics_override module!\n";
return pts_module::MODULE_UNLOAD; // Not using a supported driver, quit the module
@@ -100,34 +91,6 @@ class graphics_override extends pts_module_interface
self::set_nvidia_extension("FSAAAppControlled", 0);
}
}
else if(phodevi::is_ati_graphics())
{
self::$preset_aa = phodevi_linux_parser::read_amd_pcsdb("OpenGL,AntiAliasSamples");
self::$preset_aa_control = phodevi_linux_parser::read_amd_pcsdb("OpenGL,AAF");
switch($force_aa)
{
case 2:
$ati_aa = "0x00000002";
break;
case 4:
$ati_aa = "0x00000004";
break;
case 8:
$ati_aa = "0x00000008";
break;
case 16:
echo "\nThe ATI fglrx driver currently does not support 16x AA! Defaulting to 8x AA!\n";
$ati_aa = "0x00000008";
break;
}
if(isset($ati_aa))
{
self::set_amd_pcsdb("OpenGL,AntiAliasSamples", $ati_aa);
self::set_amd_pcsdb("OpenGL,AAF", "0x00000000");
}
}
}
if($force_af !== FALSE && in_array($force_af, self::$supported_af_levels))
@@ -160,31 +123,6 @@ class graphics_override extends pts_module_interface
self::set_nvidia_extension("LogAnisoAppControlled", 0);
}
}
else if(phodevi::is_ati_graphics())
{
self::$preset_af = phodevi_linux_parser::read_amd_pcsdb("OpenGL,AnisoDegree");
switch($force_af)
{
case 2:
$ati_af = "0x00000002";
break;
case 4:
$ati_af = "0x00000004";
break;
case 8:
$ati_af = "0x00000008";
break;
case 16:
$ati_af = "0x00000010";
break;
}
if(isset($ati_af))
{
self::set_amd_pcsdb("OpenGL,AnisoDegree", $ati_af);
}
}
}
}
public static function __post_option_process()
@@ -202,18 +140,6 @@ class graphics_override extends pts_module_interface
self::set_nvidia_extension("LogAnisoAppControlled", self::$preset_af_control);
}
}
else if(phodevi::is_ati_graphics())
{
if(self::$preset_aa !== FALSE)
{
self::set_amd_pcsdb("OpenGL,AntiAliasSamples", self::$preset_aa);
self::set_amd_pcsdb("OpenGL,AAF", self::$preset_aa_control);
}
if(self::$preset_af !== FALSE)
{
self::set_amd_pcsdb("OpenGL,AnisoDegree", self::$preset_af);
}
}
}
}

View File

@@ -122,7 +122,7 @@ class perf_tips extends pts_module_interface
if(stripos($cpu_scaling_governor, 'powersave') !== false)
{
$perf_tips[] = new pts_perf_tip_msg('The powersave CPU scaling governor is currently in use. It\'s possible to obtain greater performance if using the performance governor.', 'echo performance | tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor', 'http://openbenchmarking.org/result/1706268-TR-CPUGOVERN32');
$perf_tips[] = new pts_perf_tip_msg('The powersave CPU scaling governor is currently in use. It\'s possible to obtain greater performance if using the performance governor.', 'echo performance | tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor', 'https://openbenchmarking.org/result/1706268-TR-CPUGOVERN32');
}
}

View File

@@ -3,8 +3,8 @@
/*
Phoronix Test Suite
URLs: http://www.phoronix.com, http://www.phoronix-test-suite.com/
Copyright (C) 2008 - 2017, Phoronix Media
Copyright (C) 2008 - 2017, Michael Larabel
Copyright (C) 2008 - 2019, Phoronix Media
Copyright (C) 2008 - 2019, Michael Larabel
system_monitor.php: System sensor monitoring module for PTS
This program is free software; you can redistribute it and/or modify
@@ -167,7 +167,7 @@ class system_monitor extends pts_module_interface
self::process_perf_per_watt($result_file);
}
if(self::$individual_monitoring != false)
if(self::$individual_monitoring != false && self::$successful_test_run_request)
{
foreach(self::$to_monitor as $sensor)
{
@@ -610,7 +610,7 @@ class system_monitor extends pts_module_interface
{
$test_result->test_profile->set_result_scale($test_result->test_profile->get_result_scale() . ' Per Watt');
$test_result->test_result_buffer->add_test_result(self::$result_identifier, pts_math::set_precision($test_result->active->get_result() / $watt_average));
$result_file->add_result($test_result);
$ro = $result_file->add_result_return_object($test_result);
}
else if($test_result->test_profile->get_result_proportion() == 'LIB')
{
@@ -618,7 +618,11 @@ class system_monitor extends pts_module_interface
$test_result->test_profile->set_result_proportion('HIB');
$test_result->test_profile->set_result_scale('Performance Per Watt');
$test_result->test_result_buffer->add_test_result(self::$result_identifier, pts_math::set_precision((1 / $test_result->active->get_result()) / $watt_average));
$result_file->add_result($test_result);
$ro = $result_file->add_result_return_object($test_result);
}
if($ro)
{
pts_client::$display->test_run_success_inline($ro);
}
self::$perf_per_watt_collection[] = $test_result->active->get_result();
}
@@ -631,7 +635,7 @@ class system_monitor extends pts_module_interface
if(is_array(self::$perf_per_watt_collection) && count(self::$perf_per_watt_collection) > 2)
{
// Performance per watt overall
$avg = array_sum(self::$perf_per_watt_collection) / count(self::$perf_per_watt_collection);
$avg = pts_math::geometric_mean(self::$perf_per_watt_collection);
$test_profile = new pts_test_profile();
$test_result = new pts_test_result($test_profile);
$test_result->test_profile->set_test_title('Meta Performance Per Watt');
@@ -644,7 +648,7 @@ class system_monitor extends pts_module_interface
$test_result->set_used_arguments_description('Performance Per Watt');
$test_result->set_used_arguments('Per-Per-Watt');
$test_result->test_result_buffer = new pts_test_result_buffer();
$test_result->test_result_buffer->add_test_result(self::$result_identifier, pts_math::set_precision($avg));
$test_result->test_result_buffer->add_test_result(self::$result_identifier, pts_math::set_precision($avg, 4));
$test_run_manager->result_file->add_result($test_result);
}
}
@@ -706,7 +710,11 @@ class system_monitor extends pts_module_interface
$test_result->set_used_arguments_description($arguments_try_description);
}
$result_file->add_result($test_result);
$ro = $result_file->add_result_return_object($test_result);
if($ro)
{
pts_client::$display->test_run_success_inline($ro);
}
}
private static function prepare_per_try_results(&$sensor, &$result_buffer)
{
@@ -749,7 +757,11 @@ class system_monitor extends pts_module_interface
$test_result->set_used_arguments(phodevi::sensor_object_identifier($sensor));
$test_result->test_result_buffer = new pts_test_result_buffer();
$test_result->test_result_buffer->add_test_result(self::$result_identifier, implode(',', $sensor_results), implode(',', $sensor_results), implode(',', $sensor_results), implode(',', $sensor_results));
$test_run_manager->result_file->add_result($test_result);
$ro = $test_run_manager->result_file->add_result_return_object($test_result);
if($ro)
{
pts_client::$display->test_run_success_inline($ro);
}
}
}

View File

@@ -3,8 +3,8 @@
/*
Phoronix Test Suite
URLs: http://www.phoronix.com, http://www.phoronix-test-suite.com/
Copyright (C) 2009 - 2018, Phoronix Media
Copyright (C) 2009 - 2018, Michael Larabel
Copyright (C) 2009 - 2019, Phoronix Media
Copyright (C) 2009 - 2019, Michael Larabel
pts_concise_display_mode.php: The batch / concise display mode
This program is free software; you can redistribute it and/or modify
@@ -41,6 +41,7 @@ class pts_concise_display_mode implements pts_display_mode_interface
private $expected_trial_run_count = 0;
private $trial_run_count_current = 0;
private $current_saved_test_identifier = null;
private $current_test = null;
public function __construct()
{
@@ -309,6 +310,7 @@ class pts_concise_display_mode implements pts_display_mode_interface
public function test_run_start(&$test_run_manager, &$test_result)
{
$this->current_saved_test_identifier = $test_run_manager->get_results_identifier();
$this->current_test = $test_result->test_profile->get_identifier();
$test_title_string = $test_result->test_profile->get_title() . ($test_result->test_profile->get_app_version() != null ? ' ' . $test_result->test_profile->get_app_version() : null) . ':' . PHP_EOL . $this->tab . $test_result->test_profile->get_identifier();
if(($test_description = $test_result->get_arguments_description()) != false)
@@ -325,6 +327,12 @@ class pts_concise_display_mode implements pts_display_mode_interface
$estimated_length = $test_result->test_profile->get_estimated_run_time();
$display_table = array();
if($test_result->test_profile->get_status() != 'Verified' && $test_result->test_profile->get_status() != '')
{
array_push($display_table, array($this->tab . 'Test Profile Status:', pts_client::cli_just_italic($test_result->test_profile->get_status())));
}
array_push($display_table, array($this->tab . 'Estimated Trial Run Count:', $this->expected_trial_run_count));
if($estimated_length > 1 && $estimated_length != $remaining_length)
@@ -491,10 +499,15 @@ class pts_concise_display_mode implements pts_display_mode_interface
}
public function test_run_success_inline($test_result_orig)
{
if($test_result_orig->test_result_buffer->get_count() < 2)
{
return;
}
$test_result = clone $test_result_orig;
$test_result->sort_results_by_performance();
$test_result->test_result_buffer->buffer_values_reverse();
echo pts_result_file_output::test_result_to_text($test_result, pts_client::terminal_width(), true, $this->current_saved_test_identifier);
echo pts_result_file_output::test_result_to_text($test_result, pts_client::terminal_width(), true, $this->current_saved_test_identifier, ($test_result->test_profile->get_identifier() == null || $this->current_test != $test_result->test_profile->get_identifier()));
echo PHP_EOL;
}
public function test_run_error($error_string)

View File

@@ -268,6 +268,7 @@ class pts_client
'PTS_LAUNCHER' => getenv('PTS_LAUNCHER'),
'PHP_BIN' => PHP_BIN,
'NUM_CPU_CORES' => phodevi::read_property('cpu', 'core-count'),
'NUM_CPU_PHYSICAL_CORES' => phodevi::read_property('cpu', 'physical-core-count'),
'NUM_CPU_NODES' => phodevi::read_property('cpu', 'node-count'),
'NUM_CPU_JOBS' => (phodevi::read_property('cpu', 'core-count') * 2),
'SYS_MEMORY' => phodevi::read_property('memory', 'capacity'),
@@ -283,6 +284,7 @@ class pts_client
'OS_TYPE' => phodevi::os_under_test(),
'THIS_RUN_TIME' => PTS_INIT_TIME,
'DEBUG_REAL_HOME' => pts_core::user_home_directory(),
'DEBUG_PATH' => pts_client::get_path(),
'SYSTEM_TYPE_ID' => phodevi_base::determine_system_type(phodevi::system_hardware(), phodevi::system_software()),
'SYSTEM_TYPE' => phodevi_base::system_type_to_string(phodevi_base::determine_system_type(phodevi::system_hardware(), phodevi::system_software())),
'TERMINAL_WIDTH' => pts_client::terminal_width(),
@@ -377,6 +379,12 @@ class pts_client
return $supported;
}
public static function hex_color_to_string($hex)
{
$colors = array();
list($colors['red'], $colors['green'], $colors['blue']) = sscanf($hex, "#%02x%02x%02x");
return array_search(max($colors), $colors);
}
public static function cli_colored_text($str, $color, $bold = false)
{
if(!self::supports_colored_text_output() || empty($color))
@@ -389,10 +397,12 @@ class pts_client
'black' => $attribute . ';30',
'gray' => '1;30', // gray not bold doesn't look good in all consoles
'blue' => $attribute . ';34',
'magenta' => $attribute . ';35',
'green' => $attribute . ';32',
'yellow' => $attribute . ';33',
'red' => $attribute . ';31',
'cyan' => $attribute . ';36',
'white' => $attribute . ';37',
);
if(!isset($colors[$color]))
@@ -944,7 +954,7 @@ class pts_client
if($prompt_in_method == false || $usage_reporting == -1)
{
pts_client::$display->generic_heading('User Agreement');
echo wordwrap($user_agreement, 65);
echo wordwrap($user_agreement, (pts_client::terminal_width() - 2));
$agree = pts_user_io::prompt_bool_input('Do you agree to these terms and wish to proceed', -1);
$usage_reporting = $agree ? pts_user_io::prompt_bool_input('Enable anonymous usage / statistics reporting', -1) : -1;
@@ -1723,6 +1733,10 @@ class pts_client
}
return $path;
}
public static function get_path_separator()
{
return phodevi::is_windows() ? ';' : ':';
}
public static function executable_in_path($executable, $ignore_paths_with = false)
{
static $cache = null;
@@ -1730,7 +1744,7 @@ class pts_client
if(!isset($cache[$executable]) || empty($cache[$executable]) || $ignore_paths_with)
{
$path = pts_client::get_path();
$paths = pts_strings::trim_explode((phodevi::is_windows() ? ';' : ':'), $path);
$paths = pts_strings::trim_explode(pts_client::get_path_separator(), $path);
$executable_path = false;
foreach($paths as $path)

View File

@@ -3,8 +3,8 @@
/*
Phoronix Test Suite
URLs: http://www.phoronix.com, http://www.phoronix-test-suite.com/
Copyright (C) 2008 - 2018, Phoronix Media
Copyright (C) 2008 - 2018, Michael Larabel
Copyright (C) 2008 - 2019, Phoronix Media
Copyright (C) 2008 - 2019, Michael Larabel
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -118,6 +118,7 @@ class pts_config
$config->addXmlNodeFromReader('PhoronixTestSuite/Options/Testing/ResultsDirectory', $read_config);
$config->addXmlNodeFromReader('PhoronixTestSuite/Options/Testing/AlwaysUploadResultsToOpenBenchmarking', $read_config);
$config->addXmlNodeFromReader('PhoronixTestSuite/Options/Testing/AutoSortRunQueue', $read_config);
$config->addXmlNodeFromReader('PhoronixTestSuite/Options/Testing/ShowPostRunStatistics', $read_config);
$config->addXmlNodeFromReader('PhoronixTestSuite/Options/TestResultValidation/DynamicRunCount', $read_config);
$config->addXmlNodeFromReader('PhoronixTestSuite/Options/TestResultValidation/LimitDynamicToTestLength', $read_config);

View File

@@ -134,7 +134,7 @@ class pts_documentation
}
public static function basic_description()
{
return 'The **Phoronix Test Suite** is the most comprehensive testing and benchmarking platform available for Linux, Solaris, OS X, and BSD operating systems. The Phoronix Test Suite allows for carrying out tests in a fully automated manner from test installation to execution and reporting. All tests are meant to be easily reproducible, easy-to-use, and support fully automated execution. The Phoronix Test Suite is open-source under the GNU GPLv3 license and is developed by Phoronix Media in cooperation with partners.';
return 'The **Phoronix Test Suite** is the most comprehensive testing and benchmarking platform available for Linux, Solaris, macOS, Windows, and BSD operating systems. The Phoronix Test Suite allows for carrying out tests in a fully automated manner from test installation to execution and reporting. All tests are meant to be easily reproducible, easy-to-use, and support fully automated execution. The Phoronix Test Suite is open-source under the GNU GPLv3 license and is developed by Phoronix Media in cooperation with partners.';
}
}

View File

@@ -443,7 +443,7 @@ class pts_external_dependencies
if(substr($file[$i], -2) == '.h' || substr($file[$i], -4) == '.hpp')
{
// May just be a relative header file to look for...
$possible_paths = array('/usr/local/include/', '/usr/target/include/', '/usr/include/', '/usr/include/x86_64-linux-gnu/');
$possible_paths = array('/usr/local/include/', '/usr/target/include/', '/usr/include/', '/usr/include/x86_64-linux-gnu/', '/usr/include/powerpc64le-linux-gnu/');
foreach($possible_paths as $path)
{
if(is_file($path . $file[$i]) || is_link($path . $file[$i]))
@@ -455,7 +455,7 @@ class pts_external_dependencies
else if(strpos($file[$i], '.so') !== false || substr($file[$i], -2) == '.a')
{
// May just be a relative shared library to look for...
$possible_paths = array('/usr/local/lib/', '/usr/lib/', '/usr/lib64/', '/usr/lib/x86_64-linux-gnu/', '/usr/lib/i386-linux-gnu/', '/usr/lib/arm-linux-gnueabihf/');
$possible_paths = array('/usr/local/lib/', '/usr/lib/', '/usr/lib64/', '/usr/lib/x86_64-linux-gnu/', '/usr/lib/i386-linux-gnu/', '/usr/lib/arm-linux-gnueabihf/', '/usr/lib/powerpc64le-linux-gnu/');
if(getenv('LD_LIBRARY_PATH'))
{
@@ -494,7 +494,7 @@ class pts_external_dependencies
$pkg_vendor = self::vendor_identifier('package-list');
// Rebuild the array index since some OS package XML tags provide multiple package names in a single string
$os_packages_to_install = explode(' ', implode(' ', $os_packages_to_install));
$os_packages_to_install = array_unique(explode(' ', implode(' ', $os_packages_to_install)));
if(is_file($vendor_install_file))
{

View File

@@ -244,6 +244,39 @@ class pts_openbenchmarking_client
return $available_tests;
}
public static function recently_added_tests($limit = -1)
{
$available_tests = array();
foreach(pts_openbenchmarking::linked_repositories() as $repo)
{
$repo_index = pts_openbenchmarking::read_repository_index($repo);
if(isset($repo_index['tests']) && is_array($repo_index['tests']))
{
foreach(array_keys($repo_index['tests']) as $identifier)
{
if($repo_index['tests'][$identifier]['title'] == null)
{
continue;
}
$version = array_shift($repo_index['tests'][$identifier]['versions']);
$add_time = $repo_index['tests'][$identifier]['first_added'];
$available_tests[$add_time] = $repo . '/' . $identifier . '-' . $version;
}
}
}
krsort($available_tests);
if($limit > 0)
{
$available_tests = array_slice($available_tests, 0, $limit, true);
}
return $available_tests;
}
public static function popular_tests($limit = -1, $test_type = null)
{
$available_tests = array();

View File

@@ -787,9 +787,14 @@ class pts_test_execution
{
if($generated_result_count >= 1)
{
// No reason to have more than one identifier
// TODO XXX may want to rethink this behavior, we'll see...
// Prior to PTS 8.6, secondary result graphs wouldn't have their test profile identifier set but would be null
// With PTS 8.6+, the identifier is now preserved... Except with below logic for preserving compatibility with older result files, only clear the identifier if comparing against an old result file having a match for no identifier set
$ti_backup = $test_result->test_profile->get_identifier();
$test_result->test_profile->set_identifier('');
if(!$test_run_manager->result_file->result_hash_exists($test_result))
{
$test_result->test_profile->set_identifier($ti_backup);
}
}
$test_result->test_result_buffer = new pts_test_result_buffer();

View File

@@ -894,7 +894,7 @@ class pts_test_installer
$identifier = $test_install_request->test_profile->get_identifier();
pts_file_io::mkdir($test_install_request->test_profile->get_install_dir());
if($remove_old_files)
if($remove_old_files && $test_install_request->test_profile->do_remove_test_install_directory_on_reinstall())
{
// Remove any (old) files that were installed
$ignore_files = array('pts-install.xml', 'install-failed.log');

View File

@@ -3,8 +3,8 @@
/*
Phoronix Test Suite
URLs: http://www.phoronix.com, http://www.phoronix-test-suite.com/
Copyright (C) 2009 - 2018, Phoronix Media
Copyright (C) 2009 - 2018, Michael Larabel
Copyright (C) 2009 - 2019, Phoronix Media
Copyright (C) 2009 - 2019, Michael Larabel
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -31,6 +31,7 @@ class pts_test_run_manager
protected $last_test_run_index = 0;
protected $test_run_pos = 0;
protected $test_run_count = 0;
protected $loop_run_pos = 1;
protected $file_name = null;
protected $file_name_title = null;
@@ -555,7 +556,7 @@ class pts_test_run_manager
}
public function get_test_run_position()
{
return $this->test_run_pos + 1;
return ($this->get_test_count() * ($this->loop_run_pos - 1)) + $this->test_run_pos + 1;
}
public function get_test_run_count_reported()
{
@@ -589,6 +590,7 @@ class pts_test_run_manager
for($loop = 1; $loop <= $total_loop_count && $continue_test_flag; $loop++)
{
$this->loop_run_pos = $loop;
for($i = 0; $i < $tests_to_run_count && $continue_test_flag; $i++)
{
$this->test_run_pos = $i;
@@ -663,7 +665,7 @@ class pts_test_run_manager
echo PHP_EOL . PHP_EOL . 'The following tests failed to properly run:' . PHP_EOL . PHP_EOL;
foreach($this->failed_tests_to_run as &$run_request)
{
echo "\t- " . $run_request->test_profile->get_identifier() . ($run_request->get_arguments_description() != null ? ': ' . $run_request->get_arguments_description() : null) . PHP_EOL;
echo ' - ' . $run_request->test_profile->get_identifier() . ($run_request->get_arguments_description() != null ? ': ' . $run_request->get_arguments_description() : null) . PHP_EOL;
}
echo PHP_EOL;
}
@@ -1020,6 +1022,29 @@ class pts_test_run_manager
pts_module_manager::module_process('__event_results_saved', $this);
//echo PHP_EOL . 'Results Saved To: ; . PTS_SAVE_RESULTS_PATH . $this->get_file_name() . ;/composite.xml' . PHP_EOL;
if($this->result_file->get_test_count() > 4 && pts_config::read_bool_config('PhoronixTestSuite/Options/Testing/ShowPostRunStatistics', 'TRUE'))
{
if($this->result_file->get_system_count() == 2)
{
$highlights = pts_result_file_analyzer::display_results_baseline_two_way_compare($this->result_file, true, false, true, ' ');
if($highlights)
{
echo ' ' . pts_client::cli_just_bold('Result Highlights') . PHP_EOL;
echo $highlights . PHP_EOL;
}
}
if($this->result_file->get_system_count() > 2)
{
// Display winners and losers
echo pts_result_file_analyzer::display_results_wins_losses($this->result_file, $this->get_results_identifier(), ' ') . PHP_EOL;
}
if($this->result_file->get_system_count() > 1)
{
echo pts_result_file_analyzer::display_result_file_stats_pythagorean_means($this->result_file, $this->get_results_identifier());
}
}
if(!$this->auto_mode)
{
if($this->batch_mode)
@@ -1487,6 +1512,10 @@ class pts_test_run_manager
{
list($test_arguments, $test_arguments_description) = pts_test_run_options::batch_user_options($test_profile);
}
else if($this->batch_mode && (pts_client::read_env('PRESET_OPTIONS') || pts_client::read_env('PRESET_OPTIONS_VALUES')))
{
list($test_arguments, $test_arguments_description) = pts_test_run_options::prompt_user_options($test_profile, null, true);
}
else if($this->auto_mode == 2)
{
list($test_arguments, $test_arguments_description) = pts_test_run_options::default_user_options($test_profile);

View File

@@ -193,7 +193,7 @@ class pts_tests
if(is_dir($this_test_profile->get_install_dir()))
{
$extra_vars['PATH'] = $this_test_profile->get_install_dir() . ':' . $extra_vars['PATH'];
$extra_vars['PATH'] = $this_test_profile->get_install_dir() . pts_client::get_path_separator() . $extra_vars['PATH'];
$extra_vars['TEST_' . strtoupper(str_replace('-', '_', $this_test_profile->get_identifier_base_name()))] = $this_test_profile->get_install_dir();
}
}
@@ -207,7 +207,7 @@ class pts_tests
if(isset($extra_vars_append['PATH']))
{
// Special case variable where you likely want the two merged rather than overwriting
$extra_vars['PATH'] = $extra_vars_append['PATH'] . (substr($extra_vars_append['PATH'], -1) != ':' ? ':' : null) . $extra_vars['PATH'];
$extra_vars['PATH'] = $extra_vars_append['PATH'] . (substr($extra_vars_append['PATH'], -1) != pts_client::get_path_separator() ? pts_client::get_path_separator() : null) . $extra_vars['PATH'];
unset($extra_vars_append['PATH']);
}
@@ -411,7 +411,6 @@ class pts_tests
echo PHP_EOL;
}
}
echo PHP_EOL;
}
}

View File

@@ -86,14 +86,20 @@ class phodevi_cpu extends phodevi_device_interface
{
$info = null;
if(getenv('PTS_NPROC') && is_numeric(getenv('PTS_NPROC')))
if(($n = getenv('NUM_CPU_CORES')) && is_numeric($n) && $n > 0)
{
$info = getenv('PTS_NPROC');
// NUM_CPU_CORES can be used for overriding the number of exposed cores/threads to tests, matches the name of the env var set by PTS to test scripts
$info = $n;
}
else if(getenv('NUMBER_OF_PROCESSORS') && is_numeric(getenv('NUMBER_OF_PROCESSORS')))
else if(($n = getenv('PTS_NPROC')) && is_numeric($n) && $n > 0)
{
// PTS_NPROC can be used for overriding the number of exposed cores/threads to tests
$info = $n;
}
else if(($n = getenv('NUMBER_OF_PROCESSORS')) && is_numeric($n) && $n > 0)
{
// Should be used by Windows they have NUMBER_OF_PROCESSORS set and use this as an easy way to override CPUs exposed
$info = getenv('NUMBER_OF_PROCESSORS');
$info = $n;
}
else if(phodevi::is_linux())
{
@@ -154,11 +160,52 @@ class phodevi_cpu extends phodevi_device_interface
if(phodevi::is_linux())
{
$physical_cores = phodevi_cpu::cpuinfo_core_count();
if(empty($physical_cores) || $physical_cores == phodevi::read_property('cpu', 'thread-count'))
{
// Needed for POWER9 at least
if(isset(phodevi::$vfs->lscpu) && ($t = strpos(phodevi::$vfs->lscpu, 'Core(s) per socket:')))
{
$lscpu = substr(phodevi::$vfs->lscpu, $t + strlen('Core(s) per socket:') + 1);
$lscpu = substr($lscpu, 0, strpos($lscpu, PHP_EOL));
$cores_per_socket = trim($lscpu);
if($cores_per_socket > 1 && ($t = strpos(phodevi::$vfs->lscpu, 'Socket(s):')))
{
$lscpu = substr(phodevi::$vfs->lscpu, $t + strlen('Socket(s):') + 1);
$lscpu = substr($lscpu, 0, strpos($lscpu, PHP_EOL));
$sockets = trim($lscpu);
if(is_numeric($sockets) && $sockets >= 1)
{
$physical_cores = $cores_per_socket * $sockets;
}
}
}
}
}
else if(phodevi::is_bsd())
{
// hw.cpu_topology_core_ids works at least on DragonFly BSD
$physical_cores = intval(phodevi_bsd_parser::read_sysctl(array('hw.cpu_topology_core_ids')));
$ht_ids = intval(phodevi_bsd_parser::read_sysctl(array('hw.cpu_topology_ht_ids')));
if($ht_ids == 2)
{
$info = intval(phodevi_bsd_parser::read_sysctl(array('hw.ncpu')));
if($info > 1)
{
$physical_cores = $info / 2;
}
}
else
{
$phys_ids = intval(phodevi_bsd_parser::read_sysctl(array('hw.cpu_topology_phys_ids')));
$physical_cores = intval(phodevi_bsd_parser::read_sysctl(array('hw.cpu_topology_core_ids')));
if($phys_ids > 0 && ($phys_ids * $physical_cores) <= phodevi::read_property('cpu', 'thread-count') && $physical_cores % 2 == 0)
{
$physical_cores = $phys_ids * $physical_cores;
}
}
}
else if(phodevi::is_macosx())
{
@@ -210,6 +257,16 @@ class phodevi_cpu extends phodevi_device_interface
if(phodevi::is_linux())
{
$cache_size = self::cpuinfo_cache_size();
if(empty($cache_size) && isset(phodevi::$vfs->lscpu) && ($t = strpos(phodevi::$vfs->lscpu, 'L3 cache:')))
{
$lscpu = substr(phodevi::$vfs->lscpu, $t + strlen('L3 cache:') + 1);
$lscpu = substr($lscpu, 0, strpos($lscpu, PHP_EOL));
$lscpu = trim($lscpu);
if(substr($lscpu, -1) == 'K')
{
$cache_size = substr($lscpu, 0, -1);
}
}
}
else if(phodevi::is_macosx())
{
@@ -290,8 +347,10 @@ class phodevi_cpu extends phodevi_device_interface
$info = null;
}
}
if($info == null && isset(phodevi::$vfs->cpuinfo)) // fall back for those without cpufreq
if($info == null && isset(phodevi::$vfs->cpuinfo) && phodevi::read_property('system', 'kernel-architecture') != 'x86_64') // fall back for those without cpufreq
{
// Don't use this code path for x86_64 since for those systems the /sys reporting should work
// and when that isn't the case, CPUFreq not loaded and thus reported here is usually dynamic frequency
$cpu_mhz = self::read_cpuinfo_line('cpu MHz');
$info = $cpu_mhz / 1000;
@@ -486,7 +545,7 @@ class phodevi_cpu extends phodevi_device_interface
if(phodevi::is_linux())
{
$implementer = phodevi_linux_parser::read_cpuinfo_single('CPU implementer');
if($implementer == '0x41')
if($implementer == '0x41' || $implementer == '0x50')
{
$architecture = phodevi_linux_parser::read_cpuinfo_single('CPU architecture');
switch($architecture)
@@ -496,7 +555,7 @@ class phodevi_cpu extends phodevi_device_interface
break;
case '8':
case 'AArch64':
$info = 'ARMVv8';
$info = 'ARMv8';
break;
}
$part = phodevi_linux_parser::read_cpuinfo_single('CPU part');
@@ -550,7 +609,12 @@ class phodevi_cpu extends phodevi_device_interface
}
}
if(strpos(phodevi::$vfs->dmesg, 'thunderx') !== false)
if(strpos(phodevi::$vfs->dmesg, 'Ampere eMAG') !== false)
{
// Haven't found a better way to detect Ampere eMAG as not exposed via cpuinfo, etc
$info = 'Ampere eMAG ' . $info;
}
else if(strpos(phodevi::$vfs->dmesg, 'thunderx') !== false)
{
// Haven't found a better way to detect ThunderX as not exposed via cpuinfo, etc
$info = 'Cavium ThunderX ' . $info;

View File

@@ -3,8 +3,8 @@
/*
Phoronix Test Suite
URLs: http://www.phoronix.com, http://www.phoronix-test-suite.com/
Copyright (C) 2008 - 2018, Phoronix Media
Copyright (C) 2008 - 2018, Michael Larabel
Copyright (C) 2008 - 2019, Phoronix Media
Copyright (C) 2008 - 2019, Michael Larabel
phodevi_disk.php: The PTS Device Interface object for the system disk(s)
This program is free software; you can redistribute it and/or modify
@@ -143,7 +143,7 @@ class phodevi_disk extends phodevi_device_interface
{
$disk = phodevi_bsd_parser::read_sysctl('dev.ad.' . $i . '.%desc');
if($disk != false && strpos($disk, 'DVD') === false && strpos($disk, 'ATAPI') === false)
if($disk != false && strpos($disk, 'DVD') === false && $disk != false && strpos($disk, ' Console') === false && strpos($disk, 'ATAPI') === false)
{
array_push($disks, $disk);
}
@@ -155,7 +155,7 @@ class phodevi_disk extends phodevi_device_interface
{
$disk = phodevi_bsd_parser::read_sysctl('dev.nvme.' . $i . '.%desc');
if($disk != false && strpos($disk, 'DVD') === false && strpos($disk, 'ATAPI') === false)
if($disk != false && strpos($disk, 'DVD') === false && $disk != false && strpos($disk, ' Console') === false && strpos($disk, 'ATAPI') === false)
{
array_push($disks, $disk);
}
@@ -170,7 +170,7 @@ class phodevi_disk extends phodevi_device_interface
foreach(explode(PHP_EOL, $camcontrol) as $line)
{
if(substr($line, 0, 1) == '<' && ($model_end = strpos($line, '>')) !== false && strpos($line, 'DVD') === false && strpos($line, 'ATAPI') === false)
if(substr($line, 0, 1) == '<' && ($model_end = strpos($line, '>')) !== false && strpos($line, 'DVD') === false && strpos($line, 'ATAPI') === false && strpos($line, ' Console') === false)
{
$disk = self::prepend_disk_vendor(substr($line, 1, ($model_end - 1)));
$disk = trim(str_replace(array('SATA'), null, $disk));
@@ -203,10 +203,9 @@ class phodevi_disk extends phodevi_device_interface
}
else if(phodevi::is_linux())
{
$disks_formatted = array();
$disks = array();
foreach(array_merge(pts_file_io::glob('/sys/block/sd*'), pts_file_io::glob('/sys/block/mmcblk*'), pts_file_io::glob('/sys/block/nvme*'), pts_file_io::glob('/sys/block/vd*')) as $sdx)
foreach(array_merge(pts_file_io::glob('/sys/block/nvme*'), pts_file_io::glob('/sys/block/sd*'), pts_file_io::glob('/sys/block/mmcblk*'), pts_file_io::glob('/sys/block/vd*')) as $sdx)
{
if(strpos($sdx, 'boot') !== false)
{
@@ -238,30 +237,10 @@ class phodevi_disk extends phodevi_device_interface
if($disk_size > 0)
{
array_push($disks_formatted, $disk_model);
array_push($disks, $disk_model);
}
}
}
for($i = 0; $i < count($disks_formatted); $i++)
{
if(!empty($disks_formatted[$i]))
{
$times_found = 1;
for($j = ($i + 1); $j < count($disks_formatted); $j++)
{
if($disks_formatted[$i] == $disks_formatted[$j])
{
$times_found++;
$disks_formatted[$j] = '';
}
}
$disk = ($times_found > 1 ? $times_found . ' x ' : null) . $disks_formatted[$i];
array_push($disks, $disk);
}
}
}
else if(phodevi::is_windows())
{
@@ -296,7 +275,7 @@ class phodevi_disk extends phodevi_device_interface
}
else
{
$disks = implode(' + ', $disks);
$disks = pts_arrays::array_to_cleansed_item_string($disks);
}
return $disks;

View File

@@ -148,77 +148,6 @@ class phodevi_gpu extends phodevi_device_interface
break;
}
}
else if(phodevi::is_ati_graphics() && phodevi::is_linux())
{
$ati_fsaa = phodevi_linux_parser::read_amd_pcsdb('OpenGL,AntiAliasSamples');
$ati_fsaa_filter = phodevi_linux_parser::read_amd_pcsdb('OpenGL,AAF');
if(!empty($ati_fsaa))
{
if($ati_fsaa_filter == '0x00000000')
{
// Filter: Box
switch($ati_fsaa)
{
case '0x00000002':
$aa_level = '2x Box';
break;
case '0x00000004':
$aa_level = '4x Box';
break;
case '0x00000008':
$aa_level = '8x Box';
break;
}
}
else if($ati_fsaa_filter == '0x00000001')
{
// Filter: Narrow-tent
switch($ati_fsaa)
{
case '0x00000002':
$aa_level = '4x Narrow-tent';
break;
case '0x00000004':
$aa_level = '8x Narrow-tent';
break;
case '0x00000008':
$aa_level = '12x Narrow-tent';
break;
}
}
else if($ati_fsaa_filter == '0x00000002')
{
// Filter: Wide-tent
switch($ati_fsaa)
{
case '0x00000002':
$aa_level = '6x Wide-tent';
break;
case '0x00000004':
$aa_level = '8x Wide-tent';
break;
case '0x00000008':
$aa_level = '16x Wide-tent';
break;
}
}
else if($ati_fsaa_filter == '0x00000003')
{
// Filter: Edge-detect
switch($ati_fsaa)
{
case '0x00000004':
$aa_level = '12x Edge-detect';
break;
case '0x00000008':
$aa_level = '24x Edge-detect';
break;
}
}
}
}
else if(phodevi::is_mesa_graphics())
{
$gallium_msaa = getenv('GALLIUM_MSAA');
@@ -264,29 +193,6 @@ class phodevi_gpu extends phodevi_device_interface
break;
}
}
else if(phodevi::is_ati_graphics() && phodevi::is_linux())
{
$ati_af = phodevi_linux_parser::read_amd_pcsdb('OpenGL,AnisoDegree');
if(!empty($ati_af))
{
switch($ati_af)
{
case '0x00000002':
$af_level = '2x';
break;
case '0x00000004':
$af_level = '4x';
break;
case '0x00000008':
$af_level = '8x';
break;
case '0x00000010':
$af_level = '16x';
break;
}
}
}
else if(getenv('__GL_LOG_MAX_ANISO'))
{
$max_aniso = getenv('__GL_LOG_MAX_ANISO');
@@ -549,18 +455,13 @@ class phodevi_gpu extends phodevi_device_interface
}
}
if(count($available_modes) <= 2)
if(true) // XXX can remove this if it turns out to be fine
{
// Fallback to providing stock modes
$stock_modes = array(
array(800, 600),
array(1024, 768),
array(1280, 800),
array(1280, 1024),
array(1400, 900),
array(1400, 1050),
array(1600, 900),
array(1680, 1050),
array(1600, 1200),
array(1920, 1080),
array(1920, 1200),
@@ -854,15 +755,6 @@ class phodevi_gpu extends phodevi_device_interface
$mem_freq = max($mem_freq, $clock_freqs_current[1]);
}
}
else if(phodevi::is_ati_graphics() && phodevi::is_linux()) // ATI GPU
{
$od_clocks = phodevi_linux_parser::read_ati_overdrive('CurrentPeak');
if(is_array($od_clocks) && count($od_clocks) >= 2) // ATI OverDrive
{
list($core_freq, $mem_freq) = $od_clocks;
}
}
else if(phodevi::is_linux()) // More liberally attempt open-source freq detection than phodevi::is_mesa_graphics()
{
if(is_file('/sys/class/drm/card0/device/performance_level'))
@@ -1007,6 +899,37 @@ class phodevi_gpu extends phodevi_device_interface
}
}
}
if($core_freq == null && is_file('/sys/class/drm/card0/device/pp_dpm_sclk'))
{
$pp = trim(file_get_contents('/sys/class/drm/card0/device/pp_dpm_sclk'));
$pp = explode("\n", $pp);
$pp = array_pop($pp);
if(($x = strpos($pp, ': ')) !== false)
{
$pp = substr($pp, $x + 2);
}
$pp = trim(str_replace(array('*', 'Mhz'), '', $pp));
if(is_numeric($pp))
{
$core_freq = $pp;
if(is_file('/sys/class/drm/card0/device/pp_dpm_mclk'))
{
$pp = trim(file_get_contents('/sys/class/drm/card0/device/pp_dpm_mclk'));
$pp = explode("\n", $pp);
$pp = array_pop($pp);
if(($x = strpos($pp, ': ')) !== false)
{
$pp = substr($pp, $x + 2);
}
$pp = trim(str_replace(array('*', 'Mhz'), '', $pp));
if(is_numeric($pp))
{
$mem_freq = $pp;
}
}
}
}
if($core_freq == null && isset(phodevi::$vfs->dmesg) && strrpos(phodevi::$vfs->dmesg, ' sclk:'))
{
// Attempt to read the LAST power level reported to dmesg, this is the current way for Radeon DPM on Linux 3.11+
@@ -1112,51 +1035,7 @@ class phodevi_gpu extends phodevi_device_interface
$info = phodevi_parser::read_glx_renderer();
$video_ram = phodevi::read_property('gpu', 'memory-capacity');
if(phodevi::is_ati_graphics() && phodevi::is_linux())
{
$crossfire_status = phodevi_linux_parser::read_amd_pcsdb('SYSTEM/Crossfire/chain/*,Enable');
$crossfire_status = pts_arrays::to_array($crossfire_status);
$crossfire_card_count = 0;
for($i = 0; $i < count($crossfire_status); $i++)
{
if($crossfire_status[$i] == '0x00000001')
{
$crossfire_card_count += 2; // For now assume each chain is 2 cards, but proper way would be NumSlaves + 1
}
}
$adapters = phodevi_linux_parser::read_amd_graphics_adapters();
if(count($adapters) > 0)
{
$video_ram = $video_ram > 64 ? ' ' . $video_ram . 'MB' : null; // assume more than 64MB of vRAM
if($crossfire_card_count > 1 && $crossfire_card_count <= count($adapters))
{
$unique_adapters = array_unique($adapters);
if(count($unique_adapters) == 1)
{
if(strpos($adapters[0], 'X2') > 0 && $crossfire_card_count > 1)
{
$crossfire_card_count -= 1;
}
$info = $crossfire_card_count . ' x ' . $adapters[0] . $video_ram . ' CrossFire';
}
else
{
$info = implode(', ', $unique_adapters) . ' CrossFire';
}
}
else
{
$info = $adapters[0] . $video_ram;
}
}
}
else if(phodevi::is_macosx())
if(phodevi::is_macosx())
{
$system_profiler_info = implode(' + ', phodevi_osx_parser::read_osx_system_profiler('SPDisplaysDataType', 'ChipsetModel', true));
@@ -1279,7 +1158,7 @@ class phodevi_gpu extends phodevi_device_interface
$info = str_replace('(TM)', null, implode(' + ', $windows_gpu));
}
if(empty($info) || strpos($info, 'Mesa ') !== false || strpos($info, 'Gallium ') !== false || strpos($info, ' (DRM') !== false)
if(empty($info) || strpos($info, 'Mesa ') !== false || strpos($info, 'Gallium ') !== false || strpos($info, 'DRM ') !== false)
{
if(($x = strpos($info, ' on ')) !== false)
{
@@ -1459,7 +1338,7 @@ class phodevi_gpu extends phodevi_device_interface
}
}
if(stripos($info, 'NVIDIA') === false && (stripos($info, 'Quadro') !== false || stripos($info, 'GeForce') !== false))
if(stripos($info, 'NVIDIA') === false && (stripos($info, 'Quadro') !== false || stripos($info, 'Titan ') !== false || stripos($info, ' Tesla') !== false || stripos($info, 'GeForce') !== false || substr($info, 0, 2) == 'NV'))
{
$info = 'NVIDIA' . ' ' . $info;
}
@@ -1479,7 +1358,18 @@ class phodevi_gpu extends phodevi_device_interface
if(!empty($info) && $video_ram > 64 && strpos($info, $video_ram) == false) // assume more than 64MB of vRAM
{
$info .= ' ' . $video_ram . 'MB';
if($video_ram < 1024)
{
$info .= ' ' . $video_ram . 'MB';
}
else
{
$video_ram = round($video_ram / 1024) . 'GB';
if(strpos($info, $video_ram) == false)
{
$info .= ' ' . $video_ram;
}
}
}
if(empty($info) && is_dir('/sys/class/drm/card0/device/driver/pvrsrvkm'))

View File

@@ -245,7 +245,7 @@ class phodevi_memory extends phodevi_device_interface
}
}
return trim($mem_string);
return trim(str_replace('Unknown ', '', $mem_string));
}
public static function memory_capacity()
{

View File

@@ -3,8 +3,8 @@
/*
Phoronix Test Suite
URLs: http://www.phoronix.com, http://www.phoronix-test-suite.com/
Copyright (C) 2008 - 2018, Phoronix Media
Copyright (C) 2008 - 2018, Michael Larabel
Copyright (C) 2008 - 2019, Phoronix Media
Copyright (C) 2008 - 2019, Michael Larabel
phodevi_monitor.php: The PTS Device Interface object for the display monitor
This program is free software; you can redistribute it and/or modify
@@ -77,7 +77,7 @@ class phodevi_monitor extends phodevi_device_interface
// but fglrx/catalyst as of late 2013 is in habit of reporting monitors twice
$monitor = array_unique($monitor);
$monitor = implode(' + ', $monitor);
$monitor = pts_arrays::array_to_cleansed_item_string($monitor);
}
else if(isset(phodevi::$vfs->xorg_log))
{
@@ -100,7 +100,7 @@ class phodevi_monitor extends phodevi_device_interface
// but fglrx/catalyst as of late 2013 is in habit of reporting monitors twice
$monitor = array_unique($monitor);
$monitor = implode(' + ', $monitor);
$monitor = pts_arrays::array_to_cleansed_item_string($monitor);
}
if($monitor == null && phodevi::is_linux())
@@ -201,19 +201,6 @@ class phodevi_monitor extends phodevi_device_interface
break;
}
}
else if(phodevi::is_ati_graphics() && phodevi::is_linux())
{
$amdpcsdb_enabled_monitors = phodevi_linux_parser::read_amd_pcsdb('SYSTEM/BUSID-*/DDX,EnableMonitor');
$amdpcsdb_enabled_monitors = pts_arrays::to_array($amdpcsdb_enabled_monitors);
foreach($amdpcsdb_enabled_monitors as $enabled_monitor)
{
foreach(pts_strings::comma_explode($enabled_monitor) as $monitor_connection)
{
$monitor_count++;
}
}
}
else
{
$monitor_count = 1;
@@ -251,35 +238,6 @@ class phodevi_monitor extends phodevi_device_interface
array_push($monitor_layout, ($hit_0_0 ? 'LOWER' : 'UPPER'));
}
}
if(count($monitor_layout) == 1)
{
// Something went wrong with xdpy information, go to fallback support
if(phodevi::is_ati_graphics() && phodevi::is_linux())
{
$amdpcsdb_monitor_layout = phodevi_linux_parser::read_amd_pcsdb('SYSTEM/BUSID-*/DDX,DesktopSetup');
$amdpcsdb_monitor_layout = pts_arrays::to_array($amdpcsdb_monitor_layout);
foreach($amdpcsdb_monitor_layout as $card_monitor_configuration)
{
switch($card_monitor_configuration)
{
case 'horizontal':
array_push($monitor_layout, 'RIGHT');
break;
case 'horizontal,reverse':
array_push($monitor_layout, 'LEFT');
break;
case 'vertical':
array_push($monitor_layout, 'ABOVE');
break;
case 'vertical,reverse':
array_push($monitor_layout, 'BELOW');
break;
}
}
}
}
}
return implode(',', $monitor_layout);

View File

@@ -3,8 +3,8 @@
/*
Phoronix Test Suite
URLs: http://www.phoronix.com, http://www.phoronix-test-suite.com/
Copyright (C) 2016 - 2018, Phoronix Media
Copyright (C) 2016 - 2018, Michael Larabel
Copyright (C) 2016 - 2019, Phoronix Media
Copyright (C) 2016 - 2019, Michael Larabel
phodevi_network.php: The PTS Device Interface object for network devices
This program is free software; you can redistribute it and/or modify
@@ -63,18 +63,15 @@ class phodevi_network extends phodevi_device_interface
}
else if(phodevi::is_linux())
{
foreach(array('Ethernet controller', 'Network controller') as $controller)
{
$pci = phodevi_linux_parser::read_pci($controller);
$pci = phodevi_linux_parser::read_pci_multi(array('Ethernet controller', 'Network controller'));
if(!empty($pci))
{
array_push($network, $pci);
}
if(!empty($pci))
{
$network = $pci;
}
}
return implode(' + ', $network);
return pts_arrays::array_to_cleansed_item_string($network);
}
}

View File

@@ -3,8 +3,8 @@
/*
Phoronix Test Suite
URLs: http://www.phoronix.com, http://www.phoronix-test-suite.com/
Copyright (C) 2008 - 2018, Phoronix Media
Copyright (C) 2008 - 2018, Michael Larabel
Copyright (C) 2008 - 2019, Phoronix Media
Copyright (C) 2008 - 2019, Michael Larabel
phodevi_system.php: The PTS Device Interface object for the system software
This program is free software; you can redistribute it and/or modify
@@ -91,6 +91,15 @@ class phodevi_system extends phodevi_device_interface
$layer = phodevi::read_property('system', 'virtualized-mode');
}
if(empty($layer) && is_file('/proc/version'))
{
if(stripos(file_get_contents('/proc/version'), 'Microsoft') !== false && stripos(file_get_contents('/proc/mounts'), 'lxfs') !== false)
{
// Microsoft Windows Subsystem for Linux
$layer = 'WSL';
}
}
return $layer;
}
public static function sw_hostname()
@@ -344,7 +353,7 @@ class phodevi_system extends phodevi_device_interface
{
// TODO could use better detection to verify if C: or the desired disk under test... but most of the time will be NTFS anyways
$fs = trim(shell_exec('powershell "(Get-Volume)[1].FileSystemType"'));
if(empty($fs) || $fs == 'Unknown')
if(empty($fs) || $fs == 'Unknown' || $fs == 'FAT32')
{
$fs = trim(shell_exec('powershell "(Get-Volume)[0].FileSystemType"'));
}
@@ -585,7 +594,7 @@ class phodevi_system extends phodevi_device_interface
}
// DragonFlyBSD
if(($spectre = phodevi_bsd_parser::read_sysctl('machdep.spectre_mitigation')) != '0' && !empty($spectre))
if(($spectre = phodevi_bsd_parser::read_sysctl('machdep.spectre_mitigation')) != '0' && $spectre != 'NONE' && !empty($spectre))
{
$security[] = 'Spectre ' . $spectre . ' Mitigation';
}
@@ -1187,7 +1196,7 @@ class phodevi_system extends phodevi_device_interface
}
}
}
else if(stripos($vendor, $version) === false)
else if($version != null && stripos($vendor, $version) === false)
{
$os = $vendor . ' ' . $version;
}
@@ -1344,7 +1353,10 @@ class phodevi_system extends phodevi_device_interface
//$version = substr($lx_output, strpos($lx_output, ' ') + 1);
$desktop_environment = 'LXQt';
//$desktop_version = $version;
if(pts_client::executable_in_path('lxqt-about'))
{
$desktop_version = pts_strings::last_in_string(trim(shell_exec('lxqt-about --version | grep liblxqt 2> /dev/null')));
}
}
else if(pts_client::is_process_running('lxsession') || $desktop_session == 'lxde')
{
@@ -1483,21 +1495,23 @@ class phodevi_system extends phodevi_device_interface
if($pos === false || getenv('DISPLAY') == false)
{
$info = null;
$version = null;
}
else if(($pos = strrpos($info, '(')) === false)
else if(($pos = strrpos($info, '(')) === false && strrpos($info, 'Server') === false)
{
$info = trim(substr($info, strrpos($info, ' ')));
$version = trim(substr($info, strrpos($info, ' ')));
}
else
{
$info = trim(substr($info, strrpos($info, 'Server') + 6));
$version = trim(substr($info, strrpos($info, 'Server') + 6));
if(!pts_strings::is_version($version))
{
$version = null;
}
}
if($info != null)
{
array_push($display_servers, 'X Server ' . $info);
}
array_push($display_servers, trim('X Server ' . $version));
}
if(pts_client::is_process_running('surfaceflinger'))
{
@@ -1543,11 +1557,7 @@ class phodevi_system extends phodevi_device_interface
if(empty($display_driver))
{
if(phodevi::is_ati_graphics() && phodevi::is_linux())
{
$display_driver = 'fglrx';
}
else if(phodevi::is_nvidia_graphics() || is_file('/proc/driver/nvidia/version'))
if(phodevi::is_nvidia_graphics() || is_file('/proc/driver/nvidia/version'))
{
$display_driver = 'nvidia';
}
@@ -1675,18 +1685,6 @@ class phodevi_system extends phodevi_device_interface
if(!empty($driver_version) && $with_version && $driver_version != '0.0.0')
{
$display_driver .= ' ' . $driver_version;
// XXX: The below check is disabled since the Catalyst Version no longer seems reliably reported (circa Catalyst 13.x)
if(false && phodevi::is_ati_graphics() && strpos($display_driver, 'fglrx') !== false)
{
$catalyst_version = phodevi_linux_parser::read_amd_pcsdb('AMDPCSROOT/SYSTEM/LDC,Catalyst_Version');
if($catalyst_version != null && $catalyst_version > 10.1 && $catalyst_version != 10.5 && $catalyst_version != 11.8)
{
// This option was introduced around Catalyst 10.5 but seems to not be updated properly until Catalyst 10.11/10.12
$display_driver .= ' Catalyst ' . $catalyst_version . '';
}
}
}
}
@@ -1746,6 +1744,16 @@ class phodevi_system extends phodevi_device_interface
$info = substr(phodevi::$vfs->vulkaninfo, $pos + 20);
$info = trim(substr($info, 0, strpos($info, "\n")));
}
else if(($pos = strpos(phodevi::$vfs->vulkaninfo, 'apiVersion')) !== false)
{
$apiv = substr(phodevi::$vfs->vulkaninfo, $pos);
$apiv = trim(substr($apiv, 0, strpos($apiv, ")\n")));
$apiv = trim(substr($apiv, strpos($apiv, '(') + 1));
if(pts_strings::is_version($apiv))
{
$info = $apiv;
}
}
}
/*
if($info == null)

View File

@@ -3,8 +3,8 @@
/*
Phoronix Test Suite
URLs: http://www.phoronix.com, http://www.phoronix-test-suite.com/
Copyright (C) 2008 - 2017, Phoronix Media
Copyright (C) 2008 - 2017, Michael Larabel
Copyright (C) 2008 - 2019, Phoronix Media
Copyright (C) 2008 - 2019, Michael Larabel
phodevi_linux_parser.php: General parsing functions specific to Linux
This program is free software; you can redistribute it and/or modify
@@ -264,239 +264,6 @@ class phodevi_linux_parser
return $dmi;
}
public static function read_ati_overdrive($attribute, $adapter = 0)
{
// Read ATI OverDrive information
// OverDrive supported in fglrx 8.52+ drivers
$value = false;
if(($amdconfig = self::find_amdconfig()))
{
if($attribute == 'Temperature')
{
$info = shell_exec($amdconfig . ' --adapter=' . $adapter . ' --od-gettemperature 2>&1');
if(($start = strpos($info, 'Temperature -')) !== false)
{
$info = substr($info, $start + 14);
$value = substr($info, 0, strpos($info, ' C'));
}
}
else if($attribute == 'FanSpeed')
{
// Right now there is no standardized interface to get the fan speed through besides the pplib command
$info = shell_exec($amdconfig . ' --adapter=' . $adapter . ' --pplib-cmd \'get fanspeed 0\' 2>&1');
if(($start = strpos($info, 'Fan Speed:')) !== false)
{
$info = substr($info, $start + 11);
$info = substr($info, 0, strpos($info, '%'));
if(is_numeric($info))
{
$value = $info;
}
}
}
else
{
$info = shell_exec($amdconfig . ' --adapter=' . $adapter . ' --od-getclocks 2>&1');
if(strpos($info, 'GPU') !== false)
{
foreach(explode("\n", $info) as $line)
{
$line_r = pts_strings::colon_explode($line);
if(count($line_r) == 2)
{
$od_option = str_replace(' ', null, $line_r[0]);
if($od_option == $attribute)
{
$od_value = pts_strings::trim_spaces($line_r[1]);
$od_value = str_replace(array('%'), null, $od_value);
$od_value_r = explode(' ', $od_value);
$value = (count($od_value_r) == 1 ? $od_value_r[0] : $od_value_r);
}
}
}
}
}
}
return $value;
}
public static function read_amd_pcsdb($attribute)
{
// Read AMD's AMDPCSDB, AMD Persistent Configuration Store Database
static $try_aticonfig = true;
static $is_first_read = true;
$ati_info = null;
if($try_aticonfig)
{
if(($amdconfig = self::find_amdconfig()))
{
$info = shell_exec($amdconfig . ' --get-pcs-key=' . $attribute . ' 2>&1');
if($is_first_read && strpos($info, 'No supported adapters') != false)
{
$try_aticonfig = false;
}
else
{
if(($pos = strpos($info, ':')) > 0 && strpos($info, 'Error') === false)
{
$ati_info = substr($info, $pos + 2);
$ati_info = substr($ati_info, 0, strpos($ati_info, ' '));
}
}
}
else
{
$try_aticonfig = false;
}
$is_first_read = false;
}
if($ati_info == null && is_file('/etc/ati/amdpcsdb'))
{
// Using aticonfig --get-pcs-key failed, switch to the PTS direct parser of AMDPCSDB
$ati_info = phodevi_linux_parser::read_amd_pcsdb_direct_parser($attribute);
}
return $ati_info;
}
public static function read_amd_pcsdb_direct_parser($attribute, $find_once = false)
{
// Read AMD's AMDPCSDB, AMD Persistent Configuration Store Database but using our own internal parser instead of relying upon aticonfig/amdconfig
$amdpcsdb_file = null;
$last_found_section_count = -1;
$this_section_count = 0;
$attribute_values = array();
$attribute = pts_strings::comma_explode($attribute);
if(count($attribute) == 2)
{
$attribute_prefix = array_reverse(explode('/', $attribute[0]));
$attribute_key = $attribute[1];
$is_in_prefix = false;
if(is_file('/etc/ati/amdpcsdb'))
{
$amdpcsdb_file = explode("\n", file_get_contents('/etc/ati/amdpcsdb'));
}
for($l = 0; $l < count($amdpcsdb_file) && ($find_once == false || $last_found_section_count == -1); $l++)
{
$line = trim($amdpcsdb_file[$l]);
if(substr($line, 0, 1) == '[' && substr($line, -1) == ']')
{
// AMDPCSDB Header
$prefix_matches = true;
$header = array_reverse(explode('/', substr($line, 1, -1)));
for($i = 0; $i < count($attribute_prefix) && $i < count($header) && $prefix_matches; $i++)
{
if($attribute_prefix[$i] != $header[$i] && pts_strings::proximity_match($attribute_prefix[$i], $header[$i]) == false)
{
$prefix_matches = false;
}
}
if($prefix_matches)
{
$is_in_prefix = true;
$this_section_count++;
}
else
{
$is_in_prefix = false;
}
}
else if($is_in_prefix && $this_section_count != $last_found_section_count && count(($key_components = explode('=', $line))) == 2)
{
// AMDPCSDB Value
if($key_components[0] == $attribute_key)
{
$value_type = substr($key_components[1], 0, 1);
$value = substr($key_components[1], 1);
switch($value_type)
{
case 'V':
// Value
if(is_numeric($value) && strlen($value) < 9)
{
$value = dechex($value);
$value = '0x' . str_repeat(0, 8 - strlen($value)) . strtoupper($value);
}
break;
case 'R':
// Raw
break;
case 'S':
// String
break;
}
array_push($attribute_values, $value);
$last_found_section_count = $this_section_count;
}
}
}
}
if(count($attribute_values) == 0)
{
$attribute_values = null;
}
else if(count($attribute_values) == 1)
{
$attribute_values = $attribute_values[0];
}
return $attribute_values;
}
public static function find_amdconfig()
{
$amdconfig = false;
if(($t = pts_client::executable_in_path('aticonfig')))
{
$amdconfig = $t;
}
else if(($t = pts_client::executable_in_path('amdconfig')))
{
$amdconfig = $t;
}
return $amdconfig;
}
public static function read_amd_graphics_adapters()
{
// Read ATI/AMD graphics hardware using aticonfig
$adapters = array();
if(($amdconfig = self::find_amdconfig()))
{
$info = trim(shell_exec($amdconfig . ' --list-adapters 2>&1'));
foreach(explode("\n", $info) as $line)
{
if(($last_point = strrpos($line, '.')) > 0)
{
array_push($adapters, substr($line, $last_point + 3));
}
}
}
return $adapters;
}
public static function read_cpuinfo($attribute, $cpuinfo = false)
{
// Read CPU information
@@ -705,7 +472,7 @@ class phodevi_linux_parser
if(($pos = strpos($pci_info, $desc[$i])) !== false)
{
$sub_pci_info = str_replace(array('[AMD]', '[AMD/ATI]'), null, substr($pci_info, $pos + strlen($desc[$i])));
$sub_pci_info = str_replace(array('[AMD]', '[AMD/ATI]', ' Limited'), null, substr($pci_info, $pos + strlen($desc[$i])));
$EOL = strpos($sub_pci_info, "\n");
if($clean_string)
@@ -740,6 +507,76 @@ class phodevi_linux_parser
return $info;
}
public static function read_pci_multi($desc, $clean_string = true)
{
// Read PCI bus information
static $pci_info = null;
$info = array();
$desc = pts_arrays::to_array($desc);
if($pci_info == null)
{
if(!is_executable('/usr/bin/lspci') && is_executable('/sbin/lspci'))
{
$lspci_cmd = '/sbin/lspci';
}
else if(($lspci = pts_client::executable_in_path('lspci')))
{
$lspci_cmd = $lspci;
}
else
{
return false;
}
$pci_info = shell_exec($lspci_cmd . ' 2> /dev/null');
}
for($i = 0; $i < count($desc); $i++)
{
if(substr($desc[$i], -1) != ':')
{
$desc[$i] .= ':';
}
$pos = 0;
while(($pos = strpos($pci_info, $desc[$i], $pos)) !== false)
{
$pos += strlen($desc[$i]);
$sub_pci_info = str_replace(array('[AMD]', '[AMD/ATI]', ' Limited', ' Connection', ' Gigabit', ' Wireless', '(1)', '(2)', '(3)', '(4)', '(5)', '(6)', '(7)', '(8)', '(9)'), null, substr($pci_info, $pos));
$EOL = strpos($sub_pci_info, "\n");
if($clean_string)
{
if(($temp = strpos($sub_pci_info, '/')) < $EOL && $temp > 0)
{
if(($temp = strpos($sub_pci_info, ' ', ($temp + 2))) < $EOL && $temp > 0)
{
$EOL = $temp;
}
}
if(($temp = strpos($sub_pci_info, '(')) < $EOL && $temp > 0)
{
$EOL = $temp;
}
if(($temp = strpos($sub_pci_info, '[')) < $EOL && $temp > 0)
{
$EOL = $temp;
}
}
$sub_pci_info = trim(substr($sub_pci_info, 0, $EOL));
if(($strlen = strlen($sub_pci_info)) >= 6 && $strlen < 128)
{
$info[] = pts_strings::strip_string($sub_pci_info);
}
}
}
return $info;
}
public static function read_sensors($attributes)
{
// Read LM_Sensors

View File

@@ -3,8 +3,8 @@
/*
Phoronix Test Suite
URLs: http://www.phoronix.com, http://www.phoronix-test-suite.com/
Copyright (C) 2009 - 2018, Phoronix Media
Copyright (C) 2009 - 2018, Michael Larabel
Copyright (C) 2009 - 2019, Phoronix Media
Copyright (C) 2009 - 2019, Michael Larabel
phodevi.php: The object for interacting with the PTS device framework
This program is free software; you can redistribute it and/or modify
@@ -370,23 +370,49 @@ class phodevi extends phodevi_base
{
if(!empty($value))
{
$tabled[] = array(pts_client::cli_just_bold($key) . ':' . str_repeat(' ', (16 - strlen($key))), $value);
//$sys_string .= ' ' . strtoupper($key) . ':' . $value . PHP_EOL;
if(isset($value[64]) && strpos($value, ' + ') !== false)
{
$values = explode(' + ', $value);
$tabled[] = array(pts_client::cli_just_bold($key) . ':' . str_repeat(' ', (16 - strlen($key))), array_shift($values));
foreach($values as $value)
{
$tabled[] = array(pts_client::cli_just_bold(' '), '+ ' . $value);
}
}
else
{
$tabled[] = array(pts_client::cli_just_bold($key) . ':' . str_repeat(' ', (16 - strlen($key))), $value);
//$sys_string .= ' ' . strtoupper($key) . ':' . $value . PHP_EOL;
}
}
}
}
else if(true || !empty($in)) // TODO this check not needed anymore?
{
if(($x = strpos($in, ' (')))
{
$in = substr($in, 0, $x);
}
if(($x = strpos($in, ' (')))
{
$in = substr($in, 0, $x);
}
if(!empty($tabled))
{
$sys_string .= pts_user_io::display_text_table($tabled, ' ', 0, 17) . PHP_EOL;
}
$sys_string .= PHP_EOL . ' ' . pts_client::cli_colored_text(strtoupper($key), 'gray', true) . ': ' . str_repeat(' ', (18 - strlen($key))) . pts_client::cli_colored_text($in, 'green', true) . PHP_EOL;
if(isset($in[80]) && strpos($in, ' + ') !== false)
{
$values = explode(' + ', $in);
$sys_string .= PHP_EOL . ' ' . pts_client::cli_colored_text(strtoupper($key), 'gray', true) . ': ' . str_repeat(' ', (18 - strlen($key))) . pts_client::cli_colored_text(array_shift($values), 'green', true);
foreach($values as $value)
{
$sys_string .= PHP_EOL . str_repeat(' ', 22) . pts_client::cli_colored_text('+ ' . $value, 'green', true);
}
$sys_string .= PHP_EOL;
}
else
{
$sys_string .= PHP_EOL . ' ' . pts_client::cli_colored_text(strtoupper($key), 'gray', true) . ': ' . str_repeat(' ', (18 - strlen($key))) . pts_client::cli_colored_text($in, 'green', true) . PHP_EOL;
}
}
}
@@ -572,7 +598,7 @@ class phodevi extends phodevi_base
}
// OpenGL / graphics detection
$graphics_detection = array('NVIDIA', array('ATI', 'AMD', 'fglrx'), array('Mesa', 'SGI'));
$graphics_detection = array('NVIDIA', array('Mesa', 'SGI'), array('AMD'));
$opengl_driver = phodevi::read_property('system', 'opengl-vendor') . ' ' . phodevi::read_property('system', 'opengl-driver') . ' ' . phodevi::read_property('system', 'dri-display-driver');
$opengl_driver = trim(str_replace('Corporation', null, $opengl_driver)); // Prevents a possible false positive for ATI being in CorporATIon
@@ -831,12 +857,6 @@ class phodevi extends phodevi_base
self::detect_graphics();
return self::$graphics['mesa'];
}
public static function is_ati_graphics()
{
// Detection for fglrx / old AMD blob driver, newer AMDGPU-PRO / AMDGPU should go to is_mesa_graphics
self::detect_graphics();
return self::$graphics['ati'] && pts_client::executable_in_path('amdcccle');;
}
public static function is_nvidia_graphics()
{
self::detect_graphics();
@@ -844,7 +864,7 @@ class phodevi extends phodevi_base
}
public static function is_root()
{
return phodevi::read_property('system', 'username') == 'root';
return phodevi::read_property('system', 'username') == 'root' || is_writable('/root');
}
public static function is_display_server_active()
{

View File

@@ -38,9 +38,10 @@ class gpu_fanspeed extends phodevi_sensor
// nvidia-settings --describe GPUFanTarget
$fan_speed = phodevi_parser::read_nvidia_extension('[fan:0]/GPUCurrentFanSpeed');
}
else if(phodevi::is_ati_graphics() && phodevi::is_linux())
else if($fan1_input = phodevi_linux_parser::read_sysfs_node('/sys/class/drm/card0/device/hwmon/hwmon*/fan1_input', 'POSITIVE_NUMERIC'))
{
$fan_speed = phodevi_linux_parser::read_ati_overdrive('FanSpeed');
// AMDGPU path
$fan_speed = round($fan1_input / phodevi_linux_parser::read_sysfs_node('/sys/class/drm/card0/device/hwmon/hwmon*/fan1_max', 'POSITIVE_NUMERIC') * 100, 2);
}
return $fan_speed;

View File

@@ -3,8 +3,8 @@
/*
Phoronix Test Suite
URLs: http://www.phoronix.com, http://www.phoronix-test-suite.com/
Copyright (C) 2009 - 2015, Phoronix Media
Copyright (C) 2009 - 2015, Michael Larabel
Copyright (C) 2009 - 2018, Phoronix Media
Copyright (C) 2009 - 2018, Michael Larabel
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -42,19 +42,39 @@ class gpu_freq extends phodevi_sensor
$core_freq = isset($nv_freq[0]) ? $nv_freq[0] : 0;
$mem_freq = isset($nv_freq[1]) ? $nv_freq[1] : 0;
}
else if(phodevi::is_ati_graphics() && phodevi::is_linux()) // ATI GPU
{
$od_clocks = phodevi_linux_parser::read_ati_overdrive('CurrentClocks');
if(is_array($od_clocks) && count($od_clocks) >= 2) // ATI OverDrive
{
$core_freq = array_shift($od_clocks);
$mem_freq = array_pop($od_clocks);
}
}
else if(phodevi::is_linux())
{
if(isset(phodevi::$vfs->radeon_pm_info))
if(is_readable('/sys/class/drm/card0/device/pp_dpm_sclk'))
{
$pp = PHP_EOL . file_get_contents('/sys/class/drm/card0/device/pp_dpm_sclk');
$pp = substr($pp, 0, strpos($pp, '*'));
$pp = substr($pp, strrpos($pp, PHP_EOL));
if(($x = strpos($pp, ': ')) !== false)
{
$pp = substr($pp, $x + 2);
}
$pp = trim(str_replace(array('*', 'Mhz'), '', $pp));
if(is_numeric($pp))
{
$core_freq = $pp;
if(is_readable('/sys/class/drm/card0/device/pp_dpm_mclk'))
{
$pp = PHP_EOL . file_get_contents('/sys/class/drm/card0/device/pp_dpm_mclk');
$pp = substr($pp, 0, strpos($pp, '*'));
$pp = substr($pp, strrpos($pp, PHP_EOL));
if(($x = strpos($pp, ': ')) !== false)
{
$pp = substr($pp, $x + 2);
}
$pp = trim(str_replace(array('*', 'Mhz'), '', $pp));
if(is_numeric($pp))
{
$mem_freq = $pp;
}
}
}
}
else if(isset(phodevi::$vfs->radeon_pm_info))
{
// radeon_pm_info should be present with Linux 2.6.34+
foreach(pts_strings::trim_explode("\n", phodevi::$vfs->radeon_pm_info) as $pm_line)

View File

@@ -3,8 +3,8 @@
/*
Phoronix Test Suite
URLs: http://www.phoronix.com, http://www.phoronix-test-suite.com/
Copyright (C) 2009 - 2017, Phoronix Media
Copyright (C) 2009 - 2017, Michael Larabel
Copyright (C) 2009 - 2018, Phoronix Media
Copyright (C) 2009 - 2018, Michael Larabel
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -72,6 +72,19 @@ class gpu_power extends phodevi_sensor
}
}
}
else if($power1_average = phodevi_linux_parser::read_sysfs_node('/sys/class/drm/card0/device/hwmon/hwmon*/power1_average', 'POSITIVE_NUMERIC'))
{
// AMDGPU path
if(is_numeric($power1_average))
{
$power1_average = $power1_average / 1000000;
if($power1_average > 10 && $power1_average < 600)
{
self::$unit = 'Watts';
$gpu_power = $power1_average;
}
}
}
else if(is_readable('/sys/bus/i2c/drivers/ina3221x/0-0040/iio:device0/in_power0_input'))
{
$in_power0_input = pts_file_io::file_get_contents('/sys/bus/i2c/drivers/ina3221x/0-0040/iio:device0/in_power0_input');

View File

@@ -35,10 +35,6 @@ class gpu_temp extends phodevi_sensor
{
$temp_c = phodevi_parser::read_nvidia_extension('GPUCoreTemp');
}
else if(phodevi::is_ati_graphics() && phodevi::is_linux())
{
$temp_c = phodevi_linux_parser::read_ati_overdrive('Temperature');
}
if($temp_c == -1 || empty($temp_c))
{

View File

@@ -3,8 +3,8 @@
/*
Phoronix Test Suite
URLs: http://www.phoronix.com, http://www.phoronix-test-suite.com/
Copyright (C) 2009 - 2015, Phoronix Media
Copyright (C) 2009 - 2015, Michael Larabel
Copyright (C) 2009 - 2018, Phoronix Media
Copyright (C) 2009 - 2018, Michael Larabel
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -28,7 +28,6 @@ class gpu_usage extends phodevi_sensor
const SENSOR_SENSES = 'usage';
const SENSOR_UNIT = 'Percent';
private $probe_ati_overdrive = false;
private $probe_radeontop = false;
private $probe_nvidia_smi = false;
private $probe_nvidia_settings = false;
@@ -50,11 +49,7 @@ class gpu_usage extends phodevi_sensor
{
$gpu_usage = -1;
if($this->probe_ati_overdrive)
{
$gpu_usage = self::ati_overdrive_core_usage();
}
else if($this->probe_nvidia_settings)
if($this->probe_nvidia_settings)
{
$gpu_usage = self::read_nvidia_settings_gpu_utilization();
}
@@ -66,17 +61,17 @@ class gpu_usage extends phodevi_sensor
{
$gpu_usage = self::radeontop_gpu_usage();
}
else if(is_file('/sys/class/drm/card0/device/gpu_busy_percent'))
{
$gpu_usage = pts_file_io::file_get_contents('/sys/class/drm/card0/device/gpu_busy_percent');
}
return $gpu_usage;
}
private function set_probe_mode()
{
if(phodevi::is_ati_graphics() && phodevi::is_linux())
{
$this->probe_ati_overdrive = true;
}
else if(phodevi::is_mesa_graphics() && pts_client::executable_in_path('radeontop'))
if(phodevi::is_mesa_graphics() && pts_client::executable_in_path('radeontop'))
{
$this->probe_radeontop = true;
}
@@ -119,12 +114,6 @@ class gpu_usage extends phodevi_sensor
return false;
}
private static function ati_overdrive_core_usage()
{
return phodevi_linux_parser::read_ati_overdrive('GPUload');
}
private static function nvidia_core_usage()
{
$nvidia_smi = shell_exec(escapeshellarg(pts_client::executable_in_path('nvidia-smi')) . ' -a');

View File

@@ -3,8 +3,8 @@
/*
Phoronix Test Suite
URLs: http://www.phoronix.com, http://www.phoronix-test-suite.com/
Copyright (C) 2009 - 2015, Phoronix Media
Copyright (C) 2009 - 2015, Michael Larabel
Copyright (C) 2009 - 2018, Phoronix Media
Copyright (C) 2009 - 2018, Michael Larabel
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -31,7 +31,23 @@ class gpu_voltage extends phodevi_sensor
$sensor = -1;
// TODO XXX: Nouveau driver exposes GPU voltage on at least some cards via performance_level
if(isset(phodevi::$vfs->radeon_pm_info))
if(is_file('/sys/class/drm/card0/device/hwmon/hwmon1/in0_label') && pts_file_io::file_get_contents('/sys/class/drm/card0/device/hwmon/hwmon1/in0_label') == 'vddgfx' && is_file('/sys/class/drm/card0/device/hwmon/hwmon1/in0_input'))
{
$sensor = pts_file_io::file_get_contents('/sys/class/drm/card0/device/hwmon/hwmon1/in0_input');
if(!is_numeric($sensor))
{
$sensor = -1;
}
}
else if(is_file('/sys/class/drm/card0/device/hwmon/hwmon0/in0_label') && pts_file_io::file_get_contents('/sys/class/drm/card0/device/hwmon/hwmon0/in0_label') == 'vddgfx' && is_file('/sys/class/drm/card0/device/hwmon/hwmon0/in0_input'))
{
$sensor = pts_file_io::file_get_contents('/sys/class/drm/card0/device/hwmon/hwmon0/in0_input');
if(!is_numeric($sensor))
{
$sensor = -1;
}
}
else if(isset(phodevi::$vfs->radeon_pm_info))
{
// For Radeon power management it should be exposed on a line like:
// voltage: 1140 mV

View File

@@ -442,45 +442,12 @@ abstract class pts_graph_core
}
protected function identifier_to_branded_color($identifier, $fallback_color = null)
{
if($this->i['support_color_branding'] == false || !isset($identifier[6]))
if($this->i['support_color_branding'] == false || !isset($identifier[5]))
{
return $fallback_color;
}
// See if the result identifier matches something to be color-coded better
$identifier = strtolower($identifier) . ' ';
if(strpos($identifier, 'geforce') !== false || strpos($identifier, 'nvidia') !== false || strpos($identifier, 'quadro') !== false)
{
$paint_color = '#77b900';
}
else if(strpos($identifier, 'radeon') !== false || strpos($identifier, 'amd ') !== false || stripos($identifier, 'EPYC') !== false || strpos($identifier, 'opteron ') !== false || strpos($identifier, 'fx-') !== false || strpos($identifier, 'firepro ') !== false || strpos($identifier, 'ryzen ') !== false || strpos($identifier, 'threadripper ') !== false || strpos($identifier, 'a10-') !== false)
{
$paint_color = '#f1052d';
}
else if(strpos($identifier, 'intel ') !== false || strpos($identifier, 'xeon ') !== false || strpos($identifier, 'core i') !== false || strpos($identifier, 'pentium') !== false || strpos($identifier, 'celeron') !== false)
{
$paint_color = '#0b5997';
}
else if(strpos($identifier, 'bsd') !== false)
{
$paint_color = '#850000';
}
else if(stripos($identifier, 'windows ') !== false || stripos($identifier, 'Microsoft') !== false)
{
$paint_color = '#373277';
}
else if(stripos($identifier, 'ec2 ') !== false || stripos($identifier, 'Amazon') !== false)
{
$paint_color = '#ff9900';
}
else if(stripos($identifier, 'google') !== false)
{
$paint_color = '#4885ed';
}
else
{
$paint_color = $fallback_color;
}
$paint_color = pts_render::identifier_to_brand_color($identifier, $fallback_color);
if($paint_color != $fallback_color && strpos($identifier, ' - '))
{
@@ -848,7 +815,13 @@ abstract class pts_graph_core
$tick_width = round(($left_end - $left_start) / $this->i['mark_count']);
$display_value = $this->i['graph_min_value'];
$g = $this->svg_dom->make_g(array('font-size' => self::$c['size']['tick_mark'], 'fill' => self::$c['color']['text'], 'text-anchor' => 'middle'));
$tick_font_size = self::$c['size']['tick_mark'];
while($this->i['graph_max_value'] > 100000 && self::text_string_width($this->i['graph_max_value'], $tick_font_size) + 4 > $tick_width)
{
$tick_font_size--;
}
$g = $this->svg_dom->make_g(array('font-size' => $tick_font_size, 'fill' => self::$c['color']['text'], 'text-anchor' => 'middle'));
$g_lines = $this->svg_dom->make_g(array('stroke' => self::$c['color']['body'], 'stroke-width' => 1));
for($i = 0; $i < $this->i['mark_count']; $i++)
{

View File

@@ -100,7 +100,7 @@ class pts_graph_vertical_bars extends pts_graph_core
while(floor($bar_width * 0.8) < self::text_string_width($this->i['graph_max_value'] + 0.01, floor(self::$c['size']['bars'] * $bar_font_size_ratio)) && $bar_font_size_ratio >= 0.6)
{
$bar_font_size_ratio -= 0.1;
$bar_font_size_ratio -= 0.05;
}
$i_o = 0;
@@ -149,7 +149,7 @@ class pts_graph_vertical_bars extends pts_graph_core
if(($px_bound_right - $px_bound_left) > 10)
{
// The bars are too skinny to be able to plot anything on them
if($bar_font_size_ratio >= 0.6)
if($bar_font_size_ratio >= 0.5)
{
$x = $px_bound_left + (($px_bound_right - $px_bound_left) / 2);
$this->svg_dom->add_text_element($value, array('x' => $x, 'y' => ($value_plot_top + 2), 'font-size' => floor(self::$c['size']['bars'] * $bar_font_size_ratio), 'fill' => self::$c['color']['body_text'], 'text-anchor' => 'middle', 'dominant-baseline' => 'text-before-edge'));

View File

@@ -3,8 +3,8 @@
/*
Phoronix Test Suite
URLs: http://www.phoronix.com, http://www.phoronix-test-suite.com/
Copyright (C) 2008 - 2018, Phoronix Media
Copyright (C) 2008 - 2018, Michael Larabel
Copyright (C) 2008 - 2019, Phoronix Media
Copyright (C) 2008 - 2019, Michael Larabel
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -62,6 +62,33 @@ class pts_arrays
return $duplicates;
}
public static function array_to_cleansed_item_string($items)
{
$items_formatted = $items;
$items = array();
for($i = 0; $i < count($items_formatted); $i++)
{
if(!empty($items_formatted[$i]))
{
$times_found = 1;
for($j = ($i + 1); $j < count($items_formatted); $j++)
{
if($items_formatted[$i] == $items_formatted[$j])
{
$times_found++;
$items_formatted[$j] = '';
}
}
$item = ($times_found > 1 ? $times_found . ' x ' : null) . $items_formatted[$i];
array_push($items, $item);
}
}
$items = implode(' + ', $items);
return $items;
}
}
?>

View File

@@ -3,8 +3,8 @@
/*
Phoronix Test Suite
URLs: http://www.phoronix.com, http://www.phoronix-test-suite.com/
Copyright (C) 2009 - 2016, Phoronix Media
Copyright (C) 2009 - 2016, Michael Larabel
Copyright (C) 2009 - 2019, Phoronix Media
Copyright (C) 2009 - 2019, Michael Larabel
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -24,23 +24,18 @@ class pts_math
{
public static function geometric_mean($values)
{
// default
return pow(array_product($values), (1 / count($values)));
}
public static function harmonic_mean($values)
{
$b = 0;
$c = 0;
foreach($values as $value)
// useful for rates / all same result types
$sum = 0;
foreach($values as $v)
{
if($value != 0)
{
$b += 1 / $value;
$c++;
}
$sum += 1 / $v;
}
return $b != 0 ? $c / $b : 0;
return (1 / $sum) * count($values);
}
public static function standard_error($values)
{

View File

@@ -49,9 +49,6 @@ class pts_network
{
return false;
}
//echo $url . PHP_EOL; var_dump($to_post_data);
//var_dump(debug_backtrace());
//exit;
$stream_context = pts_network::stream_context_create(null, $override_proxy, $override_proxy_port, $override_proxy_user, $override_proxy_pw, $http_timeout);
$contents = pts_file_io::file_get_contents($url, 0, $stream_context);
@@ -76,11 +73,8 @@ class pts_network
{
return false;
}
//echo $url . PHP_EOL; var_dump($to_post_data);
//var_dump(debug_backtrace());
//exit;
$upload_data = http_build_query($to_post_data);
$http_parameters = array('http' => array('method' => 'POST', 'content' => $upload_data));
$http_parameters = array('http' => array('method' => 'POST', 'content' => http_build_query($to_post_data)));
if($supports_proxy)
{
$stream_context = pts_network::stream_context_create($http_parameters);
@@ -110,8 +104,11 @@ class pts_network
$download = str_replace('https://', 'http://', $download);
}
if(function_exists('curl_init') && stripos(PTS_PHP_VERSION, 'hiphop') === false)
if(PTS_IS_CLIENT && strpos(phodevi::read_property('system', 'operating-system'), ' 7') === false && function_exists('curl_init') && stripos(PTS_PHP_VERSION, 'hiphop') === false)
{
// XXX: RHEL/EL 7.6 PHP packages introduced a segv when using CURL... Until that's resolved, just blacklist " 7"
// as unknown when it will be fixed, but at least there is non-CURL codepath supported fine
// " 7" is a bit liberal but also hard due to various EL7 downstreams
// XXX: Facebook HipHop HHVM currently seems to have problems with PHP CURL
$return_state = pts_network::curl_download($download, $to);
}

View File

@@ -336,26 +336,29 @@ class pts_openbenchmarking
$repo_index = json_decode(file_get_contents($index_file), true);
$generated_time = $repo_index['main']['generated'];
// Refreshing the indexes once every few days should be suffice
// Refresh approximately every three days by default
$index_cache_ttl = 3;
if(PTS_IS_CLIENT && ($config_ttl = pts_config::read_user_config('PhoronixTestSuite/Options/OpenBenchmarking/IndexCacheTTL')))
if($force_refresh == false)
{
if($config_ttl === 0)
// Refreshing the indexes once every few days should be suffice
// Refresh approximately every three days by default
$index_cache_ttl = 3;
if(PTS_IS_CLIENT && ($config_ttl = pts_config::read_user_config('PhoronixTestSuite/Options/OpenBenchmarking/IndexCacheTTL')))
{
// if the value is 0, only rely upon manual refreshes
if($config_ttl === 0)
{
// if the value is 0, only rely upon manual refreshes
continue;
}
else if(is_numeric($config_ttl) && $config_ttl >= 1)
{
$index_cache_ttl = $config_ttl;
}
}
if($generated_time > (time() - (86400 * $index_cache_ttl)) && (!defined('FIRST_RUN_ON_PTS_UPGRADE') || FIRST_RUN_ON_PTS_UPGRADE == false))
{
// The index is new enough
continue;
}
else if(is_numeric($config_ttl) && $config_ttl >= 1)
{
$index_cache_ttl = $config_ttl;
}
}
if($generated_time > (time() - (86400 * $index_cache_ttl)) && $force_refresh == false && (!defined('FIRST_RUN_ON_PTS_UPGRADE') || FIRST_RUN_ON_PTS_UPGRADE == false))
{
// The index is new enough
continue;
}
$old_index = $repo_index;

View File

@@ -225,7 +225,7 @@ class pts_render
$result_object->test_profile->set_display_format('BAR_GRAPH');
}
else if($big_data_set > 0 && pts_graph_core::get_graph_config('style', 'allow_box_plots'))
else if($big_data_set > 0 && pts_graph_core::get_graph_config('style', 'allow_box_plots') && !isset($extra_attributes['no_box_plots']))
{
$result_object->test_profile->set_display_format('HORIZONTAL_BOX_PLOT');
}
@@ -298,6 +298,54 @@ class pts_render
return $graph;
}
public static function identifier_to_brand_color($identifier, $fallback_color = null)
{
static $cache;
if(isset($cache[$identifier]))
{
return $cache[$identifier] != null ? $cache[$identifier] : $fallback_color;
}
// See if the result identifier matches something to be color-coded better
$i = strtolower($identifier) . ' ';
if(strpos($i, 'geforce') !== false || strpos($i, 'nvidia') !== false || strpos($i, 'quadro') !== false || strpos($i, 'rtx ') !== false || strpos($i, 'gtx ') !== false)
{
$paint_color = '#77b900';
}
else if(strpos($i, 'radeon') !== false || strpos($i, 'amd ') !== false || stripos($i, 'EPYC') !== false || strpos($i, 'opteron ') !== false || strpos($i, 'fx-') !== false || strpos($i, 'firepro ') !== false || strpos($i, 'ryzen ') !== false || strpos($i, 'threadripper ') !== false || strpos($i, 'a10-') !== false || strpos($i, 'athlon ') !== false || strpos($i, 'r9 ') !== false || strpos($i, 'r7 ') !== false || strpos($i, 'hd 7') !== false || strpos($i, 'rx ') !== false)
{
$paint_color = '#f1052d';
}
else if(strpos($i, 'intel ') !== false || strpos($i, 'xeon ') !== false || strpos($i, 'core i') !== false || strpos($i, 'pentium') !== false || strpos($i, 'celeron') !== false)
{
$paint_color = '#0b5997';
}
else if(strpos($i, 'bsd') !== false)
{
$paint_color = '#850000';
}
else if(stripos($i, 'windows ') !== false || stripos($i, 'Microsoft') !== false)
{
$paint_color = '#373277';
}
else if(stripos($i, 'ec2 ') !== false || stripos($i, 'Amazon') !== false)
{
$paint_color = '#ff9900';
}
else if(stripos($i, 'google') !== false)
{
$paint_color = '#4885ed';
}
else
{
$paint_color = $fallback_color;
}
$cache[$identifier] = $paint_color != $fallback_color ? $paint_color : null;
return $paint_color;
}
public static function report_system_notes_to_table(&$result_file, &$table)
{
$identifier_count = 0;
@@ -610,79 +658,8 @@ class pts_render
}
public static function generate_overview_object(&$overview_table, $overview_type)
{
switch($overview_type)
{
case 'GEOMETRIC_MEAN':
$title = 'Geometric Mean';
$math_call = array('pts_math', 'geometric_mean');
break;
case 'HARMONIC_MEAN':
$title = 'Harmonic Mean';
$math_call = array('pts_math', 'harmonic_mean');
break;
case 'AGGREGATE_SUM':
$title = 'Aggregate Sum';
$math_call = 'array_sum';
break;
default:
return false;
}
$result_buffer = new pts_test_result_buffer();
if($overview_table instanceof pts_result_file)
{
list($days_keys1, $days_keys, $shred) = pts_ResultFileTable::result_file_to_result_table($overview_table);
foreach($shred as $system_key => &$system)
{
$to_show = array();
foreach($system as &$days)
{
$days = $days->get_value();
}
$to_show[] = pts_math::set_precision(call_user_func($math_call, $system), 2);
$result_buffer->add_test_result($system_key, implode(',', $to_show), null);
}
}
else
{
$days_keys = null;
foreach($overview_table as $system_key => &$system)
{
if($days_keys == null)
{
// Rather messy and inappropriate way of getting the days keys
$days_keys = array_keys($system);
break;
}
}
foreach($overview_table as $system_key => &$system)
{
$to_show = array();
foreach($system as &$days)
{
$to_show[] = call_user_func($math_call, $days);
}
$result_buffer->add_test_result($system_key, implode(',', $to_show), null);
}
}
$test_profile = new pts_test_profile(null, null, false);
$test_profile->set_test_title($title);
$test_profile->set_result_scale($title);
$test_profile->set_display_format('BAR_GRAPH');
$test_result = new pts_test_result($test_profile);
$test_result->set_used_arguments_description('Analytical Overview');
$test_result->set_test_result_buffer($result_buffer);
return $test_result;
// TODO XXX this can be removed once OpenBenchmarking.org upgrades its PTS to new pts_result_file_analyzer APIs
// EOL 9 JANUARY 2019
}
public static function multi_way_identifier_check($identifiers)
{

View File

@@ -3,8 +3,8 @@
/*
Phoronix Test Suite
URLs: http://www.phoronix.com, http://www.phoronix-test-suite.com/
Copyright (C) 2008 - 2018, Phoronix Media
Copyright (C) 2008 - 2018, Michael Larabel
Copyright (C) 2008 - 2019, Phoronix Media
Copyright (C) 2008 - 2019, Michael Larabel
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -206,8 +206,7 @@ class pts_result_file
}
public function get_system_count()
{
// XXX this is deprecated
return count($this->get_systems());
return count($this->systems);
}
public function set_title($new_title)
{
@@ -422,7 +421,7 @@ class pts_result_file
{
return isset($this->result_objects[$ch]) ? $this->result_objects[$ch] : false;
}
public function get_result_objects($select_indexes = -1, $read_only_objects = false)
public function get_result_objects($select_indexes = -1)
{
if($select_indexes != -1 && $select_indexes !== null)
{
@@ -548,7 +547,7 @@ class pts_result_file
$result->test_result_buffer->remove($remove);
}
}
public function add_to_result_file(&$result_file)
public function add_to_result_file(&$result_file, $only_merge_results_already_present = false)
{
foreach($result_file->get_systems() as $s)
{
@@ -560,10 +559,15 @@ class pts_result_file
foreach($result_file->get_result_objects() as $result)
{
$this->add_result($result);
$this->add_result($result, $only_merge_results_already_present);
}
}
public function add_result(&$result_object)
public function result_hash_exists(&$result_object)
{
$ch = $result_object->get_comparison_hash(true, false);
return isset($this->result_objects[$ch]) && isset($this->result_objects[$ch]->test_result_buffer);
}
public function add_result(&$result_object, $only_if_result_already_present = false)
{
$ch = $result_object->get_comparison_hash(true, false);
if(isset($this->result_objects[$ch]) && isset($this->result_objects[$ch]->test_result_buffer))
@@ -578,13 +582,18 @@ class pts_result_file
$this->result_objects[$ch]->test_result_buffer->add_buffer_item($bi);
}
}
else
else if($only_if_result_already_present == false)
{
$this->result_objects[$ch] = $result_object;
}
return $ch;
}
public function add_result_return_object(&$result_object, $only_if_result_already_present = false)
{
$ch = $this->add_result($result_object, $only_if_result_already_present);
return isset($this->result_objects[$ch]) ? $this->result_objects[$ch] : false;
}
public function get_xml($to = null, $force_nice_formatting = false)
{
$xml_writer = new nye_XmlWriter(null, $force_nice_formatting);

View File

@@ -3,8 +3,8 @@
/*
Phoronix Test Suite
URLs: http://www.phoronix.com, http://www.phoronix-test-suite.com/
Copyright (C) 2010 - 2016, Phoronix Media
Copyright (C) 2010 - 2016, Michael Larabel
Copyright (C) 2010 - 2019, Phoronix Media
Copyright (C) 2010 - 2019, Michael Larabel
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -22,6 +22,292 @@
class pts_result_file_analyzer
{
public static function generate_geometric_mean_result(&$result_file)
{
$results = array();
$system_count = $result_file->get_system_count();
foreach($result_file->get_result_objects() as $result)
{
if($result->test_profile->get_identifier() == null || $result->test_profile->get_display_format() != 'BAR_GRAPH' || $system_count > $result->test_result_buffer->get_count())
{
// Skip data where it's not a proper test, not a singular data value, or not all systems ran within the result file
continue;
}
foreach($result->test_result_buffer->get_buffer_items() as $buffer_item)
{
$r = $buffer_item->get_result_value();
if($result->test_profile->get_result_proportion() == 'LIB')
{
// convert to HIB
$r = (1 / $r) * 100;
}
$ri = $buffer_item->get_result_identifier();
if(!isset($results[$ri]))
{
$results[$ri] = array();
}
$results[$ri][] = $r;
}
}
foreach($results as $identifier => $values)
{
if(count($values) < 4)
{
// If small result file with not a lot of data, don't bother showing...
unset($results[$identifier]);
}
}
if(!empty($results))
{
$test_profile = new pts_test_profile();
$test_result = new pts_test_result($test_profile);
$test_result->test_profile->set_test_title('Geometric Mean Of All Test Results');
$test_result->test_profile->set_identifier(null);
$test_result->test_profile->set_version(null);
$test_result->test_profile->set_result_proportion(null);
$test_result->test_profile->set_display_format('BAR_GRAPH');
$test_result->test_profile->set_result_scale('Geometric Mean');
$test_result->test_profile->set_result_proportion('HIB');
$test_result->set_used_arguments_description('Result Composite');
$test_result->set_used_arguments('Geometric-Mean');
$test_result->test_result_buffer = new pts_test_result_buffer();
foreach($results as $identifier => $values)
{
$values = pts_math::geometric_mean($values);
$test_result->test_result_buffer->add_test_result($identifier, pts_math::set_precision($values, 3));
}
$test_result->sort_results_by_performance();
$test_result->test_result_buffer->buffer_values_reverse();
return $test_result;
}
return false;
}
public static function generate_harmonic_mean_result(&$result_file)
{
$results = array();
$system_count = $result_file->get_system_count();
foreach($result_file->get_result_objects() as $result)
{
if($result->test_profile->get_identifier() == null || $result->test_profile->get_display_format() != 'BAR_GRAPH' || $result->test_profile->get_result_proportion() == 'LIB' || $system_count > $result->test_result_buffer->get_count())
{
// Skip data where it's not a proper test, not a singular data value, or not all systems ran within the result file, or lower is better for results
continue;
}
$rs = $result->test_profile->get_result_scale();
if(strpos($rs, '/') === false && stripos($rs, ' per ') === false && stripos($rs, 'FPS') === false && stripos($rs, 'bps') === false && stripos($rs, 'iops') === false)
{
// Harmonic mean is relevant for tests of rates, MB/s, FPS, ns/day, etc.
continue;
}
foreach($result->test_result_buffer->get_buffer_items() as $buffer_item)
{
$ri = $buffer_item->get_result_identifier();
if(!isset($results[$rs][$ri]))
{
$results[$rs][$ri] = array();
}
$results[$rs][$ri][] = $buffer_item->get_result_value();
}
}
foreach($results as $result_scale => $group)
{
foreach($group as $identifier => $values)
{
if(count($values) < 4)
{
// If small result file with not a lot of data, don't bother showing...
unset($results[$result_scale][$identifier]);
}
}
}
if(!empty($results))
{
$test_results = array();
foreach($results as $result_scale => $group)
{
$parsed = array();
foreach($group as $identifier => $values)
{
$parsed[$identifier] = pts_math::harmonic_mean($values);
}
if(empty($parsed) || count($parsed) < 2)
{
continue;
}
$test_profile = new pts_test_profile();
$test_result = new pts_test_result($test_profile);
$test_result->test_profile->set_test_title('Harmonic Mean Of ' . $result_scale . ' Test Results');
$test_result->test_profile->set_identifier(null);
$test_result->test_profile->set_version(null);
$test_result->test_profile->set_result_proportion(null);
$test_result->test_profile->set_display_format('BAR_GRAPH');
$test_result->test_profile->set_result_scale($result_scale);
$test_result->test_profile->set_result_proportion('HIB');
$test_result->set_used_arguments_description('Harmonic Mean');
$test_result->set_used_arguments('Harmonic-Mean - ' . $result_scale);
$test_result->test_result_buffer = new pts_test_result_buffer();
foreach($parsed as $identifier => $values)
{
$test_result->test_result_buffer->add_test_result($identifier, pts_math::set_precision($values, 3));
}
$test_result->sort_results_by_performance();
$test_result->test_result_buffer->buffer_values_reverse();
$test_results[] = $test_result;
}
return $test_results;
}
return array();
}
public static function display_result_file_stats_pythagorean_means(&$result_file, $highlight_identifier = null)
{
$ret = null;
$geometric_mean = pts_result_file_analyzer::generate_geometric_mean_result($result_file);
if($geometric_mean)
{
$ret .= pts_result_file_output::test_result_to_text($geometric_mean, pts_client::terminal_width(), true, $highlight_identifier, true);
}
foreach(pts_result_file_analyzer::generate_harmonic_mean_result($result_file) as $harmonic_mean_result)
{
$ret .= PHP_EOL . pts_result_file_output::test_result_to_text($harmonic_mean_result, pts_client::terminal_width(), true, $highlight_identifier, true);
}
$ret .= PHP_EOL;
return $ret;
}
public static function display_results_wins_losses(&$result_file, $highlight_result_identifier = null, $prepend_lines = ' ')
{
$output = null;
$result_file_identifiers_count = $result_file->get_system_count();
$wins = array();
$losses = array();
$tests_counted = 0;
$possible_evaluate_result_count = 0;
foreach($result_file->get_result_objects() as $result)
{
if($result->test_profile->get_identifier() == null)
{
continue;
}
$possible_evaluate_result_count++;
if($result->test_result_buffer->get_count() < 2 || $result->test_result_buffer->get_count() < floor($result_file_identifiers_count / 2))
{
continue;
}
$tests_counted++;
$winner = $result->get_result_first();
$loser = $result->get_result_last();
if(!isset($wins[$winner]))
{
$wins[$winner] = 1;
}
else
{
$wins[$winner]++;
}
if(!isset($losses[$loser]))
{
$losses[$loser] = 1;
}
else
{
$losses[$loser]++;
}
}
if(empty($wins) || empty($losses))
{
return;
}
arsort($wins);
arsort($losses);
$table = array();
$table[] = array(pts_client::cli_colored_text('WINS:', 'green', true), '', '');
$highlight_row = -1;
foreach($wins as $identifier => $count)
{
$table[] = array($identifier . ': ', $count . ' ', ' [' . pts_math::set_precision($count / $tests_counted * 100, 1) . '%]');
if($highlight_result_identifier && $highlight_result_identifier == $identifier)
{
$highlight_row = count($table) - 1;
}
}
$table[] = array('', '', '');
$table[] = array(pts_client::cli_colored_text('LOSSES: ', 'red', true), '', '');
$highlight_row = -1;
foreach($losses as $identifier => $count)
{
$table[] = array($identifier . ': ', $count, ' [' . pts_math::set_precision($count / $tests_counted * 100, 1) . '%]');
if($highlight_result_identifier && $highlight_result_identifier == $identifier)
{
$highlight_row = count($table) - 1;
}
}
$output .= pts_user_io::display_text_table($table, $prepend_lines, 0, 0, false, $highlight_row) . PHP_EOL;
$output .= $prepend_lines . pts_client::cli_colored_text('TESTS COUNTED: ', 'cyan', true) . ($tests_counted == $possible_evaluate_result_count ? $tests_counted : $tests_counted . ' of ' . $possible_evaluate_result_count) . PHP_EOL;
return $output;
}
public static function display_results_baseline_two_way_compare(&$result_file, $drop_flat_results = false, $border_table = false, $rich_text = false, $prepend_to_lines = null)
{
$table = array(array('Test', 'Configuration', 'Relative'));
$color_rows = array();
foreach($result_file->get_result_objects() as $ro)
{
if($ro->test_profile->get_display_format() != 'BAR_GRAPH')
{
continue;
}
if($drop_flat_results)
{
$ro->remove_unchanged_results(0.3);
}
$buffer_identifiers = $ro->test_result_buffer->get_identifiers();
if(count($buffer_identifiers) != 2)
{
continue;
}
$ro->normalize_buffer_values(pts_arrays::first_element($buffer_identifiers));
$result = $ro->test_result_buffer->get_value_from_identifier(pts_arrays::last_element($buffer_identifiers));
if(empty($result))
{
continue;
}
$result = round($result, 3);
if($drop_flat_results && $result == 1)
{
continue;
}
if($rich_text && ($result < 0.97 || $result > 1.03))
{
$color_rows[count($table)] = $result < 1 ? 'red' : 'green';
}
$table[] = array($ro->test_profile->get_identifier_base_name(), $ro->get_arguments_description_shortened(), $result);
}
$bold_row = $rich_text ? 0 : -1;
return count($table) < 2 ? null : PHP_EOL . pts_user_io::display_text_table($table, $prepend_to_lines, 0, 0, $border_table, $bold_row, $color_rows);
}
public static function analyze_result_file_intent(&$result_file, &$flagged_results = -1, $return_all_changed_indexes = false)
{
$identifiers = array();
@@ -101,7 +387,7 @@ class pts_result_file_analyzer
pts_result_file_analyzer::compact_result_table_data($data, $identifiers, true);
$desc = pts_result_file_analyzer::analyze_system_component_changes($data, $rows, array(
array('Memory', 'Graphics', 'Display Driver', 'OpenGL'),
array('Graphics', 'Display Driver', 'OpenGL', 'Vulkan'), array('Graphics', 'Display Driver', 'OpenGL', 'OpenCL', 'Vulkan'), array('Graphics', 'Display Driver', 'OpenCL'), array('Graphics', 'Monitor', 'Kernel', 'Display Driver', 'OpenGL'), array('Graphics', 'Monitor', 'Display Driver', 'OpenGL'), array('Graphics', 'Kernel', 'Display Driver', 'OpenGL'), array('Graphics', 'Display Driver', 'OpenGL'), array('Graphics', 'OpenGL'), array('Graphics', 'Kernel'), array('Graphics', 'Display Driver') // All potential graphics comparisons
array('Graphics', 'Display Driver', 'OpenGL', 'Vulkan'), array('Graphics', 'Kernel', 'Display Driver', 'OpenGL', 'Vulkan'), array('Graphics', 'Display Driver', 'OpenGL', 'OpenCL', 'Vulkan'), array('Graphics', 'Display Driver', 'OpenCL'), array('Graphics', 'Monitor', 'Kernel', 'Display Driver', 'OpenGL'), array('Graphics', 'Monitor', 'Display Driver', 'OpenGL'), array('Graphics', 'Kernel', 'Display Driver', 'OpenGL'), array('Graphics', 'Display Driver', 'OpenGL'), array('Graphics', 'OpenGL'), array('Graphics', 'Kernel'), array('Graphics', 'Display Driver') // All potential graphics comparisons
), $return_all_changed_indexes);
}

View File

@@ -3,8 +3,8 @@
/*
Phoronix Test Suite
URLs: http://www.phoronix.com, http://www.phoronix-test-suite.com/
Copyright (C) 2010 - 2018, Phoronix Media
Copyright (C) 2010 - 2018, Michael Larabel
Copyright (C) 2010 - 2019, Phoronix Media
Copyright (C) 2010 - 2019, Michael Larabel
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -125,7 +125,7 @@ class pts_result_file_output
return $csv_output;
}
public static function result_file_to_text(&$result_file, $terminal_width = 80)
public static function result_file_to_text(&$result_file, $terminal_width = 80, $stylize_output = false)
{
$result_output = null;
@@ -150,34 +150,45 @@ class pts_result_file_output
foreach($result_file->get_result_objects() as $result_object)
{
$result_output .= trim($result_object->test_profile->get_title() . ' ' . $result_object->test_profile->get_app_version() . PHP_EOL . $result_object->get_arguments_description());
$result_output .= self::test_result_to_text($result_object, $terminal_width);
$result_output .= self::test_result_to_text($result_object, $terminal_width, $stylize_output);
$result_output .= PHP_EOL . PHP_EOL;
}
return $result_output;
}
public static function test_result_to_text(&$result_object, $terminal_width = 80, $color_output = false, $highlight_result = null)
public static function test_result_to_text(&$result_object, $terminal_width = 80, $stylize_output = false, $highlight_result = null, $show_title = true)
{
$result_output = null;
static $last_title_shown = null;
if($show_title)
{
if($last_title_shown != $result_object->test_profile->get_title())
{
$result_output .= PHP_EOL . ' ' . trim($result_object->test_profile->get_title() . ' ' . $result_object->test_profile->get_app_version());
$last_title_shown = $result_object->test_profile->get_title();
}
$result_output .= PHP_EOL . ' ' . $result_object->get_arguments_description();
}
if($result_object->test_profile->get_result_scale() != null)
{
$result_output .= PHP_EOL . ' ' . $result_object->test_profile->get_result_scale();
$scale_line = ' ' . $result_object->test_profile->get_result_scale();
if($result_object->test_profile->get_result_proportion() == 'LIB')
{
$result_output .= ' < Lower Is Better';
$scale_line .= ' < Lower Is Better';
}
else if($result_object->test_profile->get_result_proportion() == 'HIB')
{
$result_output .= ' > Higher Is Better';
$scale_line .= ' > Higher Is Better';
}
$result_output .= PHP_EOL . ($stylize_output && PTS_IS_CLIENT ? pts_client::cli_just_italic($scale_line) : $scale_line);
}
$identifiers = $result_object->test_result_buffer->get_identifiers();
$longest_identifier_length = strlen(pts_strings::find_longest_string($identifiers)) + 2;
$longest_identifier_length = strlen(pts_strings::find_longest_string($identifiers)) + 1;
$result_object->test_result_buffer->adjust_precision();
$is_line_graph = false;
foreach($result_object->test_result_buffer as &$buffers)
{
if(empty($buffers))
@@ -185,6 +196,7 @@ class pts_result_file_output
$max_value = 0;
$min_value = pts_arrays::first_element($buffers)->get_result_value();
$largest_min_value = 0;
$longest_result = 0;
foreach($buffers as &$buffer_item)
{
@@ -194,7 +206,15 @@ class pts_result_file_output
$longest_result = strlen($v);
}
if($v > $max_value)
if(stripos($v, ',') !== false)
{
$v = explode(',', $v);
$max_value = max($max_value, max($v) * 1.03);
$min_value = min($min_value, min($v));
$largest_min_value = max($largest_min_value, min($v));
$is_line_graph = true;
}
else if($v > $max_value)
{
$max_value = $v;
}
@@ -204,39 +224,139 @@ class pts_result_file_output
}
}
// First run through the items to see if it makes sense applying colors (e.g. multiple matches)
$buffer_count = 0;
foreach($buffers as &$buffer_item)
{
$brand_color = pts_render::identifier_to_brand_color($buffer_item->get_result_identifier(), null);
if($brand_color != null)
{
// Quite simple handling, could do better
$buffer_count++;
}
}
$do_color = $buffer_count > 1 ? true : false;
$longest_result++;
$precision = ($max_value > 100 || ($min_value > 29 && $max_value > 79) ? 0 : 1);
if($is_line_graph)
{
$largest_min_value = pts_math::set_precision($largest_min_value, $precision);
$min_value = pts_math::set_precision($min_value, $precision);
$largest_min_length = strlen($largest_min_value);
$max_value_length = strlen(pts_math::set_precision($max_value, $precision));
}
foreach($buffers as &$buffer_item)
{
$val = $buffer_item->get_result_value();
if(stripos($val, ',') !== false)
{
$vals = explode(',', $val);
$val = 'MIN: ' . min($vals) . ' / AVG: ' . round(array_sum($vals) / count($vals), 2) . ' / MAX: ' . max($vals);
}
$result_line = ' ' . $buffer_item->get_result_identifier() . ' ';
$result_length_offset = $longest_identifier_length - strlen($buffer_item->get_result_identifier());
if($result_length_offset > 0)
{
$result_line .= str_repeat('.', $result_length_offset) . ' ';
}
$result_line .= $val;
if(is_numeric($val))
if($is_line_graph)
{
// LINE GRAPH
$values = explode(',', $val);
$formatted_min = pts_math::set_precision(min($values), $precision);
$formatted_avg = pts_math::set_precision(array_sum($values) / count($values), $precision);
$min_value_offset = $largest_min_length - strlen($formatted_min);
$min_value_offset = $min_value_offset > 0 ? str_repeat(' ', $min_value_offset) : null;
$avg_value_offset = $max_value_length - strlen($formatted_avg);
$avg_value_offset = $avg_value_offset > 0 ? str_repeat(' ', $avg_value_offset) : null;
$result_line .= 'MIN: ' . $formatted_min . $min_value_offset . ' AVG: ' . $formatted_avg . $avg_value_offset . ' MAX: ' . pts_math::set_precision(max($values), $precision) . ' ';
if($terminal_width > (strlen($result_line) * 2) && $buffer_count > 1)
{
$box_plot = str_repeat(' ', ($terminal_width - strlen($result_line)));
$box_plot_size = strlen($box_plot);
$box_plot = str_split($box_plot);
// BOX PLOT
$whisker_bottom = pts_math::find_percentile($values, 0.02);
$whisker_top = pts_math::find_percentile($values, 0.98);
$unique_values = array_unique($values);
foreach($unique_values as &$val)
{
if(($val < $whisker_bottom || $val > $whisker_top) && $val > 0.1)
{
$x = floor($val / $max_value * $box_plot_size);
if(isset($box_plot[$x]))
$box_plot[$x] = '.';
}
}
$whisker_start_char = round($whisker_bottom / $max_value * $box_plot_size);
$whisker_end_char = round($whisker_top / $max_value * $box_plot_size);
for($i = $whisker_start_char; $i <= $whisker_end_char && $i < ($box_plot_size - 1); $i++)
{
$box_plot[$i] = '-';
}
$box_left = round((pts_math::find_percentile($values, 0.25) / $max_value) * $box_plot_size);
$box_middle = round((pts_math::find_percentile($values, 0.5) / $max_value) * $box_plot_size);
$box_right = round((pts_math::find_percentile($values, 0.75) / $max_value) * $box_plot_size);
for($i = $box_left; $i <= $box_right; $i++)
{
$box_plot[$i] = '#';
}
$box_plot[$whisker_start_char] = '|';
$box_plot[$whisker_end_char] = '|';
$box_plot[$box_middle] = 'X';
// END OF BOX PLOT
//$box_plot[0] = '[';
//$box_plot[($box_plot_size - 1)] = ']';
$result_line .= substr(implode('', $box_plot), 0, $box_plot_size);
}
}
else if(is_numeric($val))
{
// STANDARD NUMERIC RESULT
$result_line .= $val;
$repeat_length = $longest_result - strlen($val);
$result_line .= ($repeat_length >= 0 ? str_repeat(' ', $repeat_length) : null) . '|';
$current_line_length = strlen($result_line);
$result_line .= str_repeat('=', round(($val / $max_value) * ($terminal_width - $current_line_length)));
}
if($color_output && PTS_IS_CLIENT)
if($stylize_output && PTS_IS_CLIENT)
{
$do_bold = false;
// See if should bold the line
if($highlight_result == $buffer_item->get_result_identifier())
$result_line = pts_client::cli_just_bold($result_line);
{
$do_bold = true;
}
else if(is_array($highlight_result) && in_array($buffer_item->get_result_identifier(), $highlight_result))
{
$do_bold = true;
}
// Determine if color
if($do_color)
{
$brand_color = pts_render::identifier_to_brand_color($buffer_item->get_result_identifier(), null);
if($brand_color != null)
{
$brand_color = pts_client::hex_color_to_string($brand_color);
}
}
else
{
$brand_color = false;
}
if($brand_color)
{
$result_line = pts_client::cli_colored_text($result_line, $brand_color, $do_bold);
}
else if($do_bold)
{
$result_line = pts_client::cli_just_bold($result_line);
}
}
$result_output .= PHP_EOL . $result_line;

View File

@@ -427,7 +427,7 @@ class pts_strings
$str = str_ireplace($original_phrase, $new_phrase, $str);
}
$remove_phrases = array('incorporation', 'corporation', 'corp.', 'invalid', 'technologies', 'technology', ' version', ' project ', 'computer', 'To Be Filled By', 'ODM', 'O.E.M.', 'Desktop Reference Platform', 'small form factor', 'convertible', ' group', 'chipset', 'community', 'reference', 'communications', 'semiconductor', 'processor', 'host bridge', 'adapter', ' CPU', 'platform', 'international', 'express', 'graphics', ' none', 'electronics', 'integrated', 'alternate', 'quad-core', 'memory', 'series', 'network', 'motherboard', 'electric ', 'industrial ', 'serverengines', 'Manufacturer', 'x86/mmx/sse2', '/AGP/SSE/3DNOW!', '/AGP/SSE2', 'controller', '(extreme graphics innovation)', 'pci-e_gfx and ht3 k8 part', 'pci-e_gfx and ht1 k8 part', 'Northbridge only', 'dual slot', 'dual-core', 'dual core', 'microsystems', 'not specified', 'single slot', 'genuine', 'unknown device', 'systemberatung', 'gmbh', 'graphics adapter', 'video device', 'http://', 'www.', '.com', '.tw/', '/pci/sse2/3dnow!', '/pcie/sse2', '/pci/sse2', 'balloon', 'network connection', 'ethernet', 'limited.', ' systems', ' system', 'compliant', 'co. ltd', 'co.', 'ltd.', 'LTD ', ' LTD', '\AE', '(r)', '(tm)', 'inc.', 'inc', '6.00 PG', ',', '\'', '_ ', '_ ', 'corp', 'product name', 'base board', 'mainboard', 'pci to pci', ' release ', 'nee ', 'default string', ' AG ', '/DRAM');
$remove_phrases = array('incorporation', 'corporation', 'corp.', 'invalid', 'technologies', 'technology', ' version', ' project ', 'computer', 'To Be Filled By', 'ODM', 'O.E.M.', 'Desktop Reference Platform', 'small form factor', 'convertible', ' group', 'chipset', 'community', 'reference', 'communications', 'semiconductor', 'processor', 'host bridge', 'adapter', ' CPU', 'platform', 'international', 'express', 'graphics', ' none', 'electronics', 'integrated', 'alternate', 'quad-core', 'memory', 'series', 'network', 'motherboard', 'electric ', 'industrial ', 'serverengines', 'Manufacturer', 'x86/mmx/sse2', '/AGP/SSE/3DNOW!', '/AGP/SSE2', 'controller', '(extreme graphics innovation)', 'pci-e_gfx and ht3 k8 part', 'pci-e_gfx and ht1 k8 part', 'Northbridge only', 'dual slot', 'dual-core', 'dual core', 'microsystems', 'not specified', 'single slot', 'genuine', 'unknown device', 'systemberatung', 'gmbh', 'graphics adapter', 'video device', 'http://', 'www.', '.com', '.tw/', '/pci/sse2/3dnow!', '/pcie/sse2', '/pci/sse2', 'balloon', 'network connection', 'ethernet', 'limited.', ' systems', ' system', 'compliant', 'co. ltd', 'co.', 'ltd.', 'LTD ', ' LTD', '\AE', '(r)', '(tm)', 'inc.', 'inc', '6.00 PG', ',', '\'', '_ ', '_ ', 'corp', 'product name', 'base board', 'mainboard', 'pci to pci', ' release ', 'nee ', 'default string', ' AG ', '/DRAM', 'and subsidiaries', ' SCSI', 'Disk Device', ' ATA', 'Daughter Card', 'Gigabit Connection');
$str = str_ireplace($remove_phrases, ' ', $str);
if(($w = stripos($str, 'WARNING')) !== false)
@@ -444,6 +444,13 @@ class pts_strings
// Fixes an AMD string issue like 'FX -4100' due to stripping (TM) from in between characters, possibly other cases too
$str = str_replace(' -', '-', $str);
$str = str_replace('- ', ' ', $str);
if(stripos($str, ' + ') === false)
{
// Remove any duplicate words
$str = implode(' ', array_unique(explode(' ', $str)));
}
return $str;
}

View File

@@ -45,7 +45,7 @@ class pts_test_option
}
public function set_option_default($default_node)
{
if($default_node == null)
if($default_node == null || $default_node == "0")
$default_node = 1;
$default_node--;

View File

@@ -334,6 +334,10 @@ class pts_test_profile_parser
{
return pts_strings::string_bool($this->xg('TestProfile/AutoSaveResults', 'FALSE'));
}
public function do_remove_test_install_directory_on_reinstall()
{
return pts_strings::string_bool($this->xg('TestProfile/RemoveInstallDirectoryOnReinstall', 'TRUE'));
}
public function get_result_quantifier()
{
return $this->xg('TestInformation/ResultQuantifier');

View File

@@ -3,8 +3,8 @@
/*
Phoronix Test Suite
URLs: http://www.phoronix.com, http://www.phoronix-test-suite.com/
Copyright (C) 2008 - 2017, Phoronix Media
Copyright (C) 2008 - 2017, Michael Larabel
Copyright (C) 2008 - 2019, Phoronix Media
Copyright (C) 2008 - 2019, Michael Larabel
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -64,6 +64,10 @@ class pts_test_result
{
$this->used_arguments_description = $arguments_description;
}
public function remove_from_used_arguments_description($remove_string)
{
$this->used_arguments_description = str_replace($remove_string, '', $this->used_arguments_description);
}
public function append_to_arguments_description($arguments_description)
{
if(strpos(' ' . $this->used_arguments_description . ' ', ' ' . $arguments_description . ' ') === false)
@@ -80,7 +84,7 @@ class pts_test_result
}
}
$this->used_arguments_description .= ($this->used_arguments_description != null ? ' ' : null) . $arguments_description;
$this->used_arguments_description .= ($this->used_arguments_description != null && $arguments_description[0] != ' ' ? ' ' : null) . $arguments_description;
}
}
public function set_result_precision($precision = 2)
@@ -103,6 +107,22 @@ class pts_test_result
{
return $this->used_arguments_description;
}
public function get_arguments_description_shortened()
{
$shortened = explode(' - ', $this->used_arguments_description);
foreach($shortened as &$part)
{
if(($x = strpos($part, ': ')) !== false)
{
$part = substr($part, $x + 2);
}
if(isset($part[18]) && strpos($part, ' ') != false && function_exists('preg_replace'))
{
$part = preg_replace('/\b(\w)|./', '$1', $part);
}
}
return implode(' - ', $shortened);
}
public function get_comparison_hash($show_version_and_attributes = true, $raw_output = true)
{
if($show_version_and_attributes)

View File

@@ -87,6 +87,13 @@ class pts_test_result_buffer_item
{
$a = $a->get_result_value();
$b = $b->get_result_value();
if(strpos($a, ',') != false && strpos($b, ',') != false)
{
$a = explode(',', $a);
$b = explode(',', $b);
$a = array_sum($a) / count($a);
$b = array_sum($b) / count($b);
}
if($a == $b)
{

View File

@@ -304,6 +304,41 @@ class pts_test_result_parser
}
}
}
break;
case 'valve-source-frame-times':
// Counter-Strike: GO At least
$log_file = pts_file_io::file_get_contents($test_log_file);
$frame_all_times = array();
if(($x = strpos($log_file, 'demo tick,frame start time,frame start delta')) !== false)
{
$log_file = substr($log_file, $x);
foreach(explode(PHP_EOL, $log_file) as $line)
{
$line = explode(',', $line);
if(isset($line[2]) && is_numeric($line[2]) && $line[2] > 0)
{
$frame_all_times[] = $line[2] * 1000;
}
}
}
break;
case 'csv-f1-frame-times':
// F1 2018
$log_file = pts_file_io::file_get_contents($test_log_file);
$frame_all_times = array();
if(($x = strpos($log_file, 'Frame,Time (ms)')) !== false)
{
$log_file = substr($log_file, $x);
foreach(explode(PHP_EOL, $log_file) as $line)
{
$line = explode(',', $line);
if(isset($line[1]) && is_numeric($line[1]) && $line[1] > 0)
{
$frame_all_times[] = $line[1];
}
}
}
break;
case 'csv-individual-frame-times':
// Thrones of Britannia on Linux uses at least this method
$log_file = pts_file_io::file_get_contents($test_log_file);
@@ -403,7 +438,8 @@ class pts_test_result_parser
}
$definitions = $test_run_request->test_profile->get_results_definition('ResultsParser');
foreach($definitions->get_result_parser_definitions() as $entry)
$all_parser_entries = $definitions->get_result_parser_definitions();
foreach($all_parser_entries as $entry)
{
$tr = clone $test_run_request;
if($entry->get_display_format() != null)
@@ -412,16 +448,16 @@ class pts_test_result_parser
}
$is_pass_fail_test = in_array($tr->test_profile->get_display_format(), array('PASS_FAIL', 'MULTI_PASS_FAIL'));
$is_numeric_check = !$is_pass_fail_test;
$test_result = self::parse_result_process_entry($tr, $log_file, $pts_test_arguments, $extra_arguments, $prefix, $entry, $is_pass_fail_test, $is_numeric_check);
$test_result = self::parse_result_process_entry($tr, $log_file, $pts_test_arguments, $extra_arguments, $prefix, $entry, $is_pass_fail_test, $is_numeric_check, $all_parser_entries);
if($test_result != false)
{
// Result found
if($is_numeric_check)
{
// Check if this test reports a min result value
$min_result = self::parse_result_process_entry($tr, $log_file, $pts_test_arguments, $extra_arguments, 'MIN_', $entry, $is_pass_fail_test, $is_numeric_check);
$min_result = self::parse_result_process_entry($tr, $log_file, $pts_test_arguments, $extra_arguments, 'MIN_', $entry, $is_pass_fail_test, $is_numeric_check, $all_parser_entries);
// Check if this test reports a max result value
$max_result = self::parse_result_process_entry($tr, $log_file, $pts_test_arguments, $extra_arguments, 'MAX_', $entry, $is_pass_fail_test, $is_numeric_check);
$max_result = self::parse_result_process_entry($tr, $log_file, $pts_test_arguments, $extra_arguments, 'MAX_', $entry, $is_pass_fail_test, $is_numeric_check, $all_parser_entries);
}
self::gen_result_active_handle($test_run_request, $tr)->add_trial_run_result($test_result, $min_result, $max_result);
$produced_result = true;
@@ -430,7 +466,7 @@ class pts_test_result_parser
return $produced_result;
}
protected static function parse_result_process_entry(&$test_run_request, $log_file, $pts_test_arguments, $extra_arguments, $prefix, &$e, $is_pass_fail_test, $is_numeric_check)
protected static function parse_result_process_entry(&$test_run_request, $log_file, $pts_test_arguments, $extra_arguments, $prefix, &$e, $is_pass_fail_test, $is_numeric_check, &$all_parser_entries)
{
$test_result = false;
$match_test_arguments = $e->get_match_to_test_args();
@@ -821,6 +857,14 @@ class pts_test_result_parser
}
if($e->get_append_to_arguments_description() != null)
{
foreach($all_parser_entries as $parser_entry)
{
if($parser_entry->get_append_to_arguments_description() != null)
{
$test_run_request->remove_from_used_arguments_description(' - ' . $parser_entry->get_append_to_arguments_description());
}
}
$test_run_request->append_to_arguments_description(' - ' . $e->get_append_to_arguments_description());
}
}
@@ -847,11 +891,11 @@ class pts_test_result_parser
{
$search_key = $line_hint;
}
else if($line_before_hint != null && strpos($template, $line_hint) !== false)
else if($line_before_hint != null && $line_hint != null && strpos($template, $line_hint) !== false)
{
$search_key = null; // doesn't really matter what this value is
}
else if($line_after_hint != null && strpos($template, $line_hint) !== false)
else if($line_after_hint != null && $line_hint != null && strpos($template, $line_hint) !== false)
{
$search_key = null; // doesn't really matter what this value is
}

View File

@@ -22,7 +22,7 @@
class pts_test_run_options
{
public static function prompt_user_options(&$test_profile, $preset_selections = null)
public static function prompt_user_options(&$test_profile, $preset_selections = null, $no_prompts = false)
{
$user_args = array();
$text_args = array();
@@ -36,6 +36,16 @@ class pts_test_run_options
// Multiple preset options can be delimited with the PRESET_OPTIONS environment variable via a semicolon ;
$preset_selections = pts_client::parse_value_string_double_identifier($cli_presets_env);
}
if(($cli_presets_env_values = pts_client::read_env('PRESET_OPTIONS_VALUES')) != false)
{
// To specify test options externally from an environment variable
// i.e. PRESET_OPTIONS_VALUES='stream.run-type=Add' ./phoronix-test-suite benchmark stream
// The string format is <test-name>.<test-option-name-from-XML-file>=<test-option-value>
// The test-name can either be the short/base name (e.g. stream) or the full identifier (pts/stream) without version postfix
// Multiple preset options can be delimited with the PRESET_OPTIONS environment variable via a semicolon ;
$preset_selections_values = pts_client::parse_value_string_double_identifier($cli_presets_env_values);
}
$identifier_short = $test_profile->get_identifier_base_name();
$identifier_full = $test_profile->get_identifier(false);
@@ -49,7 +59,23 @@ class pts_test_run_options
{
$option_identifier = $o->get_identifier();
if($o->option_count() == 0)
if(!empty($preset_selections_values) && isset($preset_selections_values[$identifier_short][$option_identifier]))
{
$b = explode(',', $preset_selections_values[$identifier_short][$option_identifier]);
foreach($b as &$a)
{
$a = $o->format_option_display_from_input($a);
}
$text_args[] = $b;
$b = explode(',', $preset_selections_values[$identifier_short][$option_identifier]);
foreach($b as &$a)
{
$a = $o->format_option_value_from_input($a);
}
$user_args[] = $b;
}
else if($o->option_count() == 0)
{
// User inputs their option as there is nothing to select
if(isset($preset_selections[$identifier_short][$option_identifier]))
@@ -62,6 +88,10 @@ class pts_test_run_options
$value = $preset_selections[$identifier_full][$option_identifier];
echo PHP_EOL . ' Using Pre-Set Run Option: ' . $value . PHP_EOL;
}
else if($no_prompts)
{
$value = null;
}
else
{
echo PHP_EOL . $o->get_name() . PHP_EOL;
@@ -84,6 +114,10 @@ class pts_test_run_options
$bench_choice = $preset_selections[$identifier_full][$option_identifier];
echo PHP_EOL . ' Using Pre-Set Run Option: ' . $bench_choice . PHP_EOL;
}
else if($no_prompts)
{
$bench_choice = array_keys($option_names);
}
else
{
$option_names = $o->get_all_option_names_with_messages();

View File

@@ -3,8 +3,8 @@
/*
Phoronix Test Suite
URLs: http://www.phoronix.com, http://www.phoronix-test-suite.com/
Copyright (C) 2008 - 2018, Phoronix Media
Copyright (C) 2008 - 2018, Michael Larabel
Copyright (C) 2008 - 2019, Phoronix Media
Copyright (C) 2008 - 2019, Michael Larabel
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -105,10 +105,11 @@ class pts_user_io
}
}
}
public static function display_text_table(&$table, $prepend_to_lines = null, $extra_width_to_column = 0, $min_width = 0)
public static function display_text_table(&$table, $prepend_to_lines = null, $extra_width_to_column = 0, $min_width = 0, $border = false, $bold_row = -1, $color_rows = false)
{
$column_widths = array();
$formatted_table = $prepend_to_lines;
$formatted_table = null;
$longest_line = 0;
for($r = 0; $r < count($table); $r++)
{
@@ -121,22 +122,62 @@ class pts_user_io
}
}
for($r = 0, $r_count = count($table); $r < $r_count; $r++)
for($r = 0; $r < count($table); $r++)
{
for($c = 0, $rc_count = count($table[$r]); $c < $rc_count; $c++)
$line = null;
for($c = 0; $c < count($table[$r]); $c++)
{
$formatted_table .= $table[$r][$c];
if(($c + 1) != $rc_count)
if($border)
{
$formatted_table .= str_repeat(' ', (max($min_width, 1 + $extra_width_to_column + $column_widths[$c]) - strlen($table[$r][$c])));
$line .= '| ';
}
$line .= $table[$r][$c];
$m = (max($min_width, 1 + $extra_width_to_column + $column_widths[$c]) - strlen($table[$r][$c]));
if($m > 0)
{
$line .= str_repeat(' ', $m);
}
}
if(($r + 1) != $r_count)
$line = $prepend_to_lines . $line;
if($border)
{
$formatted_table .= PHP_EOL . $prepend_to_lines;
$line = $line . '|';
}
$longest_line = max($longest_line, strlen($line));
if($color_rows && isset($color_rows[$r]))
{
$line = pts_client::cli_colored_text($line, $color_rows[$r], ($r == $bold_row));
}
else if($r == $bold_row)
{
$line = pts_client::cli_just_bold($line);
}
$formatted_table .= ($r == 0 ? '' : PHP_EOL) . $line;
if($r == 0 && $border)
{
$line = null;
for($c = 0; $c < count($table[$r]); $c++)
{
if($border)
{
$line .= '| ';
}
//$line .= $table[$r][$c];
$m = (max($min_width, 1 + $extra_width_to_column + $column_widths[$c]));
$line .= str_repeat('-', $m - 1) . ' ';
}
$formatted_table .= PHP_EOL . $line . '|';
}
}
if($border)
{
$formatted_table = PHP_EOL. PHP_EOL . $formatted_table . PHP_EOL;
//$formatted_table = str_repeat('-', $longest_line) . PHP_EOL . $formatted_table . PHP_EOL . str_repeat('-', $longest_line) . PHP_EOL;
}
return $formatted_table;
@@ -183,7 +224,7 @@ class pts_user_io
case 'n':
$answer = false;
break;
default:
case '':
$answer = $default;
break;
}

View File

@@ -659,7 +659,7 @@ class pts_validation
//{
// $value = $node->get_default_value();
//}
if(empty($value))
if(empty($value) && $value !== '0')
{
continue;
}
@@ -756,7 +756,7 @@ class pts_validation
$val = 'FALSE';
}
if(!empty($val))
if($val !== null)
{
$value = $val;
}

View File

@@ -423,6 +423,17 @@
<xs:documentation>Rather than prompting the user whether they would like to save the test results, setting AutoSaveResults to TRUE will force the user to save the test results. This option shouldn't be needed unless the test profile's results are only logical if viewed on a graph.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="RemoveInstallDirectoryOnReinstall" type="Boolean" minOccurs="0" maxOccurs="1">
<xs:annotation>
<xs:appinfo>
<get>do_remove_test_install_directory_on_reinstall</get>
<set></set>
<default>TRUE</default>
<flags>UNCOMMON</flags>
</xs:appinfo>
<xs:documentation>By default when a test is re-installed, the Phoronix Test Suite will first delete all files within that directory to ensure a clean environment. If the test script can sanely handle an install without deleting the files first, this tag can be used with the FALSE value. This option is primarily useful if having a test that takes a long time to install/build while the test profile setup process can cleanly and gracefully re-install that would shorten that install/build time.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="SystemDependencies" type="xs:string" minOccurs="0" maxOccurs="1">
<xs:annotation>
<xs:appinfo>

View File

@@ -3,8 +3,8 @@
/*
Phoronix Test Suite
URLs: http://www.phoronix.com, http://www.phoronix-test-suite.com/
Copyright (C) 2013 - 2016, Phoronix Media
Copyright (C) 2013 - 2016, Michael Larabel
Copyright (C) 2013 - 2019, Phoronix Media
Copyright (C) 2013 - 2019, Michael Larabel
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -451,7 +451,7 @@ if(isset($_REQUEST['result_overview_table']) || $result_file->get_test_count() <
}
echo '<div id="pts_results_area">';
foreach($result_file->get_result_objects((isset($_REQUEST['show_only_changed_results']) ? 'ONLY_CHANGED_RESULTS' : -1), true) as $i => $result_object)
foreach($result_file->get_result_objects((isset($_REQUEST['show_only_changed_results']) ? 'ONLY_CHANGED_RESULTS' : -1)) as $i => $result_object)
{
if(stripos($result_object->get_arguments_description(), 'frame time') !== false)
continue;

View File

@@ -3,8 +3,8 @@
/*
Phoronix Test Suite
URLs: http://www.phoronix.com, http://www.phoronix-test-suite.com/
Copyright (C) 2008 - 2018, Phoronix Media
Copyright (C) 2008 - 2018, Michael Larabel
Copyright (C) 2008 - 2019, Phoronix Media
Copyright (C) 2008 - 2019, Michael Larabel
phoronix-test-suite.php: The main code for initalizing the Phoronix Test Suite
This program is free software; you can redistribute it and/or modify
@@ -133,7 +133,15 @@ if(QUICK_START == false)
// Read passed arguments
for($i = 2; $i < $argc && isset($argv[$i]); $i++)
{
$pass_args[] = $argv[$i];
if(($x = strpos($argv[$i], '=')) !== false && substr($argv[$i], 0, $x) == strtoupper(substr($argv[$i], 0, $x)))
{
// Likely trying to pass an environment variable, so just go ahead and set it...
putenv($argv[$i]);
}
else
{
$pass_args[] = $argv[$i];
}
}
if(QUICK_START == false)

View File

@@ -3,8 +3,8 @@
/*
Phoronix Test Suite
URLs: http://www.phoronix.com, http://www.phoronix-test-suite.com/
Copyright (C) 2008 - 2018, Phoronix Media
Copyright (C) 2008 - 2018, Michael Larabel
Copyright (C) 2008 - 2019, Phoronix Media
Copyright (C) 2008 - 2019, Michael Larabel
pts-core.php: To boot-strap the Phoronix Test Suite start-up
This program is free software; you can redistribute it and/or modify
@@ -262,10 +262,10 @@ function pts_version_codenames()
);
}
pts_define('PTS_VERSION', '8.2.0');
pts_define('PTS_CORE_VERSION', 8200);
pts_define('PTS_RELEASE_DATE', '20180911');
pts_define('PTS_CODENAME', 'RAKKESTAD');
pts_define('PTS_VERSION', '8.6.0m2');
pts_define('PTS_CORE_VERSION', 8520);
pts_define('PTS_RELEASE_DATE', '20190119');
pts_define('PTS_CODENAME', 'Spydeberg');
pts_define('PTS_IS_CLIENT', (defined('PTS_MODE') && strstr(PTS_MODE, 'CLIENT') !== false));
pts_define('PTS_IS_WEB_CLIENT', (defined('PTS_MODE') && PTS_MODE == 'WEB_CLIENT'));

View File

@@ -315,7 +315,7 @@ div#pts_footer_logo a:hover
<div id="pts_footer_logo"><a href="http://www.phoronix-test-suite.com/"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" viewbox="0 0 76 41" width="76" height="41" preserveAspectRatio="xMinYMin meet">
<path d="m74 22v9m-5-16v16m-5-28v28m-23-2h12.5c2.485281 0 4.5-2.014719 4.5-4.5s-2.014719-4.5-4.5-4.5h-8c-2.485281 0-4.5-2.014719-4.5-4.5s2.014719-4.5 4.5-4.5h12.5m-21 5h-11m11 13h-2c-4.970563 0-9-4.029437-9-9v-20m-24 40v-20c0-4.970563 4.0294373-9 9-9 4.970563 0 9 4.029437 9 9s-4.029437 9-9 9h-9" stroke="#c8d905" stroke-width="4" fill="none" />
</svg></a></div>
<p>Copyright &#xA9; 2008 - 2018 by <a href="http://www.phoronix-media.com/">Phoronix Media</a>.</p>
<p>Copyright &#xA9; 2008 - 2019 by <a href="http://www.phoronix-media.com/">Phoronix Media</a>.</p>
<p>All trademarks used are properties of their respective owners. All rights reserved.</p>
</div>
</div>

View File

@@ -33,6 +33,7 @@
<ResultsDirectory>~/.phoronix-test-suite/test-results/</ResultsDirectory>
<AlwaysUploadResultsToOpenBenchmarking>FALSE</AlwaysUploadResultsToOpenBenchmarking>
<AutoSortRunQueue>TRUE</AutoSortRunQueue>
<ShowPostRunStatistics>TRUE</ShowPostRunStatistics>
</Testing>
<TestResultValidation>
<DynamicRunCount>TRUE</DynamicRunCount>

View File

@@ -61,6 +61,10 @@
<p>This option sets the directory where test results will be saved by the Phoronix Test Suite. The full path to the directory on the local file-system should be specified, though <em>~</em> is a valid character for denoting the user's home directory. The default value is <em>~/.phoronix-test-suite/test-results/</em>.</p>
<h3>AlwaysUploadResultsToOpenBenchmarking: <span style="color: #CC0000;"><xsl:value-of select="PhoronixTestSuite/Options/Testing/AlwaysUploadResultsToOpenBenchmarking" /></span></h3>
<p>This option defines whether test results should always be uploaded to OpenBenchmarking.org upon their completion. If this value is set to <em>FALSE</em>, the user will be prompted each time whether the results should be uploaded to OpenBenchmarking.org, unless running in batch mode where the value is pre-defined. The default value is <em>FALSE</em>.</p>
<h3>AutoSortRunQueue: <span style="color: #CC0000;"><xsl:value-of select="PhoronixTestSuite/Options/Testing/AutoSortRunQueue" /></span></h3>
<p>This option defines whether the Phoronix Test Suite should sort the queue of tests to run based upon their title and category of tests. If <em>FALSE</em>, the run queue won't be sorted and they will be run in the order they were added.</p>
<h3>ShowPostRunStatistics: <span style="color: #CC0000;"><xsl:value-of select="PhoronixTestSuite/Options/Testing/ShowPostRunStatistics" /></span></h3>
<p>If <em>TRUE</em>, the Phoronix Test Suite will show various test run statistics / comparison data based upon the test results / result file being tested after the testing has finished.</p>
<h1>TestResultValidation Options</h1>
<h3>DynamicRunCount: <span style="color: #CC0000;"><xsl:value-of select="PhoronixTestSuite/Options/TestResultValidation/DynamicRunCount" /></span></h3>
@@ -113,7 +117,7 @@
<h3>PhoromaticStorage: <span style="color: #CC0000;"><xsl:value-of select="PhoronixTestSuite/Options/Server/PhoromaticStorage" /></span></h3>
<p>The location for the Phoromatic Server to store test results of connected systems, account information, etc. The default location is <em>~/.phoronix-test-suite/phoromatic/</em>.</p>
</div>
<div style="text-align: center; font-size: 12px;">Copyright &#xA9; 2008 - 2014 by <a href="http://www.phoronix-media.com/" style="text-decoration: none; color: #000;">Phoronix Media</a>.</div>
<div style="text-align: center; font-size: 12px;">Copyright &#xA9; 2008 - 2019 by <a href="http://www.phoronix-media.com/" style="text-decoration: none; color: #000;">Phoronix Media</a>.</div>
</body>
</html>
</xsl:template>

View File

@@ -12,5 +12,5 @@ Phoronix Test Suite User Agreement & Notices:
Anonymous Usage Reporting / Statistics: If enabling the anonymous usage reporting / statistics feature, some information about the Phoronix Test Suite runs will be submitted to OpenBenchmarking.org. This information is used for analytical purposes, including the determining of the most popular tests / suites and calculating average run-times for different test profiles. The test results are not reported in this process nor the installed software / hardware information, but ambient information about the testing process. This information is stored anonymously. More information on this feature is available with the included documentation.
For more information on the Phoronix Test Suite and its features, visit http://www.phoronix-test-suite.com/ or view the included documentation or by contacting support@phoronix-test-suite.com.
For more information on the Phoronix Test Suite and its features, visit https://www.phoronix-test-suite.com/ or view the included documentation or by contacting support@phoronix-test-suite.com.

View File

@@ -1,5 +1,13 @@
# Phoronix Test Suite Release History
Phoronix Test Suite 8.4
======
#### Release Date: 26 November 2018 | Codename: Skiptvet
* Improvements to the text-based/CLI graphs
* Improvements to CSV frame-time parsing
* Various Phodevi hardware/software detection refinements, including better IBM POWER9 detection
* Various fixes and other minor refinements, external dependency updates
Phoronix Test Suite 8.2
======
#### Release Date: 11 September 2018 | Codename: Rakkestad
@@ -27,7 +35,6 @@ Phoronix Test Suite 8.0
* SiFive RISC-V CPU detection, Cavium ThunderX, Spectre V4 reporting and other hardware/software reporting improvements in Phodevi
* An integrated backup module for easily backing up and restoring of all PTS/Phoromatic data on a system
Phoronix Test Suite 7.8
======
#### Release Date: 14 February 2018 | Codename: Folldal
@@ -38,7 +45,6 @@ Phoronix Test Suite 7.8
* Restored support for vertical bar graphs in pts_Graph
* Spectre and Meltdown CPU vulnerability reporting
Phoronix Test Suite 7.6
======
#### Release Date: 7 December 2017 | Codename: Alvdal