Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
I
igt-gpu-tools
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
55
Issues
55
List
Boards
Labels
Service Desk
Milestones
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Incidents
Environments
Packages & Registries
Packages & Registries
Container Registry
Analytics
Analytics
CI / CD
Repository
Value Stream
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
drm
igt-gpu-tools
Commits
5d635f95
Commit
5d635f95
authored
Aug 06, 2013
by
Chris Wilson
🤔
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
gem_pread: Symmetric measurement to gem_pwrite
parent
aad68d1a
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
135 additions
and
0 deletions
+135
-0
tests/Makefile.am
tests/Makefile.am
+1
-0
tests/gem_pread.c
tests/gem_pread.c
+134
-0
No files found.
tests/Makefile.am
View file @
5d635f95
...
...
@@ -71,6 +71,7 @@ TESTS_progs = \
gem_mmap_offset_exhaustion
\
gem_pin
\
gem_pipe_control_store_loop
\
gem_pread
\
gem_pwrite
\
gem_readwrite
\
gem_reg_read
\
...
...
tests/gem_pread.c
0 → 100644
View file @
5d635f95
/*
* Copyright © 2011 Intel Corporation
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice (including the next
* paragraph) shall be included in all copies or substantial portions of the
* Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
* IN THE SOFTWARE.
*
* Authors:
* Chris Wilson <chris@chris-wilson.co.uk>
*
*/
#include <unistd.h>
#include <stdlib.h>
#include <stdint.h>
#include <stdio.h>
#include <string.h>
#include <assert.h>
#include <fcntl.h>
#include <inttypes.h>
#include <errno.h>
#include <sys/stat.h>
#include <sys/ioctl.h>
#include <sys/mman.h>
#include <sys/time.h>
#include "drm.h"
#include "i915_drm.h"
#include "drmtest.h"
#define OBJECT_SIZE 16384
static
void
do_gem_read
(
int
fd
,
uint32_t
handle
,
void
*
buf
,
int
len
,
int
loops
)
{
while
(
loops
--
)
gem_read
(
fd
,
handle
,
0
,
buf
,
len
);
}
static
double
elapsed
(
const
struct
timeval
*
start
,
const
struct
timeval
*
end
,
int
loop
)
{
return
(
1e6
*
(
end
->
tv_sec
-
start
->
tv_sec
)
+
(
end
->
tv_usec
-
start
->
tv_usec
))
/
loop
;
}
static
const
char
*
bytes_per_sec
(
char
*
buf
,
double
v
)
{
const
char
*
order
[]
=
{
""
,
"KiB"
,
"MiB"
,
"GiB"
,
"TiB"
,
NULL
,
},
**
o
=
order
;
while
(
v
>
1000
&&
o
[
1
])
{
v
/=
1000
;
o
++
;
}
sprintf
(
buf
,
"%.1f%s/s"
,
v
,
*
o
);
return
buf
;
}
int
main
(
int
argc
,
char
**
argv
)
{
int
object_size
=
0
;
uint32_t
buf
[
20
];
uint32_t
*
src
,
dst
;
int
fd
,
count
;
drmtest_skip_on_simulation
();
if
(
argc
>
1
)
object_size
=
atoi
(
argv
[
1
]);
if
(
object_size
==
0
)
object_size
=
OBJECT_SIZE
;
object_size
=
(
object_size
+
3
)
&
-
4
;
fd
=
drm_open_any
();
dst
=
gem_create
(
fd
,
object_size
);
src
=
malloc
(
object_size
);
gem_set_cacheing
(
fd
,
dst
,
0
);
for
(
count
=
1
;
count
<=
1
<<
17
;
count
<<=
1
)
{
struct
timeval
start
,
end
;
gettimeofday
(
&
start
,
NULL
);
do_gem_read
(
fd
,
dst
,
src
,
object_size
,
count
);
gettimeofday
(
&
end
,
NULL
);
printf
(
"Time to uncached pread %d bytes x %6d: %7.3fµs, %s
\n
"
,
object_size
,
count
,
elapsed
(
&
start
,
&
end
,
count
),
bytes_per_sec
((
char
*
)
buf
,
object_size
/
elapsed
(
&
start
,
&
end
,
count
)
*
1e6
));
fflush
(
stdout
);
}
gem_set_cacheing
(
fd
,
dst
,
1
);
for
(
count
=
1
;
count
<=
1
<<
17
;
count
<<=
1
)
{
struct
timeval
start
,
end
;
gettimeofday
(
&
start
,
NULL
);
do_gem_read
(
fd
,
dst
,
src
,
object_size
,
count
);
gettimeofday
(
&
end
,
NULL
);
printf
(
"Time to snooped pread %d bytes x %6d: %7.3fµs, %s
\n
"
,
object_size
,
count
,
elapsed
(
&
start
,
&
end
,
count
),
bytes_per_sec
((
char
*
)
buf
,
object_size
/
elapsed
(
&
start
,
&
end
,
count
)
*
1e6
));
fflush
(
stdout
);
}
free
(
src
);
gem_close
(
fd
,
dst
);
close
(
fd
);
return
0
;
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment