Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

DAOS-15801 test: Add aio ioengine to pil4dfs_fio.py functional test #14375

Merged
merged 9 commits into from
May 31, 2024

Conversation

knard-intel
Copy link
Contributor

Description

Run FIO with the libaio ioengine and the PIL4DFS interception library. Compare the bandwidth of the previous FIO run with one using the dfs ioengine.

Before requesting gatekeeper:

  • Two review approvals and any prior change requests have been resolved.
  • Testing is complete and all tests passed or there is a reason documented in the PR why it should be force landed and forced-landing tag is set.
  • Features: (or Test-tag*) commit pragma was used or there is a reason documented that there are no appropriate tags for this PR.
  • Commit messages follows the guidelines outlined here.
  • Any tests skipped by the ticket being addressed have been run and passed in the PR.

Gatekeeper:

  • You are the appropriate gatekeeper to be landing the patch.
  • The PR has 2 reviews by people familiar with the code, including appropriate owners.
  • Githooks were used. If not, request that user install them and check copyright dates.
  • Checkpatch issues are resolved. Pay particular attention to ones that will show up on future PRs.
  • All builds have passed. Check non-required builds for any new compiler warnings.
  • Sufficient testing is done. Check feature pragmas and test tags and that tests skipped for the ticket are run and now pass with the changes.
  • If applicable, the PR has addressed any potential version compatibility issues.
  • Check the target branch. If it is master branch, should the PR go to a feature branch? If it is a release branch, does it have merge approval in the JIRA ticket.
  • Extra checks if forced landing is requested
    • Review comments are sufficiently resolved, particularly by prior reviewers that requested changes.
    • No new NLT or valgrind warnings. Check the classic view.
    • Quick-build or Quick-functional is not used.
  • Fix the commit message upon landing. Check the standard here. Edit it to create a single commit. If necessary, ask submitter for a new summary.

Copy link

github-actions bot commented May 15, 2024

Ticket title is 'Add functional test with aio to pil4dfs_fio.py functional test'
Status is 'In Review'
Labels: 'triaged'
https://daosio.atlassian.net/browse/DAOS-15801

@knard-intel knard-intel force-pushed the ckochhof/dev/master/daos-15801 branch 2 times, most recently from 4460e72 to 44d9f1e Compare May 15, 2024 08:47
Run FIO with the libaio ioengine and the PIL4DFS interception library.
Compare the bandwidth of the previous FIO run with one using the dfs
ioengine.

Skip-func-hw-test-medium-md-on-ssd: false
Test-tag: Pil4dfsFio,test_pil4dfs_vs_dfs
Required-githooks: true

Signed-off-by: Cedric Koch-Hofer <cedric.koch-hofer@intel.com>
@knard-intel knard-intel force-pushed the ckochhof/dev/master/daos-15801 branch from 44d9f1e to 2dc5e0a Compare May 15, 2024 11:42
@knard-intel knard-intel marked this pull request as ready for review May 16, 2024 06:23
@knard-intel knard-intel requested review from a team as code owners May 16, 2024 06:23
Copy link
Contributor

@mchaarawi mchaarawi left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

if i understand correctly this will just use the same parameters for psync but also add a libaio variation?
For libaio we want to also vary the io_depth as we should be doing for the dfs engine (if we don't do that already).

@knard-intel
Copy link
Contributor Author

if i understand correctly this will just use the same parameters for psync but also add a libaio variation? For libaio we want to also vary the io_depth as we should be doing for the dfs engine (if we don't do that already).

At this time the iopdepth is fixed for fair comparison between the different ioengine.
However, I have not issue to vary it value.
If yes, @mchaarawi , could you help me to define how it should vary:

  • the range of values to use
  • for which engine it should change

We have also to take into account, that this test already takes some time.

@mchaarawi
Copy link
Contributor

if i understand correctly this will just use the same parameters for psync but also add a libaio variation? For libaio we want to also vary the io_depth as we should be doing for the dfs engine (if we don't do that already).

At this time the iopdepth is fixed for fair comparison between the different ioengine. However, I have not issue to vary it value. If yes, @mchaarawi , could you help me to define how it should vary:

  • the range of values to use
  • for which engine it should change

We have also to take into account, that this test already takes some time.

For DFS and libaio it would be good to try io_depth of 16, 32
if adding those increases the test a lot we should discuss (maybe during WG tomorrow) all the parameters again to see what combinations we can eliminate.

Copy link
Contributor

@daltonbohning daltonbohning left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ftest LGTM

Comment on lines 197 to 198
delta = abs(dfuse_bws[ioengine][rw] - dfs_bws[rw]) * 100
delta /= max(dfuse_bws[ioengine][rw], dfs_bws[rw])
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

FYI - slightly different implementation

def percent_change(val1, val2):
"""Calculate percent change between two values as a decimal.
Args:
val1 (float): first value.
val2 (float): second value.
Raises:
ValueError: if either val is not a number
Returns:
float: decimal percent change.
math.nan: if val1 is 0
"""
try:
return (float(val2) - float(val1)) / float(val1)
except ZeroDivisionError:
return math.nan

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  • Use percent_change() function

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  • Use percent_change() function

Fixed with commit 3734edd

Integrate reviewers comments:
- Use percent_change() function

Skip-func-hw-test-medium-md-on-ssd: false
Test-tag: Pil4dfsFio,test_pil4dfs_vs_dfs
Required-githooks: true

Signed-off-by: Cedric Koch-Hofer <cedric.koch-hofer@intel.com>
Integrate reviewers comments:
- Add test with iodepth=16

Skip-func-hw-test-medium-md-on-ssd: false
Test-tag: Pil4dfsFio,test_pil4dfs_vs_dfs
Required-githooks: true

Signed-off-by: Cedric Koch-Hofer <cedric.koch-hofer@intel.com>
@knard-intel
Copy link
Contributor Author

knard-intel commented May 21, 2024

if i understand correctly this will just use the same parameters for psync but also add a libaio variation? For libaio we want to also vary the io_depth as we should be doing for the dfs engine (if we don't do that already).

At this time the iopdepth is fixed for fair comparison between the different ioengine. However, I have not issue to vary it value. If yes, @mchaarawi , could you help me to define how it should vary:

  • the range of values to use
  • for which engine it should change

We have also to take into account, that this test already takes some time.

For DFS and libaio it would be good to try io_depth of 16, 32 if adding those increases the test a lot we should discuss (maybe during WG tomorrow) all the parameters again to see what combinations we can eliminate.

  • Add test with iodepth=16

@knard-intel
Copy link
Contributor Author

  • Add test with iodepth=16

Fixed with commit f0a70af

Fix pylint warning spelling message.

Skip-func-hw-test-medium-md-on-ssd: false
Test-tag: Pil4dfsFio,test_pil4dfs_vs_dfs
Required-githooks: true

Signed-off-by: Cedric Koch-Hofer <cedric.koch-hofer@intel.com>
@mchaarawi
Copy link
Contributor

I am looking at the result here:
https://build.hpdd.intel.com/job/daos-stack/job/daos/job/PR-14375/lastSuccessfulBuild/artifact/Functional%20Hardware%20Medium/dfuse/pil4dfs_fio.py/job.log
and i don't see any results with iodepth != 1
I also see a lot of libaio engine runs with iodepth == 1 (which we don't need).
am i missing something?

@knard-intel
Copy link
Contributor Author

knard-intel commented May 21, 2024

I am looking at the result here: https://build.hpdd.intel.com/job/daos-stack/job/daos/job/PR-14375/lastSuccessfulBuild/artifact/Functional%20Hardware%20Medium/dfuse/pil4dfs_fio.py/job.log and i don't see any results with iodepth != 1 I also see a lot of libaio engine runs with iodepth == 1 (which we don't need). am i missing something?

The CI have not yet run the the functional hardware test of the last PR push.
I have locally successfully run this last PR push.
I will keep you inform as soon as it will have been run by the CI.

Regarding the test with libaio and iodepth=1, this part has not changed.

This the different configuration which are tested:
image

Please keep me inform if some configurations are useless or missing

daltonbohning
daltonbohning previously approved these changes May 21, 2024
@mchaarawi
Copy link
Contributor

Please keep me inform if some configurations are useless or missing

we can exclude all runs with engine=libaio and iodepth==1. they are just repetitive IMO.
If we have the CI bw to do more runs, those should increase iodeoth to 16 rather than 1 (the ones comparing dfs and libaio). but we can do that in a later patch if we want to.

@knard-intel
Copy link
Contributor Author

have the CI bw to do more r

@mchaarawi , my apologies, but I do not understand your last sentence.
Do you want to add some tests with iodepth == 16 ?
If yes, with which configuration.

@knard-intel knard-intel self-assigned this May 22, 2024
@knard-intel
Copy link
Contributor Author

knard-intel commented May 22, 2024

  • Remove useless test with libaio

Integrate reviewers comments:
- Remove useless test with libaio

Skip-func-hw-test-medium-md-on-ssd: false
Test-tag: Pil4dfsFio,test_pil4dfs_vs_dfs
Required-githooks: true

Signed-off-by: Cedric Koch-Hofer <cedric.koch-hofer@intel.com>
@mchaarawi
Copy link
Contributor

@mchaarawi , my apologies, but I do not understand your last sentence. Do you want to add some tests with iodepth == 16 ? If yes, with which configuration.

I just meant that in your table i see you added a lot of libaio tests with ts=256b,1m ; thread=1,0. IF you want you can change those test to do iodepth = 16 instead of 1 (for both libaio and dfs). but that is not in scope of this PR. the existing tests you have with iodepth==16 should cover the functional testing needed for now.

@knard-intel
Copy link
Contributor Author

  • Remove useless test with libaio

Fixed with commit 62c2745

daltonbohning
daltonbohning previously approved these changes May 22, 2024
…/daos-15801

Skip-func-hw-test-medium-md-on-ssd: false
Test-tag: Pil4dfsFio,test_pil4dfs_vs_dfs
Required-githooks: true

Signed-off-by: Cedric Koch-Hofer <cedric.koch-hofer@intel.com>
Fix invalid test case.

Skip-func-hw-test-medium-md-on-ssd: false
Test-tag: Pil4dfsFio,test_pil4dfs_vs_dfs
Required-githooks: true

Signed-off-by: Cedric Koch-Hofer <cedric.koch-hofer@intel.com>
@knard-intel
Copy link
Contributor Author

Latest version of the functional test have been validated by the CI.
This the different configuration which are tested:
image

@knard-intel
Copy link
Contributor Author

Latest version of the functional test have been validated by the CI. This the different configuration which are tested: image

@mchaarawi , are the test configurations OK for you ?

@mchaarawi
Copy link
Contributor

Latest version of the functional test have been validated by the CI. This the different configuration which are tested: image

@mchaarawi , are the test configurations OK for you ?

yes. thanks!

@knard-intel
Copy link
Contributor Author

@daos-stack/daos-gatekeeper , please could you lend this PR with the following message:
Title: DAOS-15801 test: Add aio ioengine to pil4dfs_fio.py functional test
Message:

Add functional tests running FIO using the libaio ioengine and the PIL4DFS interception library.
Compare the bandwidth of these runs with one using the dfs ioengine.

@knard-intel knard-intel requested a review from a team May 31, 2024 12:36
@mchaarawi mchaarawi merged commit 5699b9a into master May 31, 2024
51 checks passed
@mchaarawi mchaarawi deleted the ckochhof/dev/master/daos-15801 branch May 31, 2024 12:46
@mchaarawi
Copy link
Contributor

please backport to 2.6. tia

@knard-intel
Copy link
Contributor Author

please backport to 2.6. tia

Asked for backport in the Jira ticket.
I will do the backport as soon as I will have the approval.
Thanks for your attention.

knard-intel added a commit that referenced this pull request Jun 3, 2024
…14375)

Add functional tests running FIO using the libaio ioengine and the PIL4DFS interception library.
Compare the bandwidth of these runs with one using the dfs ioengine.

Skip-func-hw-test-medium-md-on-ssd: false
Test-tag: Pil4dfsFio,test_pil4dfs_vs_dfs
Required-githooks: true

Signed-off-by: Cedric Koch-Hofer <cedric.koch-hofer@intel.com>
knard-intel added a commit that referenced this pull request Jun 3, 2024
…14375)

Add functional tests running FIO using the libaio ioengine and the PIL4DFS interception library.
Compare the bandwidth of these runs with one using the dfs ioengine.

Skip-func-hw-test-medium-md-on-ssd: false
Allow-unstable-test: true
Test-tag: Pil4dfsFio,test_pil4dfs_vs_dfs
Required-githooks: true

Signed-off-by: Cedric Koch-Hofer <cedric.koch-hofer@intel.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
4 participants