Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
simgrid.git
2 years agoplease clang14
Augustin Degomme [Mon, 23 Aug 2021 16:53:55 +0000 (18:53 +0200)]
please clang14

2 years agoRemote Exec should not survive to a host failure
SUTER Frederic [Mon, 23 Aug 2021 15:41:21 +0000 (17:41 +0200)]
Remote Exec should not survive to a host failure

2 years ago[ci-skip] oops++
Arnaud Giersch [Thu, 19 Aug 2021 05:43:45 +0000 (07:43 +0200)]
[ci-skip] oops++

2 years agoInitialize pointers with a known invalid (out-of-bound) value.
Arnaud Giersch [Tue, 17 Aug 2021 20:29:40 +0000 (22:29 +0200)]
Initialize pointers with a known invalid (out-of-bound) value.

2 years agoFactorize code, reindent, etc.
Arnaud Giersch [Wed, 18 Aug 2021 19:49:57 +0000 (21:49 +0200)]
Factorize code, reindent, etc.

2 years agoPrefer to use Mailbox::get_unique.
Arnaud Giersch [Wed, 18 Aug 2021 19:36:50 +0000 (21:36 +0200)]
Prefer to use Mailbox::get_unique.

2 years agoCosmetics for sonar&co.
Arnaud Giersch [Wed, 18 Aug 2021 15:57:22 +0000 (17:57 +0200)]
Cosmetics for sonar&co.

2 years agoImproving doc and changelog
Bruno Donassolo [Wed, 18 Aug 2021 14:50:52 +0000 (16:50 +0200)]
Improving doc and changelog

2 years agoPleases somewhat codefactor.io, lgtm, and pvs-studio.
Arnaud Giersch [Tue, 17 Aug 2021 19:01:54 +0000 (21:01 +0200)]
Pleases somewhat codefactor.io, lgtm, and pvs-studio.

2 years agoFix fedora:rawhide, actor name forgotten
Bruno Donassolo [Tue, 17 Aug 2021 14:29:20 +0000 (16:29 +0200)]
Fix fedora:rawhide, actor name forgotten

2 years agoPlease sonar a little
Bruno Donassolo [Tue, 17 Aug 2021 10:30:23 +0000 (12:30 +0200)]
Please sonar a little

2 years agoPython: example CPU nonlinear
Bruno Donassolo [Mon, 16 Aug 2021 15:27:29 +0000 (17:27 +0200)]
Python: example CPU nonlinear

2 years agoPython: an example with disks
Bruno Donassolo [Mon, 16 Aug 2021 14:09:58 +0000 (16:09 +0200)]
Python: an example with disks

2 years agomodernize SIMIX_comm_set_copy_data_callback
SUTER Frederic [Mon, 16 Aug 2021 18:09:42 +0000 (20:09 +0200)]
modernize SIMIX_comm_set_copy_data_callback

2 years agoTry to make linking succeed with mingw64 (appveyor).
Arnaud Giersch [Mon, 16 Aug 2021 12:38:29 +0000 (14:38 +0200)]
Try to make linking succeed with mingw64 (appveyor).

2 years agoAdd some words about known problem with ns3 on Debian 11/Bullseye.
Arnaud Giersch [Mon, 16 Aug 2021 12:29:42 +0000 (14:29 +0200)]
Add some words about known problem with ns3 on Debian 11/Bullseye.

2 years agoFix memleak in teshsuite test
Bruno Donassolo [Mon, 16 Aug 2021 09:54:45 +0000 (11:54 +0200)]
Fix memleak in teshsuite test

2 years agoPotpourri of python bindings (disk, host, netzone)
Bruno Donassolo [Fri, 13 Aug 2021 17:05:21 +0000 (19:05 +0200)]
Potpourri of python bindings (disk, host, netzone)

Add several methods to python bindings.
Add a test mixing them.

2 years agoPython: complex cluster example
Bruno Donassolo [Wed, 11 Aug 2021 17:37:40 +0000 (19:37 +0200)]
Python: complex cluster example

Adds examples of fat-tree, dragonfly and torus cluster using python
bindinds.

New python bindings have been added.

2 years agoPython network-nonlinear example
Bruno Donassolo [Wed, 11 Aug 2021 17:37:22 +0000 (19:37 +0200)]
Python network-nonlinear example

Implement network-nonlinear using python bindings.

Add bindings support for many methods (Link, NetZone, etc), hovewer not fully covered.

2 years agohttps://framagit.org/simgrid/simgrid/-/issues/77 is fixed
Martin Quinson [Thu, 12 Aug 2021 15:56:34 +0000 (17:56 +0200)]
https://framagit.org/simgrid/simgrid/-/issues/77 is fixed

2 years agoUpdate RTD sphinx theme version to v0.5.2
Martin Quinson [Thu, 12 Aug 2021 15:28:05 +0000 (17:28 +0200)]
Update RTD sphinx theme version to v0.5.2

This is an attempt at https://framagit.org/simgrid/simgrid/-/issues/77

2 years agochangelog update
Augustin Degomme [Thu, 12 Aug 2021 14:18:54 +0000 (16:18 +0200)]
changelog update

2 years agoSMPI - Allow the use of ISP tests without MC activated (for the ones without errors)
Augustin Degomme [Thu, 12 Aug 2021 14:18:47 +0000 (16:18 +0200)]
SMPI - Allow the use of ISP tests without MC activated (for the ones without errors)

2 years ago[ci-skip] sonar - oops
Augustin Degomme [Tue, 10 Aug 2021 15:06:12 +0000 (17:06 +0200)]
[ci-skip] sonar - oops

2 years agofix potential leak in replay, as a temporary buffer may be created and never freed.
Augustin Degomme [Tue, 10 Aug 2021 10:46:27 +0000 (12:46 +0200)]
fix potential leak in replay, as a temporary buffer may be created and never freed.
This was seen with a reduce scatter collective from mpich, which creates derived datatypes internally.

2 years agosomehow the wrong tag was used for these colls.
Augustin Degomme [Tue, 10 Aug 2021 10:45:47 +0000 (12:45 +0200)]
somehow the wrong tag was used for these colls.

2 years agoexclude this file from scan-build and sonar analysis, as the uninitialized value...
Augustin Degomme [Tue, 10 Aug 2021 10:45:28 +0000 (12:45 +0200)]
exclude this file from scan-build and sonar analysis, as the uninitialized value is intentional

2 years agoFix factor callback type
Bruno Donassolo [Tue, 10 Aug 2021 09:07:10 +0000 (11:07 +0200)]
Fix factor callback type

2 years agoCPU factors: dynamic factors for CPU
Bruno Donassolo [Mon, 9 Aug 2021 13:46:24 +0000 (15:46 +0200)]
CPU factors: dynamic factors for CPU

- Allows the use of user's callback to change the speed at the
update_remaining.
- Add a simple example.
- Minor improv. for disk
- Update changelog
- Available only for Cas01 (not ptask or TI)

2 years agoAdd test for multicore speed/state file
Bruno Donassolo [Fri, 6 Aug 2021 18:36:27 +0000 (20:36 +0200)]
Add test for multicore speed/state file

2 years agoReworking user_bound for Exec actions.
Bruno Donassolo [Fri, 6 Aug 2021 13:44:58 +0000 (15:44 +0200)]
Reworking user_bound for Exec actions.

Avoid using directly surf_action->set_bound to modify action's bound.

Actual bound is defined by CPU model, for cas01 is the min of:
- user's bound
- requested_core*speed*scale.

Explicitly deny the use of user_bound_ for ptask and cpuTI. We need
proper tests to verify their behavior.

2 years agoRemove old fixme
Bruno Donassolo [Thu, 5 Aug 2021 13:43:30 +0000 (15:43 +0200)]
Remove old fixme

These fixmes was necessary to implement multi-models.
By now, we stick with only 1 model.

2 years agoAdd interface to create Profile
Bruno Donassolo [Thu, 5 Aug 2021 13:40:16 +0000 (15:40 +0200)]
Add interface to create Profile

Allows the use of speed/state profiles by C++ interface.

2 years agoSo Intel compiler is now detected as IntelLLVM and no longer as Clang12.
Augustin Degomme [Sat, 7 Aug 2021 23:56:20 +0000 (01:56 +0200)]
So Intel compiler is now detected as IntelLLVM and no longer as Clang12.

2 years agoThis test actually needs uninitialized values for some ranks, silence clang warning
Augustin Degomme [Sat, 7 Aug 2021 23:08:25 +0000 (01:08 +0200)]
This test actually needs uninitialized values for some ranks, silence clang warning

2 years agorename test, to avoid multiple files with same name
Augustin Degomme [Sat, 7 Aug 2021 23:07:56 +0000 (01:07 +0200)]
rename test, to avoid multiple files with same name

2 years agoAdd a new ti-tracing/replay test (in teshsuite) to improve coverage.
Augustin Degomme [Sat, 7 Aug 2021 22:29:14 +0000 (00:29 +0200)]
Add a new ti-tracing/replay test (in teshsuite) to improve coverage.
It tests all collectives, generates a trace, then replays it while tracing again, and checks that both traces are identical.

2 years agotry to have reduce_scatter output identically on re-tracing
Augustin Degomme [Sat, 7 Aug 2021 21:56:19 +0000 (23:56 +0200)]
try to have reduce_scatter output identically on re-tracing
ugly.

2 years agoallow smpi/init option in replay as well.
Augustin Degomme [Sat, 7 Aug 2021 21:38:35 +0000 (23:38 +0200)]
allow smpi/init option in replay as well.

2 years agooops, maxsize was needed here.
Augustin Degomme [Sat, 7 Aug 2021 19:49:05 +0000 (21:49 +0200)]
oops, maxsize was needed here.

2 years agoreplay : add actions scan and exscan
Augustin Degomme [Sat, 7 Aug 2021 18:38:13 +0000 (20:38 +0200)]
replay : add actions scan and exscan

2 years agomultiple fixes for replay
Augustin Degomme [Sat, 7 Aug 2021 17:28:23 +0000 (19:28 +0200)]
multiple fixes for replay
in case of MPI_IN_PLACE or non relevant parameters, we could output nonsense to the ti trace

2 years agofix issues in replay of scatter and scatterv
Augustin Degomme [Sat, 7 Aug 2021 17:25:23 +0000 (19:25 +0200)]
fix issues in replay of scatter and scatterv

2 years agosecure collectives against some allowed uninitialized variables
Augustin Degomme [Sat, 7 Aug 2021 12:55:11 +0000 (14:55 +0200)]
secure collectives against some allowed uninitialized variables

2 years agoensure alltoallv tracing/replay/tracing again is coherent.
Augustin Degomme [Sat, 7 Aug 2021 12:00:31 +0000 (14:00 +0200)]
ensure alltoallv tracing/replay/tracing again is coherent.

2 years agoprevious ti-tracing improvement for bcast and reduce was not a good idea.
Augustin Degomme [Fri, 6 Aug 2021 21:30:58 +0000 (23:30 +0200)]
previous ti-tracing improvement for bcast and reduce was not a good idea.
these are already ranks.

2 years agoswitch from pid to rank for ti-tracing the wait action
Augustin Degomme [Fri, 6 Aug 2021 16:47:12 +0000 (18:47 +0200)]
switch from pid to rank for ti-tracing the wait action
It was not working well before and was leading to discrepancies and impossible to replay traces.

2 years agoOther fix for #78 : Fortran logical and MPI_LOGICAL are actually 32 bits wide, not...
Augustin Degomme [Fri, 6 Aug 2021 13:00:40 +0000 (15:00 +0200)]
Other fix for #78 : Fortran logical and MPI_LOGICAL are actually 32 bits wide, not 8, and should not be mapped to MPI_C_BOOL but to MPI_INTEGER32 internally.
Because why not.

2 years agorequalify tesh.
Augustin Degomme [Thu, 5 Aug 2021 23:19:59 +0000 (01:19 +0200)]
requalify tesh.
We removed a sleep(0), so another process finishes.

2 years agoreplay: small changes to avoid discrepencies when tracing the replay itself
Augustin Degomme [Thu, 5 Aug 2021 23:12:27 +0000 (01:12 +0200)]
replay: small changes to avoid discrepencies when tracing the replay itself

2 years agoallow the use of cfg=smpi/finalization-barrier for replay as well.
Augustin Degomme [Thu, 5 Aug 2021 15:23:16 +0000 (17:23 +0200)]
allow the use of cfg=smpi/finalization-barrier for replay as well.
In some cases, some processes might try to leave a bit too early, this has to be investigated.

2 years agoimprove iterations to fill vectors
Augustin Degomme [Thu, 5 Aug 2021 15:04:53 +0000 (17:04 +0200)]
improve iterations to fill vectors
(probably not very useful)

2 years agokill is_replayable() for datatypes.
Augustin Degomme [Thu, 5 Aug 2021 14:48:02 +0000 (16:48 +0200)]
kill is_replayable() for datatypes.
It was useless since we've been encoding/decoding all datatypes for a long time now.
This could break ancient TI traces handling, but I'm really not sure of this actually, and it was causing issues.
We need more testing on TI traces and replay :\

2 years agoFix for fg #78 : allotallv/w tracing was reporting wrong size in some cases for repla...
Augustin Degomme [Thu, 5 Aug 2021 11:09:33 +0000 (13:09 +0200)]
Fix for fg #78 : allotallv/w tracing was reporting wrong size in some cases for replayable traces.

2 years agoLatest stable (2.7.1) of pybind11 fixed issue with mingw64.
Arnaud Giersch [Wed, 4 Aug 2021 08:51:37 +0000 (10:51 +0200)]
Latest stable (2.7.1) of pybind11 fixed issue with mingw64.

Ref. https://framagit.org/simgrid/simgrid/-/issues/76

2 years agoSonar and minor improv in doc
Bruno Donassolo [Mon, 2 Aug 2021 08:32:42 +0000 (10:32 +0200)]
Sonar and minor improv in doc

2 years agoUpdate README.md
Arnaud Legrand [Sat, 31 Jul 2021 06:09:39 +0000 (06:09 +0000)]
Update README.md

2 years agoModeling hints: I/O operations
Bruno Donassolo [Fri, 16 Jul 2021 15:54:53 +0000 (17:54 +0200)]
Modeling hints: I/O operations

Adds an example showing how to model I/O operation in SimGrid.
It uses data from real experiments on Grid'5000 to model the impact of
concurrent operation on disks and the variability/noise in single I/O
operations.

Adds an entry in the doc presenting the results.
The code is available at: docs/source/tuto_disk.

The rst file was generated from the analysis.org file.
The folder includes a dockerfile to rerun the experiment if needed.

2 years agoFix NetworkCm02Link::set_bandwidth.
Bruno Donassolo [Wed, 28 Jul 2021 13:49:06 +0000 (15:49 +0200)]
Fix NetworkCm02Link::set_bandwidth.

Fix penalty update when some communication is happening in the link.
Add test for set_bandwidth and set_latency.

2 years agoOops, forgotten files
Bruno Donassolo [Tue, 27 Jul 2021 19:09:30 +0000 (21:09 +0200)]
Oops, forgotten files

2 years agoFix set_read_bandwidth and set_write_bandwidth for disks
Bruno Donassolo [Tue, 27 Jul 2021 18:53:35 +0000 (20:53 +0200)]
Fix set_read_bandwidth and set_write_bandwidth for disks

- Remove update_penalty method. Disk actions either are suspended or
running, this is managed by the Action class already.
- Only updating the constraint value seems enough for set_bandwidth
functions.
- Add a teshsuite for it

2 years agoCreate Disk::set_readwrite_bandwidth
Bruno Donassolo [Tue, 27 Jul 2021 12:27:10 +0000 (14:27 +0200)]
Create Disk::set_readwrite_bandwidth

Allow user to change readwrite constraint bound

2 years agoI/O factors: noise for disks.
Bruno Donassolo [Tue, 27 Jul 2021 08:23:30 +0000 (10:23 +0200)]
I/O factors: noise for disks.

Implements variability in disk operations.
Similarly to network factors, the effective amount of bytes read/written
in disk operations is scaled by a factor defined by the user.

Users can define a different callback for each disk. The callback is
called when SimGrid updates the remaining amount of bytes in disk
operations.

2 years agoUpdate README.md
Arnaud Legrand [Fri, 30 Jul 2021 12:43:19 +0000 (12:43 +0000)]
Update README.md

2 years agoMerge branch 'doc_link' into 'master'
Arnaud Giersch [Wed, 28 Jul 2021 12:48:24 +0000 (12:48 +0000)]
Merge branch 'doc_link' into 'master'

Fix broken link to releases in doc

See merge request simgrid/simgrid!68

2 years agoFix broken link to releases
Julien EMMANUEL [Wed, 28 Jul 2021 11:24:33 +0000 (13:24 +0200)]
Fix broken link to releases

Thanks Mael for reporting this one

2 years agoMake the plugin usable within a SMPI simulation
SUTER Frederic [Fri, 23 Jul 2021 16:12:41 +0000 (18:12 +0200)]
Make the plugin usable within a SMPI simulation

2 years agosimplify
SUTER Frederic [Fri, 23 Jul 2021 12:56:38 +0000 (14:56 +0200)]
simplify

2 years agoFix a fixme (kill dead code).
Arnaud Giersch [Fri, 23 Jul 2021 09:23:59 +0000 (11:23 +0200)]
Fix a fixme (kill dead code).

MPI_UNIVERSE_SIZE is already handled as a special case in PMPI_Attr_get.

2 years agoDefine a macro for debug messages.
Arnaud Giersch [Fri, 23 Jul 2021 08:44:27 +0000 (10:44 +0200)]
Define a macro for debug messages.

2 years agoEnable setting a specific data copy callback to any comm
SUTER Frederic [Fri, 23 Jul 2021 09:25:09 +0000 (11:25 +0200)]
Enable setting a specific data copy callback to any comm

This is becoming mandatory if one has the silly idea to mix SMPI
communications and S4U communications within the same simulation
launched with smpirun.

smpirun sets its own callback for ALL comms in smpi_main and thus
consider that averything is a SMPI communication. If you need to
trick SMPI to have S4U comms on the side, you thus have to
override this callback:

Sender side:
  mbox->put_init(payload, size)
      ->set_copy_data_callback(SIMIX_comm_copy_pointer_callback)
      ->detach(); // or start/vetoable_start/wait

Receiver side:
 mbox->get_init()
     ->set_dst_data(reinterpret_cast<void**>(data), sizeof(void*))
     ->set_copy_data_callback(SIMIX_comm_copy_pointer_callback)
     ->wait(); // or start/vetoable_start

2 years agoFactor common code.
Arnaud Giersch [Wed, 21 Jul 2021 14:16:50 +0000 (16:16 +0200)]
Factor common code.

2 years agoSonar smells.
Arnaud Giersch [Wed, 21 Jul 2021 13:23:24 +0000 (15:23 +0200)]
Sonar smells.

2 years agoUse workaround only for versions of libdw known to be broken.
Arnaud Giersch [Wed, 21 Jul 2021 13:21:47 +0000 (15:21 +0200)]
Use workaround only for versions of libdw known to be broken.

2 years agoUse if(false) to comment debugging code, and be sure that it always compiles.
Arnaud Giersch [Wed, 21 Jul 2021 13:08:39 +0000 (15:08 +0200)]
Use if(false) to comment debugging code, and be sure that it always compiles.

2 years agoWe don't use Travis anymore.
Arnaud Giersch [Tue, 20 Jul 2021 14:13:46 +0000 (16:13 +0200)]
We don't use Travis anymore.

Git can be used to recover these files if they're needed in the future.

2 years agoWe don't use Codacy anymore.
Arnaud Giersch [Tue, 20 Jul 2021 14:02:22 +0000 (16:02 +0200)]
We don't use Codacy anymore.

2 years agoDist check.
Arnaud Giersch [Tue, 20 Jul 2021 14:01:43 +0000 (16:01 +0200)]
Dist check.

2 years agoTypo.
Arnaud Giersch [Tue, 20 Jul 2021 09:23:30 +0000 (11:23 +0200)]
Typo.

2 years ago[lgtm] Fix unreachable statement.
Arnaud Giersch [Mon, 19 Jul 2021 21:12:51 +0000 (23:12 +0200)]
[lgtm] Fix unreachable statement.

2 years ago[pvs-studio] Protect from self assignment.
Arnaud Giersch [Mon, 19 Jul 2021 20:56:54 +0000 (22:56 +0200)]
[pvs-studio] Protect from self assignment.

2 years ago[pvs-studio] Make it clear that free'd pointers are not used anymore.
Arnaud Giersch [Mon, 19 Jul 2021 20:25:38 +0000 (22:25 +0200)]
[pvs-studio] Make it clear that free'd pointers are not used anymore.

2 years ago[sonar] Less implicit casts.
Arnaud Giersch [Mon, 19 Jul 2021 19:52:21 +0000 (21:52 +0200)]
[sonar] Less implicit casts.

2 years ago[pvs-studio] Don't mix initialized and non-initialized fields.
Arnaud Giersch [Mon, 19 Jul 2021 13:33:27 +0000 (15:33 +0200)]
[pvs-studio] Don't mix initialized and non-initialized fields.

Also factorize code, and fix a few untested bugs (hoping not to introduce new ones).

2 years ago[pvs-studio] Initialize every members of class.
Arnaud Giersch [Mon, 19 Jul 2021 13:27:12 +0000 (15:27 +0200)]
[pvs-studio] Initialize every members of class.

2 years ago[pvs-studio] Avoid implicit cast from bool to target datatype.
Arnaud Giersch [Mon, 19 Jul 2021 12:46:50 +0000 (14:46 +0200)]
[pvs-studio] Avoid implicit cast from bool to target datatype.

2 years ago[pvs-studio] Disable V576.
Arnaud Giersch [Mon, 19 Jul 2021 12:20:12 +0000 (14:20 +0200)]
[pvs-studio] Disable V576.

V576 is: Incorrect format. Consider checking the N actual argument of the 'Foo' function.

Gives bogus warnings with e.g. PRIx64, and is already checked by compiler and other static analyzers.

2 years ago[pvs-studio] Simplify boolean expressions.
Arnaud Giersch [Mon, 19 Jul 2021 13:06:25 +0000 (15:06 +0200)]
[pvs-studio] Simplify boolean expressions.

2 years ago[pvs-studio] No need to assign variable the same value.
Arnaud Giersch [Mon, 19 Jul 2021 11:16:40 +0000 (13:16 +0200)]
[pvs-studio] No need to assign variable the same value.

2 years agoFix crashes with recent versions of pybind11.
Arnaud Giersch [Mon, 19 Jul 2021 08:42:38 +0000 (10:42 +0200)]
Fix crashes with recent versions of pybind11.

This is the first point from issue simgrid/simgrid#76.

2 years agofix MC tests
Martin Quinson [Sun, 18 Jul 2021 17:43:39 +0000 (19:43 +0200)]
fix MC tests

2 years agotypo and cosmetics in error messages
Martin Quinson [Sun, 18 Jul 2021 17:16:12 +0000 (19:16 +0200)]
typo and cosmetics in error messages

2 years agoFix xbt_parse_get_all_speeds(), and add some unit tests.
Arnaud Giersch [Sat, 17 Jul 2021 15:54:20 +0000 (17:54 +0200)]
Fix xbt_parse_get_all_speeds(), and add some unit tests.

Fix failure to parse e.g. "1f,2f".

2 years ago[appveyor] Stick to latest working version of pybind11.
Arnaud Giersch [Fri, 16 Jul 2021 20:20:26 +0000 (22:20 +0200)]
[appveyor] Stick to latest working version of pybind11.

See https://framagit.org/simgrid/simgrid/-/issues/76 for details.

2 years ago[ci-skip] add colors to mattermost notifications
Augustin Degomme [Fri, 16 Jul 2021 15:06:05 +0000 (17:06 +0200)]
[ci-skip] add colors to mattermost notifications

2 years agoCreate a .lgtm.yml file to configure LGTM analysis.
Arnaud Giersch [Fri, 16 Jul 2021 14:22:05 +0000 (16:22 +0200)]
Create a .lgtm.yml file to configure LGTM analysis.

See https://lgtm.com/help/lgtm/lgtm.yml-configuration-file
I will be extended further if it works.

2 years ago[lgtm] Ensure that the type casting is done before multiplication to prevent overflow.
Arnaud Giersch [Fri, 16 Jul 2021 13:38:38 +0000 (15:38 +0200)]
[lgtm] Ensure that the type casting is done before multiplication to prevent overflow.

2 years agoMissing ChangeLog entry (+ cosmetics) [ci-skip].
Arnaud Giersch [Fri, 16 Jul 2021 12:28:55 +0000 (14:28 +0200)]
Missing ChangeLog entry (+ cosmetics) [ci-skip].

2 years agoThe next day sonar commit
Bruno Donassolo [Fri, 16 Jul 2021 09:11:31 +0000 (11:11 +0200)]
The next day sonar commit